Skip to content

EOS materials for phase properties #44

Description

@cpgr

Tagging @WilkAndy, @jpek15, @TaraLaForce

Hi all,

At the moment, we can do immiscible problems like two component, two phase (one component per phase), and also multiple components per phase where phase properties like density don't depend on composition.

At some point, we need to consider cases where phase properties do depend on the composition (for example, density increase when CO2 is dissolved in brine).

Currently, we specify a fluid material for each individual phase. For example, to have a two component, two phase simulation we would put something like

[./dens0]
type = PorousFlowMaterialDensityConstBulk
density_P0 = 1000
bulk_modulus = 2E9
phase = 0
[../]
[./dens1]
type = PorousFlowMaterialDensityConstBulk
density_P0 = 1
bulk_modulus = 2E6
phase = 1
[../]
[./dens_all]
type = PorousFlowMaterialJoinerOld
material_property = PorousFlow_fluid_phase_density
[../]

in the input file to make a std::vector material for density.

To implement a compositional case, I think we need to have a single EOS material that replaces the above three, specialised for each combination of fluids that we are interested in.

Brine and CO2 is a good example, as we require one of these for our work. I propose that we have a single PorousFlowMaterialBrineCO2 material that takes in pressure, temperature and mass fraction, and returns a std::vector of all required thermophysical properties for each phase.

The input file for that case would just be

[./brineco2]
type = PorousFlowMaterialBrineCO2
[../]

This is the same approach as the EOS modules in TOUGH (DUMUX has a similar design too).

To implement this, I think that we should move the actual fluid property functions for density etc into a namespace, and use them in these EOS materials. We can still have individual fluid property materials for use in the immiscible cases using the functions in the appropriate namespace. This is what I ended up doing in quoll (but with user objects instead of materials), and something that Andy also suggested.

In each specialised EOS material, we can of course implement whatever form of dependence on composition as required.

Any thoughts on this approach? I can't really think of a better way at the moment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions