# Documentation

## Parabolic Equations

### Reducing Parabolic Equations to Elliptic Equations

The elliptic solver allows other types of equations to be more easily implemented. In this section, we show how the parabolic equation can be reduced to solving elliptic equations. This is done using the function `parabolic`.

Consider the equation

with the initial condition

u(x,0) = u0(x) for x∊Ω

where x represents a 2-D or 3-D point and there are boundary conditions of the same kind as for the elliptic equation on ∂Ω.

$\rho C\frac{\partial u}{\partial t}-\nabla \text{\hspace{0.17em}}·\text{\hspace{0.17em}}\left(k\nabla u\right)+h\left(u-{u}_{\infty }\right)=f$

in the presence of distributed heat loss to the surroundings. ρ is the density, C is the thermal capacity, k is the thermal conductivity, h is the film coefficient, u is the ambient temperature, and f is the heat source.

For time-independent coefficients, the steady-state solution of the equation is the solution to the standard elliptic equation

–∇ · (cu) + au = f.

Assuming a mesh on Ω and t ≥ 0, expand the solution to the PDE (as a function of x) in the Finite Element Method basis:

$u\left(x,t\right)=\sum _{i}{U}_{i}\left(t\right){\varphi }_{i}\left(x\right).$

Plugging the expansion into the PDE, multiplying with a test function ϕj, integrating over Ω, and applying Green's formula and the boundary conditions yield

$\begin{array}{l}\sum _{i}\underset{\Omega }{\int }d{\varphi }_{j}{\varphi }_{i}\text{\hspace{0.17em}}\frac{d{U}_{i}\left(t\right)}{dt}\text{\hspace{0.17em}}dx+\sum _{i}\left(\underset{\Omega }{\int }\left(\nabla {\varphi }_{j}\cdot \left(c\nabla {\varphi }_{i}\right)+a{\varphi }_{j}{\varphi }_{i}\right)\text{\hspace{0.17em}}dx+\underset{\partial \Omega }{\int }q{\varphi }_{j}{\varphi }_{i}\text{\hspace{0.17em}}ds\right){U}_{i}\left(t\right)\\ \text{ }\text{ }\text{ }\text{ }=\underset{\Omega }{\int }f{\varphi }_{j}\text{\hspace{0.17em}}dx+\underset{\partial \Omega }{\int }g{\varphi }_{j}\text{\hspace{0.17em}}ds\text{ }\forall j.\end{array}$

In matrix notation, we have to solve the linear, large and sparse ODE system

$M\frac{dU}{dt}+KU=F.$

This method is traditionally called method of lines semidiscretization.

Solving the ODE with the initial value

Ui(0) = u0(xi)

yields the solution to the PDE at each node xi and time t. Note that K and F are the stiffness matrix and the right-hand side of the elliptic problem

–∇ · (cu) + au = f in Ω

with the original boundary conditions, while M is just the mass matrix of the problem

–∇ · (0∇u) + du = 0 in Ω.

When the Dirichlet conditions are time dependent, F contains contributions from time derivatives of h and r. These derivatives are evaluated by finite differences of the user-specified data.

The ODE system is ill conditioned. Explicit time integrators are forced by stability requirements to very short time steps while implicit solvers can be expensive since they solve an elliptic problem at every time step. The numerical integration of the ODE system is performed by the MATLAB® ODE Suite functions, which are efficient for this class of problems. The time step is controlled to satisfy a tolerance on the error, and factorizations of coefficient matrices are performed only when necessary. When coefficients are time dependent, the necessity of reevaluating and refactorizing the matrices each time step may still make the solution time consuming, although `parabolic` reevaluates only that which varies with time. In certain cases a time-dependent Dirichlet matrix h(t) may cause the error control to fail, even if the problem is mathematically sound and the solution u(t) is smooth. This can happen because the ODE integrator looks only at the reduced solution v with u = Bv + ud. As h changes, the pivoting scheme employed for numerical stability may change the elimination order from one step to the next. This means that B, v, and ud all change discontinuously, although u itself does not.

### Solve a Parabolic Equation

This example shows how to solve a parabolic equation and to set an initial condition as a variable.

1. At the MATLAB command prompt, type `pdetool`.

2. Draw a rectangle in the PDE app axes.

3. From the Draw menu, select Export Geometry Description, Set Formula, Labels.

4. In the Export dialog box, enter ```gd sf ns```. Click OK.

The exported variables are available in the MATLAB workspace.

5. From the Boundary menu, select Boundary Mode.

6. From the Boundary menu, select Specify Boundary Conditions.

7. Set the Neumann and Dirichlet boundary conditions. If these conditions are not the same for all the stages, set the conditions accordingly.

8. From the Boundary menu, select Export Decomposed Geometry, Boundary Cond's.

9. In the Export dialog box, enter ```g b```. Click OK.

10. From the PDE menu, select PDE Mode.

11. From the PDE menu, select PDE Specification.

12. Set the partial differential equation (PDE) coefficients, which are the same for any value of time.

13. From the PDE menu, select Export PDE Coefficients.

14. In the Export dialog box, enter ```c a f d```. Click OK.

15. From the Mesh menu, select Mesh Mode.

16. From the Mesh menu, select Parameters.

17. Verify the initial mesh, jiggle mesh, and refine mesh values. The mesh is fixed for all stages.

18. From the Mesh menu, select Export Mesh.

19. In the Export dialog box, enter ```p e t```. Click OK.

20. Save the workspace variables into a MAT-file by typing `save data.mat` at the MATLAB command prompt.

21. Save the following code as a file:

```clear all; close all; load data %For the first stage you need to specify an %initial condition, U0. U0 = 0; %U0 expands to the correct size automatically. %Divide the time range into 4 stages. time = {0:.01:1, 1:.05:3, 3:.1:5, 5:.5:20}; for i = 1:4 U1 = parabolic(U0,time{i},b,p,e,t,c,a,f,d); for j = 1:size(U1,2) H =pdeplot(p,e,t,'xydata',U1(:,j),'zdata',... U1(:,j),'mesh','off'); set(gca,'ZLim',[-80 0]); drawnow end %Reset the initial condition at all points. U0 = U1(:,1); end```

This file uses the variables you defined in the MATLAB workspace to solve a parabolic equation in stages. Within this file, you set the initial condition as a variable.