Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Immiscible water model #3236

Merged
merged 77 commits into from
Nov 19, 2024
Merged
Show file tree
Hide file tree
Changes from 75 commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
3c1ccc5
Add generic parameters
dkachuma Jun 3, 2024
1771190
uncrustify
dkachuma Jun 3, 2024
9a6a6eb
Fix tests
dkachuma Jun 3, 2024
eb33b36
Fix LBC test
dkachuma Jun 3, 2024
dd0be87
Update schema files
dkachuma Jun 3, 2024
ddebea4
Change component properties
dkachuma Jun 4, 2024
a04a6e2
Revert file
dkachuma Jun 4, 2024
2f50df8
Add include files
dkachuma Jun 4, 2024
c616848
Remove helper class
dkachuma Jun 4, 2024
0a910b1
Remove file from list
dkachuma Jun 4, 2024
4d0b965
Fix some typos
dkachuma Jun 4, 2024
9cc60af
Merge branch 'develop' into feature/dkachuma/fluid-parameters
dkachuma Jun 4, 2024
4855a22
Merge branch 'develop' into feature/dkachuma/fluid-parameters
dkachuma Jun 5, 2024
38acd9e
Rename input field
dkachuma Jun 5, 2024
1e11446
getParameters -> get
dkachuma Jun 5, 2024
e18adc9
Initial pass
dkachuma Jun 5, 2024
13b56b2
Remove bad rst files
dkachuma Jun 5, 2024
abd2ac9
Merge remote-tracking branch 'origin/feature/dkachuma/fluid-parameter…
dkachuma Jun 5, 2024
bd40c6d
Simulator changes
dkachuma Jun 5, 2024
5002346
Change catalog entries
dkachuma Jun 5, 2024
c098a9e
Merge branch 'develop' into feature/dkachuma/fluid-parameters
dkachuma Jun 11, 2024
d6e8edd
Merge branch 'develop' into feature/dkachuma/fluid-parameters
dkachuma Jun 12, 2024
2e9191d
Fix test
dkachuma Jun 12, 2024
7614356
Merge branch 'develop' into feature/dkachuma/eos-parameters
dkachuma Jun 12, 2024
20032f9
Fix unit test
dkachuma Jun 12, 2024
78e758b
Fix unit tests
dkachuma Jun 12, 2024
a2c82a8
Merge branch 'feature/dkachuma/fluid-parameters' into feature/dkachum…
dkachuma Jun 12, 2024
cdb4cab
Merge branch 'develop' into feature/dkachuma/fluid-parameters
paveltomin Jun 13, 2024
c0a1a79
Merge branch 'develop' into feature/dkachuma/fluid-parameters
paveltomin Jun 14, 2024
fd9dd2c
Merge branch 'feature/dkachuma/fluid-parameters' into feature/dkachum…
dkachuma Jun 18, 2024
5c0a3aa
Merge develop
dkachuma Jun 18, 2024
cc0b596
Merge branch 'develop' into feature/dkachuma/eos-parameters
dkachuma Jun 26, 2024
d5fe6c6
Add EOS parameters to flash
dkachuma Jun 26, 2024
a5ea449
Merge branch 'feature/dkachuma/eos-parameters' of https://github.com/…
dkachuma Jun 26, 2024
6fac536
Fix unit tests
dkachuma Jun 26, 2024
03d59f2
Fix compositional density
dkachuma Jun 27, 2024
934d211
Merge branch 'develop' into feature/dkachuma/eos-parameters
dkachuma Jun 27, 2024
0546d6b
Remove EOS parameter from stability test
dkachuma Jun 27, 2024
a9e620e
Use stability test in negative flash model
dkachuma Jun 27, 2024
c7bc880
Remove heuristic
dkachuma Jun 27, 2024
8e2c255
Add unit test
dkachuma Jul 2, 2024
dfb7112
Merge branch 'develop' into feature/dkachuma/stability-flash
dkachuma Jul 2, 2024
55ef46b
Fix unit tests
dkachuma Jul 3, 2024
54f03b8
Add compositional fluid test
dkachuma Jul 3, 2024
aaeced8
Merge branch 'develop' into feature/dkachuma/stability-flash
dkachuma Jul 3, 2024
0b496d4
Finalise unit test
dkachuma Jul 3, 2024
86c1382
Fix stability tests
dkachuma Jul 3, 2024
e33c10e
Merge branch 'develop' into feature/dkachuma/stability-flash
dkachuma Jul 16, 2024
48ac596
Description of flash
dkachuma Jul 18, 2024
a355ba1
Merge branch 'develop' into feature/dkachuma/stability-flash
dkachuma Jul 18, 2024
5511be0
Fix clang compilation error
dkachuma Jul 19, 2024
d0da49b
Merge branch 'develop' into feature/dkachuma/stability-flash
dkachuma Jul 19, 2024
25b1035
Add immiscible water model
dkachuma Jul 23, 2024
1a7d46e
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Aug 29, 2024
ad84390
Finalise merge of develop
dkachuma Aug 29, 2024
e39c436
Add fluid model to pvt driver
dkachuma Aug 29, 2024
211f889
Add pvt driver case
dkachuma Sep 1, 2024
c6666ed
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Sep 1, 2024
3d2e50f
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Sep 3, 2024
b7dc2bd
Add three phase test case
dkachuma Sep 3, 2024
ce85395
Initial water property unit tests
dkachuma Sep 3, 2024
2851b86
More unit tests
dkachuma Sep 3, 2024
807f8a9
Remove debug code
dkachuma Sep 3, 2024
3a009ae
Uncrustify
dkachuma Sep 3, 2024
c45f61b
Remove unrequired eos
dkachuma Sep 11, 2024
26d0577
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Sep 11, 2024
79034a4
Remove eos
dkachuma Sep 11, 2024
97e2e35
Update test
dkachuma Sep 11, 2024
89a88c7
Merge develop
dkachuma Oct 1, 2024
57cf759
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Oct 2, 2024
0cbf066
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Oct 3, 2024
f4177f1
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Oct 17, 2024
859ac64
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Oct 28, 2024
3c9bf52
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Nov 11, 2024
25d9c58
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
dkachuma Nov 15, 2024
76d8e98
Remove auto generated rst files
dkachuma Nov 18, 2024
f3b6ffc
Merge branch 'develop' into feature/dkachuma/immiscible-water-flash
paveltomin Nov 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/coreComponents/constitutive/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,10 @@ set( constitutive_headers
fluid/multifluid/compositional/models/CriticalVolume.hpp
fluid/multifluid/compositional/models/EquationOfState.hpp
fluid/multifluid/compositional/models/FunctionBase.hpp
fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp
fluid/multifluid/compositional/models/ImmiscibleWaterFlashModel.hpp
fluid/multifluid/compositional/models/ImmiscibleWaterParameters.hpp
fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp
fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.hpp
fluid/multifluid/compositional/models/LohrenzBrayClarkViscosityImpl.hpp
fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp
Expand Down Expand Up @@ -242,8 +244,10 @@ set( constitutive_sources
fluid/multifluid/compositional/models/CompositionalDensity.cpp
fluid/multifluid/compositional/models/ConstantViscosity.cpp
fluid/multifluid/compositional/models/CriticalVolume.cpp
fluid/multifluid/compositional/models/ImmiscibleWaterDensity.cpp
fluid/multifluid/compositional/models/ImmiscibleWaterFlashModel.cpp
fluid/multifluid/compositional/models/ImmiscibleWaterParameters.cpp
fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.cpp
fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.cpp
fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.cpp
fluid/multifluid/compositional/CompositionalMultiphaseFluid.cpp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ void constitutiveUpdatePassThru( constitutive::MultiFluidBase const & fluid,
#if !defined(GEOS_DEVICE_COMPILE)
CO2BrineEzrokhiThermalFluid,
CompositionalTwoPhaseLohrenzBrayClarkViscosity,
CompositionalThreePhaseLohrenzBrayClarkViscosity,
#endif
CompositionalTwoPhaseConstantViscosity
>::execute( fluid, std::forward< LAMBDA >( lambda ) );
Expand All @@ -75,6 +76,7 @@ void constitutiveUpdatePassThru( constitutive::MultiFluidBase & fluid,
#if !defined(GEOS_DEVICE_COMPILE)
CO2BrineEzrokhiThermalFluid,
CompositionalTwoPhaseLohrenzBrayClarkViscosity,
CompositionalThreePhaseLohrenzBrayClarkViscosity,
#endif
CompositionalTwoPhaseConstantViscosity
>::execute( fluid, std::forward< LAMBDA >( lambda ) );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "constitutive/fluid/multifluid/CO2Brine/functions/PVTFunctionHelpers.hpp"
#include "constitutive/fluid/multifluid/MultiFluidFields.hpp"
#include "codingUtilities/Utilities.hpp"
#include "common/format/StringUtilities.hpp"

namespace geos
{
Expand Down Expand Up @@ -51,6 +52,7 @@ CompositionalMultiphaseFluid( string const & name, Group * const parent )
m_parameters( createModelParameters() )
{
using InputFlags = dataRepository::InputFlags;
using RestartFlags = dataRepository::RestartFlags;

getWrapperBase( viewKeyStruct::componentNamesString() ).setInputFlag( InputFlags::REQUIRED );
getWrapperBase( viewKeyStruct::componentMolarWeightString() ).setInputFlag( InputFlags::REQUIRED );
Expand Down Expand Up @@ -80,13 +82,18 @@ CompositionalMultiphaseFluid( string const & name, Group * const parent )

// Link parameters specific to each model
m_parameters->registerParameters( this );

// Register extra wrappers to enable auto-cloning
registerWrapper( "phaseOrder", &m_phaseOrder )
.setSizedFromParent( 0 )
.setRestartFlags( RestartFlags::NO_WRITE );
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
integer CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::getWaterPhaseIndex() const
{
string const expectedWaterPhaseNames[] = { "water" };
return PVTProps::PVTFunctionHelpers::findName( m_phaseNames, expectedWaterPhaseNames, viewKeyStruct::phaseNamesString() );
integer const aqueous = static_cast< integer >(PhaseType::AQUEOUS);
return m_phaseOrder.size() > aqueous ? m_phaseOrder[aqueous] : -1;
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
Expand Down Expand Up @@ -170,6 +177,12 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::postInputIni
}
}

// Determine the phase ordering
m_phaseOrder.resize( 3 );
m_phaseOrder[PhaseType::LIQUID] = findPhaseIndex( "oil,liq,liquid" );
m_phaseOrder[PhaseType::VAPOUR] = findPhaseIndex( "gas,vap,vapor,vapour" );
m_phaseOrder[PhaseType::AQUEOUS] = findPhaseIndex( "wat,water,aqueous" );

m_parameters->postInputInitialization( this, *m_componentProperties );
}

Expand Down Expand Up @@ -210,6 +223,7 @@ CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createKernelWrapp
*m_phase1,
*m_phase2,
*m_phase3,
m_phaseOrder.toViewConst(),
m_componentMolarWeight,
m_useMass,
m_phaseFraction.toView(),
Expand Down Expand Up @@ -247,6 +261,22 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createModels
*m_parameters );
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
integer CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::findPhaseIndex( string names ) const
{
auto const nameContainer = stringutilities::tokenize( names, ",", true, false );

for( integer ip = 0; ip < numFluidPhases(); ++ip )
{
std::string const phaseName = stringutilities::toLower( m_phaseNames[ip] );
if( std::find( nameContainer.begin(), nameContainer.end(), phaseName ) != nameContainer.end())
{
return ip;
}
}
return -1;
}

// Create the fluid models
template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
std::unique_ptr< compositional::ModelParameters >
Expand All @@ -269,6 +299,11 @@ template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;
template class CompositionalMultiphaseFluid<
compositional::ImmiscibleWaterFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::ImmiscibleWaterDensity, compositional::ImmiscibleWaterViscosity, compositional::NullModel > >;

REGISTER_CATALOG_ENTRY( ConstitutiveBase,
CompositionalTwoPhaseConstantViscosity,
Expand All @@ -280,6 +315,11 @@ REGISTER_CATALOG_ENTRY( ConstitutiveBase,
string const &,
dataRepository::Group * const )

REGISTER_CATALOG_ENTRY( ConstitutiveBase,
CompositionalThreePhaseLohrenzBrayClarkViscosity,
string const &,
dataRepository::Group * const )

} // namespace constitutive

} // namespace geos
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
#include "constitutive/fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.hpp"
#include "constitutive/fluid/multifluid/compositional/models/ConstantViscosity.hpp"
#include "constitutive/fluid/multifluid/compositional/models/CompositionalDensity.hpp"
#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterDensity.hpp"
#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterFlashModel.hpp"
#include "constitutive/fluid/multifluid/compositional/models/ImmiscibleWaterViscosity.hpp"
#include "constitutive/fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.hpp"
#include "constitutive/fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.hpp"
#include "constitutive/fluid/multifluid/compositional/models/ModelParameters.hpp"
Expand Down Expand Up @@ -110,15 +113,27 @@ class CompositionalMultiphaseFluid : public MultiFluidBase

virtual void resizeFields( localIndex const size, localIndex const numPts ) override;

enum PhaseType : integer
{
LIQUID = 0,
VAPOUR = 1,
AQUEOUS = 2,
};

private:
// Create the fluid models
void createModels();

integer findPhaseIndex( string names ) const;

static std::unique_ptr< compositional::ModelParameters > createModelParameters();

// Flash model
std::unique_ptr< FLASH > m_flash{};

// Phase ordering
array1d< integer > m_phaseOrder;

// Phase models
std::unique_ptr< PHASE1 > m_phase1{};
std::unique_ptr< PHASE2 > m_phase2{};
Expand All @@ -142,6 +157,11 @@ using CompositionalTwoPhaseLohrenzBrayClarkViscosity = CompositionalMultiphaseFl
compositional::NegativeTwoPhaseFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;
using CompositionalThreePhaseLohrenzBrayClarkViscosity = CompositionalMultiphaseFluid<
compositional::ImmiscibleWaterFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::ImmiscibleWaterDensity, compositional::ImmiscibleWaterViscosity, compositional::NullModel > >;

} /* namespace constitutive */

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class CompositionalMultiphaseFluidUpdates final : public MultiFluidBase::KernelW
PHASE1 const & phase1,
PHASE2 const & phase2,
PHASE3 const & phase3,
arrayView1d< integer const > const & phaseOrder,
arrayView1d< real64 const > const & componentMolarWeight,
bool const useMass,
MultiFluidBase::PhaseProp::ViewType phaseFrac,
Expand Down Expand Up @@ -122,6 +123,9 @@ class CompositionalMultiphaseFluidUpdates final : public MultiFluidBase::KernelW
// Flash kernel wrapper
typename FLASH::KernelWrapper m_flash;

// The ordering of phases
arrayView1d< integer const > const m_phaseOrder;

// Phase model kernel wrappers
typename PHASE1::KernelWrapper m_phase1;
typename PHASE2::KernelWrapper m_phase2;
Expand All @@ -138,6 +142,7 @@ CompositionalMultiphaseFluidUpdates( compositional::ComponentProperties const &
PHASE1 const & phase1,
PHASE2 const & phase2,
PHASE3 const & phase3,
arrayView1d< integer const > const & phaseOrder,
arrayView1d< real64 const > const & componentMolarWeight,
bool const useMass,
MultiFluidBase::PhaseProp::ViewType phaseFrac,
Expand All @@ -161,6 +166,7 @@ CompositionalMultiphaseFluidUpdates( compositional::ComponentProperties const &
std::move( totalDensity ) ),
m_componentProperties( componentProperties.createKernelWrapper() ),
m_flash( flash.createKernelWrapper() ),
m_phaseOrder( phaseOrder ),
m_phase1( phase1.createKernelWrapper() ),
m_phase2( phase2.createKernelWrapper() ),
m_phase3( phase3.createKernelWrapper() ),
Expand Down Expand Up @@ -262,63 +268,63 @@ CompositionalMultiphaseFluidUpdates< FLASH, PHASE1, PHASE2, PHASE3 >::compute(
m_phase1.density.compute( m_componentProperties,
pressure,
temperature,
phaseCompFrac.value[0].toSliceConst(),
phaseDens.value[0],
phaseDens.derivs[0],
phaseMassDensity.value[0],
phaseMassDensity.derivs[0],
phaseCompFrac.value[m_phaseOrder[0]].toSliceConst(),
phaseDens.value[m_phaseOrder[0]],
phaseDens.derivs[m_phaseOrder[0]],
phaseMassDensity.value[m_phaseOrder[0]],
phaseMassDensity.derivs[m_phaseOrder[0]],
m_useMass );
m_phase2.density.compute( m_componentProperties,
pressure,
temperature,
phaseCompFrac.value[1].toSliceConst(),
phaseDens.value[1],
phaseDens.derivs[1],
phaseMassDensity.value[1],
phaseMassDensity.derivs[1],
phaseCompFrac.value[m_phaseOrder[1]].toSliceConst(),
phaseDens.value[m_phaseOrder[1]],
phaseDens.derivs[m_phaseOrder[1]],
phaseMassDensity.value[m_phaseOrder[1]],
phaseMassDensity.derivs[m_phaseOrder[1]],
m_useMass );
if constexpr (2 < FLASH::KernelWrapper::getNumberOfPhases())
{
m_phase3.density.compute( m_componentProperties,
pressure,
temperature,
phaseCompFrac.value[2].toSliceConst(),
phaseDens.value[2],
phaseDens.derivs[2],
phaseMassDensity.value[2],
phaseMassDensity.derivs[2],
phaseCompFrac.value[m_phaseOrder[2]].toSliceConst(),
phaseDens.value[m_phaseOrder[2]],
phaseDens.derivs[m_phaseOrder[2]],
phaseMassDensity.value[m_phaseOrder[2]],
phaseMassDensity.derivs[m_phaseOrder[2]],
m_useMass );
}

// 4. Calculate the phase viscosities
m_phase1.viscosity.compute( m_componentProperties,
pressure,
temperature,
phaseCompFrac.value[0].toSliceConst(),
phaseMassDensity.value[0],
phaseMassDensity.derivs[0].toSliceConst(),
phaseVisc.value[0],
phaseVisc.derivs[0],
phaseCompFrac.value[m_phaseOrder[0]].toSliceConst(),
phaseMassDensity.value[m_phaseOrder[0]],
phaseMassDensity.derivs[m_phaseOrder[0]].toSliceConst(),
phaseVisc.value[m_phaseOrder[0]],
phaseVisc.derivs[m_phaseOrder[0]],
m_useMass );
m_phase2.viscosity.compute( m_componentProperties,
pressure,
temperature,
phaseCompFrac.value[1].toSliceConst(),
phaseMassDensity.value[1],
phaseMassDensity.derivs[1].toSliceConst(),
phaseVisc.value[1],
phaseVisc.derivs[1],
phaseCompFrac.value[m_phaseOrder[1]].toSliceConst(),
phaseMassDensity.value[m_phaseOrder[1]],
phaseMassDensity.derivs[m_phaseOrder[1]].toSliceConst(),
phaseVisc.value[m_phaseOrder[1]],
phaseVisc.derivs[m_phaseOrder[1]],
m_useMass );
if constexpr (2 < FLASH::KernelWrapper::getNumberOfPhases())
{
m_phase3.viscosity.compute( m_componentProperties,
pressure,
temperature,
phaseCompFrac.value[2].toSliceConst(),
phaseMassDensity.value[2],
phaseMassDensity.derivs[2].toSliceConst(),
phaseVisc.value[2],
phaseVisc.derivs[2],
phaseCompFrac.value[m_phaseOrder[2]].toSliceConst(),
phaseMassDensity.value[m_phaseOrder[2]],
phaseMassDensity.derivs[m_phaseOrder[2]].toSliceConst(),
phaseVisc.value[m_phaseOrder[2]],
phaseVisc.derivs[m_phaseOrder[2]],
m_useMass );
}

Expand Down
Loading
Loading