Transient Heat Transfer (Mixed Form)

Summary

Solves a transient heat conduction problem using a mixed weak form, representing temperature on piecewise constant conforming finite elements, and heat fluxes on conforming Raviart-Thomas elements.

Description

This problem solves the transient heat equation with strong form:

where and , subject to the initial condition .

In this example, we solve this by introducing the heat flux to generate the mixed weak form of the transient heat equation

where

and the polynomial order of the FEs used to represent and is one order higher than and .

Notably, in contrast to the primal weak form for the transient heat equation solved here, the heat flux on is strongly imposed via a Dirichlet condition, and temperatures on boundaries are imposed weakly via boundary integrals.

Example File

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

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

[FESpaces]
  [HDivFESpace]
    type = MFEMVectorFESpace
    fec_type = RT
    fec_order = FIRST
  []
  [L2FESpace]
    type = MFEMScalarFESpace
    fec_type = L2
    fec_order = CONSTANT
  []
[]

[Variables<<<{"href": "../Variables/index.html"}>>>]
  [time_integrated_heat_flux]
    type = MFEMVariable
    fespace = HDivFESpace
    time_derivative = heat_flux
  []
  [temperature]
    type = MFEMVariable
    fespace = L2FESpace
  []
[]

[Kernels<<<{"href": "../Kernels/index.html"}>>>]
  [dT_dt,T']
    type = MFEMTimeDerivativeMassKernel
    variable = temperature
  []
  [divh,T']
    type = MFEMVectorFEDivergenceKernel
    trial_variable = heat_flux
    variable = temperature
  []
  [h,h']
    type = MFEMTimeDerivativeVectorFEMassKernel
    variable = time_integrated_heat_flux
  []
  [-T,div.h']
    type = MFEMVectorFEDivergenceKernel
    trial_variable = temperature
    variable = time_integrated_heat_flux
    coefficient = -1.0
    transpose = true
  []
[]

[BCs<<<{"href": "../BCs/index.html"}>>>]
  [right]
    type = MFEMVectorFEBoundaryFluxIntegratedBC
    variable = time_integrated_heat_flux
    coefficient = 0.0
    boundary = 2
  []
  [left]
    type = MFEMVectorFEBoundaryFluxIntegratedBC
    variable = time_integrated_heat_flux
    coefficient = -1.0
    boundary = 4
  []
  [topbottom]
    type = MFEMVectorDirichletBC
    variable = time_integrated_heat_flux
    vector_coefficient = '0.0 0.0'
    boundary = '1 3'
  []
[]

[Solver]
  type = MFEMSuperLU
[]

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

[Outputs<<<{"href": "../Outputs/index.html"}>>>]
  [ParaViewDataCollection]
    type = MFEMParaViewDataCollection
    file_base = OutputData/MixedHeatTransfer
    vtk_format = ASCII
  []
[]
(moose/test/tests/mfem/kernels/mixed_heattransfer.i)