Transient Heat Transfer

Summary

Solves a transient heat conduction problem with a boundary parameterized by a heat transfer coefficient that exchanges heat with a thermal reservoir.

Description

This problem solves the transient heat equation with strong form:

where , , , and , subject to the initial condition .

In this example, we solve this using the weak form

where

Example File

[Mesh<<<{"href": "../Mesh/index.html"}>>>]
  type = MFEMFileMesh
  file = ../mesh/mug.e
[]

[Problem<<<{"href": "../Problem/index.html"}>>>]
  type = MFEMProblem
[]

[FESpaces]
  [H1FESpace]
    type = MFEMScalarFESpace
    fec_type = H1
    fec_order = FIRST
  []
[]

[Variables<<<{"href": "../Variables/index.html"}>>>]
  [temperature]
    type = MFEMVariable
    fespace = H1FESpace
  []
[]

[AuxVariables<<<{"href": "../AuxVariables/index.html"}>>>]
  inactive<<<{"description": "If specified blocks matching these identifiers will be skipped."}>>> = average_temperature
  [average_temperature]
    type = MFEMVariable
    fespace = H1FESpace
  []
[]

[AuxKernels<<<{"href": "../AuxKernels/index.html"}>>>]
  inactive<<<{"description": "If specified blocks matching these identifiers will be skipped."}>>> = average_field
  [average_field]
    type = MFEMScalarTimeAverageAux
    variable = average_temperature
    source = temperature
  []
[]

[Kernels<<<{"href": "../Kernels/index.html"}>>>]
  [diff]
    type = MFEMDiffusionKernel
    variable = temperature
  []
  [dT_dt]
    type = MFEMTimeDerivativeMassKernel
    variable = temperature
  []
[]

[BCs<<<{"href": "../BCs/index.html"}>>>]
  active<<<{"description": "If specified only the blocks named will be visited and made active"}>>> = 'bottom top_convective'
  [bottom]
    type = MFEMScalarDirichletBC
    variable = temperature
    boundary = '1'
    coefficient = 1.0
  []
  [top_convective]
    type = MFEMConvectiveHeatFluxBC
    variable = temperature
    boundary = '2'
    T_infinity = .5
    heat_transfer_coefficient = 5
  []
  [top_dirichlet]
    type = MFEMScalarDirichletBC
    variable = temperature
    boundary = '2'
  []
[]

[Solvers]
  inactive = 'jacobi'
  [boomeramg]
    type = MFEMHypreBoomerAMG
  []
  [jacobi]
    type = MFEMOperatorJacobiSmoother
  []
  [main]
    type = MFEMHypreGMRES
    preconditioner = boomeramg
    l_tol = 1e-16
    l_max_its = 1000
  []
[]

[Executioner<<<{"href": "../Executioner/index.html"}>>>]
  type = MFEMTransient
  device = cpu
  assembly_level = legacy
  dt = 2.0
  start_time = 0.0
  end_time = 6.0
[]

[VectorPostprocessors<<<{"href": "../VectorPostprocessors/index.html"}>>>]
  [line_sample]
    type = MFEMVariableLineValueSampler
    variable = 'temperature'
    start_point = '2.125 0 -2.375'
    end_point = '2.125 0 2.625'
    num_points = 101
  []
[]

[Outputs<<<{"href": "../Outputs/index.html"}>>>]
  [CSV]
    type = CSV<<<{"description": "Output for postprocessors, vector postprocessors, and scalar variables using comma seperated values (CSV).", "href": "../../source/outputs/CSV.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'
    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."}>>> = OutputData/HeatTransfer/heattransfer
  []
[]
(moose/test/tests/mfem/kernels/heattransfer.i)