1. Intro

This program finds a minimizer for the functional
E(u) = \int_Q a(x) |Du|^2 dx
where Q=[0,1]^3 and u satisfies the boundary conditions
u(x,y,0)=0 and u(x,y,1)=1

Notice that this imposes a Neumann boundary condition on the sides of the cube.

The problem is equivalent to the cell problem in [-1,1]^3 if we extend a(x) symmetrically, i.e.
a(x,y,z) = a(x,y,-z) = a(x,-y,z) = a(-x,y,z)

The advantage of solving the problem in [0,1]^3 instead of [-1,1]^3 is an obvious efficiency gain, since we need 8 times fewer degrees of freedom for the same accuracy.

The energy E of the minimizer will be the effective conductivity of a periodic composite whose microscopic conductivity is given by a(x).

Once the minimizer is found, the program shows the values of u(0,1,1/2)-0.5 and u(1/2,1/2,1/2)-0.5. This is to check the hypothesis that if a cubically symmetric two phase configuration separated by a periodic minimal surface achieves the upper bound for the conductivity, then the vectors (u(0,1,1/2)-0.5)*(0,0,1) and (u(1/2,1/2,1/2)-0.5)*(1,1,1) must have the same norm.

2. Compiling

In order to compile you need to have the library deal.II installed in your computer. This library can be downloaded from
http://www.dealii.org/

If you do not install the library in your home directory, you must modify the line in the makefile that says 
D = ~/deal.II/
by your actual path.

Then type make and the program will be compiled. The program was only tested under Linux, but there is no reason why it wouldn't work in other platforms.

3. Using the program

There is a file named coefficent.prm where the parameters are specified. The most important line is where it says
set Function expression = ...

In that line the function a(x) is defined. You can edit this line to make any test. Then just execute the program.
