Loading [MathJax]/extensions/tex2jax.js
https://mooseframework.inl.gov
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends
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. More...
 
virtual void setupQuadrature ()
 Sets up quadrature rules. More...
 
virtual void initSimulation ()
 Initialize this simulation. More...
 
virtual void initComponents ()
 Initialize this simulation's components. More...
 
void identifyLoops ()
 Identifies the component loops. More...
 
void printComponentLoops () const
 Prints the component loops. More...
 
virtual void run ()
 Run the simulation. More...
 
virtual void addComponent (const std::string &type, const std::string &name, InputParameters params)
 Add a component into this simulation. More...
 
bool hasComponent (const std::string &name) const
 Find out if simulation has a component with the given name. More...
 
template<typename T >
bool hasComponentOfType (const std::string &name) const
 Find out if simulation has a component with the given name and specified type. More...
 
template<typename T >
const T & getComponentByName (const std::string &name) const
 Get component by its name. More...
 
const std::vector< std::shared_ptr< Component > > & getComponents ()
 Return list of components available in the simulation. More...
 
virtual void addClosures (const std::string &type, const std::string &name, InputParameters params)
 Add a closures object into this simulation. More...
 
bool hasClosures (const std::string &name) const
 Return whether the simulation has a closures object. More...
 
std::shared_ptr< ClosuresBasegetClosures (const std::string &name) const
 Get a pointer to a closures object. More...
 
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. More...
 
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. More...
 
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. More...
 
void checkVariableNameLength (const std::string &name) const
 Reports an error if the variable name is too long. More...
 
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. More...
 
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. More...
 
virtual void buildMesh ()
 Create mesh for this simulation. More...
 
virtual void addVariables ()
 Add variables involved in this simulation. More...
 
virtual void addMooseObjects ()
 Add component MOOSE objects. More...
 
virtual void setupMesh ()
 Perform mesh setup actions such as setting up the coordinate system(s) and creating ghosted elements. More...
 
ThermalHydraulicsAppgetApp ()
 Get the ThermalHydraulicsApp. More...
 
virtual void integrityCheck () const
 Check the integrity of the simulation. More...
 
virtual void advanceState ()
 Advance all of the state holding vectors / datastructures so that we can move to the next timestep. More...
 
virtual void controlDataIntegrityCheck ()
 Check the integrity of the control data. More...
 
virtual void couplingMatrixIntegrityCheck () const
 Check integrity of coupling matrix used by the preconditioner. More...
 
template<typename T >
bool hasControlData (const std::string &name)
 Query if control data with name 'name' exists. More...
 
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. More...
 
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. More...
 
const bool & getImplicitTimeIntegrationFlag ()
 Gets the flag indicating whether an implicit time integration scheme is being used. More...
 
bool hasInitialConditionsFromFile () const
 Are initial conditions specified from a file. More...
 
Loggerlog ()
 
void setCheckJacobian (bool state)
 Enable Jacobian checking. More...
 
virtual void augmentSparsity (const dof_id_type &elem_id1, const dof_id_type &elem_id2)
 Hint how to augment sparsity pattern between two elements. More...
 
bool getVectorValuedVelocity ()
 Is velocity output as vector-valued field. More...
 
void setVectorValuedVelocity (bool vector_velocity)
 Set if velocity is being output as a vector-valued field. More...
 
void addRelationshipManagers ()
 Add additional relationship managers to run the simulation. More...
 
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. More...
 
template<typename... Args>
void logComponentError (const std::string &component_name, Args &&... args) const
 Logs an error for a component. More...
 
template<typename... Args>
void logWarning (Args &&... args) const
 Logs a warning. More...
 
template<typename... Args>
void logComponentWarning (const std::string &component_name, Args &&... args) const
 Logs a warning for a component. More...
 
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. More...
 
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. More...
 
std::string genName (const std::string &prefix, const std::string &name, unsigned int i) const
 Build a name from 2 strings and a number. More...
 
std::string genName (const std::string &prefix, const std::string &middle, const std::string &suffix="") const
 Build a name from strings. More...
 
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. More...
 

Static Public Member Functions

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

Public Attributes

Real _zero
 

Protected Member Functions

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

Protected Attributes

THMMesh_thm_mesh
 THM mesh. More...
 
FEProblemBase_fe_problem
 Pointer to FEProblem representing this simulation. More...
 
ThermalHydraulicsApp_thm_app
 The application this is associated with. More...
 
Factory_thm_factory
 The Factory associated with the MooseApp. More...
 
std::vector< std::shared_ptr< Component > > _components
 List of components in this simulation. More...
 
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
 Map of components by their names. More...
 
std::map< std::string, std::string > _component_name_to_loop_name
 Map of component name to component loop name. More...
 
std::map< std::string, THM::FlowModelID_loop_name_to_model_id
 Map of loop name to model type. More...
 
std::map< std::string, std::shared_ptr< ClosuresBase > > _closures_by_name
 Map of closures by their names. More...
 
std::map< VariableName, VariableInfo_vars
 variables for this simulation (name and info about the var) More...
 
std::map< std::string, ICInfo_ics
 
const InputParameters_thm_pars
 "Global" of this simulation More...
 
libMesh::FEType _flow_fe_type
 finite element type for the flow in the simulation More...
 
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. More...
 
bool _implicit_time_integration
 true if using implicit time integration scheme More...
 
Logger _log
 
bool _check_jacobian
 True if checking jacobian. More...
 
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. More...
 
bool _output_vector_velocity
 Flag indicating if velocity is output as vector-valued field. More...
 
const Parallel::Communicator & _communicator
 

Private Member Functions

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

Static Private Attributes

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

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 *>("_moose_app"))),
52  _thm_pars(pars),
53  _flow_fe_type(FEType(CONSTANT, MONOMIAL)),
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 }
ParallelObject(const Parallel::Communicator &comm_in)
LAGRANGE
bool _implicit_time_integration
true if using implicit time integration scheme
Definition: Simulation.h:463
Real _zero
Definition: Simulation.h:477
FIRST
bool _check_jacobian
True if checking jacobian.
Definition: Simulation.h:468
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
THMMesh & _thm_mesh
THM mesh.
Definition: Simulation.h:388
const Parallel::Communicator & comm() const
Factory & getFactory()
libMesh::FEType _flow_fe_type
finite element type for the flow in the simulation
Definition: Simulation.h:430
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
bool _output_vector_velocity
Flag indicating if velocity is output as vector-valued field.
Definition: Simulation.h:474
LoggingInterface(Logger &log)
Constructor.
const InputParameters & _thm_pars
"Global" of this simulation
Definition: Simulation.h:427
static libMesh::FEType _fe_type
Logger _log
Definition: Simulation.h:465
ThermalHydraulicsApp & _thm_app
The application this is associated with.
Definition: Simulation.h:394

◆ ~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
static const std::string k
Definition: NS.h:130

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.

Referenced by AddClosuresAction::act().

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 }
Base class for closures implementations.
Definition: ClosuresBase.h:28
virtual std::unique_ptr< Base > create()=0
const std::string name
Definition: Setup.h:20
void logError(Args &&... args) const
Logs an error.
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
std::map< std::string, std::shared_ptr< ClosuresBase > > _closures_by_name
Map of closures by their names.
Definition: Simulation.h:409

◆ 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.

Referenced by AddComponentAction::act().

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 }
virtual std::unique_ptr< Base > create()=0
const std::string name
Definition: Setup.h:20
void logError(Args &&... args) const
Logs an error.
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
Base class for THM components.
Definition: Component.h:27
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
Map of components by their names.
Definition: Simulation.h:402

◆ 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 }
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.
T & set(const std::string &name, bool quiet_mode=false)
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition: Simulation.C:495
bool hasInitialConditionsFromFile() const
Are initial conditions specified from a file.
Definition: Simulation.C:1070

◆ addConstantIC()

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

Definition at line 512 of file Simulation.C.

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

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 }
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.
T & set(const std::string &name, bool quiet_mode=false)
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition: Simulation.C:495
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool hasInitialConditionsFromFile() const
Are initial conditions specified from a file.
Definition: Simulation.C:1070

◆ addConstantScalarIC()

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

Definition at line 552 of file Simulation.C.

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

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 }
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.
T & set(const std::string &name, bool quiet_mode=false)
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition: Simulation.C:495
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool hasInitialConditionsFromFile() const
Are initial conditions specified from a file.
Definition: Simulation.C:1070

◆ 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< Control > object, THREAD_ID tid=0, bool recurse=true) override
void addPrivateParam(const std::string &name, const T &value)
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
virtual std::unique_ptr< Base > create()=0
const std::string name
Definition: Setup.h:20
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
ExecuteMooseObjectWarehouse< Control > & getControlWarehouse()

◆ addFileOutputter()

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

Definition at line 1035 of file Simulation.C.

Referenced by THMSetupOutputAction::act().

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

◆ 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.

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

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 }
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.
T & set(const std::string &name, bool quiet_mode=false)
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
void addSimInitialCondition(const std::string &type, const std::string &name, InputParameters params)
Definition: Simulation.C:495
bool hasInitialConditionsFromFile() const
Are initial conditions specified from a file.
Definition: Simulation.C:1070

◆ addMooseObjects()

void Simulation::addMooseObjects ( )
virtual

Add component MOOSE objects.

Definition at line 738 of file Simulation.C.

Referenced by AddComponentMooseObjectsAction::act().

739 {
740  for (auto && comp : _components)
741  comp->addMooseObjects();
742 }
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400

◆ addRelationshipManagers()

void Simulation::addRelationshipManagers ( )

Add additional relationship managers to run the simulation.

Definition at line 745 of file Simulation.C.

Referenced by THMAddRelationshipManagersAction::act().

746 {
747  {
748  const std::string class_name = "AugmentSparsityBetweenElements";
749  auto params = _thm_factory.getValidParams(class_name);
750  params.set<Moose::RelationshipManagerType>("rm_type") =
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)
764  comp->addRelationshipManagers(Moose::RelationshipManagerType::COUPLING |
767 }
RelationshipManagerType
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
THMMesh & _thm_mesh
THM mesh.
Definition: Simulation.h:388
virtual const std::string & name() const
bool addRelationshipManager(std::shared_ptr< RelationshipManager > relationship_manager)
virtual std::unique_ptr< Base > create()=0
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
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
ThermalHydraulicsApp & _thm_app
The application this is associated with.
Definition: Simulation.h:394

◆ addScreenOutputter()

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

Definition at line 1042 of file Simulation.C.

Referenced by THMSetupOutputAction::act().

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

◆ addSimInitialCondition()

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

Definition at line 495 of file Simulation.C.

Referenced by FlowModel::addCommonInitialConditions(), addComponentScalarIC(), addConstantIC(), addConstantScalarIC(), addFunctionIC(), FlowModelSinglePhase::addInitialConditions(), and FlowChannelBase::addVariables().

498 {
500  return;
501 
502  if (_ics.find(name) == _ics.end())
503  {
504  ICInfo ic(type, params);
505  _ics[name] = ic;
506  }
507  else
508  mooseError("Initial condition with name '", name, "' already exists.");
509 }
void mooseError(Args &&... args)
std::map< std::string, ICInfo > _ics
Definition: Simulation.h:424
const std::string name
Definition: Setup.h:20
bool hasInitialConditionsFromFile() const
Are initial conditions specified from a file.
Definition: Simulation.C:1070

◆ addSimVariable() [1/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.

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

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 }
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
void mooseError(Args &&... args)
T & set(const std::string &name, bool quiet_mode=false)
OrderWrapper order
static MooseEnum getNonlinearVariableFamilies()
void checkVariableNameLength(const std::string &name) const
Reports an error if the variable name is too long.
Definition: Simulation.C:479
static MooseEnum getNonlinearVariableOrders()
std::map< VariableName, VariableInfo > _vars
variables for this simulation (name and info about the var)
Definition: Simulation.h:412
const std::string name
Definition: Setup.h:20
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397

◆ 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))
399  mooseError(
400  "The variable '", name, "' has already been added with a different scaling factor.");
401  }
402 }
bool absoluteFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
char ** blocks
void mooseError(Args &&... args)
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
T & set(const std::string &name, bool quiet_mode=false)
OrderWrapper order
static MooseEnum getNonlinearVariableFamilies()
void checkVariableNameLength(const std::string &name) const
Reports an error if the variable name is too long.
Definition: Simulation.C:479
static MooseEnum getNonlinearVariableOrders()
std::map< VariableName, VariableInfo > _vars
variables for this simulation (name and info about the var)
Definition: Simulation.h:412
const std::string name
Definition: Setup.h:20
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
void mooseDeprecated(Args &&... args)
bool compareCurrent(const MooseEnum &other, CompareMode mode=CompareMode::COMPARE_NAME) const
std::map< std::string, Metadata > _params
bool isParamValid(const std::string &name) const

◆ addSimVariable() [3/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
void mooseError(Args &&... args)
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
T & set(const std::string &name, bool quiet_mode=false)
void checkVariableNameLength(const std::string &name) const
Reports an error if the variable name is too long.
Definition: Simulation.C:479
std::map< VariableName, VariableInfo > _vars
variables for this simulation (name and info about the var)
Definition: Simulation.h:412
const std::string name
Definition: Setup.h:20
std::string rawParamVal(const std::string &param) const
bool isParamValid(const std::string &name) const

◆ addVariables()

void Simulation::addVariables ( )
virtual

Add variables involved in this simulation.

Definition at line 634 of file Simulation.C.

Referenced by THMAddVariablesAction::act().

635 {
636  TransientBase * trex = dynamic_cast<TransientBase *>(getApp().getExecutioner());
637  if (trex)
638  {
639  Moose::TimeIntegratorType ti_type = trex->getTimeScheme();
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 }
bool _implicit_time_integration
true if using implicit time integration scheme
Definition: Simulation.h:463
void setupInitialConditionObjects()
Definition: Simulation.C:727
TI_EXPLICIT_EULER
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
TI_EXPLICIT_MIDPOINT
virtual void addAuxVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
void mooseInfo(Args &&... args)
std::map< VariableName, VariableInfo > _vars
variables for this simulation (name and info about the var)
Definition: Simulation.h:412
ThermalHydraulicsApp & getApp()
Get the ThermalHydraulicsApp.
Definition: Simulation.h:245
const std::string name
Definition: Setup.h:20
void setupInitialConditionsFromFile()
Setup reading initial conditions from a specified file, see &#39;initial_from_file&#39; and &#39;initial_from_fil...
Definition: Simulation.C:686
const T & getParam(const std::string &name) const
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
Executioner * getExecutioner() const
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters &params)
TI_EXPLICIT_TVD_RK_2
std::vector< VariableName > sortAddedComponentVariables() const
Returns a sorted list of the variables added by components.
Definition: Simulation.C:578
TimeIntegratorType
Moose::TimeIntegratorType getTimeScheme() const
bool hasInitialConditionsFromFile() const
Are initial conditions specified from a file.
Definition: Simulation.C:1070

◆ 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.

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

1077 {
1078  for (auto && i : _control_data)
1079  i.second->copyValuesBack();
1080 }
std::map< std::string, ControlDataValue * > _control_data
Control data created in the control logic system.
Definition: Simulation.h:460

◆ 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.

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

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 }
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

◆ buildMesh()

void Simulation::buildMesh ( )
virtual

Create mesh for this simulation.

Definition at line 87 of file Simulation.C.

Referenced by THMBuildMeshAction::act().

88 {
89  if (_components.size() == 0)
90  return;
91 
92  // build mesh
93  for (auto && comp : _components)
94  comp->executeSetupMesh();
95 }
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400

◆ 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.

Referenced by addSimVariable().

480 {
481  if (name.size() > THM::MAX_VARIABLE_LENGTH)
482  mooseError(
483  "Variable name '", name, "' is too long. The limit is ", THM::MAX_VARIABLE_LENGTH, ".");
484 }
void mooseError(Args &&... args)
static const size_t MAX_VARIABLE_LENGTH
const std::string name
Definition: Setup.h:20

◆ controlDataIntegrityCheck()

void Simulation::controlDataIntegrityCheck ( )
virtual

Check the integrity of the control data.

Definition at line 911 of file Simulation.C.

Referenced by ControlDataIntegrityCheckAction::act().

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 }
Abstract definition of a ControlData value.
Definition: ControlData.h:20
void emitLoggedErrors() const
Calls mooseError if there are any logged errors.
Definition: Logger.C:21
bool _check_jacobian
True if checking jacobian.
Definition: Simulation.h:468
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
const ExecFlagType EXEC_TIMESTEP_END
const std::vector< std::string > & getControlDataDependencies() const
Return the Controls that must run before this Control.
Definition: THMControl.h:26
virtual const std::string & name() const
std::map< std::string, ControlDataValue * > _control_data
Control data created in the control logic system.
Definition: Simulation.h:460
const THMControl * getControl() const
Get the pointer to the control object that declared this control data.
Definition: ControlData.h:55
const ExecFlagType EXEC_TIMESTEP_BEGIN
void logError(Args &&... args) const
Logs an error.
ExecuteMooseObjectWarehouse< Control > & getControlWarehouse()
Logger _log
Definition: Simulation.h:465
This control block will terminate a run if its input indicates so.
virtual void addObject(std::shared_ptr< Control > object, THREAD_ID tid=0, bool recurse=true) override
virtual void init()
Definition: THMControl.h:21
std::vector< std::string > & getDependencies()

◆ couplingMatrixIntegrityCheck()

void Simulation::couplingMatrixIntegrityCheck ( ) const
virtual

Check integrity of coupling matrix used by the preconditioner.

Definition at line 807 of file Simulation.C.

Referenced by THMPreconditioningIntegrityCheckAction::act().

808 {
809  if (!_fe_problem.shouldSolve())
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)
834  mooseError(
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
void mooseError(Args &&... args)
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
const libMesh::CouplingMatrix * couplingMatrix(const unsigned int nl_sys_num) const override
std::size_t size() const
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
const std::vector< std::shared_ptr< TimeIntegrator > > & getTimeIntegrators()
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")

◆ 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.

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

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  }
void setDeclared()
Mark the data as declared.
Definition: ControlData.h:65
Concrete definition of a parameter value for a specified type.
Definition: ControlData.h:91
bool getDeclared()
Get the declared state.
Definition: ControlData.h:70
const std::string name
Definition: Setup.h:20
void logError(Args &&... args) const
Logs an error.
void setControl(THMControl *ctrl)
Set the pointer to the control object that declared this control data.
Definition: ControlData.h:60

◆ genName() [1/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.

Referenced by Closures1PhaseBase::addAverageWallTemperatureMaterial(), FlowModel::addCommonInitialConditions(), FlowModel::addCommonMooseObjects(), FlowChannelBase::addCommonObjects(), addComponentScalarIC(), HeatStructureBase::addConstantDensitySolidPropertiesMaterial(), addConstantIC(), addConstantScalarIC(), addFunctionIC(), HeatTransferBase::addHeatedPerimeter(), HeatConductionModel::addHeatEquationRZ(), HeatConductionModel::addHeatEquationXYZ(), HeatTransferFromTemperature1Phase::addHeatTransferKernels(), FlowChannel1Phase::addHydraulicDiameterMaterial(), FlowModelSinglePhase::addInitialConditions(), HeatConductionModel::addMaterials(), FormLossFromFunction1Phase::addMooseObjects(), HeatSourceFromPowerDensity::addMooseObjects(), HeatSourceFromTotalPower::addMooseObjects(), HeatStructure2DCoupler::addMooseObjects(), HeatStructure2DRadiationCouplerRZ::addMooseObjects(), HSBoundarySpecifiedTemperature::addMooseObjects(), HeatTransferFromHeatFlux1Phase::addMooseObjects(), HSBoundaryAmbientConvection::addMooseObjects(), HSBoundaryHeatFlux::addMooseObjects(), HSBoundaryRadiation::addMooseObjects(), InletVelocityTemperature1Phase::addMooseObjects(), GateValve1Phase::addMooseObjects(), HeatSourceVolumetric1Phase::addMooseObjects(), HeatTransferFromSpecifiedTemperature1Phase::addMooseObjects(), HSBoundaryExternalAppTemperature::addMooseObjects(), Shaft::addMooseObjects(), FormLossFromExternalApp1Phase::addMooseObjects(), TotalPower::addMooseObjects(), VolumeJunction1Phase::addMooseObjects(), FormLoss1PhaseBase::addMooseObjects(), ShaftConnectedCompressor1Phase::addMooseObjects(), ShaftConnectedPump1Phase::addMooseObjects(), ShaftConnectedTurbine1Phase::addMooseObjects(), HeatTransferFromExternalAppHeatFlux1Phase::addMooseObjects(), HSBoundaryExternalAppConvection::addMooseObjects(), HSCoupler2D3D::addMooseObjects(), HeatTransferBase::addMooseObjects(), FlowModelSinglePhase::addMooseObjects(), SimpleTurbine1Phase::addMooseObjects(), HeatTransferFromHeatStructure3D1Phase::addMooseObjects(), HSCoupler2D2DRadiation::addMooseObjects(), HeatTransferFromHeatStructure1Phase::addMooseObjects(), HSBoundaryExternalAppHeatFlux::addMooseObjects(), JunctionOneToOne1Phase::addMooseObjects(), FlowChannelBase::addMooseObjects(), FunctorClosures::addMooseObjectsFlowChannel(), Closures1PhaseSimple::addMooseObjectsHeatTransfer(), FlowModelSinglePhase::addRDGAdvectionDGKernels(), FlowModelSinglePhase::addRDGMooseObjects(), Closures1PhaseTHM::addTemperatureWallFromHeatFluxMaterial(), FlowChannelBase::addVariables(), Closures1PhaseTHM::addWallFFMaterial(), Closures1PhaseBase::addWallFrictionFunctionMaterial(), Closures1PhaseTHM::addWallHTCMaterial(), ClosuresBase::addWallTemperatureFromAuxMaterial(), Closures1PhaseSimple::addWallTemperatureFromHeatFluxMaterial(), FlowBoundary1Phase::addWeakBC3Eqn(), ClosuresBase::addWeightedAverageMaterial(), ClosuresBase::addZeroMaterial(), Component2D::buildMesh(), FileMeshComponent::buildMesh(), Component1D::buildMesh(), HeatSourceBase::HeatSourceBase(), VolumeJunction1Phase::junctionVariableName(), and setupInitialConditionsFromFile().

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

◆ genName() [2/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  }
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")

◆ genName() [3/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  }
const std::string name
Definition: Setup.h:20

◆ genName() [4/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  }

◆ 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.

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

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

◆ getApp()

ThermalHydraulicsApp& Simulation::getApp ( )
inline

Get the ThermalHydraulicsApp.

Definition at line 245 of file Simulation.h.

Referenced by addVariables().

245 { return _thm_app; }
ThermalHydraulicsApp & _thm_app
The application this is associated with.
Definition: Simulation.h:394

◆ 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 }
void mooseError(Args &&... args)
const std::string name
Definition: Setup.h:20
std::map< std::string, std::shared_ptr< ClosuresBase > > _closures_by_name
Map of closures by their names.
Definition: Simulation.h:409

◆ 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.

Referenced by Component::getComponentByName(), FlowBoundary1Phase::init(), FlowJunction1Phase::init(), FlowBoundary::init(), FlowJunction::init(), and Component1DConnection::init().

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 }
void mooseError(Args &&... args)
const std::string name
Definition: Setup.h:20
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
Map of components by their names.
Definition: Simulation.h:402

◆ getComponents()

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

Return list of components available in the simulation.

Definition at line 117 of file Simulation.h.

Referenced by ParaviewComponentAnnotationMap::output().

117 { return _components; }
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400

◆ 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.

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

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  }
std::map< std::string, ControlDataValue * > _control_data
Control data created in the control logic system.
Definition: Simulation.h:460
Concrete definition of a parameter value for a specified type.
Definition: ControlData.h:91
const std::string name
Definition: Setup.h:20
ThermalHydraulicsApp & _thm_app
The application this is associated with.
Definition: Simulation.h:394

◆ 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.

Referenced by setupQuadrature().

48 { return _flow_fe_type; }
libMesh::FEType _flow_fe_type
finite element type for the flow in the simulation
Definition: Simulation.h:430

◆ getImplicitTimeIntegrationFlag()

const bool& Simulation::getImplicitTimeIntegrationFlag ( )
inline

Gets the flag indicating whether an implicit time integration scheme is being used.

Definition at line 329 of file Simulation.h.

Referenced by GateValve1Phase::addMooseObjects(), VolumeJunction1Phase::addMooseObjects(), JunctionOneToOne1Phase::addMooseObjects(), FlowModelSinglePhase::addRDGAdvectionDGKernels(), FlowModelSinglePhase::addRDGMooseObjects(), and FlowBoundary1Phase::addWeakBC3Eqn().

329 { return _implicit_time_integration; }
bool _implicit_time_integration
true if using implicit time integration scheme
Definition: Simulation.h:463

◆ 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 }
void mooseError(Args &&... args)
std::vector< OutputName > _outputters_file
Definition: Simulation.h:456
std::vector< OutputName > _outputters_screen
Definition: Simulation.h:457
std::vector< OutputName > _outputters_all
Definition: Simulation.h:455

◆ 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.

Referenced by FlowChannel1Phase::buildFlowModel().

359 { return _output_vector_velocity; }
bool _output_vector_velocity
Flag indicating if velocity is output as vector-valued field.
Definition: Simulation.h:474

◆ 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 }
const std::string name
Definition: Setup.h:20
std::map< std::string, std::shared_ptr< ClosuresBase > > _closures_by_name
Map of closures by their names.
Definition: Simulation.h:409

◆ 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.

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

1003 {
1004  auto it = _comp_by_name.find(name);
1005  return (it != _comp_by_name.end());
1006 }
const std::string name
Definition: Setup.h:20
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
Map of components by their names.
Definition: Simulation.h:402

◆ 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.

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

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 }
const std::string name
Definition: Setup.h:20
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
Map of components by their names.
Definition: Simulation.h:402

◆ 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.

Referenced by THMParsedFunctionWrapper::initialize().

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  }
std::map< std::string, ControlDataValue * > _control_data
Control data created in the control logic system.
Definition: Simulation.h:460
Concrete definition of a parameter value for a specified type.
Definition: ControlData.h:91
const std::string name
Definition: Setup.h:20

◆ 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.

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

1071 {
1072  return _thm_pars.isParamValid("initial_from_file");
1073 }
const InputParameters & _thm_pars
"Global" of this simulation
Definition: Simulation.h:427
bool isParamValid(const std::string &name) const

◆ identifyLoops()

void Simulation::identifyLoops ( )

Identifies the component loops.

Definition at line 164 of file Simulation.C.

Referenced by IdentifyLoopsAction::act().

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 }
unsigned int FlowModelID
static const std::string component
Definition: NS.h:153
Base class for 1D component junctions and boundaries.
A base class for flow channels.
const std::string name
Definition: Setup.h:20
void logError(Args &&... args) const
Logs an error.
const std::vector< std::string > & getConnectedComponentNames() const
Returns a list of names of components that are connected to this component.
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
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
virtual const THM::FlowModelID & getFlowModelID() const =0
Gets the flow model ID.

◆ initComponents()

void Simulation::initComponents ( )
virtual

Initialize this simulation's components.

Definition at line 151 of file Simulation.C.

Referenced by THMInitComponentsAction::act().

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 }
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400

◆ initSimulation()

void Simulation::initSimulation ( )
virtual

Initialize this simulation.

Definition at line 135 of file Simulation.C.

Referenced by THMInitSimulationAction::act().

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 addEdge(const T &a, const T &b)
bool hasComponent(const std::string &name) const
Find out if simulation has a component with the given name.
Definition: Simulation.C:1002
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
std::map< std::string, std::shared_ptr< Component > > _comp_by_name
Map of components by their names.
Definition: Simulation.h:402
void addNode(const T &a)
const std::vector< T > & dfs()

◆ integrityCheck()

void Simulation::integrityCheck ( ) const
virtual

Check the integrity of the simulation.

Definition at line 846 of file Simulation.C.

Referenced by IntegrityCheckAction::act().

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 }
void emitLoggedErrors() const
Calls mooseError if there are any logged errors.
Definition: Logger.C:21
Base class for 1D component junctions and boundaries.
bool _check_jacobian
True if checking jacobian.
Definition: Simulation.h:468
A base class for flow channels.
void emitLoggedWarnings() const
Calls mooseWarning if there are any logged warnings.
Definition: Logger.C:35
void logError(Args &&... args) const
Logs an error.
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
Logger _log
Definition: Simulation.h:465

◆ log()

Logger& Simulation::log ( )
inline

Definition at line 338 of file Simulation.h.

Referenced by AddClosuresAction::act().

338 { return _log; }
Logger _log
Definition: Simulation.h:465

◆ 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.

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

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

◆ 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.

Referenced by Component::logWarning().

68  {
69  _log.add(Logger::WARNING, component_name, ": ", std::forward<Args>(args)...);
70  }
void add(EMessageType type, Args &&... args)
Add a message to the log.
Definition: Logger.h:35

◆ logError()

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

Logs an error.

Definition at line 36 of file LoggingInterface.h.

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

37  {
38  _log.add(Logger::ERROR, std::forward<Args>(args)...);
39  }
void add(EMessageType type, Args &&... args)
Add a message to the log.
Definition: Logger.h:35

◆ 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  }
void add(EMessageType type, Args &&... args)
Add a message to the log.
Definition: Logger.h:35

◆ printComponentLoops()

void Simulation::printComponentLoops ( ) const

Prints the component loops.

Definition at line 248 of file Simulation.C.

Referenced by THMPrintComponentLoopsAction::act().

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 }
std::map< std::string, std::string > _component_name_to_loop_name
Map of component name to component loop name.
Definition: Simulation.h:404

◆ 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.

Referenced by THMDebugAction::act().

345 { _check_jacobian = state; }
bool _check_jacobian
True if checking jacobian.
Definition: Simulation.h:468

◆ 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.

Referenced by ThermalHydraulicsApp::registerAll().

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

◆ setupCoordinateSystem()

void Simulation::setupCoordinateSystem ( )
protected

Sets the coordinate system for each subdomain.

Definition at line 770 of file Simulation.C.

Referenced by setupMesh().

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");
794  _fe_problem.setAxisymmetricCoordAxis(rz_coord_axis);
795 }
char ** blocks
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
void setAxisymmetricCoordAxis(const MooseEnum &rz_coord_axis)
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
void setCoordSystem(const std::vector< SubdomainName > &blocks, const MultiMooseEnum &coord_sys)

◆ 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.

Referenced by addVariables().

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 }
std::map< std::string, ICInfo > _ics
Definition: Simulation.h:424
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
const std::string name
Definition: Setup.h:20

◆ 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.

Referenced by addVariables().

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 }
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::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
T & set(const std::string &name, bool quiet_mode=false)
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
virtual void addInitialCondition(const std::string &ic_name, const std::string &name, InputParameters &parameters)
std::map< VariableName, VariableInfo > _vars
variables for this simulation (name and info about the var)
Definition: Simulation.h:412
Factory & _thm_factory
The Factory associated with the MooseApp.
Definition: Simulation.h:397
const InputParameters & _thm_pars
"Global" of this simulation
Definition: Simulation.h:427
static const std::string v
Definition: NS.h:84
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters &parameters)

◆ 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.

Referenced by THMSetupMeshAction::act().

799 {
800  if (_components.size() == 0)
801  return;
802 
804 }
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
void setupCoordinateSystem()
Sets the coordinate system for each subdomain.
Definition: Simulation.C:770

◆ setupQuadrature()

void Simulation::setupQuadrature ( )
virtual

Sets up quadrature rules.

Definition at line 98 of file Simulation.C.

Referenced by THMSetupQuadratureAction::act().

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 }
Order
FEProblemBase & _fe_problem
Pointer to FEProblem representing this simulation.
Definition: Simulation.h:391
Order default_quadrature_order() const
A base class for flow channels.
CONSTANT
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)
Interface class for heat structure components.
std::vector< std::shared_ptr< Component > > _components
List of components in this simulation.
Definition: Simulation.h:400
static const libMesh::FEType & feType()
Get the FE type used for heat conduction.
const libMesh::FEType & getFlowFEType() const
Gets the FE type for the flow in this simulation.
Definition: Simulation.h:48

◆ 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.

Referenced by THMOutputVectorVelocityAction::act().

364 { _output_vector_velocity = vector_velocity; }
bool _output_vector_velocity
Flag indicating if velocity is output as vector-valued field.
Definition: Simulation.h:474

◆ 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.

Referenced by addVariables().

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 }
void mooseError(Args &&... args)
static std::map< VariableName, int > _component_variable_order_map
Component variable order map; see setComponentVariableOrder for more info.
Definition: Simulation.h:488
std::map< VariableName, VariableInfo > _vars
variables for this simulation (name and info about the var)
Definition: Simulation.h:412

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 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(), 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: