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)