FreeFem++

FreeFem++ is a partial differential equation solver. It has its own language. freefem scripts can solve multiphysics non linear systems in 2D and 3D.

Problems involving PDE (2d, 3d) from several branches of physics such as fluid-structure interactions require interpolations of data on several meshes and their manipulation within one program. FreeFem++ includes a fast 2^d-tree-based interpolation algorithm and a language for the manipulation of data on multiple meshes (as a follow up of bamg).

FreeFem++ is written in C++ and the FreeFem++ language is a C++ idiom. It runs on Macs, Windows, Unix machines. FreeFem++ replaces the older freefem and freefem+.

Installed version

  • 3.16
  • 3.20 (with all depencies)

Examples

  • A very small example 2d of how to solve the Poisson equation on a L shape:
poisson.edp
border aaa(t=0,1){x=t;y=0;};
border bbb(t=0,0.5){x=1;y=t;};
border ccc(t=0,0.5){x=1-t;y=0.5;};
border ddd(t=0.5,1){x=0.5;y=t;};
border eee(t=0.5,1){x=1-t;y=1;};
border fff(t=0,1){x=0;y=1-t;};
mesh Th = buildmesh (aaa(6) + bbb(4) + ccc(4) +ddd(4) + eee(4) + fff(6));
fespace Vh(Th,P1);   //  to change P1 in P2 to make P2 finite element.
Vh u=0,v;
func f= 1;
func g= 0;
int i=0;
real error=0.1, coef= 0.1^(1./5.);
problem Probem1(u,v,solver=CG,eps=-1.0e-6) =
    int2d(Th)(  dx(u)*dx(v) + dy(u)*dy(v)) 
  + int2d(Th) ( v*f ) 
  + on(aaa,bbb,ccc,ddd,eee,fff,u=g)  ;
 
for (i=0;i< 10;i++)
{   
  real d = clock();
  Probem1; //  solve the problem 
  plot(u,Th,wait=1);
  Th=adaptmesh(Th,u,inquire=1,err=error);
  error = error * coef;
} ;

Using FreeFem++

Use mesoshared.univ-fcomte.fr

$ module laod freefem++
$ freefem++ poisson.edp

Use mesoseq.univ-fcomte.fr

  • SGE script example of sequential program
free_fem++_seq.sge
#!/bin/bash -l
 
 
#$ -o $JOB_NAME.o$JOB_ID
 
#$ -e $JOB_NAME.e$JOB_ID
 
 
#$ -N freefem_test
 
#$ -V
 
module load freefem++
 
Freefem++-nw poisson.edp

Here is an example how to execute with MPI:

mpirun -np 2 FreeFem++-mpi schwarz.edp
  • SGE scrip example of a parallel program
free_fem++_MPI.sge
#!/bin/bash -l
 
 
#$ -o $JOB_NAME.o$JOB_ID
 
#$ -e $JOB_NAME.e$JOB_ID
 
#$  -pe impi_tight 4
 
#$ -N freefem_test
 
#$ -V
 
module load freefem++
 
mpirun -np $NSLOTS FreeFem++-mpi schwarz.edp

Documentation