Cardinal
|
Solve nekRS wrapped as a MOOSE app. More...
#include <NekRSProblem.h>
Public Member Functions | |
NekRSProblem (const InputParameters ¶ms) | |
~NekRSProblem () | |
Write nekRS's solution at the last output step. More... | |
virtual void | initialSetup () override |
Perform some sanity checks on the problem setup. More... | |
void | sendBoundaryHeatFluxToNek () |
Send boundary heat flux to nekRS. More... | |
void | sendBoundaryDeformationToNek () |
Send boundary deformation to nekRS. More... | |
void | sendVolumeDeformationToNek () |
Send volume mesh deformation flux to nekRS. More... | |
void | sendVolumeHeatSourceToNek () |
Send volume heat source to nekRS. More... | |
void | getBoundaryTemperatureFromNek () |
Get boundary temperature from nekRS. More... | |
void | getVolumeTemperatureFromNek () |
Get volume temperature from nekRS. More... | |
virtual void | adjustNekSolution () override |
virtual void | syncSolutions (ExternalProblem::Direction direction) override |
virtual void | addExternalVariables () override |
virtual double | maxInterpolatedTemperature () const |
virtual double | minInterpolatedTemperature () const |
virtual const bool | hasMovingNekMesh () const override |
bool | isDataTransferHappening (ExternalProblem::Direction direction) |
unsigned int | minimumScratchSizeForCoupling () const |
unsigned int | firstReservedUsrwrkSlot () const |
void | sendScalarValuesToNek () |
Send values from NekScalarValue userobjects to NekRS. More... | |
void | getNekScalarValueUserObjects () |
Setup to fetch NekScalarValue user objects for sending scalar values into NekRS scratch space. More... | |
void | mapFaceDataToNekFace (const unsigned int &e, const unsigned int &var_num, const Real &multiplier, double **outgoing_data) |
void | mapVolumeDataToNekVolume (const unsigned int &e, const unsigned int &var_num, const Real &multiplier, double **outgoing_data) |
void | mapFaceDataToNekVolume (const unsigned int &e, const unsigned int &var_num, const Real &multiplier, double **outgoing_data) |
Map nodal points on a MOOSE face element to the GLL points on a Nek volume element. More... | |
void | writeFieldFile (const Real &time, const int &step) const |
virtual bool | isOutputStep () const |
Whether nekRS should write an output file for the current time step. More... | |
virtual void | externalSolve () override |
virtual bool | converged (unsigned int) override |
virtual bool | nondimensional () const |
virtual bool | synchronizeIn () |
virtual bool | synchronizeOut () |
double | L_ref () const |
unsigned int | nUsrWrkSlots () const |
template<typename T > | |
void | checkDuplicateEntries (const std::vector< T > &var, const std::string &name) const |
void | checkDuplicateVariableName (const std::string &name) const |
bool | stringHasEnding (std::string const &full, std::string const &ending) const |
Static Public Member Functions | |
static InputParameters | validParams () |
Protected Member Functions | |
bool | normalizeHeatSource (const double moose_integral, const double nek_integral, double &normalized_nek_integral) |
void | checkInitialFluxValues (const Real &nek_flux, const Real &moose_flux) const |
virtual void | addTemperatureVariable () override |
void | calculateMeshVelocity (int e, const field::NekWriteEnum &field) |
void | copyScratchToDevice () |
void | interpolateBoundarySolutionToNek (double *incoming_moose_value, double *outgoing_nek_value) |
void | interpolateVolumeSolutionToNek (const int elem_id, double *incoming_moose_value, double *outgoing_nek_value) |
void | writeVolumeSolution (const int elem_id, const field::NekWriteEnum &field, double *T, const std::vector< double > *add=nullptr) |
void | writeBoundarySolution (const int elem_id, const field::NekWriteEnum &field, double *T) |
void | volumeSolution (const field::NekFieldEnum &f, double *T) |
void | boundarySolution (const field::NekFieldEnum &f, double *T) |
void | initializeInterpolationMatrices () |
Initialize interpolation matrices for transfers in/out of nekRS. More... | |
virtual void | fillAuxVariable (const unsigned int var_number, const double *value) |
virtual void | extractOutputs () |
virtual InputParameters | getExternalVariableParameters () |
std::string | fieldFilePrefix (const int &number) const |
Protected Attributes | |
const bool & | _has_heat_source |
Whether a heat source will be applied to NekRS from MOOSE. More... | |
const bool & | _conserve_flux_by_sideset |
const Real & | _abs_tol |
Absolute tolerance for checking flux/heat source normalizations. More... | |
const Real & | _rel_tol |
Relative tolerance for checking flux/heat source normalizations. More... | |
const PostprocessorValue * | _flux_integral = nullptr |
Total surface-integrated flux coming from the coupled MOOSE app. More... | |
const VectorPostprocessorValue * | _flux_integral_vpp = nullptr |
Sideset-wise surface-integrated flux coming from the coupled MOOSE app. More... | |
const PostprocessorValue * | _source_integral = nullptr |
Total volume-integrated heat source coming from the coupled MOOSE app. More... | |
const PostprocessorValue * | _min_T = nullptr |
Postprocessor to limit the minimum temperature. More... | |
const PostprocessorValue * | _max_T = nullptr |
Postprocessor to limit the maximum temperature. More... | |
double * | _T = nullptr |
nekRS temperature interpolated onto the data transfer mesh More... | |
double * | _flux_face = nullptr |
MOOSE flux interpolated onto the (boundary) data transfer mesh. More... | |
double * | _flux_elem = nullptr |
MOOSE flux interpolated onto the (volume) data transfer mesh. More... | |
double * | _source_elem = nullptr |
MOOSE heat source interpolated onto the data transfer mesh. More... | |
double * | _displacement_x = nullptr |
displacement in x for all nodes from MOOSE, for moving mesh problems More... | |
double * | _displacement_y = nullptr |
displacement in y for all nodes from MOOSE, for moving mesh problems More... | |
double * | _displacement_z = nullptr |
displacement in z for all nodes from MOOSE, for moving mesh problems More... | |
double * | _mesh_velocity_elem = nullptr |
mesh velocity for a given element, used internally for calculating mesh velocity over one element More... | |
unsigned int | _temp_var |
temperature transfer variable written to be nekRS More... | |
unsigned int | _avg_flux_var |
flux transfer variable read from by nekRS More... | |
unsigned int | _disp_x_var |
x-displacment transfer variable read for moving mesh problems More... | |
unsigned int | _disp_y_var |
y-displacment transfer variable read for moving mesh problems More... | |
unsigned int | _disp_z_var |
z-displacment transfer variable read for moving mesh problems More... | |
unsigned int | _heat_source_var |
volumetric heat source variable read from by nekRS More... | |
std::unique_ptr< NumericVector< Number > > | _serialized_solution |
const std::string & | _casename |
NekRS casename. More... | |
const bool & | _nondimensional |
Whether the nekRS solution is performed in nondimensional scales. More... | |
const Real & | _U_ref |
Reference characteristic velocity. More... | |
const Real & | _T_ref |
Reference characteristic temperature. More... | |
const Real & | _dT_ref |
Reference characteristic temperature delta. More... | |
const Real & | _L_ref |
Reference characteristic length. More... | |
const Real & | _rho_0 |
Reference density. More... | |
const Real & | _Cp_0 |
Reference isobaric specific heat capacity. More... | |
const bool & | _write_fld_files |
const bool & | _disable_fld_file_output |
Whether to turn off all field file writing. More... | |
unsigned int | _n_usrwrk_slots |
const unsigned int & | _constant_interval |
For constant synchronization intervals, the desired frequency (in units of Nek time steps) More... | |
const bool & | _skip_final_field_file |
Whether to skip writing a field file on NekRS's last time steo. More... | |
const unsigned int & | _first_reserved_usrwrk_slot |
First slice in usrwrk for Cardinal to read/write data from. More... | |
int | _n_surface_elems |
Number of surface elements in the data transfer mesh, across all processes. More... | |
int | _n_vertices_per_surface |
Number of vertices per surface element of the transfer mesh. More... | |
int | _n_volume_elems |
Number of volume elements in the data transfer mesh, across all processes. More... | |
int | _n_vertices_per_volume |
Number of vertices per volume element of the transfer mesh. More... | |
int | _n_vertices_per_elem |
Number of vertices per element in the data transfer mesh, which depends on whether boundary/volume coupling. More... | |
const std::vector< int > * | _boundary = nullptr |
Boundary IDs through which to couple nekRS and MOOSE. More... | |
bool | _volume |
Whether the mesh contains volume-based coupling. More... | |
double | _start_time |
Start time of the simulation based on NekRS's .par file. More... | |
bool | _is_output_step |
Whether the most recent time step was an output file writing step. More... | |
NekRSMesh * | _nek_mesh |
NekTimeStepper * | _timestepper = nullptr |
The time stepper used for selection of time step size. More... | |
Transient * | _transient_executioner = nullptr |
Underlying executioner. More... | |
bool | _needs_interpolation |
const MultiMooseEnum * | _outputs = nullptr |
NekRS solution fields to output to the mesh mirror. More... | |
std::vector< std::string > | _var_names |
Names of external variables when extracting the NekRS solution. More... | |
std::vector< unsigned int > | _external_vars |
Numeric identifiers for the external variables. More... | |
std::string | _var_string |
Descriptive string for the variables extracted from NekRS. More... | |
double * | _external_data = nullptr |
Scratch space to place external NekRS fields before writing into auxiliary variables. More... | |
int | _n_points |
Number of points for interpolated fields on the MOOSE mesh. More... | |
const PostprocessorValue * | _transfer_in = nullptr |
Postprocessor containing the signal of when a synchronization has occurred. More... | |
double * | _interpolation_outgoing = nullptr |
Vandermonde interpolation matrix (for outgoing transfers) More... | |
double * | _interpolation_incoming = nullptr |
Vandermonde interpolation matrix (for incoming transfers) More... | |
unsigned int | _minimum_scratch_size_for_coupling |
Minimum allowable scratch space size, strictly what is needed by Cardinal for coupling. More... | |
int | _moose_Nq |
For the MOOSE mesh, the number of quadrature points in each coordinate direction. More... | |
const std::vector< unsigned int > * | _usrwrk_output = nullptr |
Slots in the nrs->o_usrwrk array to write to a field file. More... | |
const std::vector< std::string > * | _usrwrk_output_prefix = nullptr |
Filename prefix to use for naming the field files containing the nrs->o_usrwrk array slots. More... | |
double | _elapsedStepSum |
Sum of the elapsed time in NekRS solves. More... | |
double | _elapsedTime |
Sum of the total elapsed time in NekRS solves. More... | |
double | _tSolveStepMin |
Minimum step solve time. More... | |
double | _tSolveStepMax |
Maximum step solve time. More... | |
synchronization::SynchronizationEnum | _synchronization_interval |
When to synchronize the NekRS solution with the mesh mirror. More... | |
std::vector< std::string > | _usrwrk_indices |
quantities to write to nrs->usrwrk (and the order to write them) More... | |
std::vector< NekScalarValue * > | _nek_uos |
Userobjects containing stochastic input data. More... | |
unsigned int | _scratch_counter |
Counter for any potential NekScalarValue objects in the input file. More... | |
unsigned int | _n_uo_slots |
Number of scratch space slots used for NekScalarValue usage. More... | |
Static Protected Attributes | |
static bool | _first |
flag to indicate whether this is the first pass to serialize the solution More... | |
Solve nekRS wrapped as a MOOSE app.
This object controls all of the execution of and data transfers to/from nekRS, fully abstracted from the Nek5000 backend.
The nekRS temperature solution is interpolated onto the NekRSMesh by multiplying the nekRS temperature by an interpolation matrix. In the opposite direction, the flux from MOOSE is interpolated onto the nekRS mesh by a similar interpolation matrix. This interpolation matrix expresses the nekRS/MOOSE solutions in terms of interpolating Legendre polynomials, and is equal to \(V_{moose}V_{nek}^{-1}\), where \(V_{moose}\) is the Vandermonde matrix of the MOOSE mesh's node points and \(V_{nek}\) is the Vandermonde matrix of the nekRS mesh's 1-D quadrature points. If the interpolation matrix is unity, this means that the libMesh node points exactly coincide with the nekRS quadrature point locations, and hence no interpolation is actually needed.
NekRSProblem::NekRSProblem | ( | const InputParameters & | params | ) |
NekRSProblem::~NekRSProblem | ( | ) |
Write nekRS's solution at the last output step.
If Nek is not the master app, the number of time steps it takes is controlled by the master app. Depending on the settings in the .par
file, it becomes possible that nekRS may not write an output file on the simulation's actual last time step, because Nek may not know when that last time step is. Therefore, here we can force nekRS to write its output.
|
overridevirtual |
Reimplemented from NekRSProblemBase.
|
inlineoverrideprotectedvirtual |
Add a variable to represent the temperature of the NekRS solution. We allow this to be an entry point for derived classes because they might already be adding a temperature variable for coupling purposes.
Reimplemented from NekRSProblemBase.
|
overridevirtual |
Adjust the NekRS solution by introducing max/min temperature clipping to help with underresolved flow
Reimplemented from NekRSProblemBase.
|
protectedinherited |
Interpolate the NekRS boundary solution onto the boundary MOOSE mesh mirror (re2 -> mirror)
[in] | f | field to interpolate |
[out] | T | interpolated boundary value |
|
protected |
Calculate mesh velocity for NekRS's blending solver using current and previous displacement values and write it to nrs->usrwrk, from where it can be accessed in nekRS's .oudf file.
[in] | e | Boundary element that the displacement values belong to |
[in] | field | NekWriteEnum mesh_velocity_x/y/z field |
|
inlineinherited |
Check for duplicate entries in a 1-d vector
[in] | var | input vector |
[in] | name | string to use for printing error message |
|
inherited |
Check whether the user has already created a variable using one of the protected names that the wrapping is using.
[in] | name | variable name |
|
protected |
Print a warning to the user if the initial fluxes (before normalization) differ significantly, since this can indicate an error with model setup.
[in] | nek_flux | flux to be received by Nek |
[in] | moose_flux | flux sent by MOOSE |
|
inlineoverridevirtualinherited |
|
protectedinherited |
Copy the data sent from MOOSE->Nek from host to device.
|
overridevirtualinherited |
|
protectedvirtualinherited |
Extract user-specified parts of the NekRS CFD solution onto the mesh mirror
|
protectedinherited |
Get a three-character prefix for use in writing output files for repeated Nek sibling apps.
[in] | number | multi-app number |
|
protectedvirtualinherited |
Fill an outgoing auxiliary variable field with nekRS solution data
[in] | var_number | auxiliary variable number |
[in] | value | nekRS solution data to fill the variable with |
|
inlineinherited |
Get the index of the first slot in the usrwrk that Cardinal is managing
void NekRSProblem::getBoundaryTemperatureFromNek | ( | ) |
Get boundary temperature from nekRS.
|
protectedvirtualinherited |
Get the parameters for the external variables to be added
|
inherited |
Setup to fetch NekScalarValue user objects for sending scalar values into NekRS scratch space.
void NekRSProblem::getVolumeTemperatureFromNek | ( | ) |
Get volume temperature from nekRS.
|
inlineoverridevirtual |
|
protectedinherited |
Initialize interpolation matrices for transfers in/out of nekRS.
|
overridevirtual |
Perform some sanity checks on the problem setup.
This function performs checks like making sure that a transient executioner is used to wrap nekRS, that no time shift has been requested to the start of nekRS, that the correct NekTimeStepper is used, etc.
Reimplemented from NekRSProblemBase.
|
protectedinherited |
Interpolate the MOOSE mesh mirror solution onto the NekRS boundary mesh (mirror -> re2)
[in] | incoming_moose_value | MOOSE face values |
[out] | outgoing_nek_value | interpolated MOOSE face values onto the NekRS boundary mesh |
|
protectedinherited |
Interpolate the MOOSE mesh mirror solution onto the NekRS volume mesh (mirror -> re2)
[in] | elem_id | element ID |
[in] | incoming_moose_value | MOOSE face values |
[out] | outgoing_nek_value | interpolated MOOSE face values onto the NekRS volume mesh |
|
inherited |
|
virtualinherited |
Whether nekRS should write an output file for the current time step.
A nekRS output file (suffix .f000xx) is written if the time step is an integer multiple of the output writing interval or if the time step is the last time step.
|
inlineinherited |
Get the characteristic length
|
inherited |
Map nodal points on a MOOSE face element to the GLL points on a Nek face element.
|
inherited |
Map nodal points on a MOOSE face element to the GLL points on a Nek volume element.
This function is to be used when MOOSE variables are defined over the entire volume (maybe the MOOSE transfer only sent meaningful values to the coupling boundaries), so we need to do a volume interpolation of the incoming MOOSE data into nrs->usrwrk, rather than a face interpolation. This could be optimized in the future to truly only just write the boundary values into the nekRS scratch space rather than the volume values, but it looks right now that our biggest expense occurs in the MOOSE transfer system, not these transfers internally to nekRS.
|
inherited |
Map nodal points on a MOOSE volume element to the GLL points on a Nek volume element.
|
virtual |
Determine the maximum interpolated temperature on the NekRSMesh for diagnostic info
|
inlineinherited |
Get the minimum scratch space required for coupling; this space is guaranteed to be filled with data incoming from MOOSE, like heat flux boundary conditions or mesh displacements
|
virtual |
Determine the minimum interpolated temperature on the NekRSMesh for diagnostic info
|
inlinevirtualinherited |
Whether the solve is in nondimensional form
|
protected |
Normalize the volumetric heat source sent to NekRS
[in] | moose_integral | total integrated value from MOOSE to conserve |
[in] | nek_integral | total integrated value in nekRS to adjust |
[out] | normalized_nek_integral | final normalized value |
|
inlineinherited |
Get the number of usrwrk slots allocated
void NekRSProblem::sendBoundaryDeformationToNek | ( | ) |
Send boundary deformation to nekRS.
void NekRSProblem::sendBoundaryHeatFluxToNek | ( | ) |
Send boundary heat flux to nekRS.
|
inherited |
Send values from NekScalarValue userobjects to NekRS.
void NekRSProblem::sendVolumeDeformationToNek | ( | ) |
Send volume mesh deformation flux to nekRS.
void NekRSProblem::sendVolumeHeatSourceToNek | ( | ) |
Send volume heat source to nekRS.
|
inherited |
Whether a string ends in a particular sub-string
[in] | full | full string |
[in] | ending | sub-string ending |
|
virtualinherited |
Whether data should be synchronized in to nekRS
|
virtualinherited |
Whether data should be synchronized out of nekRS
|
overridevirtual |
Reimplemented from NekRSProblemBase.
|
static |
|
protectedinherited |
Interpolate the NekRS volume solution onto the volume MOOSE mesh mirror (re2 -> mirror)
[in] | f | field to interpolate |
[out] | T | interpolated volume value |
|
protectedinherited |
Write into the NekRS solution space for coupling boundaries; for setting a mesh position in terms of a displacement, we need to add the displacement to the initial mesh coordinates.
[in] | elem_id | element ID |
[in] | field | field to write |
[in] | T | solution values to write for the field for the given element |
|
inherited |
Write NekRS solution field file
[in] | time | solution time in NekRS (if NekRS is non-dimensional, this will be non-dimensional) |
[in] | step | time step index |
|
protectedinherited |
Write into the NekRS solution space for coupling volumes; for setting a mesh position in terms of a displacement, we need to add the displacement to the initial mesh coordinates. For this, the 'add' parameter lets you pass in a vector of values (in NekRS's mesh order, i.e. the re2 order) to add.
[in] | elem_id | element ID |
[in] | field | field to write |
[in] | T | solution values to write for the field for the given element |
[in] | add | optional vector of values to add to each value set on the NekRS end |
|
protected |
Absolute tolerance for checking flux/heat source normalizations.
|
protected |
flux transfer variable read from by nekRS
|
protectedinherited |
Boundary IDs through which to couple nekRS and MOOSE.
|
protectedinherited |
NekRS casename.
|
protected |
Whether to conserve heat flux received in NekRS by individually re-normalizing with integrals over individual sideset. This approach is technically more accurate, but places limitations on how the sidesets are defined (they should NOT share any nodes with one another) and more effort with vector postprocessors, so it is not the default.
|
protectedinherited |
For constant synchronization intervals, the desired frequency (in units of Nek time steps)
|
protectedinherited |
Reference isobaric specific heat capacity.
|
protectedinherited |
Whether to turn off all field file writing.
|
protected |
x-displacment transfer variable read for moving mesh problems
|
protected |
y-displacment transfer variable read for moving mesh problems
|
protected |
z-displacment transfer variable read for moving mesh problems
|
protected |
displacement in x for all nodes from MOOSE, for moving mesh problems
|
protected |
displacement in y for all nodes from MOOSE, for moving mesh problems
|
protected |
displacement in z for all nodes from MOOSE, for moving mesh problems
|
protectedinherited |
Reference characteristic temperature delta.
|
protectedinherited |
Sum of the elapsed time in NekRS solves.
|
protectedinherited |
Sum of the total elapsed time in NekRS solves.
|
protectedinherited |
Scratch space to place external NekRS fields before writing into auxiliary variables.
|
protectedinherited |
Numeric identifiers for the external variables.
|
staticprotectedinherited |
flag to indicate whether this is the first pass to serialize the solution
|
protectedinherited |
First slice in usrwrk for Cardinal to read/write data from.
|
protected |
MOOSE flux interpolated onto the (volume) data transfer mesh.
|
protected |
MOOSE flux interpolated onto the (boundary) data transfer mesh.
|
protected |
Total surface-integrated flux coming from the coupled MOOSE app.
The mesh used for the MOOSE app may be very different from the mesh used by nekRS. Elements may be much finer/coarser, and one element on the MOOSE app may not be a clear subset/superset of the elements on the nekRS mesh. Therefore, to ensure conservation of energy, we send the total flux integral to nekRS for internal normalization of the heat flux applied on the nekRS mesh.
|
protected |
Sideset-wise surface-integrated flux coming from the coupled MOOSE app.
The mesh used for the MOOSE app may be very different from the mesh used by nekRS. Elements may be much finer/coarser, and one element on the MOOSE app may not be a clear subset/superset of the elements on the nekRS mesh. Therefore, to ensure conservation of energy, we send the flux integrals for each sideset to nekRS for internal normalization of the heat flux applied on the nekRS mesh.
|
protected |
Whether a heat source will be applied to NekRS from MOOSE.
|
protected |
volumetric heat source variable read from by nekRS
|
protectedinherited |
Vandermonde interpolation matrix (for incoming transfers)
|
protectedinherited |
Vandermonde interpolation matrix (for outgoing transfers)
|
protectedinherited |
Whether the most recent time step was an output file writing step.
|
protectedinherited |
Reference characteristic length.
|
protected |
Postprocessor to limit the maximum temperature.
|
protected |
mesh velocity for a given element, used internally for calculating mesh velocity over one element
|
protected |
Postprocessor to limit the minimum temperature.
|
protectedinherited |
Minimum allowable scratch space size, strictly what is needed by Cardinal for coupling.
|
protectedinherited |
For the MOOSE mesh, the number of quadrature points in each coordinate direction.
|
protectedinherited |
Number of points for interpolated fields on the MOOSE mesh.
|
protectedinherited |
Number of surface elements in the data transfer mesh, across all processes.
|
protectedinherited |
Number of scratch space slots used for NekScalarValue usage.
|
protectedinherited |
Number of slices/slots to allocate in nrs->usrwrk to hold fields for coupling (i.e. data going into NekRS, written by Cardinal), or used for custom user actions, but not for coupling. By default, we just allocate 7 slots (no inherent reason, just a fairly big amount). For memory-limited cases, you can reduce this number to just the bare minimum necessary for your use case.
|
protectedinherited |
Number of vertices per element in the data transfer mesh, which depends on whether boundary/volume coupling.
|
protectedinherited |
Number of vertices per surface element of the transfer mesh.
|
protectedinherited |
Number of vertices per volume element of the transfer mesh.
|
protectedinherited |
Number of volume elements in the data transfer mesh, across all processes.
|
protectedinherited |
Whether an interpolation needs to be performed on the nekRS temperature solution, or if we can just grab the solution at specified points
|
protectedinherited |
Underlying mesh object on which NekRS exchanges fields with MOOSE or extracts NekRS's solution for I/O features
|
protectedinherited |
Userobjects containing stochastic input data.
|
protectedinherited |
Whether the nekRS solution is performed in nondimensional scales.
If nekRS is solving in non-dimensional form, this means that the nekRS solution is performed for:
In terms of heat flux boundary conditions, the entire energy conservation equation in nekRS is multiplied by \(\frac{L_{ref}}{\rho_{0}C_{p,0}U_{ref}\Delta T_{ref}}\) in order to clear the coefficient on the convective. Therefore, the heat source in nekRS is expressed in nondimensional form as \(q^\dagger=\frac{q}{\rho_{0}C_{p,0}U_{ref}\Delta T_{ref}}\). Here, 'Cp_0' is the specific heat capacity scale.
Unfortunately, there is no systematic way to get these reference scales from nekRS, so we need to inform MOOSE of any possible scaling so that we can appropriately scale the nekRS temperature to the dimensional form that is usually expected in MOOSE. Therefore, these scales just need to match what is used in the nekRS input files used to specify boundary conditions. Conversion between dimensional MOOSE heat flux to dimensionless nekRS heat flux is performed automatically, and does not require any special treatment in the nekRS scalarNeumannBC kernel.
|
protectedinherited |
NekRS solution fields to output to the mesh mirror.
|
protected |
Relative tolerance for checking flux/heat source normalizations.
|
protectedinherited |
Reference density.
|
protectedinherited |
Counter for any potential NekScalarValue objects in the input file.
|
protectedinherited |
|
protectedinherited |
Whether to skip writing a field file on NekRS's last time steo.
|
protected |
MOOSE heat source interpolated onto the data transfer mesh.
|
protected |
Total volume-integrated heat source coming from the coupled MOOSE app.
The mesh used for the MOOSE app may be very different from the mesh used by nekRS. Elements may be much finer/coarser, and one element on the MOOSE app may not be a clear subset/superset of the elements on the nekRS mesh. Therefore, to ensure conservation of energy, we send the total source integral to nekRS for internal normalization of the heat source applied on the nekRS mesh.
|
protectedinherited |
Start time of the simulation based on NekRS's .par file.
|
protectedinherited |
When to synchronize the NekRS solution with the mesh mirror.
This parameter determines when to synchronize the NekRS solution with the mesh mirror - this entails:
Several options are available:
'parent_app' will only send data between NekRS and a parent application when (1) the main application has just sent "new" information to NekRS, and when (2) the main application is just about to run a new time step (with updated BCs/source terms from NekRS).
nekRS is often subcycled relative to the application controlling it - that is, nekRS may be run with a time step 10x smaller than a conduction MOOSE app. If 'interpolate_transfers = false' in the master application, then the data going into nekRS is fixed for each of the subcycled time steps it takes, so these extra data transfers are completely unnecssary. This flag indicates that the information sent from MOOSE to NekRS should only be updated if the data from MOOSE is "new", and likewise whether the NekRS solution should only be interpolated to the mesh mirror once MOOSE is actually "ready" to solve a time step using it.
NOTE: if 'interpolate_transfers = true' in the master application, then the data coming into nekRS is unique on each subcycled time step, so setting this to true will in effect override interpolate_transfers
to be false. For the best performance, you should set interpolate_transfers
to false so that you don't even bother computing the interpolated data, since it's not used if this parameter is set to true.
|
protected |
nekRS temperature interpolated onto the data transfer mesh
|
protectedinherited |
Reference characteristic temperature.
|
protected |
temperature transfer variable written to be nekRS
|
protectedinherited |
The time stepper used for selection of time step size.
|
protectedinherited |
Postprocessor containing the signal of when a synchronization has occurred.
|
protectedinherited |
Underlying executioner.
|
protectedinherited |
Maximum step solve time.
|
protectedinherited |
Minimum step solve time.
|
protectedinherited |
Reference characteristic velocity.
|
protectedinherited |
quantities to write to nrs->usrwrk (and the order to write them)
|
protectedinherited |
Slots in the nrs->o_usrwrk array to write to a field file.
|
protectedinherited |
Filename prefix to use for naming the field files containing the nrs->o_usrwrk array slots.
|
protectedinherited |
Names of external variables when extracting the NekRS solution.
|
protectedinherited |
Descriptive string for the variables extracted from NekRS.
|
protectedinherited |
Whether the mesh contains volume-based coupling.
|
protectedinherited |
Whether to disable output file writing by NekRS and replace it by output file writing in Cardinal. Suppose the case name is 'channel'. If this parameter is false, then NekRS will write output files as usual, with names like channel0.f00001 for write step 1, channel0.f00002 for write step 2, and so on. If true, then NekRS itself does not output any files like this, and instead output files are written with names a01channel0.f00001, a01channel0.f00002 (for first Nek app), a02channel0.f00001, a02channel0.f00002 (for second Nek app), and so on. This feature should only be used when running repeated Nek sub apps so that the output from each app is retained. Otherwise, if running N repeated Nek sub apps, only a single output file is obtained because each app overwrites the output files of the other apps in the order that the apps reach the nekrs::outfld function.