FreeFem++-mpi
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を使う
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(...)
}