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

Main class for simulation (the driver of the simulation) More...

#include <Simulation.h>

Inheritance diagram for Simulation:
[legend]

Classes

struct  ICInfo
 
struct  VariableInfo
 Variable information. More...
 

Public Member Functions

 Simulation (FEProblemBase &fe_problem, const InputParameters &params)
 
virtual ~Simulation ()
 
const libMesh::FETypegetFlowFEType () const
 Gets the FE type for the flow in this simulation.
 
virtual void setupQuadrature ()
 Sets up quadrature rules.
 
virtual void initSimulation ()
 Initialize this simulation.
 
virtual void initComponents ()
 Initialize this simulation's components.
 
void identifyLoops ()
 Identifies the component loops.
 
void printComponentLoops () const
 Prints the component loops.
 
virtual void run ()
 Run the simulation.
 
virtual void addComponent (const std::string &type, const std::string &name, InputParameters params)
 Add a component into this simulation.
 
bool hasComponent (const std::string &name) const
 Find out if simulation has a component with the given name.
 
template<typename T >
bool hasComponentOfType (const std::string &name) const
 Find out if simulation has a component with the given name and specified type.
 
template<typename T >
const TgetComponentByName (const std::string &name) const
 Get component by its name.
 
const std::vector< std::shared_ptr< Component > > & getComponents () const
 Return list of components available in the simulation.
 
virtual void addClosures (const std::string &type, const std::string &name, InputParameters params)
 Add a closures object into this simulation.
 
bool hasClosures (const std::string &name) const
 Return whether the simulation has a closures object.
 
std::shared_ptr< ClosuresBasegetClosures (const std::string &name) const
 Get a pointer to a closures object.
 
void addSimVariable (bool nl, const VariableName &name, libMesh::FEType fe_type, Real scaling_factor=1.0)
 Queues a variable of type MooseVariableScalar to be added to the nonlinear or aux system.
 
void addSimVariable (bool nl, const VariableName &name, libMesh::FEType fe_type, const std::vector< SubdomainName > &subdomain_names, Real scaling_factor=1.0)
 Queues a variable of type MooseVariable to be added to the nonlinear or aux system.
 
void addSimVariable (bool nl, const std::string &var_type, const VariableName &name, const InputParameters &params)
 Queues a generic variable to be added to the nonlinear or aux system.
 
void checkVariableNameLength (const std::string &name) const
 Reports an error if the variable name is too long.
 
void addConstantIC (const VariableName &var_name, Real value, const std::vector< SubdomainName > &block_names)
 
void addFunctionIC (const VariableName &var_name, const std::string &func_name, const std::vector< SubdomainName > &block_names)
 
void addConstantScalarIC (const VariableName &var_name, Real value)
 
void addComponentScalarIC (const VariableName &var_name, const std::vector< Real > &value)
 
void addSimInitialCondition (const std::string &type, const std::string &name, InputParameters params)
 
void addControl (const std::string &type, const std::string &name, InputParameters params)
 Add a control.
 
void addFileOutputter (const std::string &name)
 
void addScreenOutputter (const std::string &name)
 
std::vector< OutputName > getOutputsVector (const std::string &key) const
 Gets the vector of output names corresponding to a 1-word key string.
 
virtual void buildMesh ()
 Create mesh for this simulation.
 
virtual void addVariables ()
 Add variables involved in this simulation.
 
virtual void addMooseObjects ()
 Add component MOOSE objects.
 
virtual void setupMesh ()
 Perform mesh setup actions such as setting up the coordinate system(s) and creating ghosted elements.
 
ThermalHydraulicsAppgetApp ()
 Get the ThermalHydraulicsApp.
 
virtual void integrityCheck () const
 Check the integrity of the simulation.
 
virtual void advanceState ()
 Advance all of the state holding vectors / datastructures so that we can move to the next timestep.
 
virtual void controlDataIntegrityCheck ()
 Check the integrity of the control data.
 
virtual void couplingMatrixIntegrityCheck () const
 Check integrity of coupling matrix used by the preconditioner.
 
template<typename T >
bool hasControlData (const std::string &name)
 Query if control data with name 'name' exists.
 
template<typename T >
ControlData< T > * getControlData (const std::string &name)
 Get control data of type T and name 'name', if it does not exist it will be created.
 
template<typename T >
ControlData< T > * declareControlData (const std::string &name, THMControl *ctrl)
 Declare control data of type T and name 'name', if it does not exist it will be created.
 
const bool & getImplicitTimeIntegrationFlag ()
 Gets the flag indicating whether an implicit time integration scheme is being used.
 
bool hasInitialConditionsFromFile () const
 Are initial conditions specified from a file.
 
Loggerlog ()
 
void setCheckJacobian (bool state)
 Enable Jacobian checking.
 
virtual void augmentSparsity (const dof_id_type &elem_id1, const dof_id_type &elem_id2)
 Hint how to augment sparsity pattern between two elements.
 
bool getVectorValuedVelocity ()
 Is velocity output as vector-valued field.
 
void setVectorValuedVelocity (bool vector_velocity)
 Set if velocity is being output as a vector-valued field.
 
void addRelationshipManagers ()
 Add additional relationship managers to run the simulation.
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 
template<typename... Args>
void logError (Args &&... args) const
 Logs an error.
 
template<typename... Args>
void logComponentError (const std::string &component_name, Args &&... args) const
 Logs an error for a component.
 
template<typename... Args>
void logWarning (Args &&... args) const
 Logs a warning.
 
template<typename... Args>
void logComponentWarning (const std::string &component_name, Args &&... args) const
 Logs a warning for a component.
 
std::string genName (const std::string &prefix, unsigned int id, const std::string &suffix="") const
 Build a name from a prefix, number and possible suffix.
 
std::string genName (const std::string &prefix, unsigned int i, unsigned int j, const std::string &suffix="") const
 Build a name from a prefix, 2 numbers and possible suffix.
 
std::string genName (const std::string &prefix, const std::string &name, unsigned int i) const
 Build a name from 2 strings and a number.
 
std::string genName (const std::string &prefix, const std::string &middle, const std::string &suffix="") const
 Build a name from strings.
 
std::string genSafeName (const std::string &prefix, const std::string &middle, const std::string &suffix="") const
 Build a name from strings that is safe to use in input files (i.e.
 

Static Public Member Functions

static void setComponentVariableOrder (const VariableName &var, int index)
 Sets a component variable order index.
 

Public Attributes

Real _zero
 

Protected Member Functions

void setupEquations ()
 Setup equations to be solved in this simulation.
 
void setupInitialConditionsFromFile ()
 Setup reading initial conditions from a specified file, see 'initial_from_file' and 'initial_from_file_timestep' parameters.
 
void setupInitialConditionObjects ()
 
void setupCoordinateSystem ()
 Sets the coordinate system for each subdomain.
 
void setupCriticalHeatFluxTable ()
 Setup ctirical heat flux table user object.
 

Protected Attributes

THMMesh_thm_mesh
 THM mesh.
 
FEProblemBase_fe_problem
 Pointer to FEProblem representing this simulation.
 
ThermalHydraulicsApp_thm_app
 The application this is associated with.
 
Factory_thm_factory
 The Factory associated with the MooseApp.
 
std::vector< std::shared_ptr< Component > > _components
 List of components in this simulation.
 
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
 Map of components by their names.
 
std::map< std::string, std::string > _component_name_to_loop_name
 Map of component name to component loop name.
 
std::map< std::string, THM::FlowModelID_loop_name_to_model_id
 Map of loop name to model type.
 
std::map< std::string, std::shared_ptr< ClosuresBase > > _closures_by_name
 Map of closures by their names.
 
std::map< VariableName, VariableInfo_vars
 variables for this simulation (name and info about the var)
 
std::map< std::string, ICInfo_ics
 
const InputParameters_thm_pars
 "Global" of this simulation
 
libMesh::FEType _flow_fe_type
 finite element type for the flow in the simulation
 
std::vector< OutputName > _outputters_all
 
std::vector< OutputName > _outputters_file
 
std::vector< OutputName > _outputters_screen
 
std::map< std::string, ControlDataValue * > _control_data
 Control data created in the control logic system.
 
bool _implicit_time_integration
 true if using implicit time integration scheme
 
Logger _log
 
bool _check_jacobian
 True if checking jacobian.
 
std::map< dof_id_type, std::vector< dof_id_type > > _sparsity_elem_augmentation
 Additional sparsity pattern that needs to be added into the Jacobian matrix.
 
bool _output_vector_velocity
 Flag indicating if velocity is output as vector-valued field.
 
const Parallel::Communicator & _communicator
 

Private Member Functions

std::vector< VariableName > sortAddedComponentVariables () const
 Returns a sorted list of the variables added by components.
 

Static Private Attributes

static std::map< VariableName, int_component_variable_order_map
 Component variable order map; see setComponentVariableOrder for more info.
 

Detailed Description

Main class for simulation (the driver of the simulation)

Definition at line 29 of file Simulation.h.

Constructor & Destructor Documentation

◆ Simulation()

Simulation::Simulation ( FEProblemBase fe_problem,
const InputParameters params 
)

Definition at line 45 of file Simulation.C.

46 : ParallelObject(fe_problem.comm()),
48 _thm_mesh(*static_cast<THMMesh *>(pars.get<MooseMesh *>("mesh"))),
49 _fe_problem(fe_problem),
50 _thm_app(static_cast<ThermalHydraulicsApp &>(*pars.get<MooseApp *>(MooseBase::app_param))),
52 _thm_pars(pars),
55 _check_jacobian(false),
57 _zero(0)
58{
59 bool second_order_mesh = pars.get<bool>("2nd_order_mesh");
61 second_order_mesh ? FEType(SECOND, LAGRANGE) : FEType(FIRST, LAGRANGE);
62}
static libMesh::FEType _fe_type
Interface class for logging errors and warnings.
Factory & getFactory()
static const std::string app_param
THMMesh & _thm_mesh
THM mesh.
Definition Simulation.h:388
bool _output_vector_velocity
Flag indicating if velocity is output as vector-valued field.
Definition Simulation.h:474
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition Simulation.h:391
ThermalHydraulicsApp & _thm_app
The application this is associated with.
Definition Simulation.h:394
libMesh::FEType _flow_fe_type
finite element type for the flow in the simulation
Definition Simulation.h:430
const InputParameters & _thm_pars
"Global" of this simulation
Definition Simulation.h:427
bool _implicit_time_integration
true if using implicit time integration scheme
Definition Simulation.h:463
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition Simulation.h:397
Logger _log
Definition Simulation.h:465
bool _check_jacobian
True if checking jacobian.
Definition Simulation.h:468
Mesh for THM.
Definition THMMesh.h:19
const Parallel::Communicator & comm() const

◆ ~Simulation()

Simulation::~Simulation ( )
virtual

Definition at line 64 of file Simulation.C.

65{
66 for (auto && k : _control_data)
67 delete k.second;
68}
std::map< std::string, ControlDataValue * > _control_data
Control data created in the control logic system.
Definition Simulation.h:460

Member Function Documentation

◆ addClosures()

void Simulation::addClosures ( const std::string &  type,
const std::string &  name,
InputParameters  params 
)
virtual

Add a closures object into this simulation.

Parameters
[in]typeClosures class name
[in]nameClosures object name
[in]paramsInput parameters

Definition at line 1009 of file Simulation.C.

1010{
1011 std::shared_ptr<ClosuresBase> obj_ptr = _thm_factory.create<ClosuresBase>(type, name, params);
1012 if (_closures_by_name.find(name) == _closures_by_name.end())
1013 _closures_by_name[name] = obj_ptr;
1014 else
1015 logError("A closures object with the name '", name, "' already exists.");
1016}
const std::string name
Definition Setup.h:21
Base class for closures implementations.
void logError(Args &&... args) const
Logs an error.
std::map< std::string, std::shared_ptr< ClosuresBase > > _closures_by_name
Map of closures by their names.
Definition Simulation.h:409
virtual std::unique_ptr< Base > create()=0

Referenced by AddClosuresAction::act().

◆ addComponent()

void Simulation::addComponent ( const std::string &  type,
const std::string &  name,
InputParameters  params 
)
virtual

Add a component into this simulation.

Parameters
typeType (the registered class name) of the component
nameName of the component
paramsInput parameters

Definition at line 991 of file Simulation.C.

992{
993 std::shared_ptr<Component> comp = _thm_factory.create<Component>(type, name, params);
994 if (_comp_by_name.find(name) == _comp_by_name.end())
995 _comp_by_name[name] = comp;
996 else
997 logError("Component with name '", name, "' already exists");
998 _components.push_back(comp);
999}
Base class for THM components.
Definition Component.h:32
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
Map of components by their names.
Definition Simulation.h:402
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition Simulation.h:400

Referenced by AddComponentAction::act(), and THMActionComponent::addTHMComponent().

◆ addComponentScalarIC()

void Simulation::addComponentScalarIC ( const VariableName &  var_name,
const std::vector< Real > &  value 
)

Definition at line 565 of file Simulation.C.

566{
568 return;
569
570 std::string class_name = "ScalarComponentIC";
571 InputParameters params = _thm_factory.getValidParams(class_name);
572 params.set<VariableName>("variable") = var_name;
573 params.set<std::vector<Real>>("values") = value;
574 addSimInitialCondition(class_name, genName(var_name, "ic"), params);
575}
T & set(const std::string &name, bool quiet_mode=false)
std::string genName(const std::string &prefix, unsigned int id, const std::string &suffix="") const
Build a name from a prefix, number and possible suffix.
bool hasInitialConditionsFromFile() const
Are initial conditions specified from a file.
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition Simulation.C:495

◆ addConstantIC()

void Simulation::addConstantIC ( const VariableName &  var_name,
Real  value,
const std::vector< SubdomainName > &  block_names 
)

Definition at line 512 of file Simulation.C.

515{
517 return;
518
519 std::string blk_str = block_names[0];
520 for (unsigned int i = 1; i < block_names.size(); i++)
521 blk_str += ":" + block_names[i];
522
523 std::string class_name = "ConstantIC";
524 InputParameters params = _thm_factory.getValidParams(class_name);
525 params.set<VariableName>("variable") = var_name;
526 params.set<Real>("value") = value;
527 params.set<std::vector<SubdomainName>>("block") = block_names;
528 addSimInitialCondition(class_name, genName(var_name, blk_str, "ic"), params);
529}
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Referenced by FlowModel::addCommonInitialConditions(), VolumeJunction1Phase::addJunctionIC(), and HeatTransferFromExternalAppHeatFlux1Phase::addVariables().

◆ addConstantScalarIC()

void Simulation::addConstantScalarIC ( const VariableName &  var_name,
Real  value 
)

Definition at line 552 of file Simulation.C.

553{
555 return;
556
557 std::string class_name = "ScalarConstantIC";
558 InputParameters params = _thm_factory.getValidParams(class_name);
559 params.set<VariableName>("variable") = var_name;
560 params.set<Real>("value") = value;
561 addSimInitialCondition(class_name, genName(var_name, "ic"), params);
562}

Referenced by Shaft::addVariables(), and TotalPower::addVariables().

◆ addControl()

void Simulation::addControl ( const std::string &  type,
const std::string &  name,
InputParameters  params 
)

Add a control.

Parameters
typeType (registered name) of the control
nameName of the control
paramsInput parameters

Definition at line 487 of file Simulation.C.

488{
489 params.addPrivateParam<FEProblemBase *>("_fe_problem_base", &_fe_problem);
490 std::shared_ptr<Control> control = _thm_factory.create<Control>(type, name, params);
492}
void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true) override
ExecuteMooseObjectWarehouse< Control > & getControlWarehouse()
void addPrivateParam(const std::string &name, const T &value)

◆ addFileOutputter()

void Simulation::addFileOutputter ( const std::string &  name)

Definition at line 1035 of file Simulation.C.

1036{
1037 _outputters_all.push_back(name);
1038 _outputters_file.push_back(name);
1039}
std::vector< OutputName > _outputters_file
Definition Simulation.h:456
std::vector< OutputName > _outputters_all
Definition Simulation.h:455

Referenced by THMSetupOutputAction::act().

◆ addFunctionIC()

void Simulation::addFunctionIC ( const VariableName &  var_name,
const std::string &  func_name,
const std::vector< SubdomainName > &  block_names 
)

Definition at line 532 of file Simulation.C.

535{
537 return;
538
539 std::string blk_str = block_names[0];
540 for (unsigned int i = 1; i < block_names.size(); i++)
541 blk_str += ":" + block_names[i];
542
543 std::string class_name = "FunctionIC";
544 InputParameters params = _thm_factory.getValidParams(class_name);
545 params.set<VariableName>("variable") = var_name;
546 params.set<std::vector<SubdomainName>>("block") = block_names;
547 params.set<FunctionName>("function") = func_name;
548 addSimInitialCondition(class_name, genName(var_name, blk_str, "ic"), params);
549}

Referenced by FlowModel::addCommonInitialConditions(), HeatTransferBase::addHeatedPerimeter(), HeatConductionModel::addInitialConditions(), HeatTransferFromExternalAppTemperature1Phase::addVariables(), HeatTransferFromHeatStructure1Phase::addVariables(), HeatTransferFromHeatStructure3D1Phase::addVariables(), and HeatTransferFromSpecifiedTemperature1Phase::addVariables().

◆ addMooseObjects()

void Simulation::addMooseObjects ( )
virtual

Add component MOOSE objects.

Definition at line 738 of file Simulation.C.

739{
740 for (auto && comp : _components)
741 comp->addMooseObjects();
742}
virtual void addMooseObjects()
Add component MOOSE objects.
Definition Simulation.C:738

Referenced by AddComponentMooseObjectsAction::act().

◆ addRelationshipManagers()

void Simulation::addRelationshipManagers ( )

Add additional relationship managers to run the simulation.

Definition at line 745 of file Simulation.C.

746{
747 {
748 const std::string class_name = "AugmentSparsityBetweenElements";
749 auto params = _thm_factory.getValidParams(class_name);
750 params.set<Moose::RelationshipManagerType>("rm_type") =
751 Moose::RelationshipManagerType::COUPLING | Moose::RelationshipManagerType::ALGEBRAIC |
752 Moose::RelationshipManagerType::GEOMETRIC;
753 params.set<std::string>("for_whom") = _fe_problem.name();
754 params.set<MooseMesh *>("mesh") = &_thm_mesh;
755 params.set<std::map<dof_id_type, std::vector<dof_id_type>> *>("_elem_map") =
757 auto rm =
758 _thm_factory.create<RelationshipManager>(class_name, "thm:sparsity_btw_elems", params);
760 _thm_factory.releaseSharedObjects(*rm);
761 }
762
763 for (auto && comp : _components)
765 Moose::RelationshipManagerType::ALGEBRAIC |
766 Moose::RelationshipManagerType::GEOMETRIC);
767}
bool addRelationshipManager(std::shared_ptr< RelationshipManager > relationship_manager)
const std::string & name() const
void addRelationshipManagers()
Add additional relationship managers to run the simulation.
Definition Simulation.C:745
std::map< dof_id_type, std::vector< dof_id_type > > _sparsity_elem_augmentation
Additional sparsity pattern that needs to be added into the Jacobian matrix.
Definition Simulation.h:471
RelationshipManagerType

Referenced by THMAddRelationshipManagersAction::act().

◆ addScreenOutputter()

void Simulation::addScreenOutputter ( const std::string &  name)

Definition at line 1042 of file Simulation.C.

1043{
1044 _outputters_all.push_back(name);
1045 _outputters_screen.push_back(name);
1046}
std::vector< OutputName > _outputters_screen
Definition Simulation.h:457

Referenced by THMSetupOutputAction::act().

◆ addSimInitialCondition()

void Simulation::addSimInitialCondition ( const std::string &  type,
const std::string &  name,
InputParameters  params 
)

◆ addSimVariable() [1/3]

void Simulation::addSimVariable ( bool  nl,
const std::string &  var_type,
const VariableName &  name,
const InputParameters params 
)

Queues a generic variable to be added to the nonlinear or aux system.

Parameters
[in]nlTrue if this is a nonlinear (solution) variable
[in]var_typeType (class) of the variable
[in]nameName of the variable
[in]paramsInput parameters for the variable

Definition at line 405 of file Simulation.C.

409{
411
412 if (_vars.find(name) == _vars.end()) // variable is new
413 {
414 VariableInfo vi;
415 vi._nl = nl;
416 vi._var_type = var_type;
417 vi._params = params;
418
419 _vars[name] = vi;
420 }
421 else // variable was previously added
422 {
423 VariableInfo & vi = _vars[name];
424 InputParameters & vi_params = vi._params;
425
426 if (vi._nl != nl)
427 mooseError("The variable '",
428 name,
429 "' has already been added in a different system (nonlinear or aux).");
430
431 if (vi._var_type != var_type)
432 mooseError("The variable '",
433 name,
434 "' has already been added with a different type than '",
435 var_type,
436 "'.");
437
438 // Check that all valid parameters (other than 'block') are consistent
439 for (auto it = params.begin(); it != params.end(); it++)
440 {
441 const std::string param_name = it->first;
442 if (param_name == "block")
443 {
444 if (vi_params.isParamValid("block"))
445 {
446 auto blocks = vi_params.get<std::vector<SubdomainName>>("block");
447 const auto new_blocks = params.get<std::vector<SubdomainName>>("block");
448 for (const auto & subdomain_name : new_blocks)
449 if (std::find(blocks.begin(), blocks.end(), subdomain_name) == blocks.end())
450 blocks.push_back(subdomain_name);
451 vi_params.set<std::vector<SubdomainName>>("block") = blocks;
452 }
453 else
454 mooseError("The variable '", name, "' was added previously without block restriction.");
455 }
456 else if (params.isParamValid(param_name))
457 {
458 if (vi_params.isParamValid(param_name))
459 {
460 if (params.rawParamVal(param_name) != vi_params.rawParamVal(param_name))
461 mooseError("The variable '",
462 name,
463 "' was added previously with a different value for the parameter '",
464 param_name,
465 "'.");
466 }
467 else
468 mooseError("The variable '",
469 name,
470 "' was added previously without the parameter '",
471 param_name,
472 "'.");
473 }
474 }
475 }
476}
char ** blocks
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
std::string rawParamVal(const std::string &param) const
bool isParamValid(const std::string &name) const
std::map< VariableName, VariableInfo > _vars
variables for this simulation (name and info about the var)
Definition Simulation.h:412
void checkVariableNameLength(const std::string &name) const
Reports an error if the variable name is too long.
Definition Simulation.C:479
KOKKOS_INLINE_FUNCTION const T * find(const T &target, const T *const begin, const T *const end)
if(subdm)

◆ addSimVariable() [2/3]

void Simulation::addSimVariable ( bool  nl,
const VariableName &  name,
libMesh::FEType  fe_type,
const std::vector< SubdomainName > &  subdomain_names,
Real  scaling_factor = 1.0 
)

Queues a variable of type MooseVariable to be added to the nonlinear or aux system.

Parameters
[in]nlTrue if this is a nonlinear (solution) variable
[in]nameName of the variable
[in]fe_typeFEType of the variable
[in]subdomain_namesList of subdomain names to add the variable to
[in]scaling_factorScaling factor for the variable

Definition at line 314 of file Simulation.C.

319{
321
322 if (fe_type.family == SCALAR)
324 "The version of Simulation::addSimVariable() with subdomain names can no longer be used "
325 "with scalar variables since scalar variables cannot be block-restricted. Use the version "
326 "of Simulation::addSimVariable() without subdomain names instead.");
327
328#ifdef DEBUG
329 for (const auto & subdomain_name : subdomain_names)
330 mooseAssert(subdomain_name != "ANY_BLOCK_ID",
331 "'ANY_BLOCK_ID' cannot be used for adding field variables in components.");
332#endif
333
334 if (_vars.find(name) == _vars.end()) // variable is new
335 {
336 VariableInfo vi;
337 InputParameters & params = vi._params;
338
339 vi._nl = nl;
340 vi._var_type = "MooseVariable";
341 params = _thm_factory.getValidParams(vi._var_type);
342 params.set<std::vector<SubdomainName>>("block") = subdomain_names;
343
345 family = Utility::enum_to_string(fe_type.family);
346 params.set<MooseEnum>("family") = family;
347
349 order = Utility::enum_to_string<Order>(fe_type.order);
350 params.set<MooseEnum>("order") = order;
351
352 if (nl)
353 params.set<std::vector<Real>>("scaling") = {scaling_factor};
354 else if (!MooseUtils::absoluteFuzzyEqual(scaling_factor, 1.0))
355 mooseError("Aux variables cannot be provided a residual scaling factor.");
356
357 _vars[name] = vi;
358 }
359 else // variable was previously added
360 {
361 VariableInfo & vi = _vars[name];
362 InputParameters & params = vi._params;
363
364 if (vi._nl != nl)
365 mooseError("The variable '",
366 name,
367 "' has already been added in a different system (nonlinear or aux).");
368
369 if (vi._var_type != "MooseVariable")
370 mooseError("The variable '",
371 name,
372 "' has already been added with a different type than 'MooseVariable'.");
373
375 family = Utility::enum_to_string(fe_type.family);
376 if (!params.get<MooseEnum>("family").compareCurrent(family))
377 mooseError("The variable '", name, "' has already been added with a different FE family.");
378
380 order = Utility::enum_to_string<Order>(fe_type.order);
381 if (!params.get<MooseEnum>("order").compareCurrent(order))
382 mooseError("The variable '", name, "' has already been added with a different FE order.");
383
384 // If already block-restricted, extend the block restriction
385 if (params.isParamValid("block"))
386 {
387 auto blocks = params.get<std::vector<SubdomainName>>("block");
388 for (const auto & subdomain_name : subdomain_names)
389 if (std::find(blocks.begin(), blocks.end(), subdomain_name) == blocks.end())
390 blocks.push_back(subdomain_name);
391 params.set<std::vector<SubdomainName>>("block") = blocks;
392 }
393 else
394 params.set<std::vector<SubdomainName>>("block") = subdomain_names;
395
396 if (params.isParamValid("scaling"))
397 if (!MooseUtils::absoluteFuzzyEqual(params.get<std::vector<Real>>("scaling")[0],
398 scaling_factor))
400 "The variable '", name, "' has already been added with a different scaling factor.");
401 }
402}
void mooseDeprecated(Args &&... args)
static MooseEnum getNonlinearVariableFamilies()
static MooseEnum getNonlinearVariableOrders()
std::map< std::string, Metadata > _params
bool compareCurrent(const MooseEnum &other, CompareMode mode=CompareMode::COMPARE_NAME) const
OrderWrapper order
std::string enum_to_string(const T e)

◆ addSimVariable() [3/3]

void Simulation::addSimVariable ( bool  nl,
const VariableName &  name,
libMesh::FEType  fe_type,
Real  scaling_factor = 1.0 
)

Queues a variable of type MooseVariableScalar to be added to the nonlinear or aux system.

Parameters
[in]nlTrue if this is a nonlinear (solution) variable
[in]nameName of the variable
[in]fe_typeFEType of the variable
[in]scaling_factorScaling factor for the variable

Definition at line 271 of file Simulation.C.

272{
274
275 if (fe_type.family != SCALAR)
276 mooseError("This method should only be used for scalar variables.");
277
278 if (_vars.find(name) == _vars.end()) // variable is new
279 {
280 VariableInfo vi;
281 InputParameters & params = vi._params;
282
283 vi._nl = nl;
284 vi._var_type = "MooseVariableScalar";
285 params = _thm_factory.getValidParams(vi._var_type);
286
288 family = Utility::enum_to_string(fe_type.family);
289 params.set<MooseEnum>("family") = family;
290
292 order = Utility::enum_to_string<Order>(fe_type.order);
293 params.set<MooseEnum>("order") = order;
294
295 if (nl)
296 params.set<std::vector<Real>>("scaling") = {scaling_factor};
297 else if (!MooseUtils::absoluteFuzzyEqual(scaling_factor, 1.0))
298 mooseError("Aux variables cannot be provided a residual scaling factor.");
299
300 _vars[name] = vi;
301 }
302 else
303 // One of the two cases is true:
304 // - This variable was previously added as a scalar variable, and scalar
305 // variables should not be added more than once, since there is no block
306 // restriction to extend, as there is in the field variable version of this
307 // method.
308 // - This variable was previously added as a field variable, and a variable
309 // may have only one type (this method is used for scalar variables only).
310 mooseError("The variable '", name, "' was already added.");
311}

Referenced by FlowModel::addCommonVariables(), HeatTransferBase::addHeatedPerimeter(), HeatConductionModel::addVariables(), FlowModel1PhaseBase::addVariables(), FlowModelGasMix::addVariables(), FlowModelSinglePhase::addVariables(), FormLossFromExternalApp1Phase::addVariables(), HeatTransferFromExternalAppHeatFlux1Phase::addVariables(), HeatTransferFromHeatStructure3D1Phase::addVariables(), HeatTransferFromTemperature1Phase::addVariables(), HSBoundaryExternalAppConvection::addVariables(), HSBoundaryExternalAppHeatFlux::addVariables(), HSBoundaryExternalAppTemperature::addVariables(), Shaft::addVariables(), and TotalPowerBase::addVariables().

◆ addVariables()

void Simulation::addVariables ( )
virtual

Add variables involved in this simulation.

Definition at line 634 of file Simulation.C.

635{
636 TransientBase * trex = dynamic_cast<TransientBase *>(getApp().getExecutioner());
637 if (trex)
638 {
640 // This is only needed for the listed time integrators that are using the original approach to
641 // explicit integration in MOOSE. Currently, the new time integrators like
642 // ActuallyExplicitEuler do not need the implicit flag to be set.
643 if (ti_type == Moose::TI_EXPLICIT_TVD_RK_2 || ti_type == Moose::TI_EXPLICIT_MIDPOINT ||
644 ti_type == Moose::TI_EXPLICIT_EULER)
646 }
647
648 if (_components.size() == 0)
649 return;
650
651 // Cache the variables that components request to add
652 for (auto && comp : _components)
653 comp->addVariables();
654
655 // Sort the variables for a consistent ordering
656 const auto var_names = sortAddedComponentVariables();
657
658 // Report the ordering if the executioner is verbose
659 if (_fe_problem.getParam<MooseEnum>("verbose_setup") != "false")
660 {
661 std::stringstream ss;
662 ss << "The system ordering of variables added by Components is as follows:\n";
663 for (const auto & var : var_names)
664 ss << " " << var << "\n";
665 mooseInfo(ss.str());
666 }
667
668 // Add the variables to the problem
669 for (const auto & name : var_names)
670 {
671 VariableInfo & vi = _vars[name];
672
673 if (vi._nl)
674 _fe_problem.addVariable(vi._var_type, name, vi._params);
675 else
676 _fe_problem.addAuxVariable(vi._var_type, name, vi._params);
677 }
678
681 else
683}
void mooseInfo(Args &&... args)
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
Executioner * getExecutioner() const
const T & getParam(const std::string &name) const
ThermalHydraulicsApp & getApp()
Get the ThermalHydraulicsApp.
Definition Simulation.h:245
virtual void addVariables()
Add variables involved in this simulation.
Definition Simulation.C:634
std::vector< VariableName > sortAddedComponentVariables() const
Returns a sorted list of the variables added by components.
Definition Simulation.C:578
void setupInitialConditionObjects()
Definition Simulation.C:727
void setupInitialConditionsFromFile()
Setup reading initial conditions from a specified file, see 'initial_from_file' and 'initial_from_fil...
Definition Simulation.C:686
Moose::TimeIntegratorType getTimeScheme() const
TimeIntegratorType
TI_EXPLICIT_EULER
TI_EXPLICIT_TVD_RK_2
TI_EXPLICIT_MIDPOINT

Referenced by THMAddVariablesAction::act().

◆ advanceState()

void Simulation::advanceState ( )
virtual

Advance all of the state holding vectors / datastructures so that we can move to the next timestep.

Reimplemented in THMProblem.

Definition at line 1076 of file Simulation.C.

1077{
1078 for (auto && i : _control_data)
1079 i.second->copyValuesBack();
1080}

Referenced by THMProblem::advanceState(), and THMProblem::copySolutionsBackwards().

◆ augmentSparsity()

void Simulation::augmentSparsity ( const dof_id_type elem_id1,
const dof_id_type elem_id2 
)
virtual

Hint how to augment sparsity pattern between two elements.

The augmentation will be symmetric

Definition at line 71 of file Simulation.C.

72{
73 auto it = _sparsity_elem_augmentation.find(elem_id1);
74 if (it == _sparsity_elem_augmentation.end())
76 {elem_id1, std::vector<dof_id_type>()});
77 it->second.push_back(elem_id2);
78
79 it = _sparsity_elem_augmentation.find(elem_id2);
80 if (it == _sparsity_elem_augmentation.end())
82 {elem_id2, std::vector<dof_id_type>()});
83 it->second.push_back(elem_id1);
84}

Referenced by GateValve1Phase::setupMesh(), HeatStructure2DCouplerBase::setupMesh(), HeatTransferFromHeatStructure1Phase::setupMesh(), HeatTransferFromHeatStructure3D1Phase::setupMesh(), HSCoupler2D2DRadiation::setupMesh(), HSCoupler2D3D::setupMesh(), JunctionOneToOne1Phase::setupMesh(), and VolumeJunction1Phase::setupMesh().

◆ buildMesh()

void Simulation::buildMesh ( )
virtual

Create mesh for this simulation.

Definition at line 87 of file Simulation.C.

88{
89 if (_components.size() == 0)
90 return;
91
92 // build mesh
93 for (auto && comp : _components)
94 comp->executeSetupMesh();
95}

Referenced by THMBuildMeshAction::act().

◆ checkVariableNameLength()

void Simulation::checkVariableNameLength ( const std::string &  name) const

Reports an error if the variable name is too long.

Definition at line 479 of file Simulation.C.

480{
481 if (name.size() > THM::MAX_VARIABLE_LENGTH)
483 "Variable name '", name, "' is too long. The limit is ", THM::MAX_VARIABLE_LENGTH, ".");
484}
static const size_t MAX_VARIABLE_LENGTH

Referenced by addSimVariable(), addSimVariable(), and addSimVariable().

◆ controlDataIntegrityCheck()

void Simulation::controlDataIntegrityCheck ( )
virtual

Check the integrity of the control data.

Definition at line 911 of file Simulation.C.

912{
913 if (_check_jacobian)
914 return;
915
916 // check that control data are consistent
917 for (auto && i : _control_data)
918 {
919 if (!i.second->getDeclared())
920 logError("Control data '",
921 i.first,
922 "' was requested, but was not declared by any active control object.");
923 }
924
926
928
929 // initialize THM control objects
930 for (auto && i : ctrl_wh.getObjects())
931 {
932 THMControl * ctrl = dynamic_cast<THMControl *>(i.get());
933 if (ctrl != nullptr)
934 ctrl->init();
935 }
936
937 for (auto && i : ctrl_wh.getObjects())
938 {
939 THMControl * ctrl = dynamic_cast<THMControl *>(i.get());
940 // if it is a THM control
941 if (ctrl != nullptr)
942 {
943 // get its dependencies on control data
944 auto & cd_deps = ctrl->getControlDataDependencies();
945 for (auto && cd_name : cd_deps)
946 {
947 ControlDataValue * cdv = _control_data[cd_name];
948 // find out which control object built the control data
949 std::string dep_name = cdv->getControl()->name();
950 auto & deps = ctrl->getDependencies();
951 // and if it is not in its dependency list, add it
952 auto it = std::find(deps.begin(), deps.end(), dep_name);
953 if (it == deps.end())
954 deps.push_back(dep_name);
955 }
956 }
957 }
958
959 // Find all `TerminateControl`s and all their dependencies. Then add those
960 // objects into TIMESTEP_END control warehouse
961 MooseObjectWarehouse<Control> & ctrl_wh_tse =
963 for (auto && i : ctrl_wh.getObjects())
964 {
965 if (TerminateControl * ctrl = dynamic_cast<TerminateControl *>(i.get()))
966 {
967 std::list<const THMControl *> l;
968 l.push_back(ctrl);
969 while (l.size() > 0)
970 {
971 const THMControl * ctrl = l.front();
972 auto & cd_deps = ctrl->getControlDataDependencies();
973 for (auto && cd_name : cd_deps)
974 {
975 ControlDataValue * cdv = _control_data[cd_name];
976 l.push_back(cdv->getControl());
977 }
978 ctrl_wh_tse.addObject(ctrl_wh.getObject(ctrl->name()));
979 l.pop_front();
980 }
981 }
982 }
983}
const ExecFlagType EXEC_TIMESTEP_END
const ExecFlagType EXEC_TIMESTEP_BEGIN
Abstract definition of a ControlData value.
Definition ControlData.h:21
const THMControl * getControl() const
Get the pointer to the control object that declared this control data.
Definition ControlData.h:55
std::vector< std::string > & getDependencies()
void emitLoggedErrors() const
Calls mooseError if there are any logged errors.
Definition Logger.C:21
virtual void addObject(std::shared_ptr< T > object, THREAD_ID tid=0, bool recurse=true) override
virtual void init()
Definition THMControl.h:21
const std::vector< std::string > & getControlDataDependencies() const
Return the Controls that must run before this Control.
Definition THMControl.h:26
This control block will terminate a run if its input indicates so.

Referenced by ControlDataIntegrityCheckAction::act().

◆ couplingMatrixIntegrityCheck()

void Simulation::couplingMatrixIntegrityCheck ( ) const
virtual

Check integrity of coupling matrix used by the preconditioner.

Definition at line 807 of file Simulation.C.

808{
810 return;
811
812 const TimeIntegrator * ti = nullptr;
813 const auto & time_integrators =
815 if (!time_integrators.empty())
816 ti = time_integrators.front().get();
817 // Yes, this is horrible. Don't ask why...
818 if ((dynamic_cast<const ExplicitTimeIntegrator *>(ti) != nullptr) ||
819 (dynamic_cast<const ExplicitEuler *>(ti) != nullptr) ||
820 (dynamic_cast<const ExplicitRK2 *>(ti) != nullptr) ||
821 (dynamic_cast<const ExplicitTVDRK2 *>(ti) != nullptr))
822 return;
823
824 const CouplingMatrix * cm = _fe_problem.couplingMatrix(/*nl_sys_num=*/0);
825 if (cm == nullptr)
826 mooseError("Coupling matrix does not exists. Something really bad happened.");
827
828 bool full = true;
829 for (unsigned int i = 0; i < cm->size(); i++)
830 for (unsigned int j = 0; j < cm->size(); j++)
831 full &= (*cm)(i, j);
832
833 if (!full)
835 "Single matrix preconditioning with full coupling is required to run. Please, check that "
836 "your input file has the following preconditioning block:\n\n"
837 "[Preconditioning]\n"
838 " [pc]\n"
839 " type = SMP\n"
840 " full = true\n"
841 " []\n"
842 "[].\n");
843}
bool shouldSolve() const
const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
const std::vector< std::shared_ptr< TimeIntegrator > > & getTimeIntegrators()
std::size_t size() const

Referenced by THMPreconditioningIntegrityCheckAction::act().

◆ declareControlData()

template<typename T >
ControlData< T > * Simulation::declareControlData ( const std::string &  name,
THMControl ctrl 
)
inline

Declare control data of type T and name 'name', if it does not exist it will be created.

Parameters
nameThe unique name of the control data
Returns
Pointer to the control data of type T

Definition at line 311 of file Simulation.h.

312 {
313 ControlData<T> * data = getControlData<T>(name);
314 if (!data->getDeclared())
315 {
316 // Mark the data for error checking
317 data->setDeclared();
318 data->setControl(ctrl);
319 }
320 else
321 logError("Trying to declare '", name, "', but it was already declared.");
322
323 return data;
324 }
bool getDeclared()
Get the declared state.
Definition ControlData.h:70
void setControl(THMControl *ctrl)
Set the pointer to the control object that declared this control data.
Definition ControlData.h:60
void setDeclared()
Mark the data as declared.
Definition ControlData.h:65
Concrete definition of a parameter value for a specified type.
Definition ControlData.h:92

Referenced by THMControl::declareComponentControlData(), and THMControl::declareControlData().

◆ genName() [1/4]

std::string NamingInterface::genName ( const std::string &  prefix,
const std::string &  middle,
const std::string &  suffix = "" 
) const
inlineinherited

Build a name from strings.

Definition at line 66 of file NamingInterface.h.

69 {
70 std::stringstream ss;
71 ss << prefix << ":" << middle;
72 if (!suffix.empty())
73 ss << ":" << suffix;
74 return ss.str();
75 }

◆ genName() [2/4]

std::string NamingInterface::genName ( const std::string &  prefix,
const std::string &  name,
unsigned int  i 
) const
inlineinherited

Build a name from 2 strings and a number.

Definition at line 56 of file NamingInterface.h.

57 {
58 std::stringstream ss;
59 ss << prefix << ":" << name << ":" << i;
60 return ss.str();
61 }

◆ genName() [3/4]

std::string NamingInterface::genName ( const std::string &  prefix,
unsigned int  i,
unsigned int  j,
const std::string &  suffix = "" 
) const
inlineinherited

Build a name from a prefix, 2 numbers and possible suffix.

Definition at line 41 of file NamingInterface.h.

45 {
46 std::stringstream ss;
47 ss << prefix << ":" << i << ":" << j;
48 if (!suffix.empty())
49 ss << ":" << suffix;
50 return ss.str();
51 }

◆ genName() [4/4]

std::string NamingInterface::genName ( const std::string &  prefix,
unsigned int  id,
const std::string &  suffix = "" 
) const
inlineinherited

Build a name from a prefix, number and possible suffix.

Definition at line 29 of file NamingInterface.h.

30 {
31 std::stringstream ss;
32 ss << prefix << ":" << id;
33 if (!suffix.empty())
34 ss << ":" << suffix;
35 return ss.str();
36 }

Referenced by Closures1PhaseBase::addAverageWallTemperatureMaterial(), FlowModel::addCommonInitialConditions(), FlowModel::addCommonMooseObjects(), FlowChannelBase::addCommonObjects(), addComponentScalarIC(), HeatStructureBase::addConstantDensitySolidPropertiesMaterial(), addConstantIC(), addConstantScalarIC(), FlowModel1PhaseBase::addDensityAux(), FlowModelGasMix::addDensityIC(), FlowModelSinglePhase::addDensityIC(), FlowModel1PhaseBase::addEnergyGravityKernel(), FlowChannel1Phase::addFlowChannel1PhaseFunctorMaterial(), FlowModelGasMix::addFluidPropertiesMaterials(), FlowModelSinglePhase::addFluidPropertiesMaterials(), VolumeJunctionCoupledFlux1Phase::addFluxTransfer(), FlowModel1PhaseBase::addFunctionIC(), addFunctionIC(), FlowModel1PhaseBase::addHeatConductionDGKernel(), HeatTransferBase::addHeatedPerimeter(), HeatConductionModel::addHeatEquationRZ(), HeatConductionModel::addHeatEquationXYZ(), HeatTransferFromTemperature1Phase::addHeatTransferKernels(), FlowChannel1PhaseBase::addHydraulicDiameterMaterial(), FlowModelGasMix::addMassDiffusionEnergyDGKernel(), FlowModelGasMix::addMassDiffusionSpeciesDGKernel(), FlowModelGasMix::addMassFractionAux(), FlowModel1PhaseBase::addMomentumAreaGradientKernel(), FlowModel1PhaseBase::addMomentumFrictionKernel(), FlowModel1PhaseBase::addMomentumGravityKernel(), FlowChannel1Phase::addMooseObjects(), FlowChannelBase::addMooseObjects(), FormLoss1PhaseBase::addMooseObjects(), FormLossFromExternalApp1Phase::addMooseObjects(), FormLossFromFunction1Phase::addMooseObjects(), GateValve1Phase::addMooseObjects(), HeatSourceFromPowerDensity::addMooseObjects(), HeatSourceFromTotalPower::addMooseObjects(), HeatSourceVolumetric1Phase::addMooseObjects(), HeatStructure2DCoupler::addMooseObjects(), HeatStructure2DRadiationCouplerRZ::addMooseObjects(), HeatTransferBase::addMooseObjects(), HeatTransferFromExternalAppHeatFlux1Phase::addMooseObjects(), HeatTransferFromHeatFlux1Phase::addMooseObjects(), HeatTransferFromHeatStructure1Phase::addMooseObjects(), HeatTransferFromHeatStructure3D1Phase::addMooseObjects(), HeatTransferFromSpecifiedTemperature1Phase::addMooseObjects(), HSBoundaryAmbientConvection::addMooseObjects(), HSBoundaryExternalAppConvection::addMooseObjects(), HSBoundaryExternalAppHeatFlux::addMooseObjects(), HSBoundaryExternalAppTemperature::addMooseObjects(), HSBoundaryHeatFlux::addMooseObjects(), HSBoundaryRadiation::addMooseObjects(), HSBoundarySpecifiedTemperature::addMooseObjects(), HSCoupler2D2DRadiation::addMooseObjects(), HSCoupler2D3D::addMooseObjects(), InletVelocityTemperature1Phase::addMooseObjects(), JunctionOneToOne1Phase::addMooseObjects(), Shaft::addMooseObjects(), ShaftConnectedCompressor1Phase::addMooseObjects(), ShaftConnectedPump1Phase::addMooseObjects(), ShaftConnectedTurbine1Phase::addMooseObjects(), SimpleTurbine1Phase::addMooseObjects(), TotalPower::addMooseObjects(), VolumeJunction1Phase::addMooseObjects(), FunctorClosures::addMooseObjectsFlowChannel(), Closures1PhaseSimple::addMooseObjectsHeatTransfer(), Component::addNonlinearStepFunctorMaterial(), FlowChannel1Phase::addNormalized1PhaseResidualNorm(), FlowModelSinglePhase::addPassiveTransportIC(), FlowModelGasMix::addPressureAux(), FlowModelSinglePhase::addPressureAux(), VolumeJunctionCoupledFlux1Phase::addPropertyTransfer(), FlowModelGasMix::addRDGAdvectionDGKernels(), FlowModelSinglePhase::addRDGAdvectionDGKernels(), FlowModel1PhaseBase::addRhoAIC(), FlowModelGasMix::addRhoEAIC(), FlowModelSinglePhase::addRhoEAIC(), FlowModel1PhaseBase::addRhoUAIC(), FlowModelGasMix::addSlopeReconstructionMaterial(), FlowModelSinglePhase::addSlopeReconstructionMaterial(), FlowModel1PhaseBase::addSpecificInternalEnergyAux(), FlowModel1PhaseBase::addSpecificInternalEnergyIC(), FlowModel1PhaseBase::addSpecificTotalEnthalpyAux(), FlowModel1PhaseBase::addSpecificTotalEnthalpyIC(), FlowModel1PhaseBase::addSpecificVolumeAux(), FlowModel1PhaseBase::addSpecificVolumeIC(), FlowModelGasMix::addTemperatureAux(), FlowModelSinglePhase::addTemperatureAux(), FlowModel1PhaseBase::addTimeDerivativeKernelIfTransient(), FlowChannelBase::addVariables(), FlowModel1PhaseBase::addVelocityAux(), FlowModel1PhaseBase::addVelocityIC(), VolumeJunction1Phase::addVolumeJunctionIC(), VolumeJunctionCoupledFlux1Phase::addVolumeJunctionKernel(), Closures1PhaseTHM::addWallFFMaterial(), Closures1PhaseBase::addWallFrictionFunctionMaterial(), Closures1PhaseTHM::addWallHTCMaterial(), ClosuresBase::addWallTemperatureFromAuxMaterial(), Closures1PhaseSimple::addWallTemperatureFromHeatFluxMaterial(), FlowBoundary1Phase::addWeakBCs(), FlowBoundaryGasMix::addWeakBCs(), ClosuresBase::addWeightedAverageMaterial(), FlowModelGasMix::addXiRhoAIC(), ClosuresBase::addZeroMaterial(), FileMeshComponent::buildMesh(), Component1D::buildMesh(), Component2D::buildMesh(), HeatSourceBase::HeatSourceBase(), Component::nonlinearConvergenceName(), and setupInitialConditionsFromFile().

◆ genSafeName()

std::string NamingInterface::genSafeName ( const std::string &  prefix,
const std::string &  middle,
const std::string &  suffix = "" 
) const
inlineinherited

Build a name from strings that is safe to use in input files (i.e.

can be exposed to users)

Definition at line 80 of file NamingInterface.h.

83 {
84 std::stringstream ss;
85 ss << prefix << "_" << middle;
86 if (!suffix.empty())
87 ss << "_" << suffix;
88 return ss.str();
89 }

Referenced by HSBoundaryAmbientConvection::addMooseObjects(), HSBoundaryExternalAppConvection::addMooseObjects(), HSBoundaryExternalAppHeatFlux::addMooseObjects(), HSBoundaryHeatFlux::addMooseObjects(), and HSBoundaryRadiation::addMooseObjects().

◆ getApp()

ThermalHydraulicsApp & Simulation::getApp ( )
inline

Get the ThermalHydraulicsApp.

Definition at line 245 of file Simulation.h.

245{ return _thm_app; }

Referenced by addVariables().

◆ getClosures()

std::shared_ptr< ClosuresBase > Simulation::getClosures ( const std::string &  name) const

Get a pointer to a closures object.

Parameters
[in]nameClosures object name

Definition at line 1025 of file Simulation.C.

1026{
1027 auto it = _closures_by_name.find(name);
1028 if (it != _closures_by_name.end())
1029 return it->second;
1030 else
1031 mooseError("The requested closures object '", name, "' does not exist.");
1032}

Referenced by FlowChannelBase::init().

◆ getComponentByName()

template<typename T >
const T & Simulation::getComponentByName ( const std::string &  name) const

Get component by its name.

Template Parameters
Tthe type of the component we are requesting
Parameters
nameThe name of the component
Returns
Pointer to the component if found, otherwise throws and error

Definition at line 504 of file Simulation.h.

505{
506 auto it = _comp_by_name.find(name);
507 if (it != _comp_by_name.end())
508 return *dynamic_cast<T *>((it->second).get());
509 else
510 mooseError("Component '",
511 name,
512 "' does not exist in the simulation. Use hasComponent or "
513 "checkComponnetByName before calling getComponent.");
514}
const double T
const Elem & get(const ElemType type_in)

Referenced by VolumeJunctionCoupledFlux1Phase::addFluxPostprocessor(), VolumeJunctionCoupledFlux1Phase::addVolumeJunctionKernel(), Component::getComponentByName(), Component1DConnection::init(), FlowBoundary::init(), FlowBoundary1PhaseBase::init(), FlowJunction::init(), and FlowJunction1Phase::init().

◆ getComponents()

const std::vector< std::shared_ptr< Component > > & Simulation::getComponents ( ) const
inline

Return list of components available in the simulation.

Definition at line 117 of file Simulation.h.

117{ return _components; }

Referenced by ComponentsConvergence::initialSetup(), and ParaviewComponentAnnotationMap::output().

◆ getControlData()

template<typename T >
ControlData< T > * Simulation::getControlData ( const std::string &  name)
inline

Get control data of type T and name 'name', if it does not exist it will be created.

Parameters
nameThe unique name of the control data
Returns
Pointer to the control data of type T

Definition at line 290 of file Simulation.h.

291 {
292 ControlData<T> * data = nullptr;
293 if (_control_data.find(name) == _control_data.end())
294 {
295 data = new ControlData<T>(_thm_app, name);
296 _control_data[name] = data;
297 }
298 else
299 data = dynamic_cast<ControlData<T> *>(_control_data[name]);
300
301 return data;
302 }

Referenced by BoolControlDataValuePostprocessor::BoolControlDataValuePostprocessor(), THMControl::getControlDataByName(), THMControl::getControlDataOldByName(), THMParsedFunctionWrapper::initialize(), and RealControlDataValuePostprocessor::RealControlDataValuePostprocessor().

◆ getFlowFEType()

const libMesh::FEType & Simulation::getFlowFEType ( ) const
inline

Gets the FE type for the flow in this simulation.

Definition at line 48 of file Simulation.h.

48{ return _flow_fe_type; }

Referenced by setupQuadrature().

◆ getImplicitTimeIntegrationFlag()

const bool & Simulation::getImplicitTimeIntegrationFlag ( )
inline

◆ getOutputsVector()

std::vector< OutputName > Simulation::getOutputsVector ( const std::string &  key) const

Gets the vector of output names corresponding to a 1-word key string.

Parameters
[in]keystring key that corresponds to an output names vector
Returns
output names vector corresponding to key

Definition at line 1049 of file Simulation.C.

1050{
1051 std::string key_lowercase = key;
1052 std::transform(key_lowercase.begin(), key_lowercase.end(), key_lowercase.begin(), ::tolower);
1053
1054 std::vector<OutputName> outputs;
1055 if (key_lowercase == "none")
1056 outputs.push_back("none"); // provide non-existent name, so it does not get printed out
1057 else if (key_lowercase == "screen")
1058 outputs = _outputters_screen;
1059 else if (key_lowercase == "file")
1060 outputs = _outputters_file;
1061 else if (key_lowercase == "both")
1062 outputs = _outputters_all;
1063 else
1064 mooseError("The outputs vector key '" + key_lowercase + "' is invalid");
1065
1066 return outputs;
1067}

◆ getVectorValuedVelocity()

bool Simulation::getVectorValuedVelocity ( )
inline

Is velocity output as vector-valued field.

Returns
true for vector-valued field, false for scalar

Definition at line 359 of file Simulation.h.

359{ return _output_vector_velocity; }

Referenced by FlowChannel1PhaseBase::buildFlowModel().

◆ hasClosures()

bool Simulation::hasClosures ( const std::string &  name) const

Return whether the simulation has a closures object.

Parameters
[in]nameClosures object name

Definition at line 1019 of file Simulation.C.

1020{
1021 return _closures_by_name.find(name) != _closures_by_name.end();
1022}

◆ hasComponent()

bool Simulation::hasComponent ( const std::string &  name) const

Find out if simulation has a component with the given name.

Parameters
nameThe name of the component
Returns
true if the components exists, otherwise false

Definition at line 1002 of file Simulation.C.

1003{
1004 auto it = _comp_by_name.find(name);
1005 return (it != _comp_by_name.end());
1006}

Referenced by Component::checkComponentExistsByName(), Component::checkComponentOfTypeExistsByName(), and initSimulation().

◆ hasComponentOfType()

template<typename T >
bool Simulation::hasComponentOfType ( const std::string &  name) const

Find out if simulation has a component with the given name and specified type.

Template Parameters
Tthe type of the component we are requesting
Parameters
nameThe name of the component
Returns
true if the component exists and has specified type, otherwise false

Definition at line 493 of file Simulation.h.

494{
495 auto it = _comp_by_name.find(name);
496 if (it != _comp_by_name.end())
497 return dynamic_cast<T *>((it->second).get()) != nullptr;
498 else
499 return false;
500}

Referenced by Component::checkComponentOfTypeExistsByName(), and Component::hasComponentByName().

◆ hasControlData()

template<typename T >
bool Simulation::hasControlData ( const std::string &  name)
inline

Query if control data with name 'name' exists.

Parameters
nameThe unique name of the control data
Returns
true if control data 'name' exists, false otherwise

Definition at line 275 of file Simulation.h.

276 {
277 if (_control_data.find(name) == _control_data.end())
278 return false;
279 else
280 return dynamic_cast<ControlData<T> *>(_control_data[name]) != NULL;
281 }

Referenced by THMParsedFunctionWrapper::initialize().

◆ hasInitialConditionsFromFile()

bool Simulation::hasInitialConditionsFromFile ( ) const

Are initial conditions specified from a file.

Returns
true if initial conditions are specified from a file

Definition at line 1070 of file Simulation.C.

1071{
1072 return _thm_pars.isParamValid("initial_from_file");
1073}

Referenced by addComponentScalarIC(), addConstantIC(), addConstantScalarIC(), addFunctionIC(), addSimInitialCondition(), addVariables(), HeatStructureInterface::check(), FlowChannel1PhaseBase::check(), Shaft::check(), and VolumeJunction1Phase::check().

◆ identifyLoops()

void Simulation::identifyLoops ( )

Identifies the component loops.

Definition at line 164 of file Simulation.C.

165{
166 // loop over junctions and boundaries (non-geometrical components)
167 for (const auto & component : _components)
168 {
169 const auto flow_connection =
170 MooseSharedNamespace::dynamic_pointer_cast<Component1DConnection>(component);
171 if (flow_connection)
172 {
173 // create vector of names of this component and its connected flow channels, and then sort
174 // them
175 std::vector<std::string> names = flow_connection->getConnectedComponentNames();
176 names.push_back(component->name());
177 std::sort(names.begin(), names.end());
178
179 // pick first name alphabetically to be the proposed loop name
180 std::string proposed_loop_name = names[0];
181
182 for (const std::string & name : names)
183 {
184 // if the name is not yet in the map
186 // just add the new map key; nothing else needs updating
187 _component_name_to_loop_name[name] = proposed_loop_name;
188 else
189 {
190 // compare to the existing loop name for this component to make sure the
191 // proposed loop name is first alphabetically
192 const std::string current_loop_name = _component_name_to_loop_name[name];
193 // if proposed loop name comes later, change map values of the current
194 // loop name to be the proposed name, and then update the proposed name
195 // to be the current name
196 if (proposed_loop_name > current_loop_name)
197 {
198 for (auto && entry : _component_name_to_loop_name)
199 if (entry.second == proposed_loop_name)
200 entry.second = current_loop_name;
201 proposed_loop_name = current_loop_name;
202 }
203 // if proposed loop name comes earlier, change map values of the current
204 // loop name to be the proposed name
205 else if (proposed_loop_name < current_loop_name)
206 {
207 for (auto && entry : _component_name_to_loop_name)
208 if (entry.second == current_loop_name)
209 entry.second = proposed_loop_name;
210 }
211 }
212 }
213 }
214 }
215
216 // get the list of loops
217 std::vector<std::string> loops;
218 for (const auto & entry : _component_name_to_loop_name)
219 if (std::find(loops.begin(), loops.end(), entry.second) == loops.end())
220 loops.push_back(entry.second);
221
222 // fill the map of loop name to model ID
223 for (const auto & loop : loops)
224 {
225 // find a flow channel in this loop and get its model ID
226 THM::FlowModelID model_id;
227 bool found_model_id = false;
228 for (const auto & component : _components)
229 {
230 const auto flow_chan_base_component =
231 MooseSharedNamespace::dynamic_pointer_cast<FlowChannelBase>(component);
232 if (flow_chan_base_component && (_component_name_to_loop_name[component->name()] == loop))
233 {
234 model_id = flow_chan_base_component->getFlowModelID();
235 found_model_id = true;
236 break;
237 }
238 }
239 // set the value in the map or throw an error
240 if (found_model_id)
241 _loop_name_to_model_id[loop] = model_id;
242 else
243 logError("No FlowChannelBase-derived components were found in loop '", loop, "'");
244 }
245}
std::map< std::string, std::string > _component_name_to_loop_name
Map of component name to component loop name.
Definition Simulation.h:404
std::map< std::string, THM::FlowModelID > _loop_name_to_model_id
Map of loop name to model type.
Definition Simulation.h:406
T component(const RankTwoTensorTempl< T > &r2tensor, unsigned int i, unsigned int j)
unsigned int FlowModelID

Referenced by IdentifyLoopsAction::act().

◆ initComponents()

void Simulation::initComponents ( )
virtual

Initialize this simulation's components.

Definition at line 151 of file Simulation.C.

152{
153 // initialize components
154 for (auto && comp : _components)
155 comp->executeInit();
156
157 // perform secondary initialization, which relies on init() being called
158 // already for all components
159 for (auto && comp : _components)
160 comp->executeInitSecondary();
161}

Referenced by THMInitComponentsAction::act().

◆ initSimulation()

void Simulation::initSimulation ( )
virtual

Initialize this simulation.

Definition at line 135 of file Simulation.C.

136{
137 // sort the components using dependency resolver
139 for (const auto & comp : _components)
140 {
141 dependency_resolver.addNode(comp);
142 for (const auto & dep : comp->getDependencies())
143 if (hasComponent(dep))
144 dependency_resolver.addEdge(_comp_by_name[dep], comp);
145 }
146
147 _components = dependency_resolver.dfs();
148}
void addNode(const T &a)
const std::vector< T > & dfs()
bool hasComponent(const std::string &name) const
Find out if simulation has a component with the given name.

Referenced by THMInitSimulationAction::act().

◆ integrityCheck()

void Simulation::integrityCheck ( ) const
virtual

Check the integrity of the simulation.

Definition at line 846 of file Simulation.C.

847{
848 if (_components.size() == 0)
849 return;
850
851 if (_check_jacobian)
852 return;
853
854 // go over components and put flow channels into one "bucket"
855 std::vector<Component *> flow_channels;
856 for (auto && comp : _components)
857 {
858 auto flow_channel = dynamic_cast<FlowChannelBase *>(comp.get());
859 if (flow_channel != nullptr)
860 flow_channels.push_back(flow_channel);
861 }
862
863 // initialize number of connected flow channel inlets and outlets to zero
864 std::map<std::string, unsigned int> flow_channel_inlets;
865 std::map<std::string, unsigned int> flow_channel_outlets;
866 for (auto && comp : flow_channels)
867 {
868 flow_channel_inlets[comp->name()] = 0;
869 flow_channel_outlets[comp->name()] = 0;
870 }
871
872 // mark connections of any Component1DConnection components
873 for (const auto & comp : _components)
874 {
875 auto pc_comp = dynamic_cast<Component1DConnection *>(comp.get());
876 if (pc_comp != nullptr)
877 {
878 for (const auto & connection : pc_comp->getConnections())
879 {
880 if (connection._end_type == Component1DConnection::IN)
881 flow_channel_inlets[connection._component_name]++;
882 else if (connection._end_type == Component1DConnection::OUT)
883 flow_channel_outlets[connection._component_name]++;
884 }
885 }
886 }
887
888 // finally, check that each flow channel has exactly one input and one output
889 for (auto && comp : flow_channels)
890 {
891 if (flow_channel_inlets[comp->name()] == 0)
892 logError("Component '", comp->name(), "' does not have connected inlet.");
893 else if (flow_channel_inlets[comp->name()] > 1)
894 logError("Multiple inlets specified for component '", comp->name(), "'.");
895
896 if (flow_channel_outlets[comp->name()] == 0)
897 logError("Component '", comp->name(), "' does not have connected outlet.");
898 else if (flow_channel_outlets[comp->name()] > 1)
899 logError("Multiple outlets specified for component '", comp->name(), "'.");
900 }
901
902 // let components check themselves
903 for (auto && comp : _components)
904 comp->executeCheck();
905
908}
Base class for 1D component junctions and boundaries.
A base class for flow channels.
void emitLoggedWarnings() const
Calls mooseWarning if there are any logged warnings.
Definition Logger.C:35

Referenced by IntegrityCheckAction::act().

◆ log()

Logger & Simulation::log ( )
inline

Definition at line 338 of file Simulation.h.

338{ return _log; }

Referenced by AddClosuresAction::act().

◆ logComponentError()

template<typename... Args>
void LoggingInterface::logComponentError ( const std::string &  component_name,
Args &&...  args 
) const
inlineinherited

Logs an error for a component.

Parameters
[in]component_nameName of the component

Definition at line 47 of file LoggingInterface.h.

48 {
49 _log.add(Logger::ERROR, component_name, ": ", std::forward<Args>(args)...);
50 }
void add(EMessageType type, Args &&... args)
Add a message to the log.
Definition Logger.h:35
@ ERROR
Definition Logger.h:25

Referenced by Closures1PhaseSimple::checkFlowChannel(), Closures1PhaseSimple::checkHeatTransfer(), and Component::logError().

◆ logComponentWarning()

template<typename... Args>
void LoggingInterface::logComponentWarning ( const std::string &  component_name,
Args &&...  args 
) const
inlineinherited

Logs a warning for a component.

Parameters
[in]component_nameName of the component

Definition at line 67 of file LoggingInterface.h.

68 {
69 _log.add(Logger::WARNING, component_name, ": ", std::forward<Args>(args)...);
70 }
@ WARNING
Definition Logger.h:26

Referenced by Component::logWarning().

◆ logError()

template<typename... Args>
void LoggingInterface::logError ( Args &&...  args) const
inlineinherited

Logs an error.

Definition at line 36 of file LoggingInterface.h.

37 {
38 _log.add(Logger::ERROR, std::forward<Args>(args)...);
39 }

Referenced by addClosures(), addComponent(), controlDataIntegrityCheck(), declareControlData(), identifyLoops(), and integrityCheck().

◆ logWarning()

template<typename... Args>
void LoggingInterface::logWarning ( Args &&...  args) const
inlineinherited

Logs a warning.

Definition at line 56 of file LoggingInterface.h.

57 {
58 _log.add(Logger::WARNING, std::forward<Args>(args)...);
59 }

◆ printComponentLoops()

void Simulation::printComponentLoops ( ) const

Prints the component loops.

Definition at line 248 of file Simulation.C.

249{
250 // get the list of loops
251 std::vector<std::string> loops;
252 for (auto && entry : _component_name_to_loop_name)
253 if (std::find(loops.begin(), loops.end(), entry.second) == loops.end())
254 loops.push_back(entry.second);
255
256 // for each loop
257 Moose::out << "\nListing of component loops:" << std::endl;
258 for (unsigned int i = 0; i < loops.size(); i++)
259 {
260 Moose::out << "\n Loop " << i + 1 << ":" << std::endl;
261
262 // print out each component in the loop
263 for (auto && entry : _component_name_to_loop_name)
264 if (entry.second == loops[i])
265 Moose::out << " " << entry.first << std::endl;
266 }
267 Moose::out << std::endl;
268}
OStreamProxy out(std::cout)

Referenced by THMPrintComponentLoopsAction::act().

◆ run()

void Simulation::run ( )
virtual

Run the simulation.

Definition at line 986 of file Simulation.C.

987{
988}

◆ setCheckJacobian()

void Simulation::setCheckJacobian ( bool  state)
inline

Enable Jacobian checking.

Parameters
stateTrue for Jacobian checking, otherwise false

Definition at line 345 of file Simulation.h.

345{ _check_jacobian = state; }

Referenced by THMDebugAction::act().

◆ setComponentVariableOrder()

void Simulation::setComponentVariableOrder ( const VariableName &  var,
int  index 
)
static

Sets a component variable order index.

See Component system documentation for more information.

Parameters
[in]varVariable to order
[in]indexOrder index

Definition at line 40 of file Simulation.C.

41{
43}
static std::map< VariableName, int > _component_variable_order_map
Component variable order map; see setComponentVariableOrder for more info.
Definition Simulation.h:488

Referenced by ThermalHydraulicsApp::registerAll().

◆ setupCoordinateSystem()

void Simulation::setupCoordinateSystem ( )
protected

Sets the coordinate system for each subdomain.

Definition at line 770 of file Simulation.C.

771{
772 MultiMooseEnum coord_types("XYZ RZ RSPHERICAL");
773 std::vector<SubdomainName> blocks;
774
775 for (auto && comp : _components)
776 {
777 if (comp->parent() == nullptr)
778 {
779 const auto & subdomains = comp->getSubdomainNames();
780 const auto & coord_sys = comp->getCoordSysTypes();
781
782 for (unsigned int i = 0; i < subdomains.size(); i++)
783 {
784 blocks.push_back(subdomains[i]);
785 // coord_types.push_back("XYZ");
786 coord_types.setAdditionalValue(coord_sys[i] == Moose::COORD_RZ ? "RZ" : "XYZ");
787 }
788 }
789 }
790 _fe_problem.setCoordSystem(blocks, coord_types);
791
792 // RZ geometries are always aligned with x-axis
793 MooseEnum rz_coord_axis("X=0 Y=1", "X");
795}
void setAxisymmetricCoordAxis(const MooseEnum &rz_coord_axis)
void setCoordSystem(const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)

Referenced by setupMesh().

◆ setupCriticalHeatFluxTable()

void Simulation::setupCriticalHeatFluxTable ( )
protected

Setup ctirical heat flux table user object.

◆ setupEquations()

void Simulation::setupEquations ( )
protected

Setup equations to be solved in this simulation.

◆ setupInitialConditionObjects()

void Simulation::setupInitialConditionObjects ( )
protected

Definition at line 727 of file Simulation.C.

728{
729 for (auto && i : _ics)
730 {
731 const std::string & name = i.first;
732 ICInfo & ic = i.second;
733 _fe_problem.addInitialCondition(ic._type, name, ic._params);
734 }
735}
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)

Referenced by addVariables().

◆ setupInitialConditionsFromFile()

void Simulation::setupInitialConditionsFromFile ( )
protected

Setup reading initial conditions from a specified file, see 'initial_from_file' and 'initial_from_file_timestep' parameters.

Definition at line 686 of file Simulation.C.

687{
688 const UserObjectName suo_name = genName("thm", "suo");
689 {
690 const std::string class_name = "SolutionUserObject";
691 InputParameters params = _thm_factory.getValidParams(class_name);
692 params.set<MeshFileName>("mesh") = _thm_pars.get<FileName>("initial_from_file");
693 params.set<std::string>("timestep") = _thm_pars.get<std::string>("initial_from_file_timestep");
694 _fe_problem.addUserObject(class_name, suo_name, params);
695 }
696
697 for (auto && v : _vars)
698 {
699 const VariableName & var_name = v.first;
700 const VariableInfo & vi = v.second;
701
702 if (vi._var_type == "MooseVariableScalar")
703 {
704 std::string class_name = "ScalarSolutionIC";
705 InputParameters params = _thm_factory.getValidParams(class_name);
706 params.set<VariableName>("variable") = var_name;
707 params.set<VariableName>("from_variable") = var_name;
708 params.set<UserObjectName>("solution_uo") = suo_name;
709 _fe_problem.addInitialCondition(class_name, genName(var_name, "ic"), params);
710 }
711 else
712 {
713 std::string class_name = "SolutionIC";
714 InputParameters params = _thm_factory.getValidParams(class_name);
715 params.set<VariableName>("variable") = var_name;
716 params.set<VariableName>("from_variable") = var_name;
717 params.set<UserObjectName>("solution_uo") = suo_name;
718 if (vi._params.isParamValid("block"))
719 params.set<std::vector<SubdomainName>>("block") =
720 vi._params.get<std::vector<SubdomainName>>("block");
721 _fe_problem.addInitialCondition(class_name, genName(var_name, "ic"), params);
722 }
723 }
724}
const double v
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)

Referenced by addVariables().

◆ setupMesh()

void Simulation::setupMesh ( )
virtual

Perform mesh setup actions such as setting up the coordinate system(s) and creating ghosted elements.

Definition at line 798 of file Simulation.C.

799{
800 if (_components.size() == 0)
801 return;
802
804}
void setupCoordinateSystem()
Sets the coordinate system for each subdomain.
Definition Simulation.C:770

Referenced by THMSetupMeshAction::act().

◆ setupQuadrature()

void Simulation::setupQuadrature ( )
virtual

Sets up quadrature rules.

Definition at line 98 of file Simulation.C.

99{
100 if (_components.size() == 0)
101 return;
102
103 Order order = CONSTANT;
104 unsigned int n_flow_channels = 0;
105 unsigned int n_heat_structures = 0;
106
107 for (auto && comp : _components)
108 {
109 auto flow_channel = dynamic_cast<FlowChannelBase *>(comp.get());
110 if (flow_channel != nullptr)
111 n_flow_channels++;
112
113 auto hs_interface = dynamic_cast<HeatStructureInterface *>(comp.get());
114 if (hs_interface)
115 n_heat_structures++;
116 }
117
118 if (n_flow_channels > 0)
119 {
120 const FEType & fe_type = getFlowFEType();
121 if (fe_type.default_quadrature_order() > order)
122 order = fe_type.default_quadrature_order();
123 }
124 if (n_heat_structures > 0)
125 {
126 const FEType & fe_type = HeatConductionModel::feType();
127 if (fe_type.default_quadrature_order() > order)
128 order = fe_type.default_quadrature_order();
129 }
130
131 _fe_problem.createQRules(QGAUSS, order, order, order);
132}
virtual void createQRules(libMesh::QuadratureType type, libMesh::Order order, libMesh::Order volume_order=libMesh::INVALID_ORDER, libMesh::Order face_order=libMesh::INVALID_ORDER, SubdomainID block=Moose::ANY_BLOCK_ID, bool allow_negative_qweights=true)
static const libMesh::FEType & feType()
Get the FE type used for heat conduction.
Interface class for heat structure components.
const libMesh::FEType & getFlowFEType() const
Gets the FE type for the flow in this simulation.
Definition Simulation.h:48
Order default_quadrature_order() const

Referenced by THMSetupQuadratureAction::act().

◆ setVectorValuedVelocity()

void Simulation::setVectorValuedVelocity ( bool  vector_velocity)
inline

Set if velocity is being output as a vector-valued field.

Definition at line 364 of file Simulation.h.

364{ _output_vector_velocity = vector_velocity; }

Referenced by THMOutputVectorVelocityAction::act().

◆ sortAddedComponentVariables()

std::vector< VariableName > Simulation::sortAddedComponentVariables ( ) const
private

Returns a sorted list of the variables added by components.

See Component system documentation for more information.

Definition at line 578 of file Simulation.C.

579{
580 // Check that no index in order map is used more than once.
581 // Also, convert the map to a vector of pairs to be sorted.
582 std::set<int> indices;
583 std::vector<std::pair<VariableName, int>> registered_var_index_pairs;
584 for (const auto & var_and_index : _component_variable_order_map)
585 {
586 registered_var_index_pairs.push_back(var_and_index);
587
588 const auto ind = var_and_index.second;
589 auto insert_return = indices.insert(ind);
590 if (!insert_return.second)
591 mooseError("The index ", ind, " was used for multiple component variables.");
592 }
593
594 // Collect all of the added variable names into an unsorted vector.
595 std::vector<VariableName> vars_unsorted;
596 for (const auto & var_and_data : _vars)
597 vars_unsorted.push_back(var_and_data.first);
598
599 // The sorting works as follows. For those variables that are listed in
600 // _component_variable_order_map, these are ordered before those that are not,
601 // in the order of their indices in the map. Those not in the map are sorted
602 // alphabetically.
603
604 // Sort registered_var_index_pairs by value (index)
605 std::sort(registered_var_index_pairs.begin(),
606 registered_var_index_pairs.end(),
607 [](const std::pair<VariableName, int> & a, const std::pair<VariableName, int> & b)
608 { return a.second < b.second; });
609
610 // Loop over the ordered, registered variable names and add a variable to the
611 // sorted list if in vars_unsorted. When this happens, delete the element from
612 // vars_unsorted, leaving only unregistered variable names after the loop.
613 std::vector<VariableName> vars_sorted;
614 for (const auto & var_index_pair : registered_var_index_pairs)
615 {
616 const auto & var = var_index_pair.first;
617 if (std::find(vars_unsorted.begin(), vars_unsorted.end(), var) != vars_unsorted.end())
618 {
619 vars_sorted.push_back(var);
620 vars_unsorted.erase(std::remove(vars_unsorted.begin(), vars_unsorted.end(), var),
621 vars_unsorted.end());
622 }
623 }
624
625 // Sort the remaining (unregistered) variables alphabetically and then add
626 // them to the end of the full list.
627 std::sort(vars_unsorted.begin(), vars_unsorted.end());
628 vars_sorted.insert(vars_sorted.end(), vars_unsorted.begin(), vars_unsorted.end());
629
630 return vars_sorted;
631}

Referenced by addVariables().

Member Data Documentation

◆ _check_jacobian

bool Simulation::_check_jacobian
protected

True if checking jacobian.

Definition at line 468 of file Simulation.h.

Referenced by controlDataIntegrityCheck(), integrityCheck(), and setCheckJacobian().

◆ _closures_by_name

std::map<std::string, std::shared_ptr<ClosuresBase> > Simulation::_closures_by_name
protected

Map of closures by their names.

Definition at line 409 of file Simulation.h.

Referenced by addClosures(), getClosures(), and hasClosures().

◆ _comp_by_name

std::map<std::string, std::shared_ptr<Component> > Simulation::_comp_by_name
protected

Map of components by their names.

Definition at line 402 of file Simulation.h.

Referenced by addComponent(), getComponentByName(), hasComponent(), hasComponentOfType(), and initSimulation().

◆ _component_name_to_loop_name

std::map<std::string, std::string> Simulation::_component_name_to_loop_name
protected

Map of component name to component loop name.

Definition at line 404 of file Simulation.h.

Referenced by identifyLoops(), and printComponentLoops().

◆ _component_variable_order_map

std::map< VariableName, int > Simulation::_component_variable_order_map
staticprivate

Component variable order map; see setComponentVariableOrder for more info.

Definition at line 488 of file Simulation.h.

Referenced by setComponentVariableOrder(), and sortAddedComponentVariables().

◆ _components

std::vector<std::shared_ptr<Component> > Simulation::_components
protected

◆ _control_data

std::map<std::string, ControlDataValue *> Simulation::_control_data
protected

Control data created in the control logic system.

Definition at line 460 of file Simulation.h.

Referenced by advanceState(), controlDataIntegrityCheck(), getControlData(), hasControlData(), and ~Simulation().

◆ _fe_problem

FEProblemBase& Simulation::_fe_problem
protected

◆ _flow_fe_type

libMesh::FEType Simulation::_flow_fe_type
protected

finite element type for the flow in the simulation

Definition at line 430 of file Simulation.h.

Referenced by getFlowFEType().

◆ _ics

std::map<std::string, ICInfo> Simulation::_ics
protected

Definition at line 424 of file Simulation.h.

Referenced by addSimInitialCondition(), and setupInitialConditionObjects().

◆ _implicit_time_integration

bool Simulation::_implicit_time_integration
protected

true if using implicit time integration scheme

Definition at line 463 of file Simulation.h.

Referenced by addVariables(), and getImplicitTimeIntegrationFlag().

◆ _log

Logger Simulation::_log
protected

Definition at line 465 of file Simulation.h.

Referenced by controlDataIntegrityCheck(), integrityCheck(), and log().

◆ _loop_name_to_model_id

std::map<std::string, THM::FlowModelID> Simulation::_loop_name_to_model_id
protected

Map of loop name to model type.

Definition at line 406 of file Simulation.h.

Referenced by identifyLoops().

◆ _output_vector_velocity

bool Simulation::_output_vector_velocity
protected

Flag indicating if velocity is output as vector-valued field.

Definition at line 474 of file Simulation.h.

Referenced by getVectorValuedVelocity(), and setVectorValuedVelocity().

◆ _outputters_all

std::vector<OutputName> Simulation::_outputters_all
protected

Definition at line 455 of file Simulation.h.

Referenced by addFileOutputter(), addScreenOutputter(), and getOutputsVector().

◆ _outputters_file

std::vector<OutputName> Simulation::_outputters_file
protected

Definition at line 456 of file Simulation.h.

Referenced by addFileOutputter(), and getOutputsVector().

◆ _outputters_screen

std::vector<OutputName> Simulation::_outputters_screen
protected

Definition at line 457 of file Simulation.h.

Referenced by addScreenOutputter(), and getOutputsVector().

◆ _sparsity_elem_augmentation

std::map<dof_id_type, std::vector<dof_id_type> > Simulation::_sparsity_elem_augmentation
protected

Additional sparsity pattern that needs to be added into the Jacobian matrix.

Definition at line 471 of file Simulation.h.

Referenced by addRelationshipManagers(), and augmentSparsity().

◆ _thm_app

ThermalHydraulicsApp& Simulation::_thm_app
protected

The application this is associated with.

Definition at line 394 of file Simulation.h.

Referenced by addRelationshipManagers(), getApp(), and getControlData().

◆ _thm_factory

Factory& Simulation::_thm_factory
protected

◆ _thm_mesh

THMMesh& Simulation::_thm_mesh
protected

THM mesh.

Definition at line 388 of file Simulation.h.

Referenced by addRelationshipManagers().

◆ _thm_pars

const InputParameters& Simulation::_thm_pars
protected

"Global" of this simulation

Definition at line 427 of file Simulation.h.

Referenced by hasInitialConditionsFromFile(), and setupInitialConditionsFromFile().

◆ _vars

std::map<VariableName, VariableInfo> Simulation::_vars
protected

variables for this simulation (name and info about the var)

Definition at line 412 of file Simulation.h.

Referenced by addSimVariable(), addSimVariable(), addSimVariable(), addVariables(), setupInitialConditionsFromFile(), and sortAddedComponentVariables().

◆ _zero

Real Simulation::_zero

Definition at line 477 of file Simulation.h.


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