DimensionalizeAction

Overview

The DimensionalizeAction action is responsible for fetching the characteristic scales from the user and applying them to dimensionalize any field passed from NekRS into MOOSE (AuxVariables, Postprocessors, UserObjects, etc.). To use, add a [Dimensionalize] block inside the [Problem] block.

Cardinal assumes that the NekRS inputs were nondimensionalized with the following:

(1)

(2)

(3)

(4)

(5)

where superscripts indicate nondimensional quantities. U is used to specify , T is used to specify , dT is used to specify , L is used to specify , rho is used to specify , and Cp is used to specify (which does not appear above, but is necessary for scaling a volumetric heat source). Finally, the mesh mirror must be in the same units as used in the coupled MOOSE application, so the scaling parameter on NekRSMesh must be set to dimensionalize the nondimensional .re2 mesh. In other words, scaling must be set to .

For passive scalars, NekRS allows each to be dimensionalized in a manner similar to temperature,

s01, s02, and s03 are used to indicate the for scalars 1, 2, and 3, respectively. ds01, ds02, and ds03 are used to indicate the for scalars 1, 2, and 3, respectively.

warningwarning

These characteristic scales are used by Cardinal to scale the NekRS solution into the units that the coupled MOOSE application expects. You still need to properly non-dimensionalize the NekRS input files. That is, you cannot simply specify the non-dimensional scales in this class and expect a dimsensional NekRS input specification to be converted to non-dimensional form.

For example, suppose your NekRS input is in non-dimensional form. Applying a NekVolumeAverage postprocessor to temperature would be used to evaluate a volume average of temperature.

[Postprocessors]
  [avg_T]
    type = NekVolumeAverage
    field = temperature
  []
[]

If the NekRS inputs are properly non-dimensionalized and the correct scales are provided to this class, then temperature is non-dimensionalized according to Eq. (3) and volume is non-dimensionalized according to Eq. (4), or

(6)

The NekVolumeAverage postprocessor is then computed directly on the NekRS solution (in non-dimensional form) to give

(7)

where is the value of the postprocessor in non-dimensional form. Before returning the value of the postprocessor, Eq. (7) is dimensionalized by applying the scales in Eq. (3) and Eq. (6) to give the

(8)

where is the value of the postprocessor in dimensional form (which is what is actually returned by the postprocessor).

Example Input File Syntax

An example where the NekRS input files are set up in non-dimensional form,

[Problem<<<{"href": "../../syntax/Problem/index.html"}>>>]
  type = NekRSProblem
  casename<<<{"description": "Case name for the NekRS input files; this is <case> in <case>.par, <case>.udf, <case>.oudf, and <case>.re2."}>>> = 'msfr'

  synchronization_interval = parent_app

  [FieldTransfers<<<{"href": "../../syntax/Problem/FieldTransfers/index.html"}>>>]
    [source]
      type = NekVolumetricSource<<<{"description": "Reads/writes volumetric source data between NekRS and MOOSE."}>>>
      direction<<<{"description": "Direction in which to send data"}>>> = to_nek
      usrwrk_slot<<<{"description": "When 'direction = to_nek', the slot(s) in the usrwrk array to write the incoming data; provide one entry for each quantity being passed"}>>> = 0
    []
    [temperature]
      type = NekFieldVariable<<<{"description": "Reads/writes volumetric field data between NekRS and MOOSE."}>>>
      direction<<<{"description": "Direction in which to send data"}>>> = from_nek
    []
  []

  [Dimensionalize<<<{"href": "../../syntax/Problem/Dimensionalize/index.html"}>>>]
    L<<<{"description": "Reference length"}>>> = 1.0
    U<<<{"description": "Reference velocity"}>>> = '${fparse Re * mu / rho}'
    T<<<{"description": "Reference temperature"}>>> = '${fparse 625.0 + 273.15}'
    dT<<<{"description": "Reference temperature difference"}>>> = 100.0
    rho<<<{"description": "Reference density"}>>> = ${rho}
    Cp<<<{"description": "Reference isobaric specific heat"}>>> = 1524.86 # J/kg/K
  []

  normalization_abs_tol = 1e6
  normalization_rel_tol = 1e-3
[]
(tutorials/msfr/nek.i)

Input Parameters

  • Cp1Reference isobaric specific heat

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference isobaric specific heat

  • L1Reference length

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference length

  • T0Reference temperature

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference temperature

  • U1Reference velocity

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference velocity

  • active__all__ If specified only the blocks named will be visited and made active

    Default:__all__

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:If specified only the blocks named will be visited and made active

  • dT1Reference temperature difference

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference temperature difference

  • ds011Reference scalar 1 difference

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference scalar 1 difference

  • ds022Reference scalar 2 difference

    Default:2

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference scalar 2 difference

  • ds033Reference scalar 3 difference

    Default:3

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference scalar 3 difference

  • inactiveIf specified blocks matching these identifiers will be skipped.

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:If specified blocks matching these identifiers will be skipped.

  • rho1Reference density

    Default:1

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference density

  • s010Reference scalar 1

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference scalar 1

  • s020Reference scalar 2

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference scalar 2

  • s030Reference scalar 3

    Default:0

    C++ Type:double

    Unit:(no unit assumed)

    Controllable:No

    Description:Reference scalar 3

Optional Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

Advanced Parameters