Is there a way to display or save the local matrices (per process) to a .dat file after the distributed mesh has been created?
macro dimension 2// EOM
include "ffddm.idp"
macro def(i)[i, i#B]// EOM
// for def(u), returns [u, uB]
macro init(i)[i, i]// EOM
func Pk = [P1, P1];
real young = 1.0;
real nu = 0.;
real mu = young / (2.0 * (1.0 + nu));
real lambdax = (young * nu) / ((1.0 + nu) * (1.0 - 2.0 * nu));
real rho = getARGV("-rho", 1.);
real f = getARGV("-force", -1.0);
macro epsilon(i) [dx(i), dy(i#B), (dy(i) + dx(i#B)) / sqrt(2.)] // EOM
macro div(i) (dx(i) + dy(i#B)) // EOM
mesh ThGlobal = square(20, 1, [0 + 300*x, 0 + 100*y], flags = 1);
ffddmoverlap = 1;
ffddmbuildDmeshAug(Hmesh, ThGlobal, mpiCommWorld)
ffddmbuildDfespace(HFE, Hmesh, real, def, init, Pk)
macro Varf(varfName, meshName, PhName)
varf varfName(def(u), def(v)) =
int2d(meshName)(
lambdax * (div(u) * div(v))
+ 2.*mu * (epsilon(u)' * epsilon(v))
+ rho * (u*v + uB*vB)
); // EOM
real robinCoef = getARGV("-robin", 1);
macro VarfRobin(varfName, meshName, PhName)
varf varfName(def(u), def(v)) =
int2d(meshName)(
lambdax * (div(u) * div(v))
+ 2.*mu * (epsilon(u)' * epsilon(v))
+ rho * (u*v + uB*vB)
)
+ int1d(meshName, 10)( robinCoef * (u*v + uB*vB) ); // EOM
macro Varfrhs(varfName, meshName, PhName)
varf varfName(def(u), def(v)) = int2d(meshName)( f * vB ); // EOM
ffddmsetup(H, HFE, Varf, Varf)
// ffddmsetup(H, HFE, Varf, VarfRobin)
real[int] rhs(1);
ffddmbuildrhs(H, Varfrhs, rhs)
real[int] x0(rhs.n);
x0 = 0;
HFEVhi<real> def(u);
if (mpirank == 0) cout << endl << "ONE-LEVEL (" << "cf. -ffddm_schwarz_method) :" << endl;
u[] = HfGMRES(x0, rhs, 1.e-6, 200, "right");
Hwritesummary
ffddmplot(HFE, u, "Deplacement (ffddm/ORAS)");