This simple 3D example demonstrates the non-stationary linear heat
analysis solver. The cooling of soil under a constant temperature of the air
in the atmosphere and an initial temperature of the soil is calculated for a
period of 60 days, the example being taken from the text book by Kreith and
Bohn^{[36]}.

The soil is modelled by a row of solid heat conduction elements extending 3 m down in the soil (z-direction). The soil is assumed to be semi-infinite, thus, a row of elements is sufficient, with free faces in the x- and y-directions. The face of the model which is in contact with the atmosphere is permanently set to -15 °C, while the rest of the model is set +20 °C for t=0. It is assumed that the conduction properties of the soil are uniform and linear and no convection or radiation between the soil and the atmosphere are taken into account.

The FE mesh is generated with a single epatch of type
*cube*, with face *f1* in contact with
the air at x=0.0.

**Figure 104. Linear transient heat conduction: Mesh and initial conditions at
face in contact with air.**

The linear transient response is calculated with the first order
transient solver and the parameters defined in the **case**
command (see input file `soil.mdl`

):

cases case 1 analysis dynamic_nonlinear # Although problem is linear stage 2 time_step 5184000 # Time is (60 days in seconds) end stage 2 step_size_init 84600 # 1 day step_size_max 84600 # Keeps step size constant step_size_min 84600 # Keeps step size constant dof_init 1 # Initial conditions ebc 1 sfactor 1 sfunction '1' # Keeps ebcs constant tol_dynamic 1000. # Inactivate time integration error end end

The solver increments, by default, the time parameter from 0.0 to 1.0.
In the example the time parameter range is from 0 to 60 days, i.e. 5184000
seconds. The best way of specifying this range is by introducing a case with
a stage and by scaling the stage with the `time_step`

option
(see definition of case 1 above). The stage (case) 2 then defines the
parameters of the effective case to be analyzed: The (constant) step size,
the initial conditions and the essential boundary conditions, no natural
boundary conditions being defined in this model. Note that, by setting
`step_size_init`

, `step_size_max`

, and
`step_size_min`

to fixed values the solver cannot vary the
time step as a function of the time integration error. Therefore,
`tol_dynamic`

has to be set to a large value to inactivate
the time integration error control.

The initial conditions at the mesh nodes are activated by the
`dof_init`

option, which refers to the
**dof_init** definition found in
`soil.mdl`

:

dof_init set 1 value 20 allnodes # Initially all nodes allow_override yes # Default is 'no' value -15. epatch 1 f1 # Overwrite nodes of face to air end end

The essential boundary conditions (-15 on face exposed to air):

ebc set 1 value -15. dof 1 epatch 1 f1 end end

are activated with the `ebc`

option of **case
2**:

ebc 1 sfunction '1'

The
`sfunction`

defined as *sfunction(t)=1.*
tells the solver to keep the ebc constant in time.

Finally, the **adir** command specifies the analysis
type and the case to be solved for:

adir case 1 end

Note that, although the analysis is linear, the
`dynamic_nonlinear`

analysis type has to be selected for
transient heat analysis, because the solver cannot deal with linear
problems. The `case 1`

option activates the case 1, which in
its turn solves for the stage (case) 2.

Setting `tol_dynamic=100000`

, i.e. to a large value
will inactivate the error estimator of the time integration module, and the
`residue_function_type=order_one`

directive specifies the
order of the equation. The temperature at a given mesh node as a function of
time is viewed with the post-processing tool (see xy.py script). At z=0.6 m
this becomes

The analytical function can be found in Kreith and Bohn and it is
programmed in the `xy.py`

script.