femshop

Heat

heat

The Julia script: example-heat2d.jl

A 2D heat equation demonstrates support for time dependent problems.

Begin by importing and using the Femshop module. Then initialize. The name here is only used when generating code files.

using Femshop
init_femshop("heat2d");

Then set up the configuration. This example simply sets dimensionality of the domain and polynomial order of the basis function space.

domain(2)                  	# dimension
functionSpace(order=4) 		# polynomial order

Use the built-in simple mesh generator to make the mesh and set up all node mappings.

mesh(QUADMESH, elsperdim=10)# has 10*10 uniform, square elements

Define the variable, test function, and coefficient symbols.

u = variable("u")           # make a scalar variable u
testSymbol("v")             # sets the symbol for a test function

coefficient("f", "0.5*sin(6*pi*x)*sin(6*pi*y)")

Set up the time stepper and initial conditions. This example uses a low-storage RK4. Other explicit or implicit methods are available.

timeStepper(LSRK4)  		# Low-storage RK4
timeInterval(1) 			# The end time
initial(u, "abs(x-0.5)+abs(y-0.5) < 0.2 ? 1 : 0") # initial condition

Convert the PDE

into the weak form

The boundary conditions are specified.

boundary(u, 1, DIRICHLET, 0)

Then write the weak form expression in the residual form. Finally, solve for u.

weakForm(u, "Dt(u*v) + 0.01 * dot(grad(u),grad(v)) - f*v")
solve(u);

End things with finalize_femshop() to finish up any generated files and the log.