FreeFem++-mpi

FreeFem++-mpi の使い方

実行

$ ff-mpirun -np 4 XXXX.edp

または

$ mpirun -np 4 FreeFem++-mpi XXXX.edp [ -glut | -nw ]

プログラムの修正

    • problemで定義されていた weak form を、右辺と左辺に分け、 varfで定義し、matrixを設定

problem

problem RD1 (u,uu,solver=CG,init=0)    
= int2d(Th)(u * uu + dt * du * (dx(u) * dx(uu) + dy(u) * dy(uu)))
- int2d(Th)(uold * uu + dt * f(uold, vold) * uu); 

varf + matrix

varf RD1(u,uu)
= int2d(Th)(u * uu + dt * du * (dx(u) * dx(uu) + dy(u) * dy(uu)));
varf RHS1(unused,uu) = int2d(Th)(uold * uu + dt * f(uold, vold) * uu);
matrix a1=RD1(Vh2,Vh2,solver=CG,init=0);
.... 
b1[] = RHS1(0,Vh2);
u[] = a1^-1*b1[]; 

MUMPSを使う

load "MUMPS_FreeFem"
...
varf RD1(u,uu)
= int2d(Th)(u * uu + dt * du * (dx(u) * dx(uu) + dy(u) * dy(uu)));
varf RHS1(unused,uu) = int2d(Th)(uold * uu + dt * f(uold, vold) * uu);
matrix a1=RD1(Vh2,Vh2);
set(a1,solver=sparsesolver,datafilename="ffmumps_fileparam.txt");
....
b1[] = RHS1(0,Vh2);
u[] = a1^-1*b1[];
if(mpirank==0) {
  cout << "i = " << i << ", t = "<< t << endl;
  ...
  plot(...)
}