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 aL
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++
Interactive mode
Use mesoshared.univ-fcomte.fr
$ module laod freefem++
$ freefem++ poisson.edp
Sequential version
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
MPI version
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