https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
GeochemicalModelInterrogator Class Reference

Queries and performs simple manipulations on a geochemical model. More...

#include <GeochemicalModelInterrogator.h>

Inheritance diagram for GeochemicalModelInterrogator:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 GeochemicalModelInterrogator (const InputParameters &parameters)
 
virtual Real time ()
 
virtual Real timeOld ()
 
virtual Real dt ()
 
virtual Real dtOld ()
 
virtual int timeStep ()
 
const unsigned int & interval () const
 
const MultiMooseEnum & executeOn () const
 
bool isAdvanced ()
 
virtual const OutputOnWarehouse & advancedExecuteOn () const
 
void allowOutput (bool state)
 
virtual void outputStep (const ExecFlagType &type)
 
const std::set< Real > & getSyncTimes ()
 
virtual bool supportsMaterialPropertyOutput () const
 
virtual bool enabled () const
 
std::shared_ptr< MooseObject > getSharedPtr ()
 
std::shared_ptr< const MooseObject > getSharedPtr () const
 
bool isKokkosObject () const
 
MooseApp & getMooseApp () const
 
const std::string & type () const
 
const std::string & name () const
 
std::string typeAndName () const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
MooseObjectName uniqueName () const
 
const InputParameters & parameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
T getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &name) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
std::string messagePrefix (const bool hit_prefix=true) const
 
std::string errorPrefix (const std::string &) const
 
void mooseError (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecatedNoTrace (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
virtual void meshChanged ()
 
virtual void initialSetup ()
 
virtual void timestepSetup ()
 
virtual void jacobianSetup ()
 
virtual void residualSetup ()
 
virtual void subdomainSetup ()
 
virtual void customSetup (const ExecFlagType &)
 
const ExecFlagEnum & getExecuteOnEnum () const
 
const Function & getFunction (const std::string &name) const
 
const Function & getFunctionByName (const FunctionName &name) const
 
bool hasFunction (const std::string &param_name) const
 
bool hasFunctionByName (const FunctionName &name) const
 
Moose::Kokkos::Function getKokkosFunction (const std::string &name) const
 
const T & getKokkosFunction (const std::string &name) const
 
Moose::Kokkos::Function getKokkosFunctionByName (const FunctionName &name) const
 
const T & getKokkosFunctionByName (const FunctionName &name) const
 
bool hasKokkosFunction (const std::string &param_name) const
 
bool hasKokkosFunctionByName (const FunctionName &name) const
 
bool isDefaultPostprocessorValue (const std::string &param_name, const unsigned int index=0) const
 
bool hasPostprocessor (const std::string &param_name, const unsigned int index=0) const
 
bool hasPostprocessorByName (const PostprocessorName &name) const
 
std::size_t coupledPostprocessors (const std::string &param_name) const
 
const PostprocessorName & getPostprocessorName (const std::string &param_name, const unsigned int index=0) const
 
const VectorPostprocessorValue & getVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name, bool needs_broadcast) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const VectorPostprocessorValue & getVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name, bool needs_broadcast) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValue (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValueByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValueOld (const std::string &param_name, const std::string &vector_name) const
 
const ScatterVectorPostprocessorValue & getScatterVectorPostprocessorValueOldByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
bool hasVectorPostprocessor (const std::string &param_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool hasVectorPostprocessorByName (const VectorPostprocessorName &name) const
 
const VectorPostprocessorName & getVectorPostprocessorName (const std::string &param_name) const
 
PerfGraph & perfGraph ()
 
const PostprocessorValue & getPostprocessorValue (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValue & getPostprocessorValue (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValue & getPostprocessorValueOld (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValue & getPostprocessorValueOld (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValue & getPostprocessorValueOlder (const std::string &param_name, const unsigned int index=0) const
 
const PostprocessorValue & getPostprocessorValueOlder (const std::string &param_name, const unsigned int index=0) const
 
virtual const PostprocessorValue & getPostprocessorValueByName (const PostprocessorName &name) const
 
virtual const PostprocessorValue & getPostprocessorValueByName (const PostprocessorName &name) const
 
const PostprocessorValue & getPostprocessorValueOldByName (const PostprocessorName &name) const
 
const PostprocessorValue & getPostprocessorValueOldByName (const PostprocessorName &name) const
 
const PostprocessorValue & getPostprocessorValueOlderByName (const PostprocessorName &name) const
 
const PostprocessorValue & getPostprocessorValueOlderByName (const PostprocessorName &name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributed (const std::string &param_name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
bool isVectorPostprocessorDistributedByName (const VectorPostprocessorName &name) const
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 
UserObjectName getUserObjectName (const std::string &param_name) const
 
const T & getUserObject (const std::string &param_name, bool is_dependency=true) const
 
const T & getUserObjectByName (const UserObjectName &object_name, bool is_dependency=true) const
 
const UserObjectBase & getUserObjectBase (const std::string &param_name, bool is_dependency=true) const
 
const UserObjectBase & getUserObjectBaseByName (const UserObjectName &object_name, bool is_dependency=true) const
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObject (const std::string &param_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 
bool hasUserObjectByName (const UserObjectName &object_name) const
 

Static Public Member Functions

static InputParameters sharedParams ()
 params that are shared with the AddGeochemicalModelInterrogatorAction
 
static InputParameters validParams ()
 
static void callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 
static ExecFlagEnum getDefaultExecFlagEnum ()
 
static void addDeprecatedInputParameters (InputParameters &params)
 

Public Attributes

 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 

Static Public Attributes

static const std::string type_param
 
static const std::string name_param
 
static const std::string unique_name_param
 
static const std::string app_param
 
static const std::string moose_base_param
 
static const std::string kokkos_object_param
 

Protected Types

enum class  InterrogationChoiceEnum { REACTION , ACTIVITY , EQM_TEMPERATURE }
 

Protected Member Functions

virtual void output () override
 
virtual void solveSetup ()
 
virtual bool shouldOutput ()
 
virtual bool onInterval ()
 
void setWallTimeIntervalFromCommandLineParam ()
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 
T & declareRestartableData (const std::string &data_name, Args &&... args)
 
ManagedValue< T > declareManagedRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
const T & getRestartableData (const std::string &data_name) const
 
T & declareRestartableDataWithContext (const std::string &data_name, void *context, Args &&... args)
 
T & declareRecoverableData (const std::string &data_name, Args &&... args)
 
T & declareRestartableDataWithObjectName (const std::string &data_name, const std::string &object_name, Args &&... args)
 
T & declareRestartableDataWithObjectNameWithContext (const std::string &data_name, const std::string &object_name, void *context, Args &&... args)
 
std::string restartableName (const std::string &data_name) const
 
virtual void addPostprocessorDependencyHelper (const PostprocessorName &) const
 
virtual void addVectorPostprocessorDependencyHelper (const VectorPostprocessorName &) const
 
const ReporterContextBase & getReporterContextBaseByName (const ReporterName &reporter_name) const
 
const ReporterName & getReporterName (const std::string &param_name) const
 
virtual void addReporterDependencyHelper (const ReporterName &)
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, const std::size_t time_index=0)
 
const T & getReporterValue (const std::string &param_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, const std::size_t time_index=0)
 
const T & getReporterValueByName (const ReporterName &reporter_name, ReporterMode mode, const std::size_t time_index=0)
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValue (const std::string &param_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
bool hasReporterValueByName (const ReporterName &reporter_name) const
 
virtual void addUserObjectDependencyHelper (const UserObjectBase &) const
 

Protected Attributes

ModelGeochemicalDatabase _mgd
 
GeochemistrySpeciesSwapper _swapper
 
const std::vector< std::string > _swap_out
 
const std::vector< std::string > _swap_in
 
const unsigned _precision
 
enum GeochemicalModelInterrogator::InterrogationChoiceEnum _interrogation
 
const Real _temperature
 
const std::vector< std::string > _activity_species
 
const std::vector< Real > _activity_values
 
const std::string _equilibrium_species
 
FEProblemBase * _problem_ptr
 
bool _transient
 
bool _use_displaced
 
libMesh::EquationSystems * _es_ptr
 
MooseMesh * _mesh_ptr
 
bool _sequence
 
ExecFlagEnum _execute_on
 
ExecFlagType _current_execute_flag
 
Real & _time
 
Real & _time_old
 
int & _t_step
 
Real & _dt
 
Real & _dt_old
 
unsigned int _num
 
const bool _time_step_interval_set_by_addparam
 
unsigned int _time_step_interval
 
const Real _min_simulation_time_interval
 
Real _wall_time_interval
 
std::set< Real > _sync_times
 
const Times *const _sync_times_object
 
Real _start_time
 
Real _end_time
 
int _start_step
 
int _end_step
 
Real _t_tol
 
bool _sync_only
 
bool _allow_output
 
bool _is_advanced
 
OutputOnWarehouse _advanced_execute_on
 
Real & _last_output_simulation_time
 
std::chrono::time_point< std::chrono::steady_clock > _last_output_wall_time
 
Real _wall_time_since_last_output
 
const bool & _enabled
 
MooseApp & _app
 
Factory & _factory
 
ActionFactory & _action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters & _pars
 
MooseApp & _restartable_app
 
const std::string _restartable_system_name
 
const THREAD_ID _restartable_tid
 
const bool _restartable_read_only
 
FEProblemBase & _mci_feproblem
 
const ExecFlagEnum & _execute_enum
 
MooseApp & _pg_moose_app
 
const std::string _prefix
 
const Parallel::Communicator & _communicator
 

Private Member Functions

std::vector< std::string > eqmSpeciesOfInterest () const
 provide a list of the equilibrium species of interest to the Interrogator
 
void outputReaction (const std::string &eqm_species) const
 output nicely-formatted reaction info to console
 
void outputActivity (const std::string &eqm_species) const
 output activity info to console
 
void outputTemperature (const std::string &eqm_species) const
 output temperature info to console
 
bool knownActivity (const std::string &species) const
 return true iff the activity is known for the species (it is a mineral or the user has set the activity)
 
Real getActivity (const std::string &species) const
 return the activity for the species. Note that knownActivity should be checked before calling getActivity.
 
Real solveForT (const DenseMatrix< Real > &reference_log10K, Real rhs) const
 
RestartableDataValue & registerRestartableDataOnApp (std::unique_ptr< RestartableDataValue > data, THREAD_ID tid) const
 
void registerRestartableNameWithFilterOnApp (const std::string &name, Moose::RESTARTABLE_FILTER filter)
 
RestartableData< T > & declareRestartableDataHelper (const std::string &data_name, void *context, Args &&... args) const
 
const Moose::FunctionBase * getKokkosFunctionByNameHelper (const FunctionName &name) const
 
const PostprocessorName & getPostprocessorNameInternal (const std::string &param_name, const unsigned int index, const bool allow_default_value=true) const
 
bool isDefaultPostprocessorValueByName (const PostprocessorName &name) const
 
PostprocessorValue getDefaultPostprocessorValueByName (const PostprocessorName &name) const
 
void checkParam (const std::string &param_name, const unsigned int index=std::numeric_limits< unsigned int >::max()) const
 
bool postprocessorsAdded () const
 
const VectorPostprocessorValue & getVectorPostprocessorByNameHelper (const VectorPostprocessorName &name, const std::string &vector_name, bool broadcast, std::size_t t_index) const
 
const VectorPostprocessorContext< VectorPostprocessorValue > & getVectorPostprocessorContextByNameHelper (const VectorPostprocessorName &name, const std::string &vector_name) const
 
bool vectorPostprocessorsAdded () const
 
bool reportersAdded () const
 
void possiblyCheckHasReporter (const ReporterName &reporter_name, const std::string &param_name="") const
 
const PostprocessorValue & getPostprocessorValueInternal (const std::string &param_name, unsigned int index, std::size_t t_index) const
 
const PostprocessorValue & getPostprocessorValueInternal (const std::string &param_name, unsigned int index, std::size_t t_index) const
 
const PostprocessorValue & getPostprocessorValueByNameInternal (const PostprocessorName &name, std::size_t t_index) const
 
const PostprocessorValue & getPostprocessorValueByNameInternal (const PostprocessorName &name, std::size_t t_index) const
 
void possiblyCheckHasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
void possiblyCheckHasVectorPostprocessor (const std::string &param_name, const std::string &vector_name) const
 
void possiblyCheckHasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
void possiblyCheckHasVectorPostprocessorByName (const VectorPostprocessorName &name, const std::string &vector_name) const
 
const UserObjectBase & getUserObjectFromFEProblem (const UserObjectName &object_name, const THREAD_ID tid=0) const
 
const T & castUserObject (const UserObjectBase &uo_base, const std::string &param_name="") const
 
void mooseObjectError (const std::string &param_name, std::stringstream &oss) const
 
const std::string & userObjectType (const UserObjectBase &uo) const
 
const std::string & userObjectName (const UserObjectBase &uo) const
 

Static Private Member Functions

static const hit::Node * getHitNode (const InputParameters &params)
 
static std::string messagePrefix (const InputParameters &params, const bool hit_prefix)
 

Private Attributes

const ParallelParamObject & _parent
 
const MooseBase & _si_moose_base
 
const FEProblemBase * _si_problem
 
const RestartableDataMapName _metaname
 
std::string _restartable_name
 
ExecFlagEnum _empty_execute_enum
 
const MooseObject & _fni_object
 
const InputParameters & _fni_params
 
FEProblemBase & _fni_feproblem
 
const THREAD_ID _fni_tid
 
const MooseObject & _ppi_moose_object
 
const InputParameters & _ppi_params
 
const FEProblemBase & _ppi_feproblem
 
std::map< PostprocessorName, std::unique_ptr< PostprocessorValue > > _default_values
 
const bool _broadcast_by_default
 
const MooseObject & _vpi_moose_object
 
const FEProblemBase & _vpi_feproblem
 
const THREAD_ID _vpi_tid
 
const InputParameters & _ri_params
 
FEProblemBase & _ri_fe_problem_base
 
const ReporterData & _ri_reporter_data
 
const MooseObject & _ri_moose_object
 
const MooseObject & _uoi_moose_object
 
const FEProblemBase & _uoi_feproblem
 
const THREAD_ID _uoi_tid
 

Detailed Description

Queries and performs simple manipulations on a geochemical model.

Definition at line 20 of file GeochemicalModelInterrogator.h.

Member Enumeration Documentation

◆ InterrogationChoiceEnum

Constructor & Destructor Documentation

◆ GeochemicalModelInterrogator()

GeochemicalModelInterrogator::GeochemicalModelInterrogator ( const InputParameters &  parameters)

Definition at line 91 of file GeochemicalModelInterrogator.C.

94 _mgd(getUserObject<GeochemicalModelDefinition>("model_definition").getDatabase()),
95 _swapper(_mgd.basis_species_index.size(), getParam<Real>("stoichiometry_tolerance")),
96 _swap_out(getParam<std::vector<std::string>>("swap_out_of_basis")),
97 _swap_in(getParam<std::vector<std::string>>("swap_into_basis")),
98 _precision(getParam<unsigned int>("precision")),
99 _interrogation(getParam<MooseEnum>("interrogation").getEnum<InterrogationChoiceEnum>()),
100 _temperature(getParam<Real>("temperature")),
101 _activity_species(getParam<std::vector<std::string>>("activity_species")),
102 _activity_values(getParam<std::vector<Real>>("activity_values")),
103 _equilibrium_species(getParam<std::string>("equilibrium_species"))
104{
105 if (_swap_out.size() != _swap_in.size())
106 paramError("swap_out_of_basis must have same length as swap_into_basis");
107 if (_activity_species.size() != _activity_values.size())
108 paramError("activity_species must have same length as activity_values");
109}
const std::vector< std::string > _swap_in
const std::vector< std::string > _swap_out
const std::vector< std::string > _activity_species
const std::vector< Real > _activity_values
const InputParameters & parameters() const
void paramError(const std::string &param, Args... args) const
const T & getParam(const std::string &name) const
std::unordered_map< std::string, unsigned > basis_species_index
basis_species_index[name] = index of the basis species, within all ModelGeochemicalDatabase internal ...

Member Function Documentation

◆ eqmSpeciesOfInterest()

std::vector< std::string > GeochemicalModelInterrogator::eqmSpeciesOfInterest ( ) const
private

provide a list of the equilibrium species of interest to the Interrogator

Definition at line 160 of file GeochemicalModelInterrogator.C.

161{
162 if (_equilibrium_species == "")
163 return _mgd.eqm_species_name;
164 else if (_mgd.eqm_species_index.count(_equilibrium_species) == 1)
165 return {_equilibrium_species};
166 return {};
167}
std::unordered_map< std::string, unsigned > eqm_species_index
eqm_species_index[name] = index of the equilibrium species (secondary aqueous species,...
std::vector< std::string > eqm_species_name
eqm_species_name[i] = name of the i^th eqm species

Referenced by output().

◆ getActivity()

Real GeochemicalModelInterrogator::getActivity ( const std::string &  species) const
private

return the activity for the species. Note that knownActivity should be checked before calling getActivity.

Definition at line 207 of file GeochemicalModelInterrogator.C.

208{
209 unsigned ind = 0;
210 for (const auto & sp : _activity_species)
211 {
212 if (sp == species)
213 return _activity_values[ind];
214 ind += 1;
215 }
216 return 1.0; // must be a mineral
217}

Referenced by outputActivity(), and outputTemperature().

◆ knownActivity()

bool GeochemicalModelInterrogator::knownActivity ( const std::string &  species) const
private

return true iff the activity is known for the species (it is a mineral or the user has set the activity)

Definition at line 194 of file GeochemicalModelInterrogator.C.

195{
196 for (const auto & sp : _activity_species)
197 if (sp == species)
198 return true;
199 if (_mgd.basis_species_index.count(species))
201 if (_mgd.eqm_species_index.count(species))
203 return false;
204}
if(subdm)
std::vector< bool > eqm_species_mineral
eqm_species_mineral[i] = true iff the i^th equilibrium species is a mineral
std::vector< bool > basis_species_mineral
basis_species_mineral[j] = true iff the j^th basis species is a mineral

Referenced by outputActivity(), and outputTemperature().

◆ output()

void GeochemicalModelInterrogator::output ( )
overrideprotectedvirtual

Implements Output.

Definition at line 112 of file GeochemicalModelInterrogator.C.

113{
114 for (const auto & sp : eqmSpeciesOfInterest())
115 {
116 switch (_interrogation)
117 {
119 outputReaction(sp);
120 break;
122 outputActivity(sp);
123 break;
126 break;
127 }
128 }
129
130 for (unsigned i = 0; i < _swap_out.size(); ++i)
131 {
132 // any exception here is an error
133 try
134 {
136 }
137 catch (const MooseException & e)
138 {
139 mooseError(e.what());
140 }
141 for (const auto & sp : eqmSpeciesOfInterest())
142 {
143 switch (_interrogation)
144 {
146 outputReaction(sp);
147 break;
149 outputActivity(sp);
150 break;
153 break;
154 }
155 }
156 }
157}
void outputActivity(const std::string &eqm_species) const
output activity info to console
void outputReaction(const std::string &eqm_species) const
output nicely-formatted reaction info to console
std::vector< std::string > eqmSpeciesOfInterest() const
provide a list of the equilibrium species of interest to the Interrogator
void outputTemperature(const std::string &eqm_species) const
output temperature info to console
void performSwap(ModelGeochemicalDatabase &mgd, const std::string &replace_this, const std::string &with_this)
Check that replacing the named basis species with the named equilibrium species is valid,...
void mooseError(Args &&... args) const
virtual const char * what() const

◆ outputActivity()

void GeochemicalModelInterrogator::outputActivity ( const std::string &  eqm_species) const
private

output activity info to console

Definition at line 220 of file GeochemicalModelInterrogator.C.

221{
222 if (_mgd.eqm_species_index.count(eqm_species) == 0)
223 return;
224
225 const unsigned row = _mgd.eqm_species_index.at(eqm_species);
226 const unsigned num_cols = _mgd.basis_species_index.size();
227 const Real cutoff = std::pow(10.0, -1.0 * _precision);
228 const std::vector<Real> temps = _mgd.original_database->getTemperatures();
229 const unsigned numT = temps.size();
230 const std::string model_type = _mgd.original_database->getLogKModel();
232 temps, _mgd.eqm_log10K.sub_matrix(row, 1, 0, numT).get_values(), model_type);
233 log10K.generate();
234 Real rhs = log10K.sample(_temperature);
235 std::stringstream lhs;
236
237 lhs << std::setprecision(_precision);
238 if (knownActivity(eqm_species))
239 rhs += std::log10(getActivity(eqm_species));
240 else
241 lhs << "(A_" << eqm_species << ")^-1 ";
242
243 for (unsigned i = 0; i < num_cols; ++i)
244 if (std::abs(_mgd.eqm_stoichiometry(row, i)) > cutoff)
245 {
246 const std::string sp = _mgd.basis_species_name[i];
247 if (knownActivity(sp))
248 rhs -= _mgd.eqm_stoichiometry(row, i) * std::log10(getActivity(sp));
249 else
250 lhs << "(A_" << sp << ")^" << _mgd.eqm_stoichiometry(row, i) << " ";
251 }
252
253 lhs << "= 10^" << rhs << std::endl;
254 _console << lhs.str() << std::flush;
255}
const ConsoleStream _console
Fit the equilibrium constant values read from the thermodynamic databse at specified temperature valu...
const std::vector< Real > & getTemperatures() const
Get the temperature points that the equilibrium constant is defined at.
std::string getLogKModel() const
Get the equilibrium constant model type.
bool knownActivity(const std::string &species) const
return true iff the activity is known for the species (it is a mineral or the user has set the activi...
Real getActivity(const std::string &species) const
return the activity for the species. Note that knownActivity should be checked before calling getActi...
std::vector< T > & get_values()
DenseMatrix sub_matrix(unsigned int row_id, unsigned int row_size, unsigned int col_id, unsigned int col_size) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
DenseMatrix< Real > eqm_stoichiometry
eqm_stoichiometry(i, j) = stoichiometric coefficient for equilibrium species "i" in terms of the basi...
const GeochemicalDatabaseReader * original_database
a pointer to the original database used to build this ModelGeochemicalDatabase
std::vector< std::string > basis_species_name
basis_species_name[j] = name of the j^th basis species
DenseMatrix< Real > eqm_log10K
eqm_log10K(i, j) = log10(equilibrium constant) for i^th equilibrium species at the j^th temperature p...

Referenced by output().

◆ outputReaction()

void GeochemicalModelInterrogator::outputReaction ( const std::string &  eqm_species) const
private

output nicely-formatted reaction info to console

Definition at line 170 of file GeochemicalModelInterrogator.C.

171{
172 if (_mgd.eqm_species_index.count(eqm_species) == 0)
173 return;
174 std::stringstream ss;
175 const unsigned row = _mgd.eqm_species_index.at(eqm_species);
176 const Real cutoff = std::pow(10.0, -1.0 * _precision);
177 const std::vector<Real> temps = _mgd.original_database->getTemperatures();
178 const unsigned numT = temps.size();
179 const std::string model_type = _mgd.original_database->getLogKModel();
181 temps, _mgd.eqm_log10K.sub_matrix(row, 1, 0, numT).get_values(), model_type);
182 log10K.generate();
183 const Real log10_eqm_const = log10K.sample(_temperature);
184 ss << std::setprecision(_precision);
185 ss << eqm_species << " = ";
188 ss << " . log10(K) = " << log10_eqm_const;
189 ss << std::endl;
190 _console << ss.str() << std::flush;
191}
std::string reaction(const DenseMatrix< Real > &stoi, unsigned row, const std::vector< std::string > &names, Real stoi_tol=1.0E-6, int precision=4)
Returns a nicely formatted string corresponding to the reaction defined by the given row of the stoic...

Referenced by output(), and outputTemperature().

◆ outputTemperature()

void GeochemicalModelInterrogator::outputTemperature ( const std::string &  eqm_species) const
private

output temperature info to console

Definition at line 258 of file GeochemicalModelInterrogator.C.

259{
260 if (_mgd.eqm_species_index.count(eqm_species) == 0)
261 return;
262
263 const unsigned row = _mgd.eqm_species_index.at(eqm_species);
264 const unsigned num_cols = _mgd.basis_species_index.size();
265 const Real cutoff = std::pow(10.0, -1.0 * _precision);
266 Real rhs = 1.0;
267
268 // check that we know all the required activities, otherwise compute the RHS
269 if (knownActivity(eqm_species))
270 rhs = -std::log10(getActivity(eqm_species));
271 else
272 {
273 _console << "Not enough activites known to compute equilibrium temperature for reaction\n "
274 << std::flush;
275 outputReaction(eqm_species);
276 return;
277 }
278
279 for (unsigned i = 0; i < num_cols; ++i)
280 if (std::abs(_mgd.eqm_stoichiometry(row, i)) > cutoff)
281 {
282 const std::string sp = _mgd.basis_species_name[i];
283 if (knownActivity(sp))
284 rhs += _mgd.eqm_stoichiometry(row, i) * std::log10(getActivity(sp));
285 else
286 {
287 _console << "Not enough activites known to compute equilibrium temperature for reaction\n "
288 << std::flush;
289 outputReaction(eqm_species);
290 return;
291 }
292 }
293
294 const Real tsoln = solveForT(
296 _console << eqm_species << ". T = " << tsoln << "degC" << std::endl;
297}
Real solveForT(const DenseMatrix< Real > &reference_log10K, Real rhs) const

Referenced by output().

◆ sharedParams()

InputParameters GeochemicalModelInterrogator::sharedParams ( )
static

params that are shared with the AddGeochemicalModelInterrogatorAction

Definition at line 18 of file GeochemicalModelInterrogator.C.

19{
21 params.addRequiredParam<UserObjectName>("model_definition",
22 "The name of the GeochemicalModelDefinition user object");
23 params.addParam<std::vector<std::string>>(
24 "swap_out_of_basis",
25 {},
26 "Species that should be removed from the model_definition's basis and be replaced with the "
27 "swap_into_basis species. There must be the same number of species in swap_out_of_basis and "
28 "swap_into_basis. If this list contains more than one species, the swapping is performed "
29 "one-by-one, starting with the first pair (swap_out_of_basis[0] and swap_into_basis[0]), "
30 "then the next pair, etc");
31 params.addParam<std::vector<std::string>>(
32 "swap_into_basis",
33 {},
34 "Species that should be removed from the model_definition's "
35 "equilibrium species list and added to the basis");
36 params.addParam<std::vector<std::string>>(
37 "activity_species",
38 {},
39 "Species that are provided numerical values of activity (or fugacity for gases) in the "
40 "activity_value input");
41 params.addParam<std::vector<Real>>(
42 "activity_values",
43 {},
44 "Numerical values for the activity (or fugacity) for the "
45 "species in the activity_species list. These are activity values, not log10(activity).");
46 params.addParam<unsigned int>(
47 "precision",
48 4,
49 "Precision for printing values. Also, if the absolute value of a stoichiometric coefficient "
50 "is less than 10^(-precision) then it is set to zero. Also, if equilibrium temperatures are "
51 "desired, they will be computed to a relative error of 10^(-precision)");
52 params.addParam<std::string>("equilibrium_species",
53 "",
54 "Only output results for this equilibrium species. If not "
55 "provided, results for all equilibrium species will be outputted");
56 MooseEnum interrogation_choice("reaction activity eqm_temperature", "reaction");
57 params.addParam<MooseEnum>(
58 "interrogation",
59 interrogation_choice,
60 "Type of interrogation to perform. reaction: Output equilibrium species reactions and "
61 "log10K. activity: determine activity products at equilibrium. eqm_temperature: determine "
62 "temperature to ensure equilibrium");
63 params.addParam<Real>(
64 "temperature",
65 25,
66 "Equilibrium constants will be computed at this temperature [degC]. This is "
67 "ignored if interrogation=eqm_temperature.");
69 "stoichiometry_tolerance",
70 1E-6,
71 "stoichiometry_tolerance >= 0.0",
72 "Swapping involves inverting matrices via a singular value decomposition. During this "
73 "process: (1) if abs(singular value) < stoi_tol * L1norm(singular values), then the "
74 "matrix is deemed singular (so the basis swap is deemed invalid); (2) if abs(any "
75 "stoichiometric coefficient) < stoi_tol then it is set to zero.");
76 return params;
77}
InputParameters emptyInputParameters()
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)

Referenced by AddGeochemicalModelInterrogatorAction::validParams(), and validParams().

◆ solveForT()

Real GeochemicalModelInterrogator::solveForT ( const DenseMatrix< Real > &  reference_log10K,
Real  rhs 
) const
private
Returns
The value of temperature for which log10K = rhs. If no solution is possible, NaN is returned
Parameters
reference_log10kvalues of log10K at the values of temperature in _mgd.tmperatures. Only reference_log10K(0, *) will be used. rhs The right-hand side

Definition at line 300 of file GeochemicalModelInterrogator.C.

301{
302 const std::vector<Real> temps = _mgd.original_database->getTemperatures();
303 const unsigned numT = temps.size();
304 const std::string model_type = _mgd.original_database->getLogKModel();
305
306 // find the bracket that contains the rhs
307 unsigned bracket = 0;
308 for (bracket = 0; bracket < numT - 1; ++bracket)
309 {
310 if (reference_log10K(0, bracket) <= rhs && reference_log10K(0, bracket + 1) > rhs)
311 break;
312 else if (reference_log10K(0, bracket) >= rhs && reference_log10K(0, bracket + 1) < rhs)
313 break;
314 }
315
316 if (bracket == numT - 1)
317 return std::numeric_limits<double>::quiet_NaN();
318
319 EquilibriumConstantInterpolator log10K(temps, reference_log10K.get_values(), model_type);
320 log10K.generate();
321 // now do a Newton-Raphson to find T for which log10K.sample(T) = rhs
323 const Real small_delT =
324 (temp + GeochemistryConstants::CELSIUS_TO_KELVIN) * std::pow(10.0, -1.0 * _precision);
325 Real del_temp = small_delT;
326 unsigned iter = 0;
327 while (std::abs(del_temp) >= small_delT && iter++ < 100)
328 {
329 Real residual = log10K.sample(temp) - rhs;
330 del_temp = -residual / log10K.sampleDerivative(temp);
331 temp += del_temp;
332 }
333 return temp;
334}
void bracket(std::function< Real(Real)> const &f, Real &x1, Real &x2)
Function to bracket a root of a given function.

Referenced by outputTemperature().

◆ validParams()

InputParameters GeochemicalModelInterrogator::validParams ( )
static

Definition at line 80 of file GeochemicalModelInterrogator.C.

81{
84 params.addClassDescription("Performing simple manipulations of and querying a "
85 "geochemical model");
86
87 params.set<ExecFlagEnum>("execute_on") = {EXEC_FINAL};
88 return params;
89}
const ExecFlagType EXEC_FINAL
static InputParameters sharedParams()
params that are shared with the AddGeochemicalModelInterrogatorAction
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
static InputParameters validParams()

Member Data Documentation

◆ _activity_species

const std::vector<std::string> GeochemicalModelInterrogator::_activity_species
protected

◆ _activity_values

const std::vector<Real> GeochemicalModelInterrogator::_activity_values
protected

Definition at line 41 of file GeochemicalModelInterrogator.h.

Referenced by GeochemicalModelInterrogator(), and getActivity().

◆ _equilibrium_species

const std::string GeochemicalModelInterrogator::_equilibrium_species
protected

Definition at line 42 of file GeochemicalModelInterrogator.h.

Referenced by eqmSpeciesOfInterest().

◆ _interrogation

enum GeochemicalModelInterrogator::InterrogationChoiceEnum GeochemicalModelInterrogator::_interrogation
protected

Referenced by output().

◆ _mgd

ModelGeochemicalDatabase GeochemicalModelInterrogator::_mgd
protected

◆ _precision

const unsigned GeochemicalModelInterrogator::_precision
protected

◆ _swap_in

const std::vector<std::string> GeochemicalModelInterrogator::_swap_in
protected

Definition at line 36 of file GeochemicalModelInterrogator.h.

Referenced by GeochemicalModelInterrogator(), and output().

◆ _swap_out

const std::vector<std::string> GeochemicalModelInterrogator::_swap_out
protected

Definition at line 35 of file GeochemicalModelInterrogator.h.

Referenced by GeochemicalModelInterrogator(), and output().

◆ _swapper

GeochemistrySpeciesSwapper GeochemicalModelInterrogator::_swapper
protected

Definition at line 34 of file GeochemicalModelInterrogator.h.

Referenced by output().

◆ _temperature

const Real GeochemicalModelInterrogator::_temperature
protected

Definition at line 39 of file GeochemicalModelInterrogator.h.

Referenced by outputActivity(), and outputReaction().


The documentation for this class was generated from the following files: