Thermo-mechanical coupling of an one pin problem

This is an example case of coupling a subchannel calculation (SCM) with a 2D-RZ thermo_mechanical model of a fuel pin.

Example Description

The example models 4 subchannels around one fuel pin (quadrilateral geometry). SCM calculates coolant temperature distribution and an average pin surface temperature Tpin that gets transfered to the pin model. The pin model calculates heat conduction within the pin and thermal expansion. Then the pin model returns linear heat flux at the surface of the pin q_prime and the updated pin diameter Dpin to SCM.

Only these three fields cross the coupling. The coolant velocity (through the mass flow rate mdot), pressure P, enthalpy h and temperature T are solved by SCM alone. The pin model sees the coolant only through Tpin, which SCM computes from the coolant temperature and the pin heat transfer coefficient, and SCM sees the pin only through q_prime and Dpin, which changes the flow area and wetted perimeter of the subchannels.

The input provides two ways of transferring Tpin to the pin model:

  • By default, a MultiAppGeneralFieldNearestLocationTransfer (transfer Tpin) gives each pin surface node the value of the nearest SCM axial node, and a MatchedValueBC imposes it (boundary condition right). This works for any number of pins without changes, but the pin surface mesh (100 axial cells) is finer than the SCM axial mesh (25 cells), so the imposed temperature is piecewise constant along the pin, with steps of up to 10 K in this example.

  • Alternatively, Tpin is sampled at the SCM axial nodes with a LineValueSampler and sent to the pin model as a profile with a MultiAppReporterTransfer (transfer Tpin_interpolated). The pin model interpolates it linearly along the pin axis with a PiecewiseLinearFromVectorPostprocessor and imposes it on the pin surface with a FunctionDirichletBC (boundary condition right_interpolated). The pin surface temperature is then continuous and equals Tpin at the SCM axial nodes. The sampling line is the axis of the single pin, so a case with several pins needs one sampler per pin. MultiAppReporterTransfer warns that it does not apply the rotation of the pin model (beta_rotation), which does not matter here because the profile depends only on the axial coordinate.

The interpolating variant is selected from the command line:


combined-opt -i one_pin_problem.i Transfers/inactive=Tpin sub:BCs/inactive=right

The two variants give the same pin power to within W, because the heat rate through the pin surface is set by the heat source and depends little on how the surface temperature varies along the pin.

Both models are given the same pin power, 100 kW, with the same axial shape. The transfer of q_prime to SCM preserves the heat rate through the pin surface computed in the pin model: it scales q_prime so that the pin power seen by SCM, SCMPinPowerPostprocessor, equals that heat rate. q_prime is first projected onto the nodes of the pin mesh with ProjectionAux, so that the transfer to the subchannel nodes takes nodal values instead of the nearest of several element centroids. Without this, the nearest-location transfer of q_prime from the pin model's axial cells to the subchannel nodes loses about 1.4% of the power.

The heat rate through the pin surface is computed from the residual of the heat conduction equation rather than from the temperature gradient. The heat conduction and heat source kernels also add their contributions to a tagged vector (extra_vector_tags), which TagVectorAux copies into an auxiliary variable. At the nodes of the pin surface, where the temperature is imposed, this residual is the heat flowing through the surface, and NodalSum adds it up (postprocessor pin_surface_heat_rate). The discrete equations balance it with the heat source, so it equals the 100 kW pin power up to the nonlinear solver tolerance on any mesh. The pin power and the coolant enthalpy rise in SCM, SCMTHPowerPostprocessor, are then both 100 kW, and the coupling conserves the heat flux and the power.

The integral of the temperature gradient over the pin surface, SideDiffusiveFluxIntegral (postprocessor pin_surface_heat_rate_gradient), is less accurate. The gradient of the finite element temperature is one order less accurate than the temperature itself, and on the pin mesh of this example the integral exceeds the heat source by 3 W (0.003%). The excess converges to zero at second order with mesh refinement.

SCM does not compute a nonlinear residual, so the fixed-point tolerance of the coupling has no effect, and the number of coupling iterations is set by fixed_point_min_its and fixed_point_max_its. The pin power in SCM is converged after two coupling iterations, and the input uses three.

Input files

The input files are the following:

SCM Model.

######## BC's #################
T_in = 359.15
# [1e+6 kg/m^2-hour] turns into kg/m^2-sec
mass_flux_in = '${fparse 1e+6 * 17.00 / 3600.}'
P_out = 4.923e6 # Pa
heated_length = 1.0
######## Geometry #
[GlobalParams<<<{"href": "../../../syntax/GlobalParams/index.html"}>>>]
    nx = 2
    ny = 2
    n_cells = 25
    pitch = 0.0126
    pin_diameter = 0.00950
    side_gap = 0.00095
    heated_length = ${heated_length}
    spacer_z = '0.0'
    spacer_k = '0.0'
    power = 100000.0 # W
[]

[QuadSubChannelMesh<<<{"href": "../../../syntax/QuadSubChannelMesh/index.html"}>>>]
    [subchannel]
        type = SCMQuadAssemblyMeshGenerator<<<{"description": "Creates one mesh containing both 1D subchannels and 1D pins in a square lattice arrangement", "href": "../../../source/meshgenerators/SCMQuadAssemblyMeshGenerator.html"}>>>
    []
[]

[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
    [axial_heat_rate]
        type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../../source/functions/MooseParsedFunction.html"}>>>
        expression<<<{"description": "The user defined function."}>>> = '(pi/2)*sin(pi*z/L)'
        symbol_names<<<{"description": "Symbols (excluding t,x,y,z) that are bound to the values provided by the corresponding items in the symbol_values vector."}>>> = 'L'
        symbol_values<<<{"description": "Constant numeric values, postprocessor names, function names, and scalar variables corresponding to the symbols in symbol_names."}>>> = '${heated_length}'
    []
[]

[FluidProperties<<<{"href": "../../../syntax/FluidProperties/index.html"}>>>]
    [water]
        type = Water97FluidProperties<<<{"description": "Fluid properties for water and steam (H2O) using IAPWS-IF97", "href": "../../../source/fluidproperties/Water97FluidProperties.html"}>>>
    []
[]

[SubChannel<<<{"href": "../../../syntax/SubChannel/index.html"}>>>]
  type = QuadSubChannel1PhaseProblem
  fp = water
  n_blocks = 1
  compute_density = true
  compute_viscosity = true
  compute_power = true
  P_out = ${P_out}
  verbose_subchannel = true
  full_output<<<{"description": "Add optional subchannel output variables"}>>> = true
  friction_closure = 'MATRA'
  mixing_closure ='constant_beta'
  pin_HTC_closure = 'Dittus-Boelter'
[]

[SCMClosures<<<{"href": "../../../syntax/SCMClosures/index.html"}>>>]
  [MATRA]
    type = SCMFrictionMATRA<<<{"description": "Class that computes the axial friction factor using the MATRA correlation.", "href": "../../../source/scmclosures/SCMFrictionMATRA.html"}>>>
  []
  [constant_beta]
    type = SCMMixingConstantBeta<<<{"description": "Class that models the turbulent mixing coefficient beta as a user defined constant.", "href": "../../../source/scmclosures/SCMMixingConstantBeta.html"}>>>
    beta<<<{"description": "Turbulent mixing parameter [-]."}>>> = 0.006
    CT<<<{"description": "Turbulent momentum, modeling parameter [-]."}>>> = 2.6
  []
  [Dittus-Boelter]
    type = SCMHTCDittusBoelter<<<{"description": "Class that computes the convective heat transfer coefficient using the Dittus Boelter correlation.", "href": "../../../source/scmclosures/SCMHTCDittusBoelter.html"}>>>
  []
[]

[ICs<<<{"href": "../../../syntax/Cardinal/ICs/index.html"}>>>]

    [q_prime_IC]
        type = SCMQuadPowerIC<<<{"description": "Computes axial heat rate (W/m) assigned to the fuel pins in a square lattice arrangement", "href": "../../../source/ics/SCMQuadPowerIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = q_prime
        filename<<<{"description": "name of radial power profile .txt file (should be a single column) [UnitLess]."}>>> = "power_profile.txt"
        axial_heat_rate<<<{"description": "Axial shape of the heat rate as a function of the distance from the start of the heated section [Unitless]. Its magnitude does not matter because each pin is rescaled to its assigned power"}>>> = axial_heat_rate
    []

    [T_ic]
        type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = T
        value<<<{"description": "The value to be set in IC"}>>> = ${T_in}
    []

    [P_ic]
        type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = P
        value<<<{"description": "The value to be set in IC"}>>> = 0.0
    []

    [DP_ic]
        type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = DP
        value<<<{"description": "The value to be set in IC"}>>> = 0.0
    []

    [Viscosity_ic]
        type = ViscosityIC<<<{"description": "Computes viscosity from specified pressure and temperature", "href": "../../../source/ics/ViscosityIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mu
        p<<<{"description": "Pressure [Pa]"}>>> = ${P_out}
        T<<<{"description": "Temperature [K]"}>>> = T
        fp<<<{"description": "Fluid properties user object name"}>>> = water
    []

    [rho_ic]
        type = RhoFromPressureTemperatureIC<<<{"description": "Computes the density from pressure and temperature.", "href": "../../../source/ics/RhoFromPressureTemperatureIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = rho
        p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
        T<<<{"description": "The temperature [K]"}>>> = T
        fp<<<{"description": "The name of fluid properties user object."}>>> = water
    []

    [h_ic]
        type = SpecificEnthalpyFromPressureTemperatureIC<<<{"description": "Computes the specific enthalpy from pressure and temperature.", "href": "../../../source/ics/SpecificEnthalpyFromPressureTemperatureIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = h
        p<<<{"description": "The pressure [Pa]"}>>> = ${P_out}
        T<<<{"description": "The temperature [K]"}>>> = T
        fp<<<{"description": "The name of fluid properties user object."}>>> = water
    []

    [mdot_ic]
        type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = mdot
        value<<<{"description": "The value to be set in IC"}>>> = 0.0
    []
[]

[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
    [T_in_bc]
        type = ConstantAux<<<{"description": "Creates a constant field in the domain.", "href": "../../../source/auxkernels/ConstantAux.html"}>>>
        variable<<<{"description": "The name of the variable that this object applies to"}>>> = T
        boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
        value<<<{"description": "Some constant value that can be read from the input file"}>>> = ${T_in}
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
    []
    [mdot_in_bc]
        type = SCMMassFlowRateAux<<<{"description": "Computes mass flow rate from specified mass flux and subchannel cross-sectional area. Can read either PostprocessorValue or Real", "href": "../../../source/auxkernels/SCMMassFlowRateAux.html"}>>>
        variable<<<{"description": "The name of the variable that this object applies to"}>>> = mdot
        boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = inlet
        area<<<{"description": "Cross sectional area [m^2]"}>>> = S
        mass_flux<<<{"description": "The postprocessor or Real to use for the value of mass_flux"}>>> = ${mass_flux_in}
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_begin'
    []
[]

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
    # Heat rate from the pins to the coolant, which the q_prime transfer preserves
    [pin_power]
        type = SCMPinPowerPostprocessor<<<{"description": "Calculates the total heat rate that goes into the coolant from all the heated fuel-pins based on aux variable q_prime", "href": "../../../source/postprocessors/SCMPinPowerPostprocessor.html"}>>>
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end transfer'
    []
    [coolant_power]
        type = SCMTHPowerPostprocessor<<<{"description": "Calculates the total power of the subchannel assembly $[W]$ via the thermal-hydraulic enthalpy flow rate balance between inlet and outlet.", "href": "../../../source/postprocessors/SCMTHPowerPostprocessor.html"}>>>
    []
[]

[VectorPostprocessors<<<{"href": "../../../syntax/VectorPostprocessors/index.html"}>>>]
    # Pin surface temperature at the SCM axial nodes, interpolated linearly in the pin model when the
    # Tpin_interpolated transfer is active
    [Tpin_profile]
        type = LineValueSampler<<<{"description": "Samples variable(s) along a specified line", "href": "../../../source/vectorpostprocessors/LineValueSampler.html"}>>>
        variable<<<{"description": "The names of the variables that this VectorPostprocessor operates on"}>>> = Tpin
        start_point<<<{"description": "The beginning of the line"}>>> = '0 0 0'
        end_point<<<{"description": "The ending of the line"}>>> = '0 0 ${heated_length}'
        num_points<<<{"description": "The number of points to sample along the line"}>>> = 26 # n_cells + 1, one point per SCM axial node
        sort_by<<<{"description": "What to sort the samples by. Options include 'x', 'y', 'z', 'id', and the name of any of the sampled quantities (which each create a vector of the same name)."}>>> = z
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end'
    []
[]

[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
    exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
    csv<<<{"description": "Output the scalar variable and postprocessors to a *.csv file using the default CSV output."}>>> = true
    [Temp_Out_MATRIX]
        type = QuadSubChannelNormalSliceValues<<<{"description": "Prints out a user selected value at a user selected axial height in a matrix format to be used for post-processing", "href": "../../../source/outputs/QuadSubChannelNormalSliceValues.html"}>>>
        variable<<<{"description": "Variable you want the value of"}>>> = T
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
        file_base<<<{"description": "The desired solution output name without an extension. If not provided, MOOSE sets it with Outputs/file_base when available. Otherwise, MOOSE uses input file name and this object name for a master input or uses master file_base, the subapp name and this object name for a subapp input to set it."}>>> = "Temp_Out.txt"
        height<<<{"description": "Axial location of normal slice [m]"}>>> = 1.0
    []
    [mdot_Out_MATRIX]
        type = QuadSubChannelNormalSliceValues<<<{"description": "Prints out a user selected value at a user selected axial height in a matrix format to be used for post-processing", "href": "../../../source/outputs/QuadSubChannelNormalSliceValues.html"}>>>
        variable<<<{"description": "Variable you want the value of"}>>> = mdot
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
        file_base<<<{"description": "The desired solution output name without an extension. If not provided, MOOSE sets it with Outputs/file_base when available. Otherwise, MOOSE uses input file name and this object name for a master input or uses master file_base, the subapp name and this object name for a subapp input to set it."}>>> = "mdot_Out.txt"
        height<<<{"description": "Axial location of normal slice [m]"}>>> = 1.0
    []
    [mdot_In_MATRIX]
        type = QuadSubChannelNormalSliceValues<<<{"description": "Prints out a user selected value at a user selected axial height in a matrix format to be used for post-processing", "href": "../../../source/outputs/QuadSubChannelNormalSliceValues.html"}>>>
        variable<<<{"description": "Variable you want the value of"}>>> = mdot
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = final
        file_base<<<{"description": "The desired solution output name without an extension. If not provided, MOOSE sets it with Outputs/file_base when available. Otherwise, MOOSE uses input file name and this object name for a master input or uses master file_base, the subapp name and this object name for a subapp input to set it."}>>> = "mdot_In.txt"
        height<<<{"description": "Axial location of normal slice [m]"}>>> = 0.0
    []
[]

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
    type = Steady
    petsc_options_iname = '-pc_type -pc_hypre_type'
    petsc_options_value = 'hypre boomeramg'
    # SCM does not compute a nonlinear residual, so the fixed-point tolerance has no effect and the
    # number of coupling iterations is fixed. The pin power in SCM is converged after two iterations
    fixed_point_max_its = 3
    fixed_point_min_its = 3
[]

################################################################################
[MultiApps<<<{"href": "../../../syntax/MultiApps/index.html"}>>>]
    ################################################################################
    # Couple to Thermo-Mechanical Pin model (uses kernels available in MOOSE)
    ################################################################################
    [sub]
        type = FullSolveMultiApp<<<{"description": "Performs a complete simulation during each execution.", "href": "../../../source/multiapps/FullSolveMultiApp.html"}>>>
        input_files<<<{"description": "The input file for each App.  If this parameter only contains one input file it will be used for all of the Apps.  When using 'positions_from_file' it is also admissable to provide one input_file per file."}>>> = one_pin_problem_sub.i
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end'
        positions<<<{"description": "The positions of the App locations.  Each set of 3 values will represent a Point.  This and 'positions_file' cannot be both supplied. If this and 'positions_file'/'_objects' are not supplied, a single position (0,0,0) will be used"}>>> = '0   0   0 '
        output_in_position<<<{"description": "If true this will cause the output from the MultiApp to be 'moved' by its position vector"}>>> = true
        bounding_box_padding<<<{"description": "Additional padding added to the dimensions of the bounding box. The values are added to the x, y and z dimension respectively."}>>> = '0 0 0.01'
    []

    ################################################################################
    # A multiapp that projects the solution to a detailed mesh for visualization purposes
    ################################################################################
    [viz]
        type = FullSolveMultiApp<<<{"description": "Performs a complete simulation during each execution.", "href": "../../../source/multiapps/FullSolveMultiApp.html"}>>>
        input_files<<<{"description": "The input file for each App.  If this parameter only contains one input file it will be used for all of the Apps.  When using 'positions_from_file' it is also admissable to provide one input_file per file."}>>> = '3d.i'
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'FINAL'
    []
[]

[Transfers<<<{"href": "../../../syntax/Transfers/index.html"}>>>]
    # Tpin_interpolated replaces Tpin when the pin model uses the right_interpolated boundary condition
    inactive<<<{"description": "If specified blocks matching these identifiers will be skipped."}>>> = Tpin_interpolated
    [Tpin] # send the nearest SCM pin surface temperature to each pin surface node
        type = MultiAppGeneralFieldNearestLocationTransfer<<<{"description": "Transfers field data at the MultiApp position by finding the value at the nearest neighbor(s) in the origin application.", "href": "../../../source/transfers/MultiAppGeneralFieldNearestLocationTransfer.html"}>>>
        to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = sub
        variable<<<{"description": "The auxiliary variable to store the transferred values in."}>>> = Pin_surface_temperature
        source_variable<<<{"description": "The variable to transfer from."}>>> = Tpin
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end'
        greedy_search<<<{"description": "Whether or not to send a point to all the domains. If true, all the processors will be checked for a given point.The code will be slow if this flag is on but it will give a better solution."}>>> = true
    []

    [Tpin_interpolated] # alternative: send the pin surface temperature profile to the pin model
        type = MultiAppReporterTransfer<<<{"description": "Transfers reporter data between two applications.", "href": "../../../source/transfers/MultiAppReporterTransfer.html"}>>>
        to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = sub
        from_reporters<<<{"description": "List of the reporter names (object_name/value_name) to transfer the value from."}>>> = 'Tpin_profile/z Tpin_profile/Tpin'
        to_reporters<<<{"description": "List of the reporter names (object_name/value_name) to transfer the value to."}>>> = 'Tpin_profile/z Tpin_profile/Tpin'
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end'
    []

    [diameter] # send diameter information from pin model to subchannel
        type = MultiAppGeneralFieldNearestLocationTransfer<<<{"description": "Transfers field data at the MultiApp position by finding the value at the nearest neighbor(s) in the origin application.", "href": "../../../source/transfers/MultiAppGeneralFieldNearestLocationTransfer.html"}>>>
        from_multi_app<<<{"description": "The name of the MultiApp to receive data from"}>>> = sub
        variable<<<{"description": "The auxiliary variable to store the transferred values in."}>>> = Dpin
        source_variable<<<{"description": "The variable to transfer from."}>>> = pin_diameter_deformed
        from_boundaries<<<{"description": "The boundary we are transferring from (if not specified, whole domain is used)."}>>> = right
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end'
        greedy_search<<<{"description": "Whether or not to send a point to all the domains. If true, all the processors will be checked for a given point.The code will be slow if this flag is on but it will give a better solution."}>>> = true
    []

    [q_prime] # send heat flux from pin model to subchannel
        type = MultiAppGeneralFieldNearestLocationTransfer<<<{"description": "Transfers field data at the MultiApp position by finding the value at the nearest neighbor(s) in the origin application.", "href": "../../../source/transfers/MultiAppGeneralFieldNearestLocationTransfer.html"}>>>
        from_multi_app<<<{"description": "The name of the MultiApp to receive data from"}>>> = sub
        variable<<<{"description": "The auxiliary variable to store the transferred values in."}>>> = q_prime
        source_variable<<<{"description": "The variable to transfer from."}>>> = q_prime_nodal
        from_boundaries<<<{"description": "The boundary we are transferring from (if not specified, whole domain is used)."}>>> = right
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end'
        greedy_search<<<{"description": "Whether or not to send a point to all the domains. If true, all the processors will be checked for a given point.The code will be slow if this flag is on but it will give a better solution."}>>> = true
        # Scale q_prime so that the pin power in SCM equals the heat rate through the pin surface
        from_postprocessors_to_be_preserved<<<{"description": "The name of the Postprocessor in the from-app to evaluate an adjusting factor."}>>> = pin_surface_heat_rate
        to_postprocessors_to_be_preserved<<<{"description": "The name of the Postprocessor in the to-app to evaluate an adjusting factor."}>>> = pin_power
    []

    [subchannel_transfer]
        type = SCMSolutionTransfer<<<{"description": "Transfers subchannel or pin solutions from a SubChannel mesh onto a visualization mesh.", "href": "../../../source/transfers/SCMSolutionTransfer.html"}>>>
        to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = viz
        variable<<<{"description": "The auxiliary variables to transfer."}>>> = 'mdot SumWij P DP h T rho mu S w_perim'
    []

    [pin_transfer]
        type = SCMSolutionTransfer<<<{"description": "Transfers subchannel or pin solutions from a SubChannel mesh onto a visualization mesh.", "href": "../../../source/transfers/SCMSolutionTransfer.html"}>>>
        transfer_type<<<{"description": "Whether to transfer subchannel-centered or pin-centered fields."}>>> = pin
        to_multi_app<<<{"description": "The name of the MultiApp to transfer the data to"}>>> = viz
        variable<<<{"description": "The auxiliary variables to transfer."}>>> = 'Tpin Dpin q_prime'
    []
[]
(moose/modules/combined/test/tests/subchannel_thermo_mech/one_pin_problem.i)

Fuel Pin Model.

pin_diameter = 0.00950
heated_length = 1.0
T_in = 359.15
[GlobalParams<<<{"href": "../../../syntax/GlobalParams/index.html"}>>>]
    displacements = 'disp_x disp_y'
[]

[Problem<<<{"href": "../../../syntax/Problem/index.html"}>>>]
    # Residual of the heat conduction and heat source kernels. At the nodes of the Dirichlet
    # boundary, it is the heat flowing through that boundary
    extra_tag_vectors = 'heat_residual'
[]

[Mesh<<<{"href": "../../../syntax/Mesh/index.html"}>>>]
    second_order<<<{"description": "Converts a first order mesh to a second order mesh.  Note: This is NOT needed if you are reading an actual first order mesh."}>>> = true
    [PinMesh]
        type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
        dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 2
        xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = '${fparse pin_diameter / 2.0}'
        bias_x<<<{"description": "The amount by which to grow (or shrink) the cells in the x-direction."}>>> = 1.0
        nx<<<{"description": "Number of elements in the X direction"}>>> = 20
        ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = ${heated_length}
        ny<<<{"description": "Number of elements in the Y direction"}>>> = 100 # number of axial cells
    []
    coord_type = RZ
    rz_coord_axis = Y
    beta_rotation = 90
[]

[Functions<<<{"href": "../../../syntax/Functions/index.html"}>>>]
    [Tpin_fn] # linear interpolation of the SCM pin surface temperature along the pin axis
        type = PiecewiseLinearFromVectorPostprocessor<<<{"description": "Provides piecewise linear interpolation of from two columns of a VectorPostprocessor", "href": "../../../source/functions/PiecewiseLinearFromVectorPostprocessor.html"}>>>
        vectorpostprocessor_name<<<{"description": "The name of the VectorPostprocessor that you want to use"}>>> = Tpin_profile
        argument_column<<<{"description": "VectorPostprocessor column tabulating the abscissa of the sampled function"}>>> = z
        value_column<<<{"description": "VectorPostprocessor column tabulating the ordinate (function values) of the sampled function"}>>> = Tpin
        component<<<{"description": "Component of the function evaluation point used to sample the VectorPostprocessor"}>>> = y
    []
    [volumetric_heat_rate] # Defined such as to be consistent with the IC in SCM
        type = ParsedFunction<<<{"description": "Function created by parsing a string", "href": "../../../source/functions/MooseParsedFunction.html"}>>>
        expression<<<{"description": "The user defined function."}>>> = '(4.0 * 100000.0 / (pi * D * D * L)) * (pi/2)*sin(pi*y/L)'
        symbol_names<<<{"description": "Symbols (excluding t,x,y,z) that are bound to the values provided by the corresponding items in the symbol_values vector."}>>> = 'L D'
        symbol_values<<<{"description": "Constant numeric values, postprocessor names, function names, and scalar variables corresponding to the symbols in symbol_names."}>>> = '${heated_length} ${pin_diameter}'
    []
[]

[Variables<<<{"href": "../../../syntax/Variables/index.html"}>>>]
    [temperature]
        order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
        family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = LAGRANGE
    []
[]

[AuxVariables<<<{"href": "../../../syntax/AuxVariables/index.html"}>>>]
    [Pin_surface_temperature]
        # Same order as temperature, so the MatchedValueBC has a value at every boundary node
        order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
    []
    [pin_diameter_deformed]
        # order = CONSTANT
        # family = MONOMIAL
    []
    [q_prime]
        order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = CONSTANT
        family<<<{"description": "Specifies the family of FE shape functions to use for this variable"}>>> = MONOMIAL
    []
    # q_prime on the nodes, so that the transfer to the subchannel nodes is not ambiguous
    [q_prime_nodal]
    []
    [heat_residual]
        # Same order as temperature, to hold the residual at every temperature node
        order<<<{"description": "Specifies the order of the FE shape function to use for this variable (additional orders not listed are allowed)"}>>> = SECOND
    []
[]

[Physics<<<{"href": "../../../syntax/Physics/index.html"}>>>]
    [SolidMechanics<<<{"href": "../../../syntax/Physics/SolidMechanics/index.html"}>>>]
        [QuasiStatic<<<{"href": "../../../syntax/Physics/SolidMechanics/QuasiStatic/index.html"}>>>]
            add_variables<<<{"description": "Add the displacement variables"}>>> = true
            strain<<<{"description": "Strain formulation"}>>> = SMALL
            incremental<<<{"description": "Use incremental or total strain (if not explicitly specified this defaults to incremental for finite strain and total for small strain)"}>>> = true
            generate_output<<<{"description": "Add scalar quantity output for stress and/or strain"}>>> = 'stress_xx stress_yy stress_xy'
            temperature<<<{"description": "The temperature"}>>> = temperature

            [block0]
                eigenstrain_names<<<{"description": "List of eigenstrains to be applied in this strain calculation"}>>> = eigenstrain
                block<<<{"description": "The list of ids of the blocks (subdomain) that the stress divergence kernels will be applied to"}>>> = 0
            []
        []
    []
[]

[AuxKernels<<<{"href": "../../../syntax/AuxKernels/index.html"}>>>]
    [QPrime]
        type = SCMRZPinQPrimeAux<<<{"description": "Axial heat rate on pin surface for a 2D-RZ axi-symmetric fuel pin model", "href": "../../../source/auxkernels/SCMRZPinQPrimeAux.html"}>>> # This kernel calculates linear heat rate for the 2D-RZ pin model
        diffusivity<<<{"description": "The name of the diffusivity material property that will be used in the flux computation."}>>> = 'thermal_conductivity'
        variable<<<{"description": "The name of the variable that this object applies to"}>>> = q_prime
        diffusion_variable<<<{"description": "The name of the variable"}>>> = temperature
        component<<<{"description": "The desired component of flux."}>>> = normal
        boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = 'right'
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_END'
        use_displaced_mesh<<<{"description": "Whether or not this object should use the displaced mesh for computation.  Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used."}>>> = true
    []
    [QPrimeNodal]
        type = ProjectionAux<<<{"description": "Returns the specified variable as an auxiliary variable with a projection of the source variable. If they are the same type, this amounts to a simple copy.", "href": "../../../source/auxkernels/ProjectionAux.html"}>>>
        variable<<<{"description": "The name of the variable that this object applies to"}>>> = q_prime_nodal
        v<<<{"description": "Variable to take the value of."}>>> = q_prime
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_END'
    []
    [HeatResidual]
        type = TagVectorAux<<<{"description": "Extract DOF values from a tagged vector into an AuxVariable", "href": "../../../source/auxkernels/TagVectorAux.html"}>>>
        variable<<<{"description": "The name of the variable that this object applies to"}>>> = heat_residual
        v<<<{"description": "The coupled variable whose components are coupled to AuxVariable"}>>> = temperature
        vector_tag<<<{"description": "Name of the vector tag to extract values from"}>>> = 'heat_residual'
    []
    [Deformation]
        type = ParsedAux<<<{"description": "Sets a field variable value to the evaluation of a parsed expression.", "href": "../../../source/auxkernels/ParsedAux.html"}>>>
        variable<<<{"description": "The name of the variable that this object applies to"}>>> = pin_diameter_deformed
        coupled_variables<<<{"description": "Vector of coupled variable names"}>>> = 'disp_x'
        expression<<<{"description": "Parsed function expression to compute"}>>> = '2.0 * disp_x + ${pin_diameter}'
        execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'timestep_end'
    []
[]

[Kernels<<<{"href": "../../../syntax/Kernels/index.html"}>>>]
    [heat_conduction]
        type = HeatConduction<<<{"description": "Diffusive heat conduction term $-\\nabla\\cdot(k\\nabla T)$ of the thermal energy conservation equation", "href": "../../../source/kernels/HeatConduction.html"}>>>
        variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
        use_displaced_mesh<<<{"description": "Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used."}>>> = true
        extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'heat_residual'
    []
    [heat_source]
        type = HeatSource<<<{"description": "Demonstrates the multiple ways that scalar values can be introduced into kernels, e.g. (controllable) constants, functions, and postprocessors. Implements the weak form $(\\psi_i, -f)$.", "href": "../../../source/kernels/HeatSource.html"}>>>
        variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
        function<<<{"description": "Function describing the volumetric heat source"}>>> = volumetric_heat_rate
        use_displaced_mesh<<<{"description": "Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used."}>>> = false
        extra_vector_tags<<<{"description": "The extra tags for the vectors this Kernel should fill"}>>> = 'heat_residual'
    []
[]

[Materials<<<{"href": "../../../syntax/Materials/index.html"}>>>]
    [elasticity_tensor]
        type = ComputeIsotropicElasticityTensor<<<{"description": "Compute a constant isotropic elasticity tensor.", "href": "../../../source/materials/ComputeIsotropicElasticityTensor.html"}>>>
        block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
        bulk_modulus<<<{"description": "The bulk modulus for the material."}>>> = 0.333333333333e6
        poissons_ratio<<<{"description": "Poisson's ratio for the material."}>>> = 0.0
    []
    [thermal_strain]
        type = ComputeThermalExpansionEigenstrain<<<{"description": "Computes eigenstrain due to thermal expansion with a constant coefficient", "href": "../../../source/materials/ComputeThermalExpansionEigenstrain.html"}>>>
        block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
        temperature<<<{"description": "Coupled temperature"}>>> = temperature
        stress_free_temperature<<<{"description": "Reference temperature at which there is no thermal expansion for thermal eigenstrain calculation"}>>> = 117.56
        thermal_expansion_coeff<<<{"description": "Thermal expansion coefficient"}>>> = 1e-5
        eigenstrain_name<<<{"description": "Material property name for the eigenstrain tensor computed by this model. IMPORTANT: The name of this property must also be provided to the strain calculator."}>>> = eigenstrain
    []
    [stress]
        type = ComputeStrainIncrementBasedStress<<<{"description": "Compute stress after subtracting inelastic strain increments", "href": "../../../source/materials/ComputeStrainIncrementBasedStress.html"}>>>
        block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
    []
    [heat_conductor]
        type = HeatConductionMaterial<<<{"description": "General-purpose material model for heat conduction", "href": "../../../source/materials/HeatConductionMaterial.html"}>>>
        thermal_conductivity<<<{"description": "The thermal conductivity value"}>>> = 1.0
        block<<<{"description": "The list of blocks (ids or names) that this object will be applied"}>>> = 0
    []
[]

[BCs<<<{"href": "../../../syntax/BCs/index.html"}>>>]
    # right_interpolated replaces right when SCM sends Tpin with the Tpin_interpolated transfer
    inactive<<<{"description": "If specified blocks matching these identifiers will be skipped."}>>> = right_interpolated
    [left]
        type = NeumannBC<<<{"description": "Imposes the integrated boundary condition $\\frac{\\partial u}{\\partial n}=h$, where $h$ is a constant, controllable value.", "href": "../../../source/bcs/NeumannBC.html"}>>>
        variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
        boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'left'
    []
    [right]
        type = MatchedValueBC<<<{"description": "Implements a NodalBC which equates two different Variables' values on a specified boundary.", "href": "../../../source/bcs/MatchedValueBC.html"}>>>
        variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
        boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'right'
        v<<<{"description": "The variable whose value we are to match."}>>> = Pin_surface_temperature
    []
    [right_interpolated]
        type = FunctionDirichletBC<<<{"description": "Imposes the essential boundary condition $u=g(t,\\vec{x})$, where $g$ is a (possibly) time and space-dependent MOOSE Function.", "href": "../../../source/bcs/FunctionDirichletBC.html"}>>>
        variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = temperature
        boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'right'
        function<<<{"description": "The forcing function."}>>> = Tpin_fn
    []
    [no_x]
        type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
        variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_x
        boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'left'
        value<<<{"description": "Value of the BC"}>>> = 0.0
    []
    [no_y]
        type = DirichletBC<<<{"description": "Imposes the essential boundary condition $u=g$, where $g$ is a constant, controllable value.", "href": "../../../source/bcs/DirichletBC.html"}>>>
        variable<<<{"description": "The name of the variable that this residual object operates on"}>>> = disp_y
        boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = 'bottom top'
        value<<<{"description": "Value of the BC"}>>> = 0.0
    []
[]

[ICs<<<{"href": "../../../syntax/Cardinal/ICs/index.html"}>>>]
    [temperature_ic]
        type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = temperature
        value<<<{"description": "The value to be set in IC"}>>> = ${T_in}
    []
    [q_prime_ic]
        type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = q_prime
        value<<<{"description": "The value to be set in IC"}>>> = 0.0
    []
    [RD_IC]
        type = ConstantIC<<<{"description": "Sets a constant field value.", "href": "../../../source/ics/ConstantIC.html"}>>>
        variable<<<{"description": "The variable this initial condition is supposed to provide values for."}>>> = pin_diameter_deformed
        value<<<{"description": "The value to be set in IC"}>>> = ${pin_diameter}
    []
[]

[Preconditioning<<<{"href": "../../../syntax/Preconditioning/index.html"}>>>]
    [smp]
        type = SMP<<<{"description": "Single matrix preconditioner (SMP) builds a preconditioner using user defined off-diagonal parts of the Jacobian.", "href": "../../../source/preconditioners/SingleMatrixPreconditioner.html"}>>>
        full<<<{"description": "Set to true if you want the full set of couplings between variables simply for convenience so you don't have to set every off_diag_row and off_diag_column combination. The single matrix preconditioner defaults this to true for NEWTON and LINEAR solves if no coupling is specified."}>>> = true
    []
[]

[Executioner<<<{"href": "../../../syntax/Executioner/index.html"}>>>]
    type = Transient
    solve_type = 'PJFNK'
    nl_abs_tol = 1e-7
    l_max_its = 20
    start_time = 0.0
    dt = 0.5
    num_steps = 2
    end_time = 1.0
    petsc_options_iname = '-pc_type -mat_fd_coloring_err -mat_fd_type'
    petsc_options_value = 'lu       1e-6                 ds'

    [Quadrature<<<{"href": "../../../syntax/Executioner/Quadrature/index.html"}>>>]
        order<<<{"description": "Order of the quadrature"}>>> = FIFTH
        side_order<<<{"description": "Order of the quadrature for sides"}>>> = SEVENTH
    []
[]

[Postprocessors<<<{"href": "../../../syntax/Postprocessors/index.html"}>>>]
    # Heat rate through the pin surface from the residual at the pin surface nodes, preserved by the
    # q_prime transfer to SCM. The weak form balances it with the heat source, so it equals the pin
    # power up to the nonlinear tolerance on any mesh
    [pin_surface_residual]
        type = NodalSum<<<{"description": "Computes the sum of all of the nodal values of the specified variable. Note: This object sets the default \"unique_node_execute\" flag to true to avoid double counting nodes between shared blocks.", "href": "../../../source/postprocessors/NodalSum.html"}>>>
        variable<<<{"description": "The name of the variable that this postprocessor operates on"}>>> = heat_residual
        boundary<<<{"description": "The list of boundaries (ids or names) from the mesh where this object applies"}>>> = right
        outputs<<<{"description": "Vector of output names where you would like to restrict the output of variables(s) associated with this object"}>>> = none
    []
    [pin_surface_heat_rate]
        # The residual is negative for heat leaving the pin
        type = ParsedPostprocessor<<<{"description": "Computes a parsed expression with post-processors", "href": "../../../source/postprocessors/ParsedPostprocessor.html"}>>>
        expression<<<{"description": "function expression"}>>> = '-pin_surface_residual'
        pp_names<<<{"description": "Post-processors arguments"}>>> = 'pin_surface_residual'
    []
    # Heat rate through the pin surface from the temperature gradient, which exceeds the heat source
    # by the discretization error of the gradient
    [pin_surface_heat_rate_gradient]
        type = SideDiffusiveFluxIntegral<<<{"description": "Computes the integral of the diffusive flux over the specified boundary", "href": "../../../source/postprocessors/SideDiffusiveFluxIntegral.html"}>>>
        variable<<<{"description": "The name of the variable which this postprocessor integrates"}>>> = temperature
        boundary<<<{"description": "The list of boundary IDs from the mesh where this object applies"}>>> = right
        diffusivity<<<{"description": "The name of the diffusivity material property that will be used in the flux computation. This must be provided if the variable is of finite element type"}>>> = thermal_conductivity
        use_displaced_mesh<<<{"description": "Whether or not this object should use the displaced mesh for computation.  Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used."}>>> = true
    []
    [total_power]
        type = ElementIntegralFunctorPostprocessor<<<{"description": "Computes a volume integral of the specified functor", "href": "../../../source/postprocessors/ElementIntegralFunctorPostprocessor.html"}>>>
        functor<<<{"description": "The name of the functor that this object operates on. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = volumetric_heat_rate
        use_displaced_mesh<<<{"description": "Whether or not this object should use the displaced mesh for computation.  Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used."}>>> = false
    []
    [total_power_disp]
        type = ElementIntegralFunctorPostprocessor<<<{"description": "Computes a volume integral of the specified functor", "href": "../../../source/postprocessors/ElementIntegralFunctorPostprocessor.html"}>>>
        functor<<<{"description": "The name of the functor that this object operates on. A functor is any of the following: a variable, a functor material property, a function, a postprocessor or a number."}>>> = volumetric_heat_rate
        use_displaced_mesh<<<{"description": "Whether or not this object should use the displaced mesh for computation.  Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used."}>>> = true
    []
    [volume]
        type = VolumePostprocessor<<<{"description": "Computes the volume of a specified block", "href": "../../../source/postprocessors/VolumePostprocessor.html"}>>>
    []
    [volume_disp]
        type = VolumePostprocessor<<<{"description": "Computes the volume of a specified block", "href": "../../../source/postprocessors/VolumePostprocessor.html"}>>>
        use_displaced_mesh<<<{"description": "Whether or not this object should use the displaced mesh for computation.  Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used."}>>> = true
    []
[]

[VectorPostprocessors<<<{"href": "../../../syntax/VectorPostprocessors/index.html"}>>>]
    # Filled by the Tpin_interpolated transfer from SCM: pin surface temperature at the SCM axial nodes
    [Tpin_profile]
        type = ConstantVectorPostprocessor<<<{"description": "Populate constant VectorPostprocessorValue directly from input file.", "href": "../../../source/vectorpostprocessors/ConstantVectorPostprocessor.html"}>>>
        vector_names<<<{"description": "Names of the column vectors in this object"}>>> = 'z Tpin'
        value<<<{"description": "Vector values this object will have. Leading dimension must be equal to leading dimension of vector_names parameter."}>>> = '0 ${heated_length}; ${T_in} ${T_in}'
    []
[]

[Outputs<<<{"href": "../../../syntax/Outputs/index.html"}>>>]
    exodus<<<{"description": "Output the results using the default settings for Exodus output."}>>> = true
    [csv]
        type = CSV<<<{"description": "Output for postprocessors, vector postprocessors, and scalar variables using comma seperated values (CSV).", "href": "../../../source/outputs/CSV.html"}>>>
        show<<<{"description": "A list of the variables and postprocessors that should be output to the Exodus file (may include Variables, ScalarVariables, and Postprocessor names)."}>>> = 'pin_surface_heat_rate pin_surface_heat_rate_gradient total_power'
    []
[]
(moose/modules/combined/test/tests/subchannel_thermo_mech/one_pin_problem_sub.i)

Caveat

The SCM input file utilizes the MultiApp functionality and runs the fuel model as a SubApp. The executable to be used is the combined-opt that is compiled with the make file in combined folder of MOOSE. The input files are in modules/combined/test/tests/subchannel_thermo_mech.