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

Remove EOS template parameter from compositional fluid model #3121

Closed
wants to merge 13 commits into from
10 changes: 6 additions & 4 deletions src/coreComponents/constitutive/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ set( constitutive_headers
dispersion/DispersionFields.hpp
dispersion/DispersionSelector.hpp
dispersion/LinearIsotropicDispersion.hpp
fluid/multifluid/DataTypes.hpp
fluid/multifluid/Layouts.hpp
fluid/multifluid/MultiFluidSelector.hpp
fluid/multifluid/MultiFluidBase.hpp
Expand Down Expand Up @@ -64,12 +65,14 @@ set( constitutive_headers
fluid/multifluid/compositional/functions/CompositionalProperties.hpp
fluid/multifluid/compositional/functions/CompositionalPropertiesImpl.hpp
fluid/multifluid/compositional/functions/CubicEOSPhaseModel.hpp
fluid/multifluid/compositional/functions/FugacityCalculator.hpp
fluid/multifluid/compositional/functions/KValueInitialization.hpp
fluid/multifluid/compositional/functions/NegativeTwoPhaseFlash.hpp
fluid/multifluid/compositional/functions/RachfordRice.hpp
fluid/multifluid/compositional/models/ComponentProperties.hpp
fluid/multifluid/compositional/models/CompositionalDensity.hpp
fluid/multifluid/compositional/models/ConstantViscosity.hpp
fluid/multifluid/compositional/models/EquationOfState.hpp
fluid/multifluid/compositional/models/FunctionBase.hpp
fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.hpp
fluid/multifluid/compositional/models/LohrenzBrayClarkViscosityImpl.hpp
Expand Down Expand Up @@ -220,14 +223,13 @@ set( constitutive_sources
fluid/multifluid/CO2Brine/functions/WaterDensity.cpp
fluid/multifluid/compositional/models/CompositionalDensity.cpp
fluid/multifluid/compositional/models/ConstantViscosity.cpp
fluid/multifluid/compositional/models/EquationOfState.cpp
fluid/multifluid/compositional/models/LohrenzBrayClarkViscosity.cpp
fluid/multifluid/compositional/models/NegativeTwoPhaseFlashModel.cpp
fluid/multifluid/compositional/CompositionalMultiphaseFluid.cpp
fluid/multifluid/compositional/CompositionalMultiphaseFluidUpdates.cpp
fluid/multifluid/compositional/PVTDriverRunTestCompositionalPR.cpp
fluid/multifluid/compositional/PVTDriverRunTestCompositionalPRLBC.cpp
fluid/multifluid/compositional/PVTDriverRunTestCompositionalSRK.cpp
fluid/multifluid/compositional/PVTDriverRunTestCompositionalSRKLBC.cpp
fluid/multifluid/compositional/PVTDriverRunTestCompositionalTwoPhaseConstantViscosity.cpp
fluid/multifluid/compositional/PVTDriverRunTestCompositionalTwoPhaseLohrenzBrayClarkViscosity.cpp
fluid/multifluid/reactive/ReactiveBrineFluid.cpp
fluid/multifluid/reactive/ReactiveMultiFluid.cpp
fluid/multifluid/reactive/ReactiveFluidDriver.cpp
Expand Down
43 changes: 43 additions & 0 deletions src/coreComponents/constitutive/fluid/multifluid/DataTypes.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* ------------------------------------------------------------------------------------------------------------
* SPDX-License-Identifier: LGPL-2.1-only
*
* Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
* Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
* Copyright (c) 2018-2020 TotalEnergies
* Copyright (c) 2019- GEOSX Contributors
* All rights reserved
*
* See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
* ------------------------------------------------------------------------------------------------------------
*/

/**
* @file DataTypes.hpp
*/

#ifndef GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_DATATYPES_HPP
#define GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_DATATYPES_HPP

#include "Layouts.hpp"
#include "constitutive/fluid/multifluid/MultiFluidUtils.hpp"

namespace geos
{
namespace constitutive
{
namespace multifluid
{

using PhaseProp = MultiFluidVar< real64, 3, multifluid::LAYOUT_PHASE, multifluid::LAYOUT_PHASE_DC >;
using PhaseComp = MultiFluidVar< real64, 4, multifluid::LAYOUT_PHASE_COMP, multifluid::LAYOUT_PHASE_COMP_DC >;
using FluidProp = MultiFluidVar< real64, 2, multifluid::LAYOUT_FLUID, multifluid::LAYOUT_FLUID_DC >;

using CompositionSlice = arraySlice1d< real64, compflow::USD_COMP - 1 >;
using CompositionSliceConst = arraySlice1d< real64 const, compflow::USD_COMP - 1 >;

} // namespace multifluid
} // namespace constitutive
} // namespace geos

#endif //GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_DATATYPES_HPP
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,17 @@
#ifndef GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_MULTIFLUIDBASE_HPP_
#define GEOS_CONSTITUTIVE_FLUID_MULTIFLUID_MULTIFLUIDBASE_HPP_

#include "common/DataLayouts.hpp"
#include "constitutive/ConstitutiveBase.hpp"
#include "constitutive/fluid/multifluid/Layouts.hpp"
#include "constitutive/fluid/multifluid/DataTypes.hpp"
#include "constitutive/fluid/multifluid/MultiFluidConstants.hpp"
#include "constitutive/fluid/multifluid/MultiFluidUtils.hpp"

namespace geos
{
namespace constitutive
{

using namespace multifluid;

class MultiFluidBase : public ConstitutiveBase
{
public:
Expand Down Expand Up @@ -204,13 +204,6 @@ class MultiFluidBase : public ConstitutiveBase
static constexpr char const * checkPVTTablesRangesString() { return "checkPVTTablesRanges"; }
};


public:

using PhaseProp = MultiFluidVar< real64, 3, multifluid::LAYOUT_PHASE, multifluid::LAYOUT_PHASE_DC >;
using PhaseComp = MultiFluidVar< real64, 4, multifluid::LAYOUT_PHASE_COMP, multifluid::LAYOUT_PHASE_COMP_DC >;
using FluidProp = MultiFluidVar< real64, 2, multifluid::LAYOUT_FLUID, multifluid::LAYOUT_FLUID_DC >;

public:
class KernelWrapper
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,41 +39,41 @@ template< typename LAMBDA >
void constitutiveUpdatePassThru( MultiFluidBase const & fluid,
LAMBDA && lambda )
{
ConstitutivePassThruHandler< DeadOilFluid,
BlackOilFluid,
CompositionalTwoPhasePengRobinsonConstantViscosity,
CompositionalTwoPhaseSoaveRedlichKwongConstantViscosity,
// CompositionalTwoPhasePengRobinsonLBCViscosity,
// CompositionalTwoPhaseSoaveRedlichKwongLBCViscosity,
ConstitutivePassThruHandler< BlackOilFluid,
CO2BrinePhillipsFluid,
CO2BrineEzrokhiFluid,
CO2BrinePhillipsThermalFluid,
// Activating these two on device builds will lead to compiler segfault.
// Need to split compilation units for all the options
#if !defined(GEOS_DEVICE_COMPILE)
CO2BrineEzrokhiThermalFluid,
CompositionalTwoPhaseLohrenzBrayClarkViscosity,
#endif
CompositionalTwoPhaseConstantViscosity,
#ifdef GEOSX_USE_PVTPackage
CompositionalMultiphaseFluidPVTPackage,
#endif
CO2BrinePhillipsFluid,
CO2BrineEzrokhiFluid,
CO2BrinePhillipsThermalFluid
// ,CO2BrineEzrokhiThermalFluid "Uncommenting this will lead to compiler segfault. Need to split compilation
// units for all the options"
DeadOilFluid
>::execute( fluid, std::forward< LAMBDA >( lambda ) );
}

template< typename LAMBDA >
void constitutiveUpdatePassThru( MultiFluidBase & fluid,
LAMBDA && lambda )
{
ConstitutivePassThruHandler< DeadOilFluid,
BlackOilFluid,
CompositionalTwoPhasePengRobinsonConstantViscosity,
CompositionalTwoPhaseSoaveRedlichKwongConstantViscosity,
// CompositionalTwoPhasePengRobinsonLBCViscosity,
// CompositionalTwoPhaseSoaveRedlichKwongLBCViscosity,
ConstitutivePassThruHandler< BlackOilFluid,
CO2BrinePhillipsFluid,
CO2BrineEzrokhiFluid,
CO2BrinePhillipsThermalFluid,
#if !defined(GEOS_DEVICE_COMPILE)
CO2BrineEzrokhiThermalFluid,
CompositionalTwoPhaseLohrenzBrayClarkViscosity,
#endif
CompositionalTwoPhaseConstantViscosity,
#ifdef GEOSX_USE_PVTPackage
CompositionalMultiphaseFluidPVTPackage,
#endif
CO2BrinePhillipsFluid,
CO2BrineEzrokhiFluid,
CO2BrinePhillipsThermalFluid
//,CO2BrineEzrokhiThermalFluid "Uncommenting this will lead to compiler segfault. Need to split compilation
// units for all the options"
DeadOilFluid
>::execute( fluid, std::forward< LAMBDA >( lambda ) );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,10 @@ void PVTDriver::compareWithBaseline()
{
headerRows += getFluid().numFluidPhases();
}
if( m_outputMassDensity )
{
headerRows++;
}

string line;
for( integer row=0; row < headerRows; ++row )
Expand All @@ -337,7 +341,9 @@ void PVTDriver::compareWithBaseline()
GEOS_THROW_IF( error > MultiFluidConstants::baselineTolerance,
"Results do not match baseline at data row " << row+1
<< " (row " << row+headerRows << " with header)"
<< " and column " << col+1, std::runtime_error );
<< " and column " << col+1
<< " file: " << value << ", calculated: " << m_table[row][col],
std::runtime_error );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ CompositionalMultiphaseFluid( string const & name, Group * const parent )
getWrapperBase( viewKeyStruct::componentMolarWeightString() ).setInputFlag( InputFlags::REQUIRED );
getWrapperBase( viewKeyStruct::phaseNamesString() ).setInputFlag( InputFlags::REQUIRED );

registerWrapper( viewKeyStruct::equationsOfStateString(), &m_equationsOfStateNames ).
setInputFlag( InputFlags::REQUIRED ).
setDescription( "List of equation of state types for each phase. Valid options:\n* " +
EnumStrings< compositional::EquationOfStateType >::concat( "\n* " ) );

registerWrapper( viewKeyStruct::componentCriticalPressureString(), &m_componentCriticalPressure ).
setInputFlag( InputFlags::REQUIRED ).
setDescription( "Component critical pressures" );
Expand Down Expand Up @@ -87,19 +92,10 @@ integer CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::getWaterP
return PVTProps::PVTFunctionHelpers::findName( m_phaseNames, expectedWaterPhaseNames, viewKeyStruct::phaseNamesString() );
}

// Naming conventions
namespace compositional
{
template< int NP > struct PhaseName {};
template<> struct PhaseName< 2 > { static constexpr char const * catalogName() { return "TwoPhase"; } };
template<> struct PhaseName< 3 > { static constexpr char const * catalogName() { return "ThreePhase"; } };
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
string CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::catalogName()
{
return GEOS_FMT( "Compositional{}Fluid{}{}",
compositional::PhaseName< FLASH::KernelWrapper::getNumberOfPhases() >::catalogName(),
return GEOS_FMT( "Compositional{}Fluid{}",
FLASH::catalogName(),
PHASE1::Viscosity::catalogName() );
}
Expand Down Expand Up @@ -134,10 +130,13 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::postProcessI
InputError );

};
checkInputSize( m_equationsOfStateNames, NP, viewKeyStruct::equationsOfStateString() );
checkInputSize( m_componentCriticalPressure, NC, viewKeyStruct::componentCriticalPressureString() );
checkInputSize( m_componentCriticalTemperature, NC, viewKeyStruct::componentCriticalTemperatureString() );
checkInputSize( m_componentAcentricFactor, NC, viewKeyStruct::componentAcentricFactorString() );

compositional::EquationOfState::validateNames( m_equationsOfStateNames );

if( m_componentCriticalVolume.empty() )
{
m_componentCriticalVolume.resize( NC );
Expand Down Expand Up @@ -217,11 +216,11 @@ typename CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::KernelWr
CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createKernelWrapper()
{
return KernelWrapper( *m_componentProperties,
*m_equationsOfState,
*m_flash,
*m_phase1,
*m_phase2,
*m_phase3,
m_componentMolarWeight,
m_useMass,
m_phaseFraction.toView(),
m_phaseDensity.toView(),
Expand All @@ -248,17 +247,26 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::createModels
m_componentVolumeShift,
m_componentBinaryCoeff );

m_equationsOfState = std::make_unique< compositional::EquationOfState >( m_equationsOfStateNames );

m_flash = std::make_unique< FLASH >( getName() + '_' + FLASH::catalogName(),
*m_componentProperties );
*m_componentProperties,
*m_equationsOfState );

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

m_phase2 = std::make_unique< PHASE2 >( GEOS_FMT( "{}_PhaseModel2", getName() ),
*m_componentProperties );
*m_componentProperties,
*m_equationsOfState,
1 );

m_phase3 = std::make_unique< PHASE3 >( GEOS_FMT( "{}_PhaseModel3", getName() ),
*m_componentProperties );
*m_componentProperties,
*m_equationsOfState,
2 );
}

template< typename FLASH, typename PHASE1, typename PHASE2, typename PHASE3 >
Expand All @@ -276,39 +284,21 @@ void CompositionalMultiphaseFluid< FLASH, PHASE1, PHASE2, PHASE3 >::calculateCri

// Explicit instantiation of the model template.
template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashPRPR,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSPR >, compositional::ConstantViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSPR >, compositional::ConstantViscosity, compositional::NullModel > >;
template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashSRKSRK,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSSRK >, compositional::ConstantViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSSRK >, compositional::ConstantViscosity, compositional::NullModel > >;
template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashPRPR,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSPR >, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSPR >, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;
compositional::NegativeTwoPhaseFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::ConstantViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::ConstantViscosity, compositional::NullModel > >;
template class CompositionalMultiphaseFluid<
compositional::NegativeTwoPhaseFlashSRKSRK,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSSRK >, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity< compositional::CubicEOSSRK >, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;

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

REGISTER_CATALOG_ENTRY( ConstitutiveBase,
CompositionalTwoPhaseSoaveRedlichKwongConstantViscosity,
string const &,
dataRepository::Group * const )
compositional::NegativeTwoPhaseFlashModel,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel >,
compositional::PhaseModel< compositional::CompositionalDensity, compositional::LohrenzBrayClarkViscosity, compositional::NullModel > >;

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

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

Expand Down
Loading
Loading