Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -1020,27 +1020,16 @@ MultiFluidBase::KernelWrapper::
integer const numPhase = numPhases();
integer const numComp = numComponents();

StackArray< real64, 4, maxNumDof *maxNumPhase, LAYOUT_PHASE_DC > dPhaseFrac( 1, 1, numPhase, numComp+2 );
MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 >
phaseFracAndDeriv { phaseFrac, dPhaseFrac[0][0] };

StackArray< real64, 4, maxNumDof *maxNumPhase, LAYOUT_PHASE_DC > dPhaseMassDens( 1, 1, numPhase, numComp+2 );
MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 >
phaseMassDensAndDeriv { phaseMassDens, dPhaseMassDens[0][0] };
// Space for dummy derivatives
StackArray< real64, 4, 2*maxNumDof *maxNumPhase, LAYOUT_PHASE_DC > derivatives( 2, 1, numPhase, numComp+2 );

StackArray< real64, 4, maxNumDof *maxNumPhase, LAYOUT_PHASE_DC > dPhaseEnthalpy( 1, 1, numPhase, numComp+2 );
MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 >
phaseEnthalpyAndDeriv { phaseEnthalpy, dPhaseEnthalpy[0][0] };

StackArray< real64, 4, maxNumDof *maxNumPhase, LAYOUT_PHASE_DC > dPhaseInternalEnergy( 1, 1, numPhase, numComp+2 );
MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 >
phaseInternalEnergyAndDeriv { phaseInternalEnergy, dPhaseInternalEnergy[0][0] };
using SliceType = MultiFluidVarSlice< real64, 1, USD_PHASE - 2, USD_PHASE_DC - 2 >;

computeInternalEnergy( pressure,
phaseFracAndDeriv,
phaseMassDensAndDeriv,
phaseEnthalpyAndDeriv,
phaseInternalEnergyAndDeriv );
SliceType { phaseFrac, derivatives[0][0] },
SliceType { phaseMassDens, derivatives[0][0] },
SliceType { phaseEnthalpy, derivatives[0][0] },
SliceType { phaseInternalEnergy, derivatives[1][0] } );
}

GEOS_HOST_DEVICE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ namespace geos
namespace constitutive
{

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::
template< typename FLASH, typename ... PHASES >
CompositionalMultiphaseFluid< FLASH, PHASES... >::
CompositionalMultiphaseFluid( string const & name, Group * const parent )
: MultiFluidBase( name, parent ),
m_componentProperties( std::make_unique< compositional::ComponentProperties >( m_componentNames, m_componentMolarWeight ) ),
Expand Down Expand Up @@ -76,8 +76,8 @@ CompositionalMultiphaseFluid( string const & name, Group * const parent )
.setRestartFlags( RestartFlags::NO_WRITE );
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
integer CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::getWaterPhaseIndex() const
template< typename FLASH, typename ... PHASES >
integer CompositionalMultiphaseFluid< FLASH, PHASES... >::getWaterPhaseIndex() const
{
auto const phaseTypes = getPhaseTypes();
integer const aqueous = static_cast< integer >(compositional::PhaseType::AQUEOUS);
Expand All @@ -91,25 +91,25 @@ integer CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::getWaterP
return -1;
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
string CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::catalogName()
template< typename FLASH, typename ... PHASES >
string CompositionalMultiphaseFluid< FLASH, PHASES... >::catalogName()
{
return GEOS_FMT( "Compositional{}Fluid{}",
FLASH::catalogName(),
PHASE1::Viscosity::catalogName() );
// Use the first phase viscosity
using ViscosityType = typename std::tuple_element_t< 0, std::tuple< PHASES... > >::Viscosity;
return GEOS_FMT( "Compositional{}Fluid{}", FLASH::catalogName(), ViscosityType::catalogName() );
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::initializeState() const
template< typename FLASH, typename ... PHASES >
void CompositionalMultiphaseFluid< FLASH, PHASES... >::initializeState() const
{
// Zero k-Values to force re-initialisation
m_kValues.zero();

MultiFluidBase::initializeState();
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::allocateConstitutiveData( Group & parent, localIndex const numPts )
template< typename FLASH, typename ... PHASES >
void CompositionalMultiphaseFluid< FLASH, PHASES... >::allocateConstitutiveData( Group & parent, localIndex const numPts )
{
m_kValues.resize( 0, numPts, numFluidPhases()-1, numFluidComponents() );

Expand All @@ -119,8 +119,8 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::allocateCons
m_kValues.zero();
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::postInputInitialization()
template< typename FLASH, typename ... PHASES >
void CompositionalMultiphaseFluid< FLASH, PHASES... >::postInputInitialization()
{
MultiFluidBase::postInputInitialization();

Expand Down Expand Up @@ -200,35 +200,41 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::postInputIni
m_parameters->postInputInitialization( this, *m_componentProperties );
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::initializePostSubGroups()
template< typename FLASH, typename ... PHASES >
void CompositionalMultiphaseFluid< FLASH, PHASES... >::initializePostSubGroups()
{
MultiFluidBase::initializePostSubGroups();

// Create the fluid models
createModels();
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
template< typename FLASH, typename ... PHASES >
std::unique_ptr< ConstitutiveBase >
CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::deliverClone( string const & name,
Group * const parent ) const
CompositionalMultiphaseFluid< FLASH, PHASES... >::deliverClone( string const & name,
Group * const parent ) const
{
std::unique_ptr< ConstitutiveBase > clone = MultiFluidBase::deliverClone( name, parent );
CompositionalMultiphaseFluid & newFluid = dynamicCast< CompositionalMultiphaseFluid & >( *clone );
newFluid.createModels();
return clone;
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
typename CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::KernelWrapper
CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createKernelWrapper()
template< typename FLASH, typename ... PHASES >
typename CompositionalMultiphaseFluid< FLASH, PHASES... >::KernelWrapper
CompositionalMultiphaseFluid< FLASH, PHASES... >::createKernelWrapper()
{
return createKernelWrapper( std::index_sequence_for< PHASES... >{} );
}

template< typename FLASH, typename ... PHASES >
template< std::size_t... Is >
typename CompositionalMultiphaseFluid< FLASH, PHASES... >::KernelWrapper
CompositionalMultiphaseFluid< FLASH, PHASES... >::createKernelWrapper( std::index_sequence< Is... > )
{
return KernelWrapper( *m_componentProperties,
*m_flash,
*m_phase1,
*m_phase2,
*m_phase3,
*std::get< Is >( m_phases )...,
m_phaseOrder.toViewConst(),
m_componentMolarWeight,
m_useMass,
Expand All @@ -244,8 +250,8 @@ CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createKernelWrapp
}

// Create the fluid models
template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createModels()
template< typename FLASH, typename ... PHASES >
void CompositionalMultiphaseFluid< FLASH, PHASES... >::createModels()
{
m_phaseType = getPhaseTypes();

Expand All @@ -258,24 +264,23 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createModels
*m_parameters,
m_phaseType.toViewConst() );

m_phase1 = std::make_unique< PHASE1 >( GEOS_FMT( "{}_PhaseModel1", getName() ),
*m_componentProperties,
0,
*m_parameters );

m_phase2 = std::make_unique< PHASE2 >( GEOS_FMT( "{}_PhaseModel2", getName() ),
*m_componentProperties,
1,
*m_parameters );
createPhaseModels( std::index_sequence_for< PHASES... >{} );
}

m_phase3 = std::make_unique< PHASE3 >( GEOS_FMT( "{}_PhaseModel3", getName() ),
*m_componentProperties,
2,
*m_parameters );
template< typename FLASH, typename ... PHASES >
template< std::size_t... Is >
void CompositionalMultiphaseFluid< FLASH, PHASES... >::createPhaseModels( std::index_sequence< Is... > )
{
m_phases = std::make_tuple(
std::make_unique< PHASES >( GEOS_FMT( "{}_PhaseModel{}", getName(), Is + 1 ),
*m_componentProperties,
Is,
*m_parameters )...
);
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
array1d< integer > CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::getPhaseTypes() const
template< typename FLASH, typename ... PHASES >
array1d< integer > CompositionalMultiphaseFluid< FLASH, PHASES... >::getPhaseTypes() const
{
integer const numPhases = numFluidPhases();
array1d< integer > phaseTypes( numPhases );
Expand All @@ -287,44 +292,42 @@ array1d< integer > CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >
}

// Create the fluid models
template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
template< typename FLASH, typename ... PHASES >
std::unique_ptr< compositional::ModelParameters >
CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createModelParameters()
CompositionalMultiphaseFluid< FLASH, PHASES... >::createModelParameters()
{
std::unique_ptr< compositional::ModelParameters > parameters;
parameters = FLASH::createParameters( std::move( parameters ));
parameters = PHASE1::createParameters( std::move( parameters ));
parameters = PHASE2::createParameters( std::move( parameters ));
parameters = PHASE3::createParameters( std::move( parameters ));
((parameters = PHASES::createParameters( std::move( parameters ) )), ...);
return parameters;
}

// Explicit instantiation of the model template.
template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::ConstantViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::ConstantViscosity, compositional::NullModel > >;
compositional::PhaseModel< compositional::CompositionalDensity, compositional::ConstantViscosity >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::ConstantViscosity > >;
template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity > >;
template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashModel,
compositional::PhaseModel< compositional::PhillipsBrineDensity, compositional::PhillipsBrineViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;
compositional::PhaseModel< compositional::PhillipsBrineDensity, compositional::PhillipsBrineViscosity >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity > >;
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 > >;
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity >,
compositional::PhaseModel< compositional::ImmiscibleWaterDensity, compositional::ImmiscibleWaterViscosity > >;
template class CompositionalMultiphaseFluid<
compositional::KValueFlashModel< 2 >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity > >;
template class CompositionalMultiphaseFluid<
compositional::KValueFlashModel< 2 >,
compositional::PhaseModel< compositional::PhillipsBrineDensity, compositional::PhillipsBrineViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;
compositional::PhaseModel< compositional::PhillipsBrineDensity, compositional::PhillipsBrineViscosity >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity > >;

REGISTER_CATALOG_ENTRY( ConstitutiveBase,
CompositionalTwoPhaseConstantViscosity,
Expand Down
Loading