diff --git a/source/_static/js/examples.js b/source/_static/js/examples.js
index 5d0aa056..bac53516 100644
--- a/source/_static/js/examples.js
+++ b/source/_static/js/examples.js
@@ -50,9 +50,10 @@ loadExamplefromGitHub = (name, dir, editor) => {
highlightKeyword(editor)
}
- const url = 'https://raw.githubusercontent.com/FreeFem/FreeFem-sources/master/examples/'+dir+'/'+name
+ const fpath = (dir == 'idp' ? '' : 'examples/') + dir + '/'+name
+ const url = 'https://raw.githubusercontent.com/FreeFem/FreeFem-sources/master/' + fpath
console.log("load " + dir + "/" + name + "from GitHub");
- document.getElementById('ExampleLinkToGitHub').innerHTML = ""+dir+"/"+name+"";
+ document.getElementById('ExampleLinkToGitHub').innerHTML = ""+dir+"/"+name+"";
HTTPGet(url, load)
}
diff --git a/source/_static/json/all_examples.json b/source/_static/json/all_examples.json
index de08de95..d1bf6d29 100644
--- a/source/_static/json/all_examples.json
+++ b/source/_static/json/all_examples.json
@@ -1,2202 +1,2434 @@
[
+ {
+ "dir": "idp",
+ "ends": 9204,
+ "keywords": "border func int mesh mesh3 real load be cout endl label m max min n nt pi re verbosity x y z abs buildlayers buildmesh cos d max min on sin A B bb coef facemerge label order t transfo zbound",
+ "name": "ball-buildlayer.idp",
+ "starts": 9171,
+ "tags": "3D"
+ },
+ {
+ "dir": "idp",
+ "ends": 3596,
+ "keywords": "border fespace func int macro mesh meshL meshS real solve P1 load area be cout endl fixed im l2 label linfty m max min n N nt P re verbosity x y z abs assert buildmesh d dx dy int1d int2d max min movemesh movemesh23 on plot sqrt B bb cmm dim err fill label nbiter order orientation qforder ratio t transfo wait",
+ "name": "buildmeshS.idp",
+ "starts": 3507,
+ "tags": "3D"
+ },
+ {
+ "dir": "idp",
+ "ends": 6830,
+ "keywords": "bool func int real string cout m n nt re abs d round t",
+ "name": "CC.idp",
+ "starts": 6698,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 7350,
+ "keywords": "border fespace int macro mesh mesh3 real P0 load be cout endl fixed l2 label m max n nt P pi re region x y z buildlayers buildmesh cos d dist int2d max on plot sin eta fixedborder label labeldown labelmid labelup order region t width zbound",
+ "name": "cobrameshcavity.idp",
+ "starts": 7156,
+ "tags": "3D"
+ },
+ {
+ "dir": "idp",
+ "ends": 6199,
+ "keywords": "func int mesh mesh3 real load be label m max min n N nt re x y z buildlayers cube d max medit min on square y0 y1 B label labeldown labelmid labelup t zbound",
+ "name": "cube.idp",
+ "starts": 6161,
+ "tags": "3D"
+ },
+ {
+ "dir": "idp",
+ "ends": 7155,
+ "keywords": "bool func int matrix mesh mpiComm NewMacro EndMacro ofstream problem real solve string append cout endl GMRES im l1 linfty m max mpiMAX mpirank mpisize mpiSUM n N nt P pi re sparsesolver true verbosity x y z AffineGMRES assert broadcast d dimKrylov Gamma interpolate LinearGMRES max mpiAllReduce mpiRank mpiReduce on plot processor Recv set A B bb cmm coef dim eps err errg nbiter precon ps solver split t tgv U2Vc veps",
+ "name": "DDM-funcs-v2.idp",
+ "starts": 6893,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 4079,
+ "keywords": "bool complex fespace func int macro Mat matrix mesh mesh3 mpiComm mpiRequest real P0 P1 include be cout endl false find GMRES good im label linfty LU m max min mpiCommWorld mpirank mpisize n N nt P pi re sum true verbosity version x y z abs assert broadcast change d dd erf int2d int3d interpolate Isend Irecv max min mpiBarrier mpiRank mpiSize mpiWait mpiWaitAny on plot processor Recv savemesh set splitmesh trunc Wait A B bb cmm dim eps err file fill init label ps save split t U2Vc value wait which",
+ "name": "DDM-Schwarz-macro.idp",
+ "starts": 3669,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 7715,
+ "keywords": "macro matrix m n nt nv re x y z d dd dx dy on A B displacement eps fill init metric ps sym t value vector",
+ "name": "ElasticLaw2d.idp",
+ "starts": 7628,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 4119,
+ "keywords": "border fespace int macro mesh real solve varf P1 area be GMRES label m max n N ndof nt P qf1pE qf1pElump qf1pT qf1pTlump re sum x y z abs clock d dx dy extract int1d int2d max on plot sort tan B boundary init label order orientation qfe qft solver t wait",
+ "name": "ExtractDofsonBorder.idp",
+ "starts": 4080,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 8299,
+ "keywords": "border complex fespace func HMatrix int macro Mat matrix mesh NewMacro EndMacro problem real solve string varf ENDIFMACRO include IFMACRO load ARGV be cout endl false GMRES im imin m min mpiMAX mpiSUM n N ndof nt nv P pi re sparsesolver sum verbosity x y z assert broadcast d dd getARGV interpolate medit min mpiAllReduce mpiRank mpiReduce mpiSize mpiWtime on plot processor set sin Stringification A B bin commworld eps factorize init mode nbiter op option options order precon ps solver sparams split sym t tgv value vector",
+ "name": "ffddm.idp",
+ "starts": 7716,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 8429,
+ "keywords": "border complex fespace int macro matrix mesh NewMacro EndMacro real solve ENDIFMACRO IFMACRO be cout endl GMRES im m min mpirank n N ndof nt P pi re sparsesolver verbosity x y z d dd interpolate min mpiRank on set sin Stringification A bin commworld dim eps factorize init master order ps solver sym t tgv",
+ "name": "ffddm_coarsemeshCS.idp",
+ "starts": 8300,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 10072,
+ "keywords": "complex func int macro Mat matrix mesh mpiComm mpiRequest NewMacro EndMacro real solve string ENDIFMACRO IFMACRO load be CG cout diag endl false GMRES im imin l2 m max min mpiCommWorld mpiMAX mpirank mpiSUM n N nbe ndof nt nv P pi re sparsesolver sum true verbosity x y z abs assert BEM broadcast change conj d dd erf Isend Irecv max min mpiAllReduce mpiGather mpiGatherv mpiRank mpiReduce mpiScatter mpiScatterv mpiWait mpiWaitAny on plot processor rint set sin sqrt Stringification Wait A B bb bin commworld dim eps err inside master maxit nbiter op precon ps ratio solver sparams t tol value vector",
+ "name": "ffddm_functions.idp",
+ "starts": 9205,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 3506,
+ "keywords": "complex func int macro Mat matrix mesh mpiRequest NewMacro EndMacro problem real solve string varf ENDIFMACRO IFMACRO be cout endl false GMRES im imin label m max min mpirank mpiSUM n N ndof nt nv P pi re sparsesolver sum verbosity x y z abs assert complexEigenValue d dd EigenValue erf Isend Irecv max min mpiAllReduce mpiRank mpiSize mpiWait mpiWaitAny on processor set sign sin Stringification Wait A A1 B B1 bin commworld dim eps err eta factorize fill init inside label master mode ncv nev op ps rawvector solver sparams sym t tgv tol value vector which",
+ "name": "ffddm_geneoCS.idp",
+ "starts": 2470,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 9074,
+ "keywords": "complex fespace func int macro matrix mesh mpiComm mpiGroup mpiRequest NewMacro EndMacro real P0 ENDIFMACRO IFMACRO be im m max min mpiCommWorld mpirank mpisize mpiSUM n N nt nv P pi re x y z broadcast d dd interpolate Isend Irecv max min mpiRank mpiReduce mpiWait mpiWaitAny on processor rint set sin sort trunc Wait A bin eps err fill init ps t vector",
+ "name": "ffddm_geneoCS_3rdlvl.idp",
+ "starts": 8430,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 6697,
+ "keywords": "complex fespace func int macro matrix mesh mpiComm mpiRequest NewMacro EndMacro problem real solve P1 ENDIFMACRO IFMACRO be cout endl false GMRES im m max min mpirank n N ndof nt nv P pi re sparsesolver sum true verbosity version x y z complexEigenValue d dd dist EigenValue Isend Irecv max min mpiRank mpiWait mpiWaitAny on processor set sin system Wait A A1 B commworld factorize init iso mode ncv nev op precon rawvector sigma solver sym t tol value vector",
+ "name": "ffddm_geneoCS_saddlepoint.idp",
+ "starts": 6242,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 10286,
+ "keywords": "int macro real string ARGV be CG default GMRES im label m max min mpirank mpisize n N nt nv P pi re verbosity x y z abs assert cube d dd erf getARGV max medit min on plot sqrt trunc A bb bin bw iso label master maxit nbiso op precon split sym t tgv tol vector",
+ "name": "ffddm_parameters.idp",
+ "starts": 10182,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 6160,
+ "keywords": "bool border complex fespace func int macro Mat matrix mesh mesh3 meshL meshS mpiComm mpiGroup mpiRequest NewMacro EndMacro problem real varf P0 P1 ENDIFMACRO include IFMACRO load ARGV be cout endl find im imin label linfty m max min mpiCommWorld mpiMAX mpirank mpisize mpiSUM n N nbe ndof nt P pi re searchMethod sum true verbosity version x y z abs arg assert broadcast ceil cube d dd dx dy dz erf floor int0d int1d int2d int3d interpolate Isend Irecv max medit min mpiAllgather mpiAllReduce mpiRank mpiReduce mpiSize mpiWait mpiWaitAny mpiWtime on plot pow processor rint round sin sqrt square square3 Stringification tan trunc Wait yn A B bb bin cmm dim eps fill init inside iso label mode nbiso op option order ps qforder split t tgv value wait",
+ "name": "ffddm_partitioning.idp",
+ "starts": 4681,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 3668,
+ "keywords": "func int real cout endl m max min mpirank n nt pi re verbosity x y z assert d dd max min A init t",
+ "name": "func-max.idp",
+ "starts": 3597,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 9170,
+ "keywords": "func int macro real string ENDIFMACRO include IFMACRO ARGV cout default endl find length m n N nt re rfind version x y arg d dd getARGV on A t tol value wait",
+ "name": "getARGV.idp",
+ "starts": 9075,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 4680,
+ "keywords": "int P0 P1 P2 P3 load be cin cout endl l1 l2 m n nbe nt nv P pi re x y z abs atan chi cos cosh d dist erf erfc exp gslcdfugaussianP gslcdfugaussianQ gslcdfugaussianPinv gslcdfugaussianQinv gslcdfgaussianP gslcdfgaussianQ gslcdfgaussianPinv gslcdfgaussianQinv gslcdfgammaP gslcdfgammaQ gslcdfgammaPinv gslcdfgammaQinv gslcdfcauchyP gslcdfcauchyQ gslcdfcauchyPinv gslcdfcauchyQinv gslcdflaplaceP gslcdflaplaceQ gslcdflaplacePinv gslcdflaplaceQinv gslcdfrayleighP gslcdfrayleighQ gslcdfrayleighPinv gslcdfrayleighQinv gslcdfchisqP gslcdfchisqQ gslcdfchisqPinv gslcdfchisqQinv gslcdfexponentialP gslcdfexponentialQ gslcdfexponentialPinv gslcdfexponentialQinv gslcdfexppowP gslcdfexppowQ gslcdftdistP gslcdftdistQ gslcdftdistPinv gslcdftdistQinv gslcdffdistP gslcdffdistQ gslcdffdistPinv gslcdffdistQinv gslcdfbetaP gslcdfbetaQ gslcdfbetaPinv gslcdfbetaQinv gslcdfflatP gslcdfflatQ gslcdfflatPinv gslcdfflatQinv gslcdflognormalP gslcdflognormalQ gslcdflognormalPinv gslcdflognormalQinv gslcdfgumbel1P gslcdfgumbel1Q gslcdfgumbel1Pinv gslcdfgumbel1Qinv gslcdfgumbel2P gslcdfgumbel2Q gslcdfgumbel2Pinv gslcdfgumbel2Qinv gslcdfweibullP gslcdfweibullQ gslcdfweibullPinv gslcdfweibullQinv gslcdfparetoP gslcdfparetoQ gslcdfparetoPinv gslcdfparetoQinv gslcdflogisticP gslcdflogisticQ gslcdflogisticPinv gslcdflogisticQinv gslcdfbinomialP gslcdfbinomialQ gslcdfpoissonP gslcdfpoissonQ gslcdfgeometricP gslcdfgeometricQ gslcdfnegativebinomialP gslcdfnegativebinomialQ gslcdfpascalP gslcdfpascalQ gslranbernoullipdf gslranbeta gslranbetapdf gslranbinomialpdf gslranexponential gslranexponentialpdf gslranexppow gslranexppowpdf gslrancauchy gslrancauchypdf gslranchisq gslranchisqpdf gslranerlang gslranerlangpdf gslranfdist gslranfdistpdf gslranflat gslranflatpdf gslrangamma gslrangammaint gslrangammapdf gslrangammamt gslrangammaknuth gslrangaussian gslrangaussianratiomethod gslrangaussianziggurat gslrangaussianpdf gslranugaussian gslranugaussianratiomethod gslranugaussianpdf gslrangaussiantail gslrangaussiantailpdf gslranugaussiantail gslranugaussiantailpdf gslranlandau gslranlandaupdf gslrangeometricpdf gslrangumbel1 gslrangumbel1pdf gslrangumbel2 gslrangumbel2pdf gslranlogistic gslranlogisticpdf gslranlognormal gslranlognormalpdf gslranlogarithmicpdf gslrannegativebinomialpdf gslranpascalpdf gslranpareto gslranparetopdf gslranpoissonpdf gslranrayleigh gslranrayleighpdf gslranrayleightail gslranrayleightailpdf gslrantdist gslrantdistpdf gslranlaplace gslranlaplacepdf gslranlevy gslranweibull gslranweibullpdf gslsfairyAi gslsfairyBi gslsfairyAiscaled gslsfairyBiscaled gslsfairyAideriv gslsfairyBideriv gslsfairyAiderivscaled gslsfairyBiderivscaled gslsfairyzeroAi gslsfairyzeroBi gslsfairyzeroAideriv gslsfairyzeroBideriv gslsfbesselJ0 gslsfbesselJ1 gslsfbesselJn gslsfbesselY0 gslsfbesselY1 gslsfbesselYn gslsfbesselI0 gslsfbesselI1 gslsfbesselIn gslsfbesselI0scaled gslsfbesselI1scaled gslsfbesselInscaled gslsfbesselK0 gslsfbesselK1 gslsfbesselKn gslsfbesselK0scaled gslsfbesselK1scaled gslsfbesselKnscaled gslsfbesselj0 gslsfbesselj1 gslsfbesselj2 gslsfbesseljl gslsfbessely0 gslsfbessely1 gslsfbessely2 gslsfbesselyl gslsfbesseli0scaled gslsfbesseli1scaled gslsfbesseli2scaled gslsfbesselilscaled gslsfbesselk0scaled gslsfbesselk1scaled gslsfbesselk2scaled gslsfbesselklscaled gslsfbesselJnu gslsfbesselYnu gslsfbesselInuscaled gslsfbesselInu gslsfbesselKnuscaled gslsfbesselKnu gslsfbessellnKnu gslsfbesselzeroJ0 gslsfbesselzeroJ1 gslsfbesselzeroJnu gslsfclausen gslsfhydrogenicR1 gslsfdawson gslsfdebye1 gslsfdebye2 gslsfdebye3 gslsfdebye4 gslsfdebye5 gslsfdebye6 gslsfdilog gslsfmultiply gslsfellintKcomp gslsfellintEcomp gslsfellintPcomp gslsfellintDcomp gslsfellintF gslsfellintE gslsfellintRC gslsferfc gslsflogerfc gslsferf gslsferfZ gslsferfQ gslsfhazard gslsfexp gslsfexpmult gslsfexpm1 gslsfexprel gslsfexprel2 gslsfexpreln gslsfexpintE1 gslsfexpintE2 gslsfexpintEn gslsfexpintE1scaled gslsfexpintE2scaled gslsfexpintEnscaled gslsfexpintEi gslsfexpintEiscaled gslsfShi gslsfChi gslsfexpint3 gslsfSi gslsfCi gslsfatanint gslsffermidiracm1 gslsffermidirac0 gslsffermidirac1 gslsffermidirac2 gslsffermidiracint gslsffermidiracmhalf gslsffermidirachalf gslsffermidirac3half gslsffermidiracinc0 gslsflngamma gslsfgamma gslsfgammastar gslsfgammainv gslsftaylorcoeff gslsffact gslsfdoublefact gslsflnfact gslsflndoublefact gslsflnchoose gslsfchoose gslsflnpoch gslsfpoch gslsfpochrel gslsfgammaincQ gslsfgammaincP gslsfgammainc gslsflnbeta gslsfbeta gslsfbetainc gslsfgegenpoly1 gslsfgegenpoly2 gslsfgegenpoly3 gslsfgegenpolyn gslsfhyperg0F1 gslsfhyperg1F1int gslsfhyperg1F1 gslsfhypergUint gslsfhypergU gslsfhyperg2F0 gslsflaguerre1 gslsflaguerre2 gslsflaguerre3 gslsflaguerren gslsflambertW0 gslsflambertWm1 gslsflegendrePl gslsflegendreP1 gslsflegendreP2 gslsflegendreP3 gslsflegendreQ0 gslsflegendreQ1 gslsflegendreQl gslsflegendrePlm gslsflegendresphPlm gslsflegendrearraysize gslsfconicalPhalf gslsfconicalPmhalf gslsfconicalP0 gslsfconicalP1 gslsfconicalPsphreg gslsfconicalPcylreg gslsflegendreH3d0 gslsflegendreH3d1 gslsflegendreH3d gslsflog gslsflogabs gslsflog1plusx gslsflog1plusxmx gslsfpowint gslsfpsiint gslsfpsi gslsfpsi1piy gslsfpsi1int gslsfpsi1 gslsfpsin gslsfsynchrotron1 gslsfsynchrotron2 gslsftransport2 gslsftransport3 gslsftransport4 gslsftransport5 gslsfsin gslsfcos gslsfhypot gslsfsinc gslsflnsinh gslsflncosh gslsfanglerestrictsymm gslsfanglerestrictpos gslsfzetaint gslsfzeta gslsfzetam1 gslsfzetam1int gslsfhzeta gslsfetaint gslsfeta j0 j1 log on pow sin sinh tan y0 y1 yn A B bin coef err eta file metric op ps ratio sym t",
+ "name": "gsl.idp",
+ "starts": 4335,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 4225,
+ "keywords": "fespace func int Mat matrix mesh mesh3 mpiComm problem real solve varf P1 P2 include load ARGV be cout endl im imax label linfty m max min mpiCommWorld mpirank mpisize mpiSUM n nt nuTriangle P pi re region sparsesolver x y z buildlayers change clock d dist dx dy dz Gamma getARGV int2d int3d max medit min mpiAllReduce on plot processor savemesh savesol set square A B bb boundary factorize fregion init label labeldown labelmid labelup op order ps qforder region save solver t tgv vector zbound",
+ "name": "Heat3d.idp",
+ "starts": 4120,
+ "tags": "3D"
+ },
+ {
+ "dir": "idp",
+ "ends": 12617,
+ "keywords": "bool border fespace func ifstream int macro Mat matrix mesh mesh3 meshL meshS mpiComm mpiRequest NewMacro EndMacro ofstream problem real varf P0 P1 ENDIFMACRO include IFMACRO load ARGV be cout endl false im l2 label linfty m max measure min mpiCommWorld mpiMAX mpirank mpisize mpiSUM mpiUndefined n N ndof nt nuTriangle nv P pi re region scientific searchMethod sum true verbosity x y z abs arg assert BEM broadcast change convect d dd dist dx erf exit Gamma getARGV int0d int1d int1dx1d int2d int2dx2d int3d interpolate Isend Irecv lround max min mpiAllgather mpiAllReduce mpiBarrier mpiRank mpiSize mpiWait mpiWaitAny mpiWtime on plot Post processor readmesh readmesh3 Recv round savemesh set sin sort sqrt Stringification tan trunc Wait A B bb dim eps err fregion hmax init label op order ps qforder region renumv renumt save sigma split t tgv value vector",
+ "name": "macro_ddm.idp",
+ "starts": 10287,
+ "tags": "3D"
+ },
+ {
+ "dir": "idp",
+ "ends": 10181,
+ "keywords": "fespace int macro matrix mesh mpiComm mpiRequest real varf P0 P1 include ARGV be cout endl im imin label m min mpiCommWorld mpirank n N ndof nt P pi re scientific verbosity x y z abs broadcast d dd erf getARGV interpolate Isend Irecv min mpiBarrier mpiRank mpiSize mpiWait mpiWaitAny mpiWtime on processor Stringification trunc Wait A B eps inside label ps split t tgv",
+ "name": "macro_ddm_substructuring.idp",
+ "starts": 10073,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 7627,
+ "keywords": "border func int mesh mesh3 meshS real load be cout endl im label m max min n N nt nv pi re region x y z adaptmesh buildmesh change cos d dist exec max medit min movemesh movemesh23 movemeshS on plot savemesh sin sqrt square tan tetg trunc y0 y1 A B boundary cmm fregion hmax hmin IsMetric label metric nbofregions order orientation periodic ps reft reftri region regionlist save split switch t tol transfo wait",
+ "name": "MeshSurface.idp",
+ "starts": 7395,
+ "tags": "adaptmesh tetg mmg 3D"
+ },
+ {
+ "dir": "idp",
+ "ends": 6241,
+ "keywords": "border int mesh real be label m max n N nt pi re region x y z adaptmesh buildmesh cos d max on plot sin eta IsMetric label nbvx order region t thetamax wait",
+ "name": "mortar-msh.idp",
+ "starts": 6200,
+ "tags": "adaptmesh 2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 6892,
+ "keywords": "fespace func int matrix mesh real varf P1 area be cout endl label linfty m max n nt nv P re verbosity x y adaptmesh d dd int2d max movemesh on plot square boundary err IsMetric label smoothing t tgv wait",
+ "name": "movemeshsmooth.idp",
+ "starts": 6831,
+ "tags": "adaptmesh 2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 4334,
+ "keywords": "complex func int macro matrix mpiRequest real include cout endl GMRES m max mpirank n nt P pi re verbosity version x y assert d Isend Irecv max mpiRank mpiWait mpiWaitAny on processor Recv Wait A err file t wait",
+ "name": "MPIGMRESmacro.idp",
+ "starts": 4226,
+ "tags": "2D"
+ },
+ {
+ "dir": "idp",
+ "ends": 7394,
+ "keywords": "fespace int macro mesh mpiComm mpiRequest cout endl m mpiCommWorld mpirank mpisize n N ndof nt P pi re true verbosity y z assert d Isend Irecv mpiBarrier mpiWait mpiWaitAny plot processor Wait A B t",
+ "name": "MPIplot.idp",
+ "starts": 7351,
+ "tags": "2D"
+ },
{
"dir": "3d",
- "ends": 5000,
+ "ends": 15148,
"keywords": "fespace int macro mesh mesh3 real solve P1 P13d load area be cout endl label m max min n N nt P re verbosity x y z abs buildlayers d dx dy dz int2d int3d max medit min on plot Wait coef iso label labelmid nbiso reffacelow reffaceup t value wait zbound",
"name": "3d-Leman.edp",
- "starts": 4950,
+ "starts": 15098,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 2934,
+ "ends": 13082,
"keywords": "fespace int mesh mesh3 P2 P23d cout endl l2 m n nt P re x d t",
"name": "ArrayFE-3d.edp",
- "starts": 2930,
+ "starts": 13078,
"tags": "2D"
},
{
"dir": "3d",
- "ends": 3864,
+ "ends": 14012,
"keywords": "fespace int macro mesh mesh3 real solve P1 include load be cout endl label m max n N nt P re x y z change cube d dx dy dz int3d max medit movemesh movemesh3 on plot sqrt B cmm coef eps label ps sigma t transfo wait",
"name": "beam-3d.edp",
- "starts": 3828,
+ "starts": 13976,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4240,
+ "ends": 14388,
"keywords": "border fespace func gslspline int macro mesh mesh3 meshS real P1 load be cout endl label m n nt P pi re region x y z adaptmesh assert buildmesh change cos d dx dy extract gslinterpcspline medit movemesh movemesh23 on plot sin square tetg A B bb fregion IsMetric label metric nbvx op order orientation periodic region regionlist switch t transfo wait",
"name": "bottle.edp",
- "starts": 4154,
+ "starts": 14302,
"tags": "adaptmesh tetg 3D"
},
{
"dir": "3d",
- "ends": 4493,
+ "ends": 14641,
"keywords": "border int mesh mesh3 real include load be label m n nt re x y buildlayers buildmesh d medit on plot sin sqrt A B cmm label order t wait",
"name": "cone.edp",
- "starts": 4477,
+ "starts": 14625,
"tags": "2D"
},
{
"dir": "3d",
- "ends": 3458,
+ "ends": 13606,
"keywords": "func int mesh mesh3 real load adj area be cout endl label m max measure min n N nbe nt nuTriangle nv P pi re region true whoinElement version x y z abs adj assert change cube d int2d max min on rint set A bb boundary fill label order qforder region t value",
"name": "Connectivite-3d.edp",
- "starts": 3391,
+ "starts": 13539,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 3552,
+ "ends": 13700,
"keywords": "fespace func int macro mesh mesh3 real P1 P13d load be cout endl im label m max min n nt nv P re region verbosity x y z abs assert buildlayers convect d dx dy dz exp int3d max min on plot square Stringification y0 cmm err label labelmid reffacelow reffaceup region t wait zbound",
"name": "convect-3d.edp",
- "starts": 3494,
+ "starts": 13642,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 3584,
+ "ends": 13732,
"keywords": "border func int mesh mesh3 real load be cout endl im label m n nt nv pi re x y z assert buildlayers buildmesh checkmesh cos d plot sin trunc close eps eta label nbvx order ps t wait",
"name": "crack-3d.edp",
- "starts": 3553,
+ "starts": 13701,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4799,
+ "ends": 14947,
"keywords": "fespace func int macro mesh mesh3 real solve P2 load be CG cout endl label m max min n ndof nt nv P pi re region verbosity x y z assert buildlayers d dd dx dy dz int3d max min on plot savemesh sin sqrt square y0 err init iso label labelmid nbiso periodic reffacelow reffaceup region save solver t wait zbound",
"name": "cube-period.edp",
- "starts": 4722,
+ "starts": 14870,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4921,
+ "ends": 15069,
"keywords": "border func int mesh mesh3 load be label m max min n nt pi re x y z buildlayers buildmesh cos d max medit min plot sin B cmm coef label labelmid order reffacelow reffaceup t wait zbound",
"name": "cylinder-3d.edp",
- "starts": 4902,
+ "starts": 15050,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 2903,
+ "ends": 13051,
"keywords": "border func int mesh mesh3 meshS real load be cout endl label m max min n nt pi re region x y buildmesh cos d max medit min movemesh movemesh23 on plot savemesh sin square tetg A cmm fregion label nbofregions order orientation region regionlist save switch t transfo wait",
"name": "cylinder.edp",
- "starts": 2871,
+ "starts": 13019,
"tags": "tetg 3D"
},
{
"dir": "3d",
- "ends": 3044,
+ "ends": 13192,
"keywords": "fespace int macro matrix mesh mesh3 real solve varf P2 load be CG cout diag endl find im label linfty m n nt P re x y z cube d dx dy dz erf int3d movemesh on plot set sqrt A B eps label ps sigma solver sym t tgv wait",
"name": "Elasticity-simple-support-BC.edp",
- "starts": 2988,
+ "starts": 13136,
"tags": "elasticity 3D"
},
{
"dir": "3d",
- "ends": 4597,
+ "ends": 14745,
"keywords": "border fespace func int macro mesh mesh3 real solve P1 load be l2 label m max n nt P pi re x y z buildlayers buildmesh cos d dx dy dz int3d max medit on plot sin coef facemerge iso label labelmid nbiso order t transfo value wait zbound",
"name": "EqPoisson.edp",
- "starts": 4577,
+ "starts": 14725,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4813,
+ "ends": 14961,
"keywords": "int mesh mesh3 meshS load be cout endl label m n N nbe nt nv x y assert cube d extract medit B boundary label t",
"name": "extract-boundary3d.edp",
- "starts": 4800,
+ "starts": 14948,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 2569,
+ "ends": 12717,
"keywords": "fespace func int macro mesh mesh3 meshS problem real solve P1 include load CG cout endl m n N nt P re region x y z d dx dy dz int3d medit mmg3d movemesh on plot tetg A B boundary displacement holelist op option options region regionlist solver switch t tol",
"name": "fallingspheres.edp",
- "starts": 2520,
+ "starts": 12668,
"tags": "tetg mmg 3D"
},
{
"dir": "3d",
- "ends": 2841,
+ "ends": 12989,
"keywords": "border fespace func int macro matrix mesh mesh3 ofstream real solve varf P2 P23d adj be bordermeasure CG cout endl label linfty m max measure min n N nbe ndof ndofK nt nv P pi re region true whoinElement verbosity version x y z abs adj assert buildmesh change cos d dd dx dy dz int2d int3d max min on plot rint savemesh set sin square A B bb boundary err file fill label order region save solver t value wait",
"name": "first.edp",
- "starts": 2713,
+ "starts": 12861,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4901,
+ "ends": 15049,
"keywords": "fespace func int macro matrix mesh mesh3 real solve varf P1 include load area be cout endl im l1 m measure n N ndof nt P pi re sum verbosity x y z abs assert change cube d dx dy dz int2d int3d medit on plot set sqrt B eps err levelset ps t wait",
"name": "intlevelset3d.edp",
- "starts": 4814,
+ "starts": 14962,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4513,
+ "ends": 14661,
"keywords": "border fespace func int mesh mesh3 P2 load be label m max min n nt P pi re x y z buildlayers buildmesh cos d max medit min plot sin sqrt cmm coef label labelmid order reffacelow reffaceup t wait zbound",
"name": "Lac.edp",
- "starts": 4494,
+ "starts": 14642,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4432,
+ "ends": 14580,
"keywords": "fespace func int macro mesh mesh3 problem real solve P2 P2dc load be cout endl im label linfty m n N nt P re sparsesolver x y z abs assert cube d dd dx dy dz Gamma int2d int3d intallfaces jump mean on plot savemesh sqrt square A A1 B cmm err fill init label metric op save solver sym t value wait",
"name": "LapDG3d.edp",
- "starts": 4378,
+ "starts": 14526,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 2929,
+ "ends": 13077,
"keywords": "fespace func int macro mesh mesh3 real solve P1 P1dc load be label m n N nt P re sparsesolver x y z abs cube d dd dx dy dz int2d int3d intallfaces jump on plot square A cmm fill init label solver t value wait",
"name": "LapDG3d1.edp",
- "starts": 2904,
+ "starts": 13052,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 3493,
+ "ends": 13641,
"keywords": "fespace int macro mesh mesh3 problem real solve P1 load be CG cout endl l1 label m max min n nt nv P re region volume x y z buildlayers change cube d dd dx dy dz int3d max medit min mshmet on plot square tetg tetgreconstruction trunc A aniso boundary doptions err fill hmax hmin init iso label labeldown labelmid labelup loptions nbregul normalization op option options region sizeofvolume solver switch t wait zbound",
"name": "Laplace-Adapt-3d.edp",
- "starts": 3459,
+ "starts": 13607,
"tags": "tetg 3D"
},
{
"dir": "3d",
- "ends": 2987,
+ "ends": 13135,
"keywords": "fespace int macro mesh mesh3 problem real solve P1 load be CG cout endl label m max min n nt nv P re verbosity x y z change cube d dx dy dz exec int3d max medit min mmg3d mshmet on plot savemesh savesol tetg trunc A aniso B coef err hmax hmin iso label metric ratio save solver t wait",
"name": "Laplace-Adapt-aniso-3d.edp",
- "starts": 2935,
+ "starts": 13083,
"tags": "tetg mmg 3D"
},
{
"dir": "3d",
- "ends": 4576,
+ "ends": 14724,
"keywords": "fespace func int macro mesh mesh3 problem real solve P2 load be CG cout endl label linfty m max measure min n N nt P qfV1 qfV1lump re region verbosity version x y z abs assert buildlayers d dx dy dz int2d int3d max min on plot sign square err label labelmid qfV reffacelow reffaceup region solver t wait zbound",
"name": "Laplace3d.edp",
- "starts": 4514,
+ "starts": 14662,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4153,
+ "ends": 14301,
"keywords": "fespace func int macro mesh mesh3 problem real solve varf Edge03d P0 P1 RT0 RT03d include be CG cout endl im m n N nt nuTriangle P re x y z assert cube d dd dimKrylov dx dy dz Gamma int2d int3d on plot sqrt square B boundary dim eps err fill init ps solver t tgv",
"name": "LaplaceRT-3d.edp",
- "starts": 4000,
+ "starts": 14148,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 2519,
+ "ends": 12667,
"keywords": "border fespace func int macro mesh problem P2 load be false find label m n N nt P pi verbosity x y z buildmesh cos d dd dx dy Gamma int2d medit on sin sqrt init label meditff order save t wait",
"name": "meditddm.edp",
- "starts": 2470,
+ "starts": 12618,
"tags": "2D"
},
{
"dir": "3d",
- "ends": 3973,
+ "ends": 14121,
"keywords": "fespace int macro matrix mesh mesh3 ofstream real solve string varf P1 P13d P2 P23d load be cout endl im label m max min n N nt nv P re region sparsesolver verbosity x y z buildlayers convect d dd dimKrylov dx dy dz exec int3d max min on plot savemesh set sqrt square A bb cmm dim file label labelmid op optimize order qforder ratio reffacelow reffaceup region save solver t wait zbound",
"name": "NSI3d-carac.edp",
- "starts": 3865,
+ "starts": 14013,
"tags": "3D Stokes"
},
{
"dir": "3d",
- "ends": 5105,
+ "ends": 15253,
"keywords": "fespace int macro matrix mesh mesh3 ofstream real solve string varf P1 P13d P2 P23d load be cout endl im label m max min n N nt P re region sparsesolver verbosity x y z buildlayers d dd dx dy dz exec int3d max min on plot savemesh set sqrt square A bb cmm file label labelmid op optimize order qforder ratio reffacelow reffaceup region save solver t wait zbound",
"name": "NSI3d.edp",
- "starts": 5001,
+ "starts": 15149,
"tags": "3D Stokes"
},
{
"dir": "3d",
- "ends": 2605,
+ "ends": 12753,
"keywords": "border fespace func int macro mesh mesh3 ofstream problem real solve P2 P23d be CG cout endl label linfty m max measure min n nt P pi re verbosity x y z buildmesh cos d dd dx dy dz int3d max min on plot sin square bb err file label order solver t wait",
"name": "p.edp",
- "starts": 2570,
+ "starts": 12718,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 2712,
+ "ends": 12860,
"keywords": "fespace func int macro mesh mesh3 meshS problem real solve P0 P1 include load be cout endl m n N nt P pi re region sparsesolver verbosity x y z cube d dx dy dz int2d int3d medit on plot readmesh readmesh3 savemesh sin tetg y0 A B boundary fregion iso nbiso nbofregions periodic region regionlist save solver switch t tol wait",
"name": "Period-Poisson-cube-ballon.edp",
- "starts": 2649,
+ "starts": 12797,
"tags": "tetg 3D"
},
{
"dir": "3d",
- "ends": 2648,
+ "ends": 12796,
"keywords": "border fespace func int mesh mesh3 real P1 P2 load area be cout endl fixed label m max min n N nt nv P pi re searchMethod true verbosity x y z adaptmesh buildlayers buildmesh change cos d int2d max medit min on plot savemesh sin sort cmm fixedborder IsMetric label mem memory order periodic reffacelow reffacemid reffaceup reft reftet renumv save t wait zbound",
"name": "periodic-3d.edp",
- "starts": 2606,
+ "starts": 12754,
"tags": "adaptmesh 3D"
},
{
"dir": "3d",
- "ends": 4449,
+ "ends": 14597,
"keywords": "fespace func int macro mesh mesh3 solve P1 P3 load be cout endl linfty m n ndof nt P pi verbosity x y z assert cube d dx dy dz int3d plot sin cmm err periodic t",
"name": "periodic3.edp",
- "starts": 4433,
+ "starts": 14581,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 3768,
+ "ends": 13916,
"keywords": "fespace func int macro mesh mesh3 meshS problem real P0 P03d P1 P13d load be cout endl false im m n N nt P pi re region verbosity volume x y z adaptmesh cos cube d dx dy dz int2d int3d medit movemesh movemesh23 on plot savemesh sin square tetg y0 y1 A B boundary err fregion inquire IsMetric iso nbiso nbofregions order orientation periodic region regionlist removeduplicate save switch t tol transfo wait",
"name": "Poisson-cube-ballon.edp",
- "starts": 3635,
+ "starts": 13783,
"tags": "adaptmesh tetg 3D"
},
{
"dir": "3d",
- "ends": 4288,
+ "ends": 14436,
"keywords": "border fespace func int macro mesh mesh3 ofstream problem real solve P2 P23d be CG cout endl label linfty m max measure min n nt P pi re verbosity x y z assert buildmesh cos d dd dx dy dz int3d max min on plot sin square bb err file label order solver t wait",
"name": "Poisson.edp",
- "starts": 4241,
+ "starts": 14389,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 3390,
+ "ends": 13538,
"keywords": "border fespace func int macro mesh mesh3 problem real solve P2 P23d load be CG cout endl im label linfty m max measure min n nt P pi re region verbosity x y z adaptmesh assert buildmesh cos d dx dy dz int3d max medit min on plot savemesh savesol sin square tetg tetgtransfo bb cmm err fregion IsMetric label nbofregions order periodic region regionlist save solver t transfo wait",
"name": "Poisson3d.edp",
- "starts": 3317,
+ "starts": 13465,
"tags": "adaptmesh tetg 3D"
},
{
"dir": "3d",
- "ends": 2870,
+ "ends": 13018,
"keywords": "border fespace func int mesh mesh3 real P1 load be im label m max n nt P re region x y z abs buildlayers buildmesh d max medit movemesh on plot sin sqrt coef dim label labeldown labelup order region t wait zbound",
"name": "pyramide.edp",
- "starts": 2842,
+ "starts": 12990,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 3827,
+ "ends": 13975,
"keywords": "func int mesh mesh3 meshS real load be im l2 label m min n nt pi re region verbosity volume x y z adaptmesh cos d medit min movemesh movemesh23 on plot sin sqrt square tetg tetgreconstruction A file fregion IsMetric label nbofregions periodic region regionlist sizeofvolume switch t transfo wait",
"name": "refinesphere.edp",
- "starts": 3769,
+ "starts": 13917,
"tags": "adaptmesh tetg 3D"
},
{
"dir": "3d",
- "ends": 3634,
+ "ends": 13782,
"keywords": "int real include be cout endl m n N nt re true verbosity x y assert d mean on Wait file op prev refe t value",
"name": "regtests.edp",
- "starts": 3585,
+ "starts": 13733,
"tags": "2D"
},
{
"dir": "3d",
- "ends": 3316,
+ "ends": 13464,
"keywords": "bool fespace func int macro matrix mesh mesh3 real solve varf P0 P1 include load be cout endl im label m max min n N ndof nt P pi re true volume x y z abs assert cube d dd dx dy dz Gamma int3d interpolate max min on plot set sqrt trunc A B cmm dim err fill inside iso label order ps qforder solver split t tgv viso wait",
"name": "schwarz-nm-3d.edp",
- "starts": 3141,
+ "starts": 13289,
"tags": "3D"
},
{
"dir": "3d",
- "ends": 4377,
+ "ends": 14525,
"keywords": "border mesh mesh3 real include load be cout endl label m n pi re region x y z buildmesh cos d medit on plot sin A B label order region t wait",
"name": "Sphere-buildlayer.edp",
- "starts": 4353,
+ "starts": 14501,
"tags": "2D"
},
{
"dir": "3d",
- "ends": 3999,
+ "ends": 14147,
"keywords": "int mesh mesh3 meshS real include load area cout endl m max min n nt pi re region x z cos d max medit min on plot sqrt tetg A B bb cmm fregion hmax hmin nbofregions region regionlist switch t wait",
"name": "Sphere-Isocahedron.edp",
- "starts": 3974,
+ "starts": 14122,
"tags": "tetg mmg 3D"
},
{
"dir": "3d",
- "ends": 4352,
+ "ends": 14500,
"keywords": "border func mesh meshS real load be label m n nt pi re verbosity x y abs adaptmesh buildmesh cos d medit movemesh movemesh23 on plot savemesh sin sqrt square B IsMetric label order orientation save t transfo wait",
"name": "sphere2.edp",
- "starts": 4322,
+ "starts": 14470,
"tags": "adaptmesh 3D"
},
{
"dir": "3d",
- "ends": 4321,
+ "ends": 14469,
"keywords": "func int mesh meshS real load be label m n nt re x y z adaptmesh cube d exec medit movemesh movemesh23 on plot savemesh sqrt square y0 y1 err label orientation periodic save sym t transfo wait",
"name": "sphere6.edp",
- "starts": 4289,
+ "starts": 14437,
"tags": "adaptmesh 3D"
},
{
"dir": "3d",
- "ends": 4949,
+ "ends": 15097,
"keywords": "int mesh mesh3 meshS real include load be cout endl m n N nt re region verbosity x y z cube d medit on savemesh tetg trunc A B boundary region regionlist save switch t wait",
"name": "sphereincube.edp",
- "starts": 4922,
+ "starts": 15070,
"tags": "tetg 3D"
},
{
"dir": "3d",
- "ends": 4721,
+ "ends": 14869,
"keywords": "fespace func int macro mesh mesh3 real solve P1 P2 P23d load be label m max min n nt P re x y z buildlayers d dx dy dz int3d max medit min on plot square cmm iso label labelmid nbiso order qforder reffacelow reffaceup t wait zbound",
"name": "Stokes.edp",
- "starts": 4678,
+ "starts": 14826,
"tags": "3D Stokes"
},
{
"dir": "3d",
- "ends": 4677,
+ "ends": 14825,
"keywords": "func int mesh mesh3 meshS real load be InternalEdge m max min n nt pi re region true x y z assert change cos cube d max medit min movemesh movemesh23 on plot savemesh sin square tetg y0 y1 A cleanmesh cmm file fregion nbofregions orientation region regionlist removeduplicate rmInternalEdges save switch t transfo wait",
"name": "tetgencube.edp",
- "starts": 4598,
+ "starts": 14746,
"tags": "tetg 3D"
},
{
"dir": "3d",
- "ends": 3140,
+ "ends": 13288,
"keywords": "func int mesh mesh3 meshS real load cout endl im m max min n nt pi re region verbosity x y z adaptmesh cos d dd max medit min movemesh movemesh23 on plot savemesh sin square tetg A file fregion holelist IsMetric nbofholes nbofregions orientation periodic region regionlist save switch t transfo wait",
"name": "tetgenholeregion.edp",
- "starts": 3045,
+ "starts": 13193,
"tags": "adaptmesh tetg 3D"
},
{
"dir": "3d",
- "ends": 4476,
+ "ends": 14624,
"keywords": "border fespace func int mesh mesh3 P2 load be label m max min n nt P pi re x y z buildlayers buildmesh cos d max medit min plot sin sqrt trunc coef label labelmid order reffacelow reffaceup split t wait zbound",
"name": "TruncLac.edp",
- "starts": 4450,
+ "starts": 14598,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13271,
+ "ends": 23419,
"keywords": "int mesh meshL load be cout endl m n nbe nt nv pi re x d on plot segment B cmm order orientation t",
"name": "basicGlue.edp",
- "starts": 13249,
+ "starts": 23397,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13654,
+ "ends": 23802,
"keywords": "border mesh meshL load im m n pi re region verbosity x y buildmesh buildmeshL cos d on plot sin dim order region t wait",
"name": "border.edp",
- "starts": 13647,
+ "starts": 23795,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13646,
+ "ends": 23794,
"keywords": "border int mesh meshL load be label m n nt pi re true x y z buildmesh buildmeshL cos d extract on plot savemesh sin square label order refe save t wait",
"name": "buildParametricMeshL.edp",
- "starts": 13614,
+ "starts": 23762,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13403,
+ "ends": 23551,
"keywords": "int mesh meshL real load adj be cout endl label m max min n N nbe nt nv re region true whoinElement version x y z adj change d max min on rint set bb boundary fill label region t value",
"name": "Connectivite-L.edp",
- "starts": 13353,
+ "starts": 23501,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13352,
+ "ends": 23500,
"keywords": "fespace func int macro matrix mesh meshL real solve string varf P1 load be cout endl im m max min n nt P pi re verbosity x y z d dx dy dz int1d max min movemesh on plot savemesh sin A boundary cmm coef eps eta init prev ps save solver t tgv value wait",
"name": "elasticstring.edp",
- "starts": 13272,
+ "starts": 23420,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13424,
+ "ends": 23572,
"keywords": "int mesh mesh3 meshL meshS load be label m n nbe nt nv x y abs assert buildBdMesh cube d extract Gamma medit plot savemesh B boundary label save t wait",
"name": "extractMeshes.edp",
- "starts": 13404,
+ "starts": 23552,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13462,
+ "ends": 23610,
"keywords": "fespace func int macro mesh meshL problem real P2 load cout endl m n nt nuTriangle P re x y z cos cosh d dx dxx dxz dy dz dzz int1d on plot sin sinh bb t",
"name": "LaplacianCurve.edp",
- "starts": 13425,
+ "starts": 23573,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13587,
+ "ends": 23735,
"keywords": "fespace func int macro mesh meshL solve P1 P2 load cout endl linfty m n nt P pi x y z assert d dx dy dz int1d plot sin segment err periodic t wait",
"name": "periodicL.edp",
- "starts": 13569,
+ "starts": 23717,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13613,
+ "ends": 23761,
"keywords": "fespace func int matrix mesh meshL problem real solve varf P1 load be cout endl im m max n nt nv P re true x y chi d dx EigenValue int1d max on plot segment A B cmm dim fill maxit ncv nev ps sigma sym t tol value vector",
"name": "QMoscillator-new1d.edp",
- "starts": 13588,
+ "starts": 23736,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13568,
+ "ends": 23716,
"keywords": "fespace func int matrix mesh meshL real varf P1 load be cout endl label m n N nbe nt nv P re region sum verbosity x y z abs assert d dx int0d int1d on rint segment A label ratio region t",
"name": "tutomesh1d.edp",
- "starts": 13532,
+ "starts": 23680,
"tags": "3D"
},
{
"dir": "3dCurve",
- "ends": 13531,
+ "ends": 23679,
"keywords": "border fespace func int matrix mesh meshL real varf P1 load im m max n N nt P pi re x y z d dx int1d max movemesh on plot sign sin segment A boundary cmm dim eps init op order prev ps ratio t wait",
"name": "WaveEquation-new1d.edp",
- "starts": 13463,
+ "starts": 23611,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32137,
+ "ends": 42285,
"keywords": "border fespace int macro mesh meshS real solve P1 load be cout endl label linfty m max n nt P re x y z assert buildmesh d dx dy dz int2d max movemesh movemesh23 on plot sqrt coef eps label op order ps sigma t transfo wait",
"name": "beam-3dS.edp",
- "starts": 32094,
+ "starts": 42242,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32154,
+ "ends": 42302,
"keywords": "border mesh meshL meshS include be cout endl im label m min n pi re region verbosity x y z buildmesh buildmeshL cos d min on plot sin label order region t wait",
"name": "buildmeshS.edp",
- "starts": 32138,
+ "starts": 42286,
"tags": "2D"
},
{
"dir": "3dSurf",
- "ends": 31951,
+ "ends": 42099,
"keywords": "int mesh mesh3 meshS load be label m n N nbe nt nv re y assert buildBdMesh change cube d Gamma medit plot readmesh savemesh B boundary label save t",
"name": "buildMeshSfromMesh3.edp",
- "starts": 31921,
+ "starts": 42069,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32657,
+ "ends": 42805,
"keywords": "fespace func int macro mesh meshS problem real solve P1 load be cout im m n N nt P re true x y z assert change cos cosh d dx dy dz Gamma int1d int2d on plot sin sinh sqrt square square3 tan yn cmm eps err errg eta ps ratio refe t value",
"name": "cauchyproblem.edp",
- "starts": 32501,
+ "starts": 42649,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32719,
+ "ends": 42867,
"keywords": "func int mesh meshS real load adj area be cout endl label m max min n N nbe nt nuTriangle nv P pi re region true whoinElement version x y z abs adj assert change d int2d max min on rint set square square3 A bb boundary fill label order qforder region t value",
"name": "Connectivite-S.edp",
- "starts": 32658,
+ "starts": 42806,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32313,
+ "ends": 42461,
"keywords": "fespace func int macro matrix mesh meshS real solve string varf P1 load be cout endl im m max min n nt P pi re verbosity x y z d dx dy dz int2d max min movemesh on plot savemesh sin square square3 A boundary cmm coef eps eta init prev ps save solver t tgv value wait",
"name": "elasticityplate.edp",
- "starts": 32233,
+ "starts": 42381,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32190,
+ "ends": 42338,
"keywords": "fespace int macro mesh mesh3 meshS solve P1 load be CG label m n nt P x y z abs cube d dx dy dz extract int2d on plot trunc boundary iso label nbiso solver t",
"name": "extractSurfFromMesh3.edp",
- "starts": 32155,
+ "starts": 42303,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 31896,
+ "ends": 42044,
"keywords": "int mesh meshS load m n nt nbnomanifold re x y assert d on plot square square3 cmm orientation t wait",
"name": "glu3DSurf.edp",
- "starts": 31856,
+ "starts": 42004,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 31998,
+ "ends": 42146,
"keywords": "fespace func int macro mesh meshS real solve P1 load cout endl linfty m n nt nv P pi re x y z assert atan atan2 cos d dist dx dy dz int2d movemesh movemesh23 on plot sin square tan cmm fill iso nbiso periodic removeduplicate t transfo wait",
"name": "HeatTorus.edp",
- "starts": 31952,
+ "starts": 42100,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32042,
+ "ends": 42190,
"keywords": "fespace func int macro mesh mesh3 meshS problem real solve P2 load be CG label m max min n N nt P re region x y z buildlayers buildBdMesh d dx dy dz Gamma int1d int2d max min on plot square B label labelmid reffacelow reffaceup region save solver t wait zbound",
"name": "Laplace3dSP2.edp",
- "starts": 31999,
+ "starts": 42147,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32778,
+ "ends": 42926,
"keywords": "fespace func int macro matrix mesh meshS problem real solve varf P0 P1 P1dc RT0 RT1 load im m n N nt P pi re sparsesolver true verbosity x y z cos d dimKrylov dx dy dz Gamma int1d int2d on plot set sin square square3 A cmm coef dim eps eta fill init nev ps solver t tgv value wait",
"name": "LaplaceRT1Surf.edp",
- "starts": 32720,
+ "starts": 42868,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32436,
+ "ends": 42584,
"keywords": "fespace func int macro matrix mesh meshS problem real solve varf P1 P2 P2b load CG cout endl l2 m n nt P pi re x y z assert cos d dd dx dy dz int2d interpolate medit movemesh movemesh23 on savemesh sin square square3 A B boundary err eta init save solver t transfo",
"name": "LaplacianSurf.edp",
- "starts": 32330,
+ "starts": 42478,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32093,
+ "ends": 42241,
"keywords": "fespace func int macro mesh meshS problem real P1 load cout endl l2 m max min n N nt P pi re x y z abs assert cos d dx dy dz int1d int2d max min movemesh movemesh23 on plot sin square err eta t transfo wait",
"name": "LapP1withflux.edp",
- "starts": 32043,
+ "starts": 42191,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32232,
+ "ends": 42380,
"keywords": "fespace int mesh mesh3 meshS real P1 load be im m n nt P re version x y z buildBdMesh cube d Gamma medit movemesh on plot savemesh square square3 trunc B op save split t transfo wait",
"name": "operatorsOnMeshS.edp",
- "starts": 32191,
+ "starts": 42339,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32329,
+ "ends": 42477,
"keywords": "fespace func int macro mesh meshS solve P1 P2 load cout endl linfty m n nt P pi re x y z assert d dx dy dz int2d plot sin square square3 err periodic t wait",
"name": "periodicS.edp",
- "starts": 32314,
+ "starts": 42462,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 31920,
+ "ends": 42068,
"keywords": "fespace func int mesh mesh3 meshS P1 load be m min n nt P re region x y z buildBdMesh chi cube d Gamma medit min mmg3d on sqrt trunc B iso mem metric region t",
"name": "Pinocchio.edp",
- "starts": 31897,
+ "starts": 42045,
"tags": "mmg 3D"
},
{
"dir": "3dSurf",
- "ends": 32481,
+ "ends": 42629,
"keywords": "fespace int macro mesh meshS P0 P1 P2 RT0 load cout endl linfty m n N ndof nt P re x y z assert d plot square square3 cmm err fill t wait",
"name": "testFE.edp",
- "starts": 32437,
+ "starts": 42585,
"tags": "3D"
},
{
"dir": "3dSurf",
- "ends": 32500,
+ "ends": 42648,
"keywords": "mesh meshL meshS load m n re x buildBdMesh d Gamma plot savevtk square square3 B bin save t",
"name": "testvtk.edp",
- "starts": 32482,
+ "starts": 42630,
"tags": "3D"
},
{
"dir": "bem",
- "ends": 12282,
+ "ends": 22430,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int macro Mat mesh meshL problem real solve varf P0 P1 include load ARGV be cout endl im label m max mpirank n N nt P pi re region sparsesolver x y z BEM buildmesh change cos d dd dist dx dy erf exp extract getARGV int1d int1dx1d int2d max on OrientNormal plot POT round sin system A B cmm dim eta fill iso label master nbiso order region solver t unbounded value wait",
"name": "Helmholtz-2d-FEM-BEM-coupling-MUMPS-composite.edp",
- "starts": 12145,
+ "starts": 22293,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 12753,
+ "ends": 22901,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int macro Mat matrix mesh meshL problem real solve varf P0 P1 include load ARGV be cout endl GMRES im label m max mpirank mpisize n N ndof nt nuTriangle P pi re region sparsesolver x y z BEM buildmesh change cos d dd display dist dx dy erf exp extract getARGV int1d int1dx1d int2d interpolate max on OrientNormal plot POT round set sin A B cmm dim eta fill fregion iso label master nbiso order region solver t unbounded value wait",
"name": "Helmholtz-2d-FEM-BEM-coupling-MUMPS.edp",
- "starts": 12574,
+ "starts": 22722,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 13022,
+ "ends": 23170,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int Mat mesh meshL real varf P1 include load ARGV be cout endl im m max min mpirank n N nt P pi re volume x y z abs BEM buildmesh buildmeshL cos d display dx exp getARGV int1d int1dx1d max min on OrientNormal plot POT sin A B bin cmm dim eps eta fill iso nbiso order ps t unbounded value",
"name": "Helmholtz_circle_Dirichlet_all_direct.edp",
- "starts": 12883,
+ "starts": 23031,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 12410,
+ "ends": 22558,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int Mat matrix mesh meshL real varf P1 include load ARGV be cout endl im m max min mpirank n N nt P pi re volume x y z abs BEM buildmesh buildmeshL cos d display dx exp getARGV int1d int1dx1d max min on OrientNormal plot POT sin A B bin cmm dim eps eta fill iso nbiso order ps t unbounded value",
"name": "Helmholtz_circle_Dirichlet_all_indirect.edp",
- "starts": 12283,
+ "starts": 22431,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 13248,
+ "ends": 23396,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int Mat matrix mesh meshL mpiComm problem real solve varf P1 include load ARGV be cout endl find im l2 m max min mpiCommWorld mpirank mpisize mpiSUM n N ndof nt P pi re volume x y z atan atan2 BEM buildmesh buildmeshL ceil cos d display dx exp getARGV gslsfbesselJn gslsfbesselYn int1d int1dx1d max min mpiReduce on OrientNormal plot POT processor sin sqrt tan A B cmm dim eps err eta fill iso nbiso order ps t unbounded value",
"name": "Helmholtz_circle_Dirichlet_simple.edp",
- "starts": 13137,
+ "starts": 23285,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 12071,
+ "ends": 22219,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int Mat mesh meshL real varf P1 include load ARGV be cout endl im m max min mpirank n N nt P pi re volume x y z abs BEM buildmesh buildmeshL cos d display dx dy exp getARGV int1d int1dx1d max min on OrientNormal plot POT sin A B bin cmm dim eps eta fill iso nbiso order ps t unbounded value",
"name": "Helmholtz_circle_Neumann_all_direct.edp",
- "starts": 11930,
+ "starts": 22078,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 12882,
+ "ends": 23030,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int Mat matrix mesh meshL real varf P1 include load ARGV be cout endl im m max min mpirank n N Nt nt P pi re volume x y z abs BEM buildmesh buildmeshL change cos d display dx dy exp getARGV int1d int1dx1d max min on OrientNormal plot POT sin tan A B bin cmm dim eps eta fill iso nbiso order ps t unbounded value",
"name": "Helmholtz_circle_Neumann_all_indirect.edp",
- "starts": 12754,
+ "starts": 22902,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 13136,
+ "ends": 23284,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int Mat matrix mesh mesh3 meshS real solve varf P1 include load ARGV be CG cout endl im label m max min mpirank n N ndof nt P pi re region x y z BEM buildBdMesh cos d display dist dx exp Gamma getARGV int2d int2dx2d max min on plot POT sin square square3 trunc A B dim eps eta fill iso label nbiso order ps region solver t value width",
"name": "Helmholtz_Cobracavity.edp",
- "starts": 13023,
+ "starts": 23171,
"tags": "3D Helmholtz"
},
{
"dir": "bem",
- "ends": 12144,
+ "ends": 22292,
"keywords": "BemKernel BemPotential complex fespace func HMatrix int macro Mat mesh mesh3 meshS real varf P1 RT0 include load ARGV be cout endl im m max mpirank n N nt P pi re x y z abs BEM cos cube d display dx exp extract getARGV int2d int2dx2d max on plot polar POT sin sqrt square square3 trunc A B dim eps eta fill iso nbiso ps t value",
"name": "Maxwell_cube_EFIE.edp",
- "starts": 12072,
+ "starts": 22220,
"tags": "3D Maxwell"
},
{
"dir": "bem",
- "ends": 12573,
+ "ends": 22721,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int Mat matrix mesh mesh3 meshS real string varf P1 RT0 include load ARGV be cout endl im m max min mpirank n N nt nv P pi re x y z abs BEM buildmesh cos cube d display dx exit exp extract getARGV int2d int2dx2d max min movemesh movemesh23 on plot polar POT sin sqrt square square3 trunc A B cmm dim eps err eta fill init iso nbiso nbiter op order ps save t transfo value vector",
"name": "Maxwell_EFIE_sphere.edp",
- "starts": 12411,
+ "starts": 22559,
"tags": "3D Maxwell"
},
{
"dir": "bug",
- "ends": 32942,
+ "ends": 43090,
"keywords": "bool fespace func int matrix mesh ofstream real solve varf P1 P2 be cin cout endl m max min n N nt nv P re verbosity x y abs adaptmesh assert clock convect d dx dy int2d max min on plot set sign square yn A abserror B cmm coef cutoff eps err hmin init inquire nbiter ps ratio save solver t tol value wait",
"name": "aaa.edp",
- "starts": 32833,
+ "starts": 42981,
"tags": "adaptmesh 2D Stokes"
},
{
"dir": "bug",
- "ends": 32973,
+ "ends": 43121,
"keywords": "func int macro real string be cout endl im m n nt re version y d on t",
"name": "bug-arg-string.edp",
- "starts": 32943,
+ "starts": 43091,
"tags": "2D"
},
{
"dir": "bug",
- "ends": 32818,
+ "ends": 42966,
"keywords": "border int mesh real be cin cout label m n nt pi re verbosity x y atan buildmesh cos d dd on plot sin square tan y0 y1 bb eps label order ps t wait",
"name": "bugborder.edp",
- "starts": 32779,
+ "starts": 42927,
"tags": "2D"
},
{
"dir": "bug",
- "ends": 33041,
+ "ends": 43189,
"keywords": "func int real be cout endl m n nt re version y z arg d on t",
"name": "bugf.edp",
- "starts": 33028,
+ "starts": 43176,
"tags": "2D"
},
{
"dir": "bug",
- "ends": 32832,
+ "ends": 42980,
"keywords": "fespace mesh P1 im m n P re x y d on square A op t",
"name": "bugifexp.edp",
- "starts": 32829,
+ "starts": 42977,
"tags": "2D"
},
{
"dir": "bug",
- "ends": 33049,
+ "ends": 43197,
"keywords": "fespace mesh P2 be cout endl label m n P re version d on plot square label t value wait",
"name": "bugv1.18.edp",
- "starts": 33042,
+ "starts": 43190,
"tags": "2D"
},
{
"dir": "bug",
- "ends": 32988,
+ "ends": 43136,
"keywords": "fespace mesh P2 cout endl im m n nt P re y d on square composante t vector",
"name": "fe-vect.edp",
- "starts": 32974,
+ "starts": 43122,
"tags": "2D"
},
{
"dir": "bug",
- "ends": 32828,
+ "ends": 42976,
"keywords": "fespace func mesh real P1 m n P re x y square t",
"name": "func.edp",
- "starts": 32819,
+ "starts": 42967,
"tags": "2D"
},
{
"dir": "bug",
- "ends": 33027,
+ "ends": 43175,
"keywords": "complex real cout endl m n N nt P re x z d on mem t",
"name": "zArithmetic_bug1.edp",
- "starts": 32989,
+ "starts": 43137,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33869,
+ "ends": 44017,
"keywords": "border fespace int matrix mesh problem real solve varf P1 be CG cout diag endl find im label m max min n nt nv P pi re true verbosity x y buildmesh d dd dx dy EigenValue int2d max min on plot square tan A B bb boundary close cmm eps label maxit mode ncv nev omega op order ps ratio sigma solver sym t tgv tol value vector wait",
"name": "BeamEigenValue.edp",
- "starts": 33797,
+ "starts": 43945,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33941,
+ "ends": 44089,
"keywords": "border fespace int matrix mesh problem real solve varf P1 be CG cout Crout diag endl find im label m max min n nt nv P pi re true verbosity x y z buildmesh d dd dx dy EigenValue int2d max min on plot square tan A B bb boundary close cmm eps factorize label maxit mode ncv nev omega op order periodic ps ratio sigma solver sym t tgv tol value vector wait",
"name": "BeamEigenValueperio.edp",
- "starts": 33870,
+ "starts": 44018,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 34013,
+ "ends": 44161,
"keywords": "fespace int macro matrix mesh real solve varf P1 be CG cout endl m max min n nt P pi re sparsesolver true x y d dx dy EigenValue int2d max min on set square A B solver sym t value",
"name": "condition-number.edp",
- "starts": 33995,
+ "starts": 44143,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33350,
+ "ends": 43498,
"keywords": "border fespace func int macro matrix mesh problem real solve varf P2 load be CG cout endl im linfty m min n N nt nv P pi re sparsesolver true verbosity x y z abs assert cos d dx dy EigenValue int2d medit min movemesh on plot sin sqrt square A B close cmm coef eps err fill mode nev order ps ratio sigma solver sym t tol value vector wait",
"name": "free-cyl-axi.edp",
- "starts": 33261,
+ "starts": 43409,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 34098,
+ "ends": 44246,
"keywords": "fespace int macro matrix mesh mesh3 problem real solve varf P1 load be CG cout diag endl find im label m max min n nt nv P pi re region true x y z abs assert buildlayers cube d dx dy dz EigenValue int3d max min on plot sort square tan A B boundary close cmm eps err label labelmid maxit mode ncv nev omega ps ratio reffacelow reffaceup region sigma solver sym t tgv tol value vector wait zbound",
"name": "Lap3dEigenValue.edp",
- "starts": 34014,
+ "starts": 44162,
"tags": "3D"
},
{
"dir": "eigen",
- "ends": 33705,
+ "ends": 43853,
"keywords": "complex fespace int matrix mesh real solve varf P2 be cout endl GMRES im m max min n nt nv P pi re sum verbosity x y z d dd dx dy EigenValue imag int2d max min on plot square A B cmm dim eps fill maxit ncv nev op ps sigma solver t tol value vector wait",
"name": "LapComplexEigenValue.edp",
- "starts": 33644,
+ "starts": 43792,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 34167,
+ "ends": 44315,
"keywords": "fespace func int macro matrix mesh meshL real solve varf P1 load be CG default im m max n nt P pi re true x y z cos d dd dx dy dz EigenValue int1d max medit on plot sin segment A B close cmm dim fill init iso maxit nbiso ncv nev removeduplicate sigma solver sym t tol value vector wait which",
"name": "LapEigen1DBeltrami.edp",
- "starts": 34129,
+ "starts": 44277,
"tags": "3D"
},
{
"dir": "eigen",
- "ends": 33403,
+ "ends": 43551,
"keywords": "fespace func int macro matrix mesh meshS real solve varf P1 load be CG default im m max n N nt P pi re true x y z cos d dd dx dy dz EigenValue int2d max medit on plot sin square square3 A B boundary close cmm dim eta fill init iso maxit nbiso ncv nev removeduplicate sigma solver sym t tol value vector wait which",
"name": "LapEigenBeltrami.edp",
- "starts": 33351,
+ "starts": 43499,
"tags": "3D"
},
{
"dir": "eigen",
- "ends": 33260,
+ "ends": 43408,
"keywords": "fespace int matrix mesh problem real solve varf P2 be CG cout default diag endl find im m max min n nt nv P pi re sparsesolver true verbosity x y abs assert d dd dx dy EigenValue int2d max min on plot sort square tan A B boundary close cmm dim eps err fill maxit mode ncv nev omega ps ratio sigma solver sym t tgv tol value vector wait which",
"name": "LapEigenValue.edp",
- "starts": 33192,
+ "starts": 43340,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33796,
+ "ends": 43944,
"keywords": "fespace func int matrix mesh problem real solve varf P2 be CG cout diag endl find im m max min n ndof nt nv P pi re sparsesolver true verbosity x y abs assert d dd dx dy EigenValue erf int2d max min on plot sort square tan A B boundary close cmm dim eps err fill maxit mode ncv nev omega ps ratio sigma solver sym t tgv tol value vector wait",
"name": "LapEigenValueFunc.edp",
- "starts": 33727,
+ "starts": 43875,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33114,
+ "ends": 43262,
"keywords": "complex fespace func int matrix mesh problem real solve varf P2 be cout diag endl find im m max min n ndof nt nv P pi re sparsesolver verbosity x y abs complexEigenValue d dd dx dy EigenValue erf int1d int2d max min on plot square tan A A1 B B1 boundary close cmm dim err fill maxit mode ncv nev omega ratio sigma solver t tgv tol value vector wait which",
"name": "LapEigenValueFuncComplex.edp",
- "starts": 33050,
+ "starts": 43198,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 34232,
+ "ends": 44380,
"keywords": "fespace func int matrix mesh problem real solve varf P2 be cout diag endl find im m max min n ndof nt nv P pi re sparsesolver true verbosity x y abs d dd dx dy EigenValue erf int1d int2d max min on plot square tan A A1 B B1 boundary close cmm dim err fill maxit mode ncv nev omega ratio sigma solver sym t tgv tol value vector wait which",
"name": "LapEigenValueFuncV2.edp",
- "starts": 34168,
+ "starts": 44316,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33643,
+ "ends": 43791,
"keywords": "complex fespace int matrix mesh ofstream real solve varf P2 load be binary cout default endl good im m max min n N ndof nt nv P pi re scientific sparsesolver sum verbosity x y z abs d dd dx dy EigenValue exec exp imag int2d max min on plot square A B bin cmm dim file fill init iso maxit ncv nev op sigma solver t tgv tol value vector wait",
"name": "LapnosymComplexEigenValue.edp",
- "starts": 33536,
+ "starts": 43684,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33191,
+ "ends": 43339,
"keywords": "complex fespace int matrix mesh problem real solve varf P2 be CG cout endl false GMRES im linfty m max min n nt nv P pi re verbosity x y z change conj d dd dx dy EigenValue imag int2d max min on plot square A B cmm dim eps factorize fill ivalue maxit metric ncv nev op order ps sigma solver sym t tol value vector wait",
"name": "LapnosymEigenValue.edp",
- "starts": 33115,
+ "starts": 43263,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 34128,
+ "ends": 44276,
"keywords": "border fespace int matrix mesh real solve varf P2 be CG cout Crout endl im m max min n nt nv P pi re true x y z buildmesh cos d dd dx dy EigenValue int2d max min on plot readmesh sin A B close dim eps factorize fill maxit ncv nev op order ps sigma solver sym t tol value vector",
"name": "neuman.edp",
- "starts": 34099,
+ "starts": 44247,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33424,
+ "ends": 43572,
"keywords": "int include cout endl m n N nt true verbosity y d EigenValue Wait B file t",
"name": "regtests.edp",
- "starts": 33404,
+ "starts": 43552,
"tags": "2D Stokes"
},
{
"dir": "eigen",
- "ends": 33994,
+ "ends": 44142,
"keywords": "fespace int matrix mesh real solve varf P1 P2 be CG cout endl im m max min n nt nv P re true x y z abs assert change clock d dx dy EigenValue int2d max min on plot sign square A B close cmm dim eps factorize fill maxit ncv nev op ps sigma solver sym t tol value vector",
"name": "Stokes-eigen.edp",
- "starts": 33942,
+ "starts": 44090,
"tags": "2D Stokes"
},
{
"dir": "eigen",
- "ends": 33726,
+ "ends": 43874,
"keywords": "fespace int macro matrix mesh real solve varf P1 be cout endl im label m min n nt nv P re sparsesolver true x y d dx dy EigenValue int1d int2d min on plot square A B cmm dim fill label nev sigma solver sym t value vector wait",
"name": "VP-Steklov-Poincare.edp",
- "starts": 33706,
+ "starts": 43854,
"tags": "2D"
},
{
"dir": "eigen",
- "ends": 33535,
+ "ends": 43683,
"keywords": "border fespace func int macro matrix mesh ofstream problem real solve varf P0 P2 be endl find im label m max min n N nt nv P pi precision re region true UMFPACK x y z arg asin buildmesh cos d dx dy EigenValue int1d int2d log max min on plot round set sign sin sqrt segment A aspectratio B bin boundary cmm displacement eps file init inside iso label maxit metric mode nbiso ncv nev op order ps ratio region sigma solver sym t tol value vector WindowIndex",
"name": "WGM-sphere.edp",
- "starts": 33425,
+ "starts": 43573,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45155,
+ "ends": 55380,
"keywords": "fespace int mesh real solve P1 be im LU m max n N nt nv P re true verbosity version x y abs adaptmesh convect d dist dx dy int2d max on plot square A abserror B err eta file init maxsubdiv nbjacoby nbsmooth nbvx omega op option ratio rescaling sigma solver split splitpbedge t value wait",
"name": "BlackScholes2D.edp",
- "starts": 45082,
+ "starts": 55307,
"tags": "adaptmesh 2D"
},
{
"dir": "examples",
- "ends": 44527,
+ "ends": 54752,
"keywords": "border fespace int mesh solve P1 be im label m n N nt P pi re true version x y buildmesh cos d dist dx dy int2d on plot sin A B eps eta file label op option order ps t value wait",
"name": "condensor.edp",
- "starts": 44473,
+ "starts": 54698,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44109,
+ "ends": 54334,
"keywords": "border fespace int macro matrix mesh problem real varf P1 P1dc be CG im m max min n N nt nTonEdge nv P pi re unused verbosity version x y abs buildmesh convect cos d dist dx dy exp int1d int2d intalledges jump max min on plot sin A B bb cmm eps eta file fill init iso op option order ps t value viso wait",
"name": "convects.edp",
- "starts": 44017,
+ "starts": 54242,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45308,
+ "ends": 55533,
"keywords": "border fespace int mesh mesh3 meshL meshS P1 load be cout endl label m n nt P pi re region x y z buildmesh buildmeshL cos cube d dd dist extract on plot projection savemesh sign sin square square3 label order region save t wait",
"name": "dist-projection.edp",
- "starts": 45273,
+ "starts": 55498,
"tags": "3D"
},
{
"dir": "examples",
- "ends": 44682,
+ "ends": 54907,
"keywords": "bool fespace func int matrix mesh problem real solve varf P1 be cout endl im m n N nt P re sparsesolver version x y z clock d dist dx dy int1d int2d on plot square A B cmm eta file init op option ratio save solver t",
"name": "Heat.edp",
- "starts": 44587,
+ "starts": 54812,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44016,
+ "ends": 54241,
"keywords": "border fespace int mesh solve P1 be im label m n N nt P pi re true version x y buildmesh cos d dist dx dy int2d on plot sin A B eta file fill label op option order ps t value wait",
"name": "heatex.edp",
- "starts": 43964,
+ "starts": 54189,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 43963,
+ "ends": 54188,
"keywords": "fespace int macro mesh real solve P2 be cout endl im m max min n N nt P re version x y d dist dx dy int2d max min movemesh on plot sqrt square A B coef eps eta file op option ps t wait",
"name": "lame.edp",
- "starts": 43904,
+ "starts": 54129,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44472,
+ "ends": 54697,
"keywords": "border fespace func int mesh ofstream real solve P2 be endl im imin length m min n N nt P pi re true version x y z buildmesh cos d dist dx dy Gamma int2d min on plot savemesh sin A B eps eta file init mem op option order ps save t wait",
"name": "membrane.edp",
- "starts": 44418,
+ "starts": 54643,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44737,
+ "ends": 54962,
"keywords": "border fespace func int mesh real solve P2 be cout endl im imin length m min n N nt nv P pi re true verbosity version x y buildmesh cos d dist dx dy Gamma int1d int2d log min on plot sin sqrt A B eps err eta file mem op option order ps t wait",
"name": "membranerror.edp",
- "starts": 44683,
+ "starts": 54908,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44380,
+ "ends": 54605,
"keywords": "border complex fespace int mesh real solve P1 be im label m n N nt P pi re region true version x y buildmesh d dist dx dy imag int2d on plot sin A B eta file fill label op option order ps region t wait",
"name": "muwave.edp",
- "starts": 44307,
+ "starts": 54532,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45017,
+ "ends": 55242,
"keywords": "border fespace func int macro mesh real solve P1 P2 be cout endl im label linfty m max n N nt nv P pi re verbosity version x y z assert buildmesh change clock cos d dist dx dy int2d max on plot sin A B bb cmm coef eps err eta file label op option order prev ps save stop t value wait",
"name": "NSNewton.edp",
- "starts": 44903,
+ "starts": 55128,
"tags": "2D Navier-Stokes"
},
{
"dir": "examples",
- "ends": 44306,
+ "ends": 54531,
"keywords": "border fespace int macro Mat matrix mesh real solve varf P1 area be CG cout endl im label m n N ndof nt nv P re true unused verbosity version x y abs adaptmesh assert buildmesh convect d dist dx dy int1d int2d on plot sqrt square yn A absolute B eps err eta file init label mem memory nbvx op option order ps solver t wait",
"name": "NSprojection.edp",
- "starts": 44192,
+ "starts": 54417,
"tags": "adaptmesh 2D"
},
{
"dir": "examples",
- "ends": 44191,
+ "ends": 54416,
"keywords": "border fespace func int mesh ofstream problem real P1 be cout endl im m n N nt P pi re version x y z BFGS buildmesh cos d dd dist dx dy dz int2d on plot sin A B bb eps eta file nbiter op option order ps t value",
"name": "optimcontrol.edp",
- "starts": 44110,
+ "starts": 54335,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45227,
+ "ends": 55452,
"keywords": "border fespace int mesh problem real solve P0 P1 P2 be im label LU m min n N nt P pi re region version x y buildmesh change cos d dist dx dy int2d min on plot sin sqrt A B boundary eta file fill flabel init label op option order ps region solver t value wait",
"name": "potential.edp",
- "starts": 45156,
+ "starts": 55381,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44417,
+ "ends": 54642,
"keywords": "int include be m n N nt re true verbosity x y d mean on Wait op prev refe t value",
"name": "regtests.edp",
- "starts": 44381,
+ "starts": 54606,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44794,
+ "ends": 55019,
"keywords": "border fespace int mesh real solve P1 be im m n N nt P pi re version x y buildmesh cos d dist dx dy int2d on plot sin tan A B cmm eta file op option order ratio t wait",
"name": "schwarz.edp",
- "starts": 44738,
+ "starts": 54963,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45081,
+ "ends": 55306,
"keywords": "border fespace func int matrix mesh real solve varf P1 be CG cout Crout endl im m max n N nt nv P re true version x y buildmesh d dist dx dy EigenValue int1d int2d max on plot A B boundary close eps eta file maxit ncv nev op option order ps sigma solver sym t tol value vector wait",
"name": "sound.edp",
- "starts": 45018,
+ "starts": 55243,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45272,
+ "ends": 55497,
"keywords": "fespace int mesh solve P1 P1b be im m n N nt P re version x y d dist dx dy int2d on plot square A B eta file op option t wait",
"name": "stokes.edp",
- "starts": 45228,
+ "starts": 55453,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45398,
+ "ends": 55623,
"keywords": "fespace func int macro mesh problem solve P1 be im m n nt P pi re x y cos d dx dy int2d on plot sin square trunc boundary cmm dim flags init split t",
"name": "stokes_composite.edp",
- "starts": 45360,
+ "starts": 55585,
"tags": "2D Stokes"
},
{
"dir": "examples",
- "ends": 44586,
+ "ends": 54811,
"keywords": "fespace func int macro matrix mesh problem real varf P1 cout endl m n nt P pi re x y cos d dx dy int2d on plot sin square trunc A boundary cmm err flags init periodic split t",
"name": "stokes_periodic_composite.edp",
- "starts": 44528,
+ "starts": 54753,
"tags": "2D Stokes"
},
{
"dir": "examples",
- "ends": 44902,
+ "ends": 55127,
"keywords": "border fespace func int matrix mesh problem real solve varf P2 be cout endl im LU m n N nt P pi re version x y buildmesh clock cos d dist dx dy int2d on plot sin A B boundary cmm eta file init op option order solver t wait",
"name": "test1.edp",
- "starts": 44844,
+ "starts": 55069,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 44843,
+ "ends": 55068,
"keywords": "border fespace int mesh solve P1 be im label m n N nt P pi re true version x y buildmesh cos d dist dx dy int2d on plot sin A B eta file fill label op option order t value wait",
"name": "thermal.edp",
- "starts": 44795,
+ "starts": 55020,
"tags": "2D"
},
{
"dir": "examples",
- "ends": 45359,
+ "ends": 55584,
"keywords": "fespace func int mesh problem real P1 be im m n N nt P re version x y d dist dx dy int1d int2d on plot square A B eta file op option t",
"name": "thermic.edp",
- "starts": 45309,
+ "starts": 55534,
"tags": "2D"
},
{
"dir": "ffddm",
- "ends": 20693,
+ "ends": 30841,
"keywords": "fespace func int macro matrix mesh ofstream real varf P1 include ARGV cout endl FILE GMRES im l2 m mpirank n N ndof nt P pi re sum verbosity x y z d dd dx dy getARGV int2d interpolate on plot set square A B bin dim err init ps sym t tgv tol vector",
"name": "diffusion-2d-thirdlevelgeneo.edp",
- "starts": 20544,
+ "starts": 30692,
"tags": "2D"
},
{
"dir": "ffddm",
- "ends": 22184,
+ "ends": 32332,
"keywords": "fespace func int macro mesh mesh3 mpiComm real solve varf P1 include load ARGV be endl GMRES im label m min mpiCommWorld n N ndof nt nv P pi re sum x y z cube d dd dx dy dz getARGV int3d min on plot rint set A B dim init label op option t",
"name": "diffusion-3d-minimal-ddm.edp",
- "starts": 22138,
+ "starts": 32286,
"tags": "3D"
},
{
"dir": "ffddm",
- "ends": 18548,
+ "ends": 28696,
"keywords": "fespace int macro mesh mesh3 mpiComm real solve varf P1 include load ARGV be endl im label m min mpiCommWorld n N ndof nt nv P pi re sum x y z cube d dd dx dy dz getARGV int3d min on plot rint set A B dim init label op option solver t",
"name": "diffusion-3d-minimal-direct.edp",
- "starts": 18506,
+ "starts": 28654,
"tags": "3D"
},
{
"dir": "ffddm",
- "ends": 19040,
+ "ends": 29188,
"keywords": "fespace func int macro matrix mesh mesh3 mpiComm real solve varf P1 include load ARGV be cout endl GMRES im label m mpiCommWorld mpirank n N ndof nt nv P pi re sum x y z cube d dd dist dx dy dz getARGV int3d on plot rint savemesh set sqrt A B dim err init label op option ps save solver t vector",
"name": "diffusion-3d-simple.edp",
- "starts": 18963,
+ "starts": 29111,
"tags": "3D"
},
{
"dir": "ffddm",
- "ends": 19463,
+ "ends": 29611,
"keywords": "func int macro mesh mesh3 mpiComm real varf P1 include load ARGV be cout endl GMRES im label m mpiCommWorld mpirank n N nt P pi re sum x y z cube d dd dx dy dz getARGV int3d movemesh movemesh3 on plot set sqrt A B dim eps err init label op option precon ps sparams sym t tgv transfo vector",
"name": "elasticity-3d-simple.edp",
- "starts": 19376,
+ "starts": 29524,
"tags": "elasticity 3D"
},
{
"dir": "ffddm",
- "ends": 21378,
+ "ends": 31526,
"keywords": "func int macro mesh mesh3 real varf P1 include load ARGV be cout endl GMRES im label m mpirank n N ndof nt P pi re sum verbosity x y z cube d dd dx dy dz getARGV int3d movemesh movemesh3 on plot set sqrt A B bin dim eps err init label op option ps sym t tgv tol transfo vector",
"name": "elasticity-3d-thirdlevelgeneo.edp",
- "starts": 21265,
+ "starts": 31413,
"tags": "elasticity 3D"
},
{
"dir": "ffddm",
- "ends": 22860,
+ "ends": 33008,
"keywords": "fespace func int macro matrix mesh mesh3 mpiComm problem real solve varf P0 P1 P2 ENDIFMACRO include IFMACRO load ARGV be GMRES im label m min mpiCommWorld n N ndof nt P pi re sum verbosity x y z abs arg cube d dd dist dx dy dz getARGV int2d int3d min on plot rint set sqrt square tan A B coef dim eps init label op precon ps solver switch sym t tgv tol value",
"name": "elasticity_saddlepoint.edp",
- "starts": 22645,
+ "starts": 32793,
"tags": "elasticity 3D"
},
{
"dir": "ffddm",
- "ends": 18505,
+ "ends": 28653,
"keywords": "fespace func int macro mesh meshS mpiComm real varf P1 include load ARGV be GMRES im m mpiCommWorld n N ndof nt P pi re sum x y z cos d dd dx dy dz exp getARGV int2d on plot set sin square square3 A B dim init op option t",
"name": "heat-torus-3d-surf.edp",
- "starts": 18451,
+ "starts": 28599,
"tags": "3D"
},
{
"dir": "ffddm",
- "ends": 20980,
+ "ends": 31128,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int macro Mat matrix mesh meshL mpiComm problem real solve varf P0 P1 include load be cout diag endl GMRES im label m min mpiCommWorld mpirank mpisize n N ndof nt P pi re region sum true x y z BEM broadcast buildmesh change cos d dd display dx dy erf exp extract int1d int1dx1d int2d interpolate min on OrientNormal plot POT processor round set sin trunc A B bb dim eta fill fregion init iso label nbiso op order precon region t unbounded value",
"name": "Helmholtz-2d-FEM-BEM-coupling.edp",
- "starts": 20694,
+ "starts": 30842,
"tags": "3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 22492,
+ "ends": 32640,
"keywords": "complex fespace func int macro mesh mpiComm real varf P2 include ARGV be cout endl GMRES im m mpiCommWorld mpirank n N ndof nt P pi re sum x y z change d dd dx dy exp getARGV int1d int2d on plot set square A B bin dim eps eta init metric op option precon ps refe sparams sym t tgv",
"name": "Helmholtz-2d-HPDDM-BGMRES.edp",
- "starts": 22389,
+ "starts": 32537,
"tags": "2D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 19375,
+ "ends": 29523,
"keywords": "BemKernel complex fespace func int macro matrix mesh meshL mpiComm NewMacro EndMacro real varf P2 include load ARGV be cout endl GMRES im label length m mpiCommWorld mpirank n N ndof nt P pi re region sum true x y z abs BEM d dd dx dy erf exp extract getARGV int1d int1dx1d int2d on OrientNormal plot set square trunc A B bin commworld dim factorize init label metric op option precon region sym t tgv unbounded",
"name": "Helmholtz-2d-interfaceBCs-comp.edp",
- "starts": 19227,
+ "starts": 29375,
"tags": "3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 22644,
+ "ends": 32792,
"keywords": "complex func int macro mesh mpiComm ofstream real varf P2 include load ARGV be cout endl GMRES im m mpiCommWorld mpirank mpisize n N nt P pi re sum version x y z atan change d dd dx dy exec exp getARGV int1d int2d medit on plot savemesh savevtk set square tan trunc A B bin compressor dataname dim eps err eta file init metric op option order precon ps refe save split sym t tgv",
"name": "Helmholtz-2d-marmousi.edp",
- "starts": 22493,
+ "starts": 32641,
"tags": "2D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 21098,
+ "ends": 31246,
"keywords": "complex fespace func int macro mesh mpiComm real varf P1 include ARGV be cout endl GMRES im m mpiCommWorld mpirank n N nt P pi re sum x y z abs change d dd dx dy exp getARGV int1d int2d on plot set square trunc A B bin dim eps err eta init metric op option precon ps refe split sym t tgv",
"name": "Helmholtz-2d-simple.edp",
- "starts": 20981,
+ "starts": 31129,
"tags": "2D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 20193,
+ "ends": 30341,
"keywords": "complex fespace func int macro mesh meshL mpiComm NewMacro EndMacro real solve varf P2 ENDIFMACRO include IFMACRO load ARGV be cout endl false GMRES im l1 label length m max min mpiCommWorld mpirank mpisize n N ndof nt P pi re sum true x y z abs change cos cube d dd dist dx dy erf exp extract Gamma getARGV int1d int2d max min mpiRank on plot rint set sin square Stringification tan A B bin dim eps eta init label metric op precon ps sigma split sym t tgv",
"name": "Helmholtz-2d-sweeping.edp",
- "starts": 19464,
+ "starts": 29612,
"tags": "3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 21822,
+ "ends": 31970,
"keywords": "complex func int macro mesh mesh3 mpiComm real varf P2 include load ARGV be cout endl GMRES im label length m mpiCommWorld mpirank n N nt P pi re sum x y z cube d dd dx dy dz exp getARGV int2d int3d medit on plot set A B bin dim eps eta init label metric op option precon ps split sym t tgv",
"name": "Helmholtz-3d-overthrust.edp",
- "starts": 21710,
+ "starts": 31858,
"tags": "3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 22286,
+ "ends": 32434,
"keywords": "complex func int macro mesh mesh3 mpiComm real varf P2 include load ARGV be cout endl GMRES im label m mpiCommWorld mpirank n N nt P pi re sum x y z cube d dd dx dy dz exp getARGV int2d int3d medit on plot set trunc A B bin dim eps eta init label metric op option precon ps split sym t tgv",
"name": "Helmholtz-3d-simple.edp",
- "starts": 22185,
+ "starts": 32333,
"tags": "3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 19226,
+ "ends": 29374,
"keywords": "BemKernel complex fespace func HMatrix int macro Mat matrix mesh meshL mpiComm real solve varf P1 P2 include load ARGV be cin cout endl false im label length m min mpiCommWorld mpirank n ndof nt nv P pi re sparsesolver true x y z adaptmesh BEM change d dd display dx dy erf exp extract Gamma getARGV int1d int1dx1d int2d interpolate min on plot set square A B bin commworld compressor dim factorize init IsMetric label nbvx op solver sparams t tol",
"name": "Helmholtz-multitrace.edp",
- "starts": 19041,
+ "starts": 29189,
"tags": "adaptmesh 3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 22388,
+ "ends": 32536,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int macro Mat mesh meshL mpiComm real varf P1 include load ARGV be cout endl GMRES im m mpiCommWorld mpirank n N nt P pi re sum x y z abs BEM buildmesh buildmeshL cos d dd display dx dy exp getARGV int1d int1dx1d on OrientNormal plot POT set sin A B dim fill init iso nbiso order t unbounded value",
"name": "Helmholtz_circle_BEM.edp",
- "starts": 22287,
+ "starts": 32435,
"tags": "3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 21952,
+ "ends": 32100,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int macro Mat mesh mesh3 meshS mpiComm real varf P1 include load ARGV be cout endl GMRES im label m mpiCommWorld mpirank n N nt P pi re region sum x y z BEM buildBdMesh cos d dd display dist dx exp Gamma getARGV int2d int2dx2d on plot POT set sin square square3 trunc A B dim eta fill init iso label nbiso order region t value width",
"name": "Helmholtz_Cobracavity_BEM.edp",
- "starts": 21823,
+ "starts": 31971,
"tags": "3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 20543,
+ "ends": 30691,
"keywords": "complex fespace func ifstream int macro matrix mesh mesh3 mpiComm real solve varf P1 P2 P3 ENDIFMACRO include IFMACRO load ARGV be cout endl GMRES im label length LINE m max min mpiCommWorld mpirank mpisize n N ndof nt nv P pi re region sum verbosity version x y z abs arg atan cube d dd dist dx dy dz erf exp floor getARGV imag int2d int3d max min mmg3d mpiSize on pow rint savevtk set sin sqrt system tan trunc A B bin close dataname dim eps eta file init label maxit mem memory metric mode omega op order precon ps qfV ratio refe region save sigma solver sparams split stop sym t tgv tol vector",
"name": "Helmholtz_geophysics.edp",
- "starts": 20194,
+ "starts": 30342,
"tags": "mmg 3D Helmholtz"
},
{
"dir": "ffddm",
- "ends": 21487,
+ "ends": 31635,
"keywords": "complex fespace func int macro mesh mesh3 mpiComm problem real varf Edge03d include load ARGV be cout endl GMRES im label m mpiCommWorld mpirank n N nt P pi re sum x y z abs cube d dd dx dy dz exp getARGV int2d int3d medit on plot set sqrt A B bin dim eps eta init label metric precon ps split sym t tgv vector",
"name": "Maxwell-3d-simple.edp",
- "starts": 21379,
+ "starts": 31527,
"tags": "3D Maxwell"
},
{
"dir": "ffddm",
- "ends": 21709,
+ "ends": 31857,
"keywords": "border complex fespace func int macro mesh mesh3 mpiComm problem real varf Edge03d P0 include load ARGV be cout endl GMRES im label m mpiCommWorld mpirank n N nt nv P pi re region sum verbosity volume x y z abs cos d dd dist dx dy dz exp getARGV int2d int3d medit on plot polar round set sin sqrt tan A B bin boundary dim eps eta init label metric op option order precon ps region split sym t tgv width",
"name": "Maxwell_Cobracavity.edp",
- "starts": 21488,
+ "starts": 31636,
"tags": "3D Maxwell"
},
{
"dir": "ffddm",
- "ends": 22137,
+ "ends": 32285,
"keywords": "fespace func int macro mesh mpiComm real varf P1 P2 include ARGV be cout endl GMRES hTriangle im linfty m max mpiCommWorld mpiMAX mpirank n N nt nuTriangle nv P pi re region searchMethod sum verbosity x y z broadcast change convect d dd dx dy getARGV int1d int2d log log10 max mpiAllReduce on plot processor set sqrt square trunc A B coef dim eps err fregion init op option ps ratio region split sym t tgv tol vector",
"name": "natural_convection.edp",
- "starts": 21953,
+ "starts": 32101,
"tags": "2D Navier-Stokes"
},
{
"dir": "ffddm",
- "ends": 18962,
+ "ends": 29110,
"keywords": "fespace func int macro mesh mesh3 mpiComm problem real varf P1 P2 include load ARGV be cout diag endl GMRES hTriangle im imin label linfty m max min mpiCommWorld mpiMAX mpirank n N nt nuTriangle nv P pi re region searchMethod sum verbosity x y z arg atan broadcast change convect cube d dd dist dx dy dz erf getARGV int2d int3d log log10 max medit min mpiAllReduce on plot processor savevtk set sign sqrt tan trunc yn A B bin coef dataname dim eps err fregion init iso label master mem mode op optimize option order precon ps ratio region save split sym t tgv tol vector",
"name": "natural_convection_3D_obstacle.edp",
- "starts": 18738,
+ "starts": 28886,
"tags": "3D Navier-Stokes"
},
{
"dir": "ffddm",
- "ends": 21264,
+ "ends": 31412,
"keywords": "complex fespace func int macro mesh mpiComm problem real varf P0 P1 include load ARGV be cout endl GMRES im m mpiCommWorld mpirank n N nt P pi re sum verbosity x y z abs assert d dd dx dy exp getARGV int1d int2d medit on plot set sqrt square trunc A B dim eps err init mode omega op option precon ps split t tol",
"name": "Navier-2d-marmousi2.edp",
- "starts": 21099,
+ "starts": 31247,
"tags": "2D"
},
{
"dir": "ffddm",
- "ends": 18737,
+ "ends": 28885,
"keywords": "border fespace func int macro mesh mpiComm problem real string varf P1 include ARGV be cout endl GMRES im label m max min mpiCommWorld n N nt P pi re searchMethod sum verbosity x y z abs adaptmesh broadcast buildmesh change d dd dx dy Gamma getARGV int1d int2d interpolate max min on plot processor set sin y0 y1 A B bb cmm dim err eta fill init iso label nbiso op option order prev ps ratio t value viso wait",
"name": "Richards-2d.edp",
- "starts": 18549,
+ "starts": 28697,
"tags": "adaptmesh 2D"
},
{
"dir": "hpddm",
- "ends": 35660,
+ "ends": 45808,
"keywords": "border fespace func int macro Mat matrix mesh real string varf P1 P1dc include load ARGV be im m max n N nt nTonEdge nv P pi re true x y abs buildmesh change cos d dd dx dy exp getARGV int2d intalledges interpolate jump max on plot set sin A B cmm dim fill init order sparams t wait",
"name": "advection-TS-2d-PETSc.edp",
- "starts": 35580,
+ "starts": 45728,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37216,
+ "ends": 47364,
"keywords": "fespace int macro Mat mesh mpiComm real varf P2 P2Morley include load m max mpiCommWorld mpiMAX n N nt P pi re x y abs assert d dd dx dxx dxy dy dyy int2d max mpiAllReduce on plot set square A B err sparams t tgv wait",
"name": "bilaplace-2d-PETSc.edp",
- "starts": 37178,
+ "starts": 47326,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37988,
+ "ends": 48136,
"keywords": "border complex fespace func int macro Mat matrix mesh meshL mpiComm ofstream problem real string varf P1 P2 include load ARGV be cout endl im m max min mpiCommWorld mpirank mpiSUM n N ndof nt nv P pi precision re true x y z arg buildmesh buildmeshL change d dd dx dy exp getARGV imag int1d log max min mpiAllReduce on set sin A A1 B boundary dim displacement eps err file init ncv nev omega order ps sparams t tgv tol value vector",
"name": "blasius-stability-1d-SLEPc-complex.edp",
- "starts": 37764,
+ "starts": 47912,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 38617,
+ "ends": 48765,
"keywords": "int Mat matrix mpiComm real load cout endl m mpiCommWorld mpirank mpisize n N nt P pi re x y z d exit mpiBarrier on A B t",
"name": "block-PETSc.edp",
- "starts": 38558,
+ "starts": 48706,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 42514,
+ "ends": 52662,
"keywords": "border fespace func int macro Mat mesh real varf P3 include load ARGV be im m n N ndof nt nv P pi re true x y buildmesh change cos d dd dx dy exp getARGV int2d on plot set square A B bb cmm dim order sparams split t tgv",
"name": "bratu-2d-PETSc.edp",
- "starts": 42464,
+ "starts": 52612,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 35883,
+ "ends": 46031,
"keywords": "bool border fespace func int macro Mat mesh real string varf P1 P3 include load ARGV be im m n N ndof nt nv P pi re true x y buildmesh change cos d dd dx dy exp getARGV int2d on plot set square A B bb cmm dim eps nev op order precon ps sparams split t tgv",
"name": "bratu-hpddm-2d-PETSc.edp",
- "starts": 35804,
+ "starts": 45952,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39814,
+ "ends": 49962,
"keywords": "fespace func int macro matrix mesh mesh3 mpiComm real P1 P2 include ARGV be false im m mpiCommWorld n N nt P pi re x y z cube d dd getARGV on plot square A B cmm dim init order split t",
"name": "buildRecursive.edp",
- "starts": 39768,
+ "starts": 49916,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39767,
+ "ends": 49915,
"keywords": "fespace int macro mesh mesh3 mpiComm real P1 include be im l2 m mpiCommWorld mpisize mpiSUM n N nt nv P pi re x y z assert convect cos cube d dd mpiAllReduce on plot sin square A B cmm dim t",
"name": "convect.edp",
- "starts": 39702,
+ "starts": 49850,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36950,
+ "ends": 47098,
"keywords": "complex fespace func int macro Mat matrix mesh varf P1 include load ARGV im m n N nt P pi re true x y change d dd dx dy getARGV int2d on plot set square A B cmm dim err init sparams split t vector",
"name": "diffusion-2d-PETSc-complex.edp",
- "starts": 36912,
+ "starts": 47060,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 35367,
+ "ends": 45515,
"keywords": "fespace func int macro Mat matrix mesh real varf P1 include load ARGV cout endl im m max mpirank n N nt P pi re true x y change d dd dx dy getARGV int2d max on plot set square A B cmm dim err init mem memory sparams split t vector",
"name": "diffusion-2d-PETSc.edp",
- "starts": 35323,
+ "starts": 45471,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36692,
+ "ends": 46840,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real solve string varf P0 P1 include load ARGV be cout endl im m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z d dd dx dy erf getARGV int1d int2d log max on plot set splitComm square tan A B boundary cmm dim err init metric op optimize order solver sparams split sym t tgv vector",
"name": "diffusion-2d.edp",
- "starts": 36606,
+ "starts": 46754,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 41651,
+ "ends": 51799,
"keywords": "fespace func int macro Mat matrix mesh mesh3 real varf P1 include load ARGV be im label m max n N nt P pi re true x y z change cube d dd dx dy dz getARGV int3d max on plot set A B cmm dim err init label sparams split t vector",
"name": "diffusion-3d-PETSc.edp",
- "starts": 41610,
+ "starts": 51758,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 34545,
+ "ends": 44693,
"keywords": "bool fespace func int macro Mat matrix mesh mesh3 mpiComm real solve string varf P0 P1 include load ARGV be cout endl false im label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z cube d dd dx dy dz erf getARGV int2d int3d interpolate log max on plot set splitComm tan A B boundary cmm dim err init label metric op optimize order solver sparams split sym t tgv vector",
"name": "diffusion-3d.edp",
- "starts": 34450,
+ "starts": 44598,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 39273,
+ "ends": 49421,
"keywords": "fespace func int macro Mat matrix mesh mpiComm real varf P0 P2 ENDIFMACRO include IFMACRO load ARGV im m mpiCommWorld mpirank n N ndof nt nv P pi re x y z d dd dx dy getARGV int2d mpiSize on plot set sqrt square A B cmm dim fill init sparams sym t tgv wait",
"name": "diffusion-cartesian-2d-PETSc.edp",
- "starts": 39218,
+ "starts": 49366,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39954,
+ "ends": 50102,
"keywords": "border fespace func int macro Mat mesh mpiComm real varf P0 P1 include load ARGV be im label m mpiCommWorld mpirank mpisize n N ndof nt P pi re x y z buildmesh cos d dd dx dy getARGV int2d on plot set sin A B cmm dim init label order sparams t tgv",
"name": "diffusion-mg-2d-PETSc.edp",
- "starts": 39815,
+ "starts": 49963,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39217,
+ "ends": 49365,
"keywords": "border fespace func int macro Mat matrix mesh mpiComm real solve varf P0 P2 include load ARGV be im label m mpiCommWorld mpirank mpisize mpiSUM n N ndof nt P pi re sparsesolver true verbosity x y z buildmesh change d dd dx dy exit getARGV int2d interpolate mpiAllReduce on plot set trunc A B bb cmm dim init label order ratio solver sparams split sym t tol wait",
"name": "diffusion-mg-2d.edp",
- "starts": 39092,
+ "starts": 49240,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36171,
+ "ends": 46319,
"keywords": "fespace func int macro Mat matrix mesh mesh3 mpiComm real varf P1 include load append ARGV be false im label m mpiCommWorld n N ndof nt P pi re true x y z change cube d dd dx dy dz getARGV int3d on plot savevtk set A B bin cmm dim init label order save sparams split t tgv",
"name": "diffusion-mg-3d-PETSc.edp",
- "starts": 36126,
+ "starts": 46274,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 41609,
+ "ends": 51757,
"keywords": "border fespace func int macro Mat matrix mesh mpiComm real varf P2 include load ARGV be im label m max mpiCommWorld mpirank mpiSUM n N nt nv P pi re true x y buildmesh change cos d dd dx dy getARGV int2d max mpiReduce on plot processor set sin A B cmm dim err init label order periodic sparams t vector",
"name": "diffusion-periodic-2d-PETSc.edp",
- "starts": 41546,
+ "starts": 51694,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 43045,
+ "ends": 53193,
"keywords": "bool border fespace func int macro Mat matrix mesh mpiComm real solve string varf P0 P2 include load ARGV be cout endl false im label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z buildmesh cos d dd dx dy erf getARGV int1d int2d interpolate log max on plot set sin splitComm square tan A B boundary cmm dim err init label metric op optimize order periodic solver sparams split sym t tgv vector",
"name": "diffusion-periodic-2d.edp",
- "starts": 42943,
+ "starts": 53091,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40181,
+ "ends": 50329,
"keywords": "border fespace func int macro Mat matrix mesh mpiComm real varf P0 P1 P2 include load ARGV be im label linfty m max mpiCommWorld mpisize n N ndof nt P pi re x y z abs broadcast buildmesh cos d dd dx dy getARGV int2d interpolate max movemesh on plot processor set sin trunc A B cmm dim fill hmax init label order periodic sparams split t wait",
"name": "diffusion-periodic-balanced-2d-PETSc.edp",
- "starts": 40057,
+ "starts": 50205,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 43093,
+ "ends": 53241,
"keywords": "fespace func int macro Mat matrix mesh mesh3 mpiComm real solve varf P1 include load ARGV be im label m mpiCommWorld mpisize n N nt P pi re x y z cube d dd dx dy dz getARGV int3d on plot set A B cmm dim err init label solver sparams split sym t tgv vector",
"name": "diffusion-simple-3d.edp",
- "starts": 43046,
+ "starts": 53194,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 42855,
+ "ends": 53003,
"keywords": "fespace func int macro Mat matrix mesh mpiComm real varf P1 include load ARGV be cout endl false im label m mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z d dd dx dy erf getARGV int2d on plot set square A B boundary cmm dim init label op sparams split sym t tgv",
"name": "diffusion-substructuring-2d-PETSc.edp",
- "starts": 42803,
+ "starts": 52951,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 34363,
+ "ends": 44511,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real varf P1 include load ARGV be cout endl im label m max mpiCommWorld mpirank mpisize n N ndof nt P pi re verbosity x y z d dd dx dy erf getARGV int2d log max mpiSize on plot splitComm square A B boundary cmm dim init label op split sym t",
"name": "diffusion-substructuring-2d.edp",
- "starts": 34284,
+ "starts": 44432,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 35746,
+ "ends": 45894,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real varf P0 P1 include load ARGV be cout endl im label m max mpiCommWorld mpirank mpisize n N ndof nt P pi re verbosity x y z assert d dd dx dy erf getARGV int2d log max mpiSize on plot splitComm square A B boundary cmm dim init label op split sym t",
"name": "diffusion-substructuring-withPartitioning-2d.edp",
- "starts": 35661,
+ "starts": 45809,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 34441,
+ "ends": 44589,
"keywords": "fespace func int macro mesh mesh3 real P1 include load ARGV be im m max min n N nt P pi re x y z abs cube d dd getARGV max medit min mmg3d on sqrt A B dim hmax hmin metric op t",
"name": "distributed-parmmg.edp",
- "starts": 34414,
+ "starts": 44562,
"tags": "mmg 2D"
},
{
"dir": "hpddm",
- "ends": 38557,
+ "ends": 48705,
"keywords": "int macro Mat mesh mesh3 meshL meshS P0 P1 P2 include load ARGV be im linfty m mpisize n N nt P pi re x y z assert cube d dd getARGV on square A B dim t",
"name": "Dmesh-Save-Load.edp",
- "starts": 38513,
+ "starts": 48661,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 34586,
+ "ends": 44734,
"keywords": "fespace func macro mesh mesh3 mpiComm real P0 P2 include ARGV be im label m mpiCommWorld mpirank mpisize n N P pi re y z abs cube d dd getARGV on plot square trunc A B cmm dim label t",
"name": "DmeshReconstruct.edp",
- "starts": 34546,
+ "starts": 44694,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 34449,
+ "ends": 53802,
+ "keywords": "fespace func int macro mesh mesh3 meshS mpiComm real P2 ENDIFMACRO include IFMACRO load ARGV be im linfty m max min mpiCommWorld mpiMAX mpirank mpisize mpiUndefined n N nt P pi re x y z assert cos cube d dd getARGV max min mpiAllReduce on plot sin square A B cmm dim err init t",
+ "name": "DmeshRedistribute.idp",
+ "starts": 53726,
+ "tags": "2D"
+ },
+ {
+ "dir": "hpddm",
+ "ends": 44597,
"keywords": "macro mesh ENDIFMACRO include IFMACRO m n N P pi z d dist on A B t",
"name": "DmeshRedistribute_w_PETSc.edp",
- "starts": 34442,
+ "starts": 44590,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37221,
+ "ends": 47369,
"keywords": "mesh include m n N P pi z d dist on A B t",
"name": "DmeshRedistribute_wo_PETSc.edp",
- "starts": 37217,
+ "starts": 47365,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40756,
+ "ends": 50904,
"keywords": "fespace int macro mesh mesh3 mpiComm P0 P1 include load be im m mpirank n N nt P pi re x y cube d dd medit on plot tan B cmm dim sparams t",
"name": "DMPlex-PETSc.edp",
- "starts": 40710,
+ "starts": 50858,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 39414,
+ "ends": 49562,
"keywords": "fespace func int macro Mat matrix mesh real varf P2 include load ARGV be cout endl label m max mpirank n N nt P pi re true x y z change d dd dx dy exit getARGV int2d max movemesh on plot set sqrt square A B cmm eps err init label nev ps ratio sparams split t vector",
"name": "elasticity-2d-PETSc.edp",
- "starts": 39340,
+ "starts": 49488,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 38720,
+ "ends": 48868,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real solve string varf P0 P2 include load ARGV be cout endl im label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z d dd dx dy erf getARGV int1d int2d log max movemesh on plot splitComm sqrt square tan A B boundary cmm dim eps err init label metric op optimize order ps solver split sym t tgv vector",
"name": "elasticity-2d.edp",
- "starts": 38618,
+ "starts": 48766,
"tags": "elasticity 2D"
},
{
"dir": "hpddm",
- "ends": 35579,
+ "ends": 45727,
"keywords": "fespace func int macro Mat matrix mesh mesh3 real varf P1 include load ARGV be im label m max mpirank n N nt P pi re true x y z change cube d dd dx dy dz getARGV int3d max movemesh movemesh3 on plot set sqrt A B cmm dim eps err init label nev ps sparams split t transfo vector",
"name": "elasticity-3d-PETSc.edp",
- "starts": 35512,
+ "starts": 45660,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 37528,
+ "ends": 47676,
"keywords": "bool fespace func int macro Mat matrix mesh mesh3 mpiComm real solve string varf P0 P1 include load ARGV be cout endl im label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z cube d dd dx dy dz erf getARGV int2d int3d log max movemesh movemesh3 mpiBarrier on plot set splitComm sqrt tan A B boundary cmm dim eps err init label metric op optimize option options order ps solver sparams split sym t tgv transfo vector",
"name": "elasticity-3d.edp",
- "starts": 37411,
+ "starts": 47559,
"tags": "elasticity 3D"
},
{
"dir": "hpddm",
- "ends": 43716,
+ "ends": 53941,
"keywords": "bool fespace func int macro Mat matrix mesh real solve string varf P0 P1 P2 include load ARGV be label linfty m mpirank n N ndof nt nv P pi re true x y z abs assert d dd dx dy Gamma getARGV int2d movemesh on plot set sin sqrt square trunc A B cmm coef eps init label nev op precon ps solver sparams split sym t tgv tol",
"name": "elasticity-block-hpddm-2d-PETSc.edp",
- "starts": 43578,
+ "starts": 53803,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 34715,
+ "ends": 44863,
"keywords": "fespace func int macro Mat matrix mesh mesh3 mpiComm real varf P1 include load ARGV be false im label m mpiCommWorld mpisize n N nt P pi re verbosity x y z cube d dd dx dy dz getARGV medit movemesh movemesh3 on plot set sqrt A B cmm dim eps init label op option options order ps sparams split sym t tgv transfo vector",
"name": "elasticity-block.edp",
- "starts": 34640,
+ "starts": 44788,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 41454,
+ "ends": 51602,
"keywords": "fespace func int macro Mat matrix mesh mesh3 mpiComm real solve varf P1 include load ARGV be im label m mpiCommWorld mpirank mpisize n N nt P pi re x y z cube d dd dx dy dz getARGV int3d movemesh movemesh3 mpiBarrier on plot set sqrt A B cmm dim eps err init label ps solver sparams split sym t tgv transfo vector",
"name": "elasticity-simple-3d.edp",
- "starts": 41390,
+ "starts": 51538,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 40565,
+ "ends": 50713,
"keywords": "fespace func int macro Mat mesh mesh3 real varf P1 include load ARGV be im label m max mpirank n N ndof nt nv P pi re true x y z change cube d dd dx dy dz getARGV int3d max movemesh movemesh3 on plot set sqrt A B cmm dim eps init label ps sparams split t tgv transfo vector",
"name": "elasticity-SNES-3d-PETSc.edp",
- "starts": 40500,
+ "starts": 50648,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 34950,
+ "ends": 45098,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real varf P2 include load ARGV be cout endl im label m max mpiCommWorld mpirank mpisize n N ndof nt P pi re verbosity x y z d dd dx dy erf getARGV int2d log max mpiSize on plot splitComm sqrt square A B boundary cmm dim eps init label op ps split sym t vector",
"name": "elasticity-substructuring-2d.edp",
- "starts": 34856,
+ "starts": 45004,
"tags": "elasticity 2D"
},
{
"dir": "hpddm",
- "ends": 42521,
+ "ends": 52669,
"keywords": "func int load m n N nt P pi z assert d on B t",
"name": "function-PETSc.edp",
- "starts": 42515,
+ "starts": 52663,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 41935,
+ "ends": 52083,
"keywords": "fespace func int macro Mat matrix mesh real varf P0 P2 include load ARGV be im label m n N ndof nt P pi re x y d dd dx dy getARGV int2d on plot set square A B cmm dim init label ratio sparams split t tgv",
"name": "heat-2d-PETSc.edp",
- "starts": 41890,
+ "starts": 52038,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40709,
+ "ends": 50857,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real solve string varf P0 P2 include load ARGV be cout endl false im label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z d dd dx dy erf getARGV int1d int2d interpolate log max on plot set splitComm square tan A B boundary cmm dim init label metric op optimize order precon ratio solver sparams split sym t tgv",
"name": "heat-2d.edp",
- "starts": 40606,
+ "starts": 50754,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40056,
+ "ends": 50204,
"keywords": "bool fespace func int macro Mat matrix mesh mesh3 mpiComm real solve string varf P0 P2 include load ARGV be cout endl false im label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z cube d dd dx dy dz erf getARGV int2d int3d interpolate log max on plot set splitComm tan A B boundary cmm dim init label metric op optimize order precon ratio solver sparams split sym t tgv",
"name": "heat-3d.edp",
- "starts": 39955,
+ "starts": 50103,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 43577,
+ "ends": 53725,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real solve string varf P0 P2 include load append ARGV be cout endl false im label m max mpiCommWorld mpirank mpisize n N nt P pi re true verbosity x y z d dd dx dy erf getARGV int1d int2d interpolate log max on savevtk set splitComm square tan A B boundary dim init label metric op optimize order precon ratio save solver sparams split sym t tgv",
"name": "heat-io-2d.edp",
- "starts": 43473,
+ "starts": 53621,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 34283,
+ "ends": 44431,
"keywords": "fespace func int macro matrix mesh meshS mpiComm real solve varf P2 include load ARGV be GMRES im m mpiCommWorld mpisize n N ndof nt P pi re x y z cos d dd dx dy dz exp getARGV int2d on plot sin square square3 A B cmm dim fill init op ratio solver split t value",
"name": "heat-torus-3d-surf.edp",
- "starts": 34233,
+ "starts": 44381,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 35803,
+ "ends": 45951,
"keywords": "fespace func int macro Mat matrix mesh real varf P0 P1 include load ARGV be im label m max n N ndof nt nv P pi re true x y z change d dd dx dy getARGV int2d interpolate max on plot square A B cmm dim init label op sparams split t tgv tol",
"name": "heat-TS-2d-PETSc.edp",
- "starts": 35747,
+ "starts": 45895,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39339,
+ "ends": 49487,
"keywords": "fespace func int macro Mat matrix mesh real varf P0 P1 include load ARGV be im label m max n N ndof nt nv P pi re true x y z change d dd dx dy getARGV int2d interpolate max on plot square A B cmm dim init label op sparams split t tgv tol",
"name": "heat-TS-RHS-2d-PETSc.edp",
- "starts": 39274,
+ "starts": 49422,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 38405,
+ "ends": 48553,
"keywords": "BemKernel BemPotential border complex fespace func HMatrix int macro Mat matrix mesh meshL problem real solve varf P0 P1 load be cout endl im label m max mpirank n N nt P pi re region x y z BEM buildmesh change cos d dd dist dx dy erf exp extract int1d int1dx1d int2d max on OrientNormal plot POT round set sin system B cmm dim eta fill iso label nbiso order precon ps region solver sparams split t unbounded value wait",
"name": "Helmholtz-2d-FEM-BEM-coupling-PETSc-composite.edp",
- "starts": 38265,
+ "starts": 48413,
"tags": "3D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 34413,
+ "ends": 44561,
"keywords": "complex fespace func int macro Mat matrix mesh real varf P0 P1 include load ARGV im m n N ndof nt P pi re x y z d dd dx dy exp getARGV int1d int2d on plot set square A B cmm dim init omega op optimize sparams split t tgv",
"name": "helmholtz-2d-PETSc-complex.edp",
- "starts": 34364,
+ "starts": 44512,
"tags": "2D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 37142,
+ "ends": 47290,
"keywords": "complex fespace func int macro Mat mesh real varf P0 P1 include load ARGV cout endl im m min mpisize n N ndof nt nv P pi re x y z arg assert d dd dx dy exp getARGV int1d int2d min on sin square A B dim eps init nev omega ps sparams t tgv value vector",
"name": "helmholtz-2d-SLEPc-complex.edp",
- "starts": 37098,
+ "starts": 47246,
"tags": "2D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 38512,
+ "ends": 48660,
"keywords": "bool complex fespace func int macro Mat matrix mesh mpiComm real solve string varf P0 P1 include load ARGV be cout endl false im m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z d dd dx dy erf exp getARGV int1d int2d interpolate log max on plot splitComm square tan A B boundary cmm dim err init metric omega op optimize order solver split sym t tgv vector",
"name": "helmholtz-2d.edp",
- "starts": 38406,
+ "starts": 48554,
"tags": "2D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 37763,
+ "ends": 47911,
"keywords": "BemKernel BemPotential bool border complex fespace func int macro Mat matrix mesh meshL real varf P0 P1 include load ARGV be im m n N nt nv P pi re x y z abs BEM buildmesh buildmeshL cos d dd dx exit exp getARGV int1d int1dx1d on OrientNormal plot POT set sin A B cmm dim eps order ps sparams sym t unbounded value",
"name": "helmholtz-3d-line-PETSc-complex.edp",
- "starts": 37672,
+ "starts": 47820,
"tags": "3D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 38101,
+ "ends": 48249,
"keywords": "BemKernel BemPotential bool complex fespace func int macro Mat matrix mesh mesh3 meshS real varf P0 P1 include load ARGV be im label m n N nt nv P pi re region x y z BEM buildBdMesh cos d dd dist dx exit exp Gamma getARGV int2d int2dx2d on plot POT set sin square square3 trunc A B cmm dim eps eta label ps region sparams t value width",
"name": "helmholtz-3d-surf-PETSc-complex.edp",
- "starts": 37989,
+ "starts": 48137,
"tags": "2D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 41827,
+ "ends": 51975,
"keywords": "BemKernel border complex fespace func int macro Mat matrix mesh meshL mpiComm real varf P0 P1 include load ARGV be label m max mpiCommWorld mpisize n N ndof nt nv P pi re region x y z abs BEM buildmesh chi change cos d dd dx dy erf exit exp extract int1d int1dx1d int2d interpolate max on OrientNormal plot round set sin trunc A B cmm eps eta fregion label op order ps region sparams split sym t tgv unbounded",
"name": "helmholtz-coupled-2d-PETSc-complex.edp",
- "starts": 41652,
+ "starts": 51800,
"tags": "3D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 38264,
+ "ends": 48412,
"keywords": "BemKernel BemPotential border complex fespace func int macro Mat mesh meshL real varf P0 P1 include load ARGV be im m n N nt nv P pi re true x y z abs BEM buildmesh buildmeshL change cos d dd dx exit exp getARGV int1d int1dx1d on OrientNormal plot POT set sin A B cmm dim order sparams t unbounded",
"name": "helmholtz-dense-3d-line-PETSc-complex.edp",
- "starts": 38182,
+ "starts": 48330,
"tags": "3D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 43775,
+ "ends": 54000,
"keywords": "complex fespace func int macro Mat matrix mesh mpiComm real varf P2 include load ARGV im m max mpiCommWorld n N ndof nt nv P pi re x y z change d dd dx dy exp getARGV int1d int2d max on plot set square A B bin cmm dim eps init ps refe sparams split sym t tgv tol",
"name": "helmholtz-mg-2d-PETSc-complex.edp",
- "starts": 43717,
+ "starts": 53942,
"tags": "2D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 34855,
+ "ends": 45003,
"keywords": "complex fespace func int macro Mat matrix mesh mpiComm real solve varf P0 P2 include load ARGV be im m max mpiCommWorld mpirank mpisize mpiSUM n N ndof nt P pi re sparsesolver true verbosity x y z change d dd dx dy exit exp getARGV int1d int2d interpolate max mpiAllReduce on plot set square trunc A B bin cmm dim eps init ps ratio refe solver sparams split sym t tol wait",
"name": "helmholtz-mg-2d.edp",
- "starts": 34716,
+ "starts": 44864,
"tags": "2D Helmholtz"
},
{
"dir": "hpddm",
- "ends": 35929,
+ "ends": 46077,
"keywords": "func int real load im m mpirank n N nt P pi re verbosity x y abs assert d dd mpiWtime on A B err precon sparams t tol",
"name": "iterative.edp",
- "starts": 35884,
+ "starts": 46032,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40375,
+ "ends": 50523,
"keywords": "complex fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout endl im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re true verbosity x y z d dd dist dx dy EigenValue getARGV int2d min on plot sin square tan A B cmm dim eps err init label metric nev op option options order ps sigma solver sparams split sym t value vector",
"name": "laplace-2d-SLEPc-complex.edp",
- "starts": 40221,
+ "starts": 50369,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40995,
+ "ends": 51143,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout endl im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re true verbosity x y z arg d dd dist dx dy EigenValue getARGV int2d min on plot sin square tan A B cmm dim eps err init label metric nev op option options order ps sigma solver sparams split sym t value vector",
"name": "laplace-2d-SLEPc.edp",
- "starts": 40839,
+ "starts": 50987,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 41889,
+ "ends": 52037,
"keywords": "fespace func int macro Mat mesh mesh3 mpiComm NewMacro EndMacro real varf P1 include load append be false im label LU m max min mpiCommWorld mpirank mpiSUM n N nt P pi re region true x y z broadcast buildlayers d dd dx dy dz int3d max medit min mmg3d mpiAllReduce mshmet on plot processor savevtk set square trunc A aniso B bin dim err hmax hmin iso label labeldown labelmid labelup metric order region save sparams t tgv zbound",
"name": "laplace-adapt-3d-PETSc.edp",
- "starts": 41828,
+ "starts": 51976,
"tags": "mmg 3D"
},
{
"dir": "hpddm",
- "ends": 36436,
+ "ends": 46584,
"keywords": "bool fespace func int macro Mat mesh mesh3 meshS mpiComm real varf P0 P1 include load append ARGV be false im l1 label LU m max min mpiCommWorld mpirank mpisize mpiSUM mpiUndefined n N nt nv P pi re region true x y z abs assert buildlayers d dd dist dx dy dz getARGV int3d max min mmg3d mpiAllReduce mpiSize mshmet on savevtk set square trunc A aniso B bin dim err hmax hmin iso label labeldown labelmid labelup metric op order region save sparams t tgv zbound",
"name": "laplace-adapt-dist-3d-PETSc.edp",
- "starts": 36314,
+ "starts": 46462,
"tags": "mmg 3D"
},
{
"dir": "hpddm",
- "ends": 42908,
+ "ends": 53056,
"keywords": "fespace func int macro Mat matrix mesh meshL real string varf P1 include load im m n N nt nv P pi re true x y z arg cos d dd dx dy dz int1d medit on plot sin segment A B cmm dim eps fill nev ps removeduplicate sigma sparams t value vector wait",
"name": "laplace-beltrami-3d-line-SLEPc.edp",
- "starts": 42856,
+ "starts": 53004,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 36313,
+ "ends": 46461,
"keywords": "fespace func int macro Mat matrix mesh meshS real solve string varf P1 include load CG im m n N nt nv P pi re true x y z arg cos d dd dx dy dz int2d medit on plot sin square square3 A B cmm dim eps fill nev ps removeduplicate sigma solver sparams sym t value vector wait",
"name": "laplace-beltrami-3d-surf-SLEPc.edp",
- "starts": 36264,
+ "starts": 46412,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 41545,
+ "ends": 51693,
"keywords": "fespace func int macro Mat mesh real varf P1 include load ARGV be im m mpirank n N nt nv P pi re true x y z change d dd dx dy getARGV on plot set square A B cmm dim init ps sparams split t wait",
"name": "laplace-lagrange-PETSc.edp",
- "starts": 41455,
+ "starts": 51603,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 41327,
+ "ends": 51475,
"keywords": "border fespace func int macro Mat mesh real varf P2 P2dc RT2 include load ARGV be false im label m mpirank mpiSUM n N nt nv P pi re true x y abs buildmesh change d dd dx dy getARGV int1d int2d mpiReduce on plot Post processor set A B cmm dim fill init label order precon sparams split t tgv tol wait",
"name": "laplace-RT-2d-PETSc.edp",
- "starts": 41240,
+ "starts": 51388,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 35123,
+ "ends": 45271,
"keywords": "fespace func int macro Mat mesh mesh3 real varf P0 RT0 RT03d include load ARGV be false im label m mpirank mpiSUM n N nt nv P pi re true x y z abs change cube d dd dx dy dz getARGV int2d int3d medit mpiReduce on Post processor set A B dim init label precon sparams split t tgv tol",
"name": "laplace-RT-3d-PETSc.edp",
- "starts": 35043,
+ "starts": 45191,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 43472,
+ "ends": 53620,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout endl fixed im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re verbosity x y z arg d dd dist dx dy EigenValue getARGV int2d min on plot sin square system tan A B cmm dim eps err eta init label metric nev op option options order periodic ps sigma solver sparams split sym t value vector",
"name": "laplace-spherical-harmonics-2d-SLEPc.edp",
- "starts": 43279,
+ "starts": 53427,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36125,
+ "ends": 46273,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout endl im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re verbosity x y z arg cos d dd dist dx dy EigenValue exit getARGV int2d min on plot sin square system tan A B boundary cmm dim eps err eta init label metric nev op option options order periodic ps sigma solver sparams split sym t value vector",
"name": "laplace-torus-2d-SLEPc.edp",
- "starts": 35930,
+ "starts": 46078,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37097,
+ "ends": 47245,
"keywords": "int Mat real load binary m n N nt P pi re x y d set A B bin sparams t",
"name": "MatLoad-PETSc.edp",
- "starts": 37083,
+ "starts": 47231,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 34639,
+ "ends": 44787,
"keywords": "fespace func int macro Mat matrix mesh real varf RT0 RT0Ortho include load ARGV be im label m n N ndof nt P pi re x y z abs cube d dd dx dy exp getARGV int2d on plot set square A B cmm dim fill init label sparams t tgv vector wait",
"name": "maxwell-2d-PETSc.edp",
- "starts": 34587,
+ "starts": 44735,
"tags": "2D Maxwell"
},
{
"dir": "hpddm",
- "ends": 40838,
+ "ends": 50986,
"keywords": "fespace func int macro Mat matrix mesh mesh3 mpiComm real varf Edge03d P1 include load ARGV be im m max mpiCommWorld mpirank mpiSUM n N ndof nt nv P pi re true x y z change cube d dd dx dy dz exp getARGV int3d max medit mpiReduce on processor set A B dim sparams t",
"name": "maxwell-3d-PETSc.edp",
- "starts": 40757,
+ "starts": 50905,
"tags": "3D Maxwell"
},
{
"dir": "hpddm",
- "ends": 35511,
+ "ends": 45659,
"keywords": "BemKernel BemPotential bool complex fespace func int macro Mat mesh mesh3 meshS mpiComm real string varf P0 P1 RT0 include load ARGV be cout endl im l2 m max mpiCommWorld mpiSUM n N ndof nt nv P pi re true x y z abs BEM change cos cube d dd dx exit exp extract getARGV int2d int2dx2d max mpiAllReduce on plot POT set sin sqrt square square3 trunc A B cmm dim eps eta init ps sparams t vector",
"name": "maxwell-3d-surf-PETSc-complex.edp",
- "starts": 35368,
+ "starts": 45516,
"tags": "2D Maxwell"
},
{
"dir": "hpddm",
- "ends": 42463,
+ "ends": 52611,
"keywords": "complex fespace func int macro Mat matrix mesh mesh3 mpiComm real solve varf Edge03d include load ARGV be cout endl false GMRES im m max mpiCommWorld mpirank mpisize n N ndof nt P pi re verbosity x y z change cube d dd dx dy dz erf exp getARGV int2d int3d interpolate max medit on set A B bin dim init metric op optimize order solver sparams split t vector",
"name": "maxwell-3d.edp",
- "starts": 42368,
+ "starts": 52516,
"tags": "3D Maxwell"
},
{
"dir": "hpddm",
- "ends": 41389,
+ "ends": 51537,
"keywords": "complex fespace func int macro Mat matrix mesh mesh3 mpiComm real solve varf Edge03d P1 include load ARGV be im label m max mpiCommWorld n N ndof nt nv P pi re x y z cube d dd dx dy dz exp getARGV imag int2d int3d max on plot savevtk set sqrt A B bin cmm dim init label order ps save solver sparams sym t tol",
"name": "maxwell-mg-3d-PETSc-complex.edp",
- "starts": 41328,
+ "starts": 51476,
"tags": "3D Maxwell"
},
{
"dir": "hpddm",
- "ends": 43244,
+ "ends": 53392,
"keywords": "fespace func int macro Mat matrix mesh real varf P1 include load be linfty m n N ndof nt nv P pi re true x y z arg assert change d dd dist dx dy int2d on sign square tan trunc A B bb op sigma sparams t tgv value vector",
"name": "mf-2d-SLEPc.edp",
- "starts": 43143,
+ "starts": 53291,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 38181,
+ "ends": 48329,
"keywords": "fespace func int macro Mat matrix mesh mpiComm real varf P0 P2 include load ARGV be im m max mpiCommWorld mpiSUM n N nt nv P pi re true x y abs change cos d dd dx dy Gamma getARGV int2d max mpiAllReduce on plot sqrt square trunc A B cmm dim init sparams t tgv tol",
"name": "minimal-surface-Tao-2d-PETSc.edp",
- "starts": 38102,
+ "starts": 48250,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36817,
+ "ends": 46965,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real solve string varf P1 P2 include load ARGV be im m max mpiCommWorld mpirank mpiSUM n N ndof nt nv P pi re true x y z adaptmesh broadcast change cos d dd dx dy getARGV int2d max mpiAllReduce on plot processor set sin square A B cmm dim init op order precon ps qforder ratio sparams split t tgv tol vector",
"name": "natural-convection-fieldsplit-2d-PETSc.edp",
- "starts": 36693,
+ "starts": 46841,
"tags": "adaptmesh 2D Navier-Stokes"
},
{
"dir": "hpddm",
- "ends": 42630,
+ "ends": 52778,
"keywords": "border fespace func int macro Mat mesh meshS mpiComm ofstream real varf P1 P2 include load ARGV be im label m mpiCommWorld mpirank mpisize mpiSUM n N ndof nt nv P pi re sum true x y z adaptmesh broadcast buildmesh change cos d dd dx dy getARGV int2d mpiAllReduce on plot processor set sin A B cmm dim init label order ratio sparams t tgv wait",
"name": "navier-stokes-2d-PETSc.edp",
- "starts": 42522,
+ "starts": 52670,
"tags": "adaptmesh 2D"
},
{
"dir": "hpddm",
- "ends": 40499,
+ "ends": 50647,
"keywords": "complex fespace func ifstream int macro Mat matrix mesh meshL real solve string varf P1 P2 include load ARGV be im m mpirank mpisize n N nt nv P pi re true x y z arg d dd dx dy getARGV imag int2d on plot sin A B cmm dim eps init mode nev op ps sigma sparams t tol value vector",
"name": "navier-stokes-2d-SLEPc-complex.edp",
- "starts": 40439,
+ "starts": 50587,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 42367,
+ "ends": 52515,
"keywords": "border fespace func int macro Mat mesh mpiComm real varf P1 include load ARGV be im label LINE m min mpiCommWorld mpirank n N ndof nt nv P pi re true x y z buildmesh change cos d dd dx dy getARGV int1d int2d min movemesh on plot set sin square tan trunc A B B1 boundary cmm coef dim init label order ps qforder sparams split t tgv tol vector",
"name": "neo-Hookean-2d-PETSc.edp",
- "starts": 42022,
+ "starts": 52170,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 42021,
+ "ends": 52169,
"keywords": "fespace func int macro Mat mesh mpiComm real varf P2 P2dc include load ARGV be im linfty m mpiCommWorld mpiMAX n N nt nv P pi re true x y z abs assert change d dd dx dy getARGV int2d log mpiAllReduce on plot square A B cmm dim fill init ps ratio sparams split t tgv wait",
"name": "newton-2d-PETSc.edp",
- "starts": 41936,
+ "starts": 52084,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 35208,
+ "ends": 45356,
"keywords": "fespace func int macro Mat mesh mpiComm real varf P2 P2dc include load ARGV be false im m max mpiCommWorld mpirank mpiSUM n N nt nv P pi re true x y z adaptmesh broadcast change d dd dx dy getARGV int2d log max mpiAllReduce on plot processor square A B cmm dim fill init sparams split t tgv wait",
"name": "newton-adaptmesh-2d-PETSc.edp",
- "starts": 35124,
+ "starts": 45272,
"tags": "adaptmesh 2D"
},
{
"dir": "hpddm",
- "ends": 37592,
+ "ends": 47740,
"keywords": "fespace func int macro Mat mesh real varf P1 P1dc include load ARGV be im m n N nt nv P pi re true x y z change d dd dx dy getARGV int2d log on plot sqrt square A B cmm dim init sparams split t tgv tol",
"name": "newton-vi-2d-PETSc.edp",
- "starts": 37529,
+ "starts": 47677,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36911,
+ "ends": 47059,
"keywords": "fespace func int macro Mat mesh mpiComm real varf P1 P1dc include load ARGV be false im m max mpiCommWorld mpirank mpiSUM n N nt nv P pi re true x y z adaptmesh broadcast change d dd dx dy getARGV int2d log max mpiAllReduce on plot processor sqrt square A B cmm dim fill init sparams split t tgv tol wait",
"name": "newton-vi-adaptmesh-2d-PETSc.edp",
- "starts": 36818,
+ "starts": 46966,
"tags": "adaptmesh 2D"
},
{
"dir": "hpddm",
- "ends": 36263,
+ "ends": 46411,
"keywords": "complex fespace func int macro Mat matrix mesh varf P1 include load im m n N ndof nt nv P pi re x y z d dd dx dy int2d on plot square A B cmm dim init nev ps sparams t value vector",
"name": "nonlinear-2d-SLEPc-complex.edp",
- "starts": 36227,
+ "starts": 46375,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37671,
+ "ends": 47819,
"keywords": "func int Mat matrix real load cout endl im m max mpisize n N nt P pi re x y z assert d interpolate max on B eps ps sparams t tol",
"name": "orego-TS-PETSc.edp",
- "starts": 37640,
+ "starts": 47788,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39603,
+ "ends": 49751,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real string varf P0 P1 P2 include load ARGV be im label m max measure mpiCommWorld mpiSUM n N ndof nt nv P pi re true x y z abs atan change d dd dist dx dy getARGV int2d max mpiAllReduce on savevtk set square tan trunc A B dataname init label op order precon save sparams split sym t tgv",
"name": "oseen-2d-PETSc.edp",
- "starts": 39469,
+ "starts": 49617,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 42942,
+ "ends": 53090,
"keywords": "border fespace int macro mesh real P0 P1 P2 ENDIFMACRO include IFMACRO load be im label m n N nt P pi re x y atan buildmesh cos d dd on plot savevtk sin tan A B cmm dataname dim label order save t",
"name": "PartitionCreate.edp",
- "starts": 42909,
+ "starts": 53057,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37177,
+ "ends": 47325,
"keywords": "border fespace func int macro Mat mesh varf P2 include load ARGV m n N nt P pi re x y buildmesh d dd dx dy getARGV int2d on plot square A B cmm order split t",
"name": "PtAP-2d-PETSc.edp",
- "starts": 37143,
+ "starts": 47291,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 38809,
+ "ends": 48957,
"keywords": "fespace func int macro Mat matrix mesh mpiComm real varf P0 P2 include load be im label m mpiCommWorld mpirank mpisize n N ndof nt nuTriangle nv P pi re region x y z abs change d dd dx dy int2d on plot set square trunc A B cmm dim fill fregion label refe region sparams t tgv value wait",
"name": "restriction-2d-PETSc.edp",
- "starts": 38721,
+ "starts": 48869,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37410,
+ "ends": 47558,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout default endl im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re verbosity x y z arg d dd dist dx dy EigenValue exp getARGV int2d min on plot sin sqrt square tan A B cmm dim eps err init label metric nev op option options order ps sigma solver sparams split sym t value vector width",
"name": "schrodinger-axial-well-2d-SLEPc.edp",
- "starts": 37222,
+ "starts": 47370,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36605,
+ "ends": 46753,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout endl im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re true verbosity x y z arg d dd dist dx dy EigenValue getARGV min on plot set sin square tan A B cmm dim eps err init label metric nev op option options order periodic ps sigma solver sparams split sym t value vector",
"name": "schrodinger-harmonic-oscillator-1d-SLEPc.edp",
- "starts": 36437,
+ "starts": 46585,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 42802,
+ "ends": 52950,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout endl im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re verbosity x y z arg d dd dist dx dy EigenValue getARGV int2d min on plot round set sin square tan A B cmm dim eps err init label metric nev op option options order ps sigma solver sparams split sym t value vector",
"name": "schrodinger-harmonic-oscillator-2d-SLEPc.edp",
- "starts": 42631,
+ "starts": 52779,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39091,
+ "ends": 49239,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 include load ARGV be cout default endl im label m min mpiCommWorld mpirank mpisize n N nt nv P pi re true verbosity x y z abs arg d dd dist dx dy EigenValue exp getARGV min on plot sin square tan A B cmm dim eps err init label metric nev op option options order periodic ps sigma solver sparams split sym t value vector width",
"name": "schrodinger-square-well-1d-SLEPc.edp",
- "starts": 38903,
+ "starts": 49051,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40605,
+ "ends": 50753,
"keywords": "fespace int macro Mat matrix mesh real solve varf P1 include load be cout endl label m mpisize n N ndof nt P pi re x y z abs assert d dx dy int2d on plot set square trunc A B label order ps solver sparams t tgv wait",
"name": "Schur-complement-PETSc.edp",
- "starts": 40566,
+ "starts": 50714,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 36990,
+ "ends": 47138,
"keywords": "fespace func int macro Mat mesh real varf P1 P2 include load ARGV be im label m n N nt P pi re x y z d dd dx dy getARGV int2d movemesh on plot set sqrt square trunc A B cmm dim eps init label ps sparams split t vector",
"name": "stokes-2d-PETSc.edp",
- "starts": 36951,
+ "starts": 47099,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 41069,
+ "ends": 51217,
"keywords": "fespace func int macro Mat matrix mesh real varf P1 P2 include load ARGV be diag im m n N ndof nt nv P pi re x y z arg assert d dd dx dy Gamma getARGV int2d on sin sqrt square A B dim eps err eta init nev ps sparams split t tgv tol value",
"name": "stokes-2d-SLEPc.edp",
- "starts": 40996,
+ "starts": 51144,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 38902,
+ "ends": 49050,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm real solve string varf P0 P1 P2 include load ARGV be cout endl false im label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z d dd dx dy erf getARGV int1d int2d interpolate log max movemesh on plot set splitComm sqrt square tan trunc A B boundary cmm dim eps init iso label metric op optimize order ps solver sparams split sym t vector",
"name": "stokes-2d.edp",
- "starts": 38810,
+ "starts": 48958,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40220,
+ "ends": 50368,
"keywords": "fespace func int macro Mat mesh mesh3 real varf P1 P2 include load ARGV be im l2 label m n N nt P pi re x y z buildlayers d dd dx dy dz getARGV int3d movemesh on plot set sqrt square trunc A B cmm dim init label sparams split t tgv vector zbound",
"name": "stokes-3d-PETSc.edp",
- "starts": 40182,
+ "starts": 50330,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 37082,
+ "ends": 47230,
"keywords": "bool fespace func int macro Mat matrix mesh mesh3 mpiComm real solve string varf P0 P1 P2 include load ARGV be cout endl false im l2 label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z buildlayers d dd dx dy dz erf getARGV int2d int3d interpolate log max movemesh on plot set splitComm sqrt square tan trunc A B boundary cmm dim eps init iso label metric op optimize order ps solver sparams split sym t tgv vector zbound",
"name": "stokes-3d.edp",
- "starts": 36991,
+ "starts": 47139,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 35322,
+ "ends": 45470,
"keywords": "bool fespace func int macro Mat mesh mesh3 meshS mpiComm ofstream real solve varf P1 P2 include load ARGV be cout endl im l2 label m max min mpiCommWorld mpirank mpisize mpiSUM n N nt nv P pi re verbosity x y z adaptmesh broadcast buildlayers d dd dx dy dz getARGV int3d max min mmg3d movemesh mpiAllReduce mshmet on plot processor set sqrt square trunc A aniso B cmm dim err hmax hmin init iso label metric normalization op ps solver sparams t tgv zbound",
"name": "stokes-adapt-3d-PETSc.edp",
- "starts": 35209,
+ "starts": 45357,
"tags": "adaptmesh mmg 3D"
},
{
"dir": "hpddm",
- "ends": 41239,
+ "ends": 51387,
"keywords": "fespace func int macro Mat matrix mesh real string varf P1 P2 include load ARGV be binary im label m max mpirank n N ndof nt nv P pi re true x y z change cos d dd dx dy Gamma getARGV int2d max movemesh on plot set sqrt square trunc A B bin cmm dim eps init label precon ps sparams split t tgv tol",
"name": "stokes-block-2d-PETSc.edp",
- "starts": 41070,
+ "starts": 51218,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39701,
+ "ends": 49849,
"keywords": "bool fespace func int macro Mat matrix mesh real solve string varf P1 P2 include load ARGV be label m n N ndof nt nv P re true x y z abs assert d dd dx dy getARGV int2d on plot set square A B cmm eps flags init label nev op precon ps solver sparams split sym t tgv tol",
"name": "stokes-block-hpddm-2d-PETSc.edp",
- "starts": 39604,
+ "starts": 49752,
"tags": "2D Stokes"
},
{
"dir": "hpddm",
- "ends": 43142,
+ "ends": 53290,
"keywords": "fespace func int macro Mat mesh real string varf P1 P2 include load ARGV be im label m n N nt P pi re x y z d dd dx dy getARGV int2d movemesh on plot set sqrt square trunc A B cmm dim eps init label precon ps sparams split t tgv tol vector",
"name": "stokes-fieldsplit-2d-PETSc.edp",
- "starts": 43094,
+ "starts": 53242,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 37639,
+ "ends": 47787,
"keywords": "fespace func int macro Mat mesh mesh3 real solve string varf P1 P2 include load ARGV be im l2 label m max n N nt P pi re x y z buildlayers d dd dx dy dz exit getARGV int3d max movemesh on plot set sqrt square trunc A B cmm dim init label ps solver sparams split t tgv tol vector zbound",
"name": "stokes-fieldsplit-3d-PETSc.edp",
- "starts": 37593,
+ "starts": 47741,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 35042,
+ "ends": 45190,
"keywords": "bool fespace func int macro Mat matrix mesh mesh3 mpiComm real solve string varf P0 P1 P2 include load ARGV be cout endl false im l2 label m max mpiCommWorld mpirank mpisize n N nt P pi re verbosity x y z atan buildlayers d dd dx dy dz erf getARGV int2d int3d interpolate log max movemesh on savevtk set splitComm sqrt square tan trunc A B boundary dataname dim eps init iso label metric op optimize order ps save solver sparams split sym t tgv vector zbound",
"name": "stokes-io-3d.edp",
- "starts": 34951,
+ "starts": 45099,
"tags": "3D"
},
{
"dir": "hpddm",
- "ends": 43903,
+ "ends": 54128,
"keywords": "func int Mat matrix real solve string load cout diag endl m mpisize n N nt P pi re x y z assert d exit on A B ps solver sparams t",
"name": "toy-Tao-PETSc.edp",
- "starts": 43776,
+ "starts": 54001,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 40438,
+ "ends": 50586,
"keywords": "border fespace func int macro mesh mesh3 real P2 P3 P4 include load append ARGV be im m max mpirank n N nt P pi re true x y z broadcast buildmesh cos cube d dd getARGV max mmg3d on plot processor savevtk sin square A B cmm dim hmax init order save t",
"name": "transfer.edp",
- "starts": 40376,
+ "starts": 50524,
"tags": "mmg 2D"
},
{
"dir": "hpddm",
- "ends": 36226,
+ "ends": 46374,
"keywords": "fespace func int macro Mat matrix mesh mpiComm problem real varf P1 include load ARGV im linfty m mpiCommWorld mpiMAX mpiSUM n N nt P pi re true x y z d dd dx dy getARGV mpiAllReduce mpiReduce on plot processor square A B cmm dim err init t wait",
"name": "transpose-solve-PETSc.edp",
- "starts": 36172,
+ "starts": 46320,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 39468,
+ "ends": 49616,
"keywords": "fespace func int macro Mat matrix mesh mpiComm real varf P1 include load ARGV be im m mpiCommWorld n N nt nv P pi re true x y z change d dd dx dy getARGV int2d on plot set sqrt square A B cmm dim init sparams split t tgv",
"name": "vi-2d-PETSc.edp",
- "starts": 39415,
+ "starts": 49563,
"tags": "2D"
},
{
"dir": "hpddm",
- "ends": 43278,
+ "ends": 53426,
"keywords": "fespace func int macro mesh mesh3 mpiComm real P0 P1 P2 include load ARGV be false im m mpiCommWorld mpirank mpisize n N ndof nt P pi re y z cube d dd getARGV on A B dim init order t",
"name": "withPartitioning.edp",
- "starts": 43245,
+ "starts": 53393,
"tags": "2D"
},
{
@@ -2481,1954 +2713,1954 @@
},
{
"dir": "mpi",
- "ends": 15699,
+ "ends": 25847,
"keywords": "fespace int macro matrix mesh real solve varf P1 P2 load be cout Crout endl im l2 m max mpirank mpisize n N nt nuTriangle P pi re region sparsesolver verbosity x y z adaptmesh broadcast change d dx dy exec int2d max on plot processor set square yn A B cmm coef err fregion init iso master nbiso nbvx ps region solver t tgv wait",
"name": "cavityNewton-MUMPS.edp",
- "starts": 15553,
+ "starts": 25701,
"tags": "adaptmesh 2D Navier-Stokes"
},
{
"dir": "mpi",
- "ends": 16312,
+ "ends": 26460,
"keywords": "bool fespace func HMatrix ifstream int Mat matrix mesh mesh3 meshS mpiComm ofstream problem real solve string varf P0 P1 include load ARGV be cin cout endl FILE im l2 label m max min mpiCommWorld mpirank mpisize n N ndof nt nv P pi qf1pT qf1pTlump re sum verbosity volume x y z abs arg broadcast buildlayers chi change cos d display dx dy dz erf exp extract Gamma getARGV int2d int3d interpolate max mean medit min mmg3d movemesh mpiAllgather mpiAllgatherv on plot processor readmesh rint savevtk set sqrt square tan trunc y1 A B bb boundary cmm coef eps err eta file fill grey hmax hmin init label labeldown labelmid labelup mem memory op order ps qft ratio save sigma t transfo value vector wait which zbound",
"name": "chamonix.edp",
- "starts": 15888,
+ "starts": 26036,
"tags": "mmg 3D"
},
{
"dir": "mpi",
- "ends": 17295,
+ "ends": 27443,
"keywords": "fespace func int matrix mesh real varf P1 load be im l2 m min n N ndof nt P pi re sum x y adaptmesh cmaes d dx dy int2d min on plot pow square A B cmm dim fill init iso nbiso op ratio split stop t tgv tol value vector which",
"name": "cmaes-mpi-VarIneq.edp",
- "starts": 17171,
+ "starts": 27319,
"tags": "adaptmesh 2D"
},
{
"dir": "mpi",
- "ends": 15887,
+ "ends": 26035,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 P2 include load ARGV be CG cout default endl GMRES im l1 label LU m max mpiCommWorld mpiMAX mpirank n N nt P pi re searchMethod sparsesolver true verbosity version x y z arg assert cube d dd dx dy exp getARGV int2d max medit mpiAllReduce mpiRank mpiWtime on plot set sqrt square trunc A B bb cmm dim eps err errg fill init iso label nbiso precon ps sigma solver split t tgv value",
"name": "DDM-Schwarz-Lame-2d.edp",
- "starts": 15737,
+ "starts": 25885,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 15081,
+ "ends": 25229,
"keywords": "bool fespace func int macro Mat matrix mesh mesh3 mpiComm problem real solve string varf P1 P2 include load ARGV be CG cout default endl GMRES im l1 LU m max mpiCommWorld mpiMAX mpirank n N nt P pi re searchMethod sparsesolver true verbosity version x y z arg assert cube d dd dx dy dz exp getARGV int3d max medit mpiAllReduce mpiRank mpiWtime on plot set sqrt trunc A B bb cmm dim eps err errg fill init iso nbiso precon ps sigma solver split t tgv value",
"name": "DDM-Schwarz-Lame-3d.edp",
- "starts": 14920,
+ "starts": 25068,
"tags": "3D"
},
{
"dir": "mpi",
- "ends": 16611,
+ "ends": 26759,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 P2 include load ARGV be CG cout default endl GMRES im l1 label m max mpiCommWorld mpiMAX mpirank n N nt P pi re searchMethod sparsesolver true verbosity version x y z arg assert cube d dd dx dy exp getARGV int2d max medit mpiAllReduce mpiRank mpiWtime on plot set square trunc A B bb cmm dim eps err errg fill init iso label nbiso precon ps solver split t tgv value",
"name": "DDM-Schwarz-Lap-2dd.edp",
- "starts": 16481,
+ "starts": 26629,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 14170,
+ "ends": 24318,
"keywords": "bool fespace func int macro Mat matrix mesh mesh3 mpiComm problem real solve string varf P1 P2 include load ARGV be CG cout default endl GMRES im l1 m max mpiCommWorld mpiMAX mpirank n N nt P pi re searchMethod true verbosity version x y z arg assert cube d dd dx dy dz exp getARGV int3d max medit mpiAllReduce mpiRank mpiWtime on plot set trunc A B bb cmm dim eps err errg fill init iso nbiso precon ps solver split t tgv value",
"name": "DDM-Schwarz-Lap-3d.edp",
- "starts": 14035,
+ "starts": 24183,
"tags": "3D"
},
{
"dir": "mpi",
- "ends": 16480,
+ "ends": 26628,
"keywords": "bool fespace func int macro Mat matrix mesh mpiComm problem real solve string varf P1 P2 include load ARGV be CG cout default endl find GMRES im l1 label LU m max mpiCommWorld mpiMAX mpirank n N nt P pi re searchMethod sparsesolver true verbosity version x y z arg assert cube d dd dx dy exp getARGV int2d max medit mpiAllReduce mpiRank mpiWtime on plot set square trunc A B bb cmm dim eps err errg fill init iso label nbiso precon ps solver split t tgv value",
"name": "DDM-Schwarz-Stokes-2d.edp",
- "starts": 16313,
+ "starts": 26461,
"tags": "2D Stokes"
},
{
"dir": "mpi",
- "ends": 14034,
+ "ends": 24182,
"keywords": "complex int matrix mpiGroup cout endl m mpirank mpisize n N nt P pi re verbosity x y z broadcast d processor A B t",
"name": "essai-com.edp",
- "starts": 13992,
+ "starts": 24140,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 15462,
+ "ends": 25610,
"keywords": "bool complex int matrix mpiComm mpiGroup mpiRequest real be cout endl im l2 m mpiCommWorld mpirank mpisize n N nt P pi re true verbosity x y z assert broadcast cos d Isend Irecv mpiAlltoall mpiAllgather mpiBarrier mpiGather mpiRank mpiScatter mpiSize mpiWait mpiWaitAny mpiWtime on processor Recv rint Wait yn A B bb split t",
"name": "essai.edp",
- "starts": 15294,
+ "starts": 25442,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 15293,
+ "ends": 25441,
"keywords": "fespace func int macro Mat matrix mesh mesh3 problem real solve string varf Edge03d P0 P1 RT0 RT03d include load be CG cout endl im m mpirank mpisize n N nbe nt nuTriangle P pi re sparsesolver x y z assert clock cube d dimKrylov dx dy dz Gamma int2d int3d medit on set sqrt square B dim err init solver sparams t tgv",
"name": "LaplaceRT-3d-matrix-mumps.edp",
- "starts": 15082,
+ "starts": 25230,
"tags": "3D"
},
{
"dir": "mpi",
- "ends": 14501,
+ "ends": 24649,
"keywords": "fespace func int matrix mesh problem real solve varf P2 load be CG cout diag endl find im m max min mpirank mpisize mpiSUM n N ndof nt nuTriangle nv P pi re region sparsesolver true verbosity x y z abs assert broadcast change d dd dist dx dy EigenValue erf int2d max min mpiReduce on plot processor sort square tan A B boundary close cmm dim eps err fill fregion master maxit mem mode ncv nev omega ps ratio region sigma solver sym t tgv tol value vector wait",
"name": "LapMPIEigenValue.edp",
- "starts": 14383,
+ "starts": 24531,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 17679,
+ "ends": 27827,
"keywords": "bool fespace func int macro matrix mesh real solve varf P0 P1 include be CG cout diag endl lenEdge m max mpirank mpisize n N ndof nt P pi qf1pE qf1pElump re region verbosity version x y z adaptmesh assert broadcast d dx dy emptymesh exit Gamma int1d int2d interpolate LinearCG max on plot processor trunc A B bb eps eta inside IsMetric nbiter nbvx op order precon ps qfe qforder ratio region solver split t tgv thetamax veps wait which",
"name": "mortar-DN-4-mpi.edp",
- "starts": 17453,
+ "starts": 27601,
"tags": "adaptmesh 2D"
},
{
"dir": "mpi",
- "ends": 14684,
+ "ends": 24832,
"keywords": "bool fespace func int macro matrix mesh mpiComm mpiGroup real solve varf P1 load be CG cout endl label m min mpirank n N ndof nt P pi re sum true verbosity x y z abs AffineCG assert broadcast d dx dy int1d int2d interpolate LinearCG min mpiRank on plot processor rint savemesh set sort square A B eps err init inside label nbiter precon ps save t tgv wait",
"name": "MPICGLap.edp",
- "starts": 14502,
+ "starts": 24650,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 17170,
+ "ends": 27318,
"keywords": "bool fespace func int macro matrix mesh mpiComm ofstream problem real solve string varf P0 P1 P2 include load append area ARGV be CG cout endl find GMRES im l1 label linfty m max min mpiCommWorld mpiMAX mpirank mpisize mpiSUM n N nt P pi re searchMethod sparsesolver sum true verbosity version x y z abs AffineGMRES arg assert broadcast cube d dd dimKrylov dx dy erf exp getARGV int2d interpolate LinearGMRES max medit min mpiAllReduce mpiRank mpiReduce mpiSize mpiWtime on plot processor Recv set splitmesh square tan trunc A B bb boundary cmm coef dim eps err errg fill init iso label nbiso nbiter order precon ps solver split t tgv value veps wait",
"name": "MPIGMRES2D.edp",
- "starts": 16703,
+ "starts": 26851,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 18379,
+ "ends": 28527,
"keywords": "bool fespace func int macro matrix mesh mesh3 mpiComm ofstream problem real solve string varf P0 P1 P2 include load append ARGV be CG cout endl find GMRES im l1 label linfty m max measure min mpiCommWorld mpiMAX mpirank mpisize mpiSUM n N nt P pi re searchMethod sparsesolver sum true verbosity version x y z abs AffineGMRES arg assert broadcast cube d dd dimKrylov dx dy dz erf exp getARGV int3d interpolate LinearGMRES max medit min mpiAllReduce mpiRank mpiReduce mpiSize mpiWtime on plot processor Recv set splitmesh trunc A B bb boundary cmm coef dim eps err errg fill init iso label nbiso nbiter precon ps solver split t tgv value veps wait",
"name": "MPIGMRES3D.edp",
- "starts": 17907,
+ "starts": 28055,
"tags": "3D"
},
{
"dir": "mpi",
- "ends": 17906,
+ "ends": 28054,
"keywords": "fespace int matrix mesh real solve varf P2 load be CG cout endl im l1 label linfty m mpirank mpisize n N ndof nt nuTriangle P pi re region sparsesolver verbosity version x y z change d dd dist dx dy erf int2d on plot set square A B cmm dim fill fregion label lparams master metric order ps region solver sym t value wait which",
"name": "MUMPS.edp",
- "starts": 17831,
+ "starts": 27979,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 13991,
+ "ends": 24139,
"keywords": "bool border fespace func int macro matrix mesh mpiComm ofstream real solve string varf P1 P1dc P2 include load append ARGV be cout endl flush GMRES im label linfty m max min mpiCommWorld mpirank mpisize mpiSUM n N ndof nt nuTriangle nv P pi re region sparsesolver verbosity version x y z arg broadcast buildmesh change convect cos d dd dx dy getARGV int2d max min mpiAllReduce mpiWtime on plot processor rint round savemesh set sin square y0 y1 yn A B bb cmm coef dim eps err eta file fill fregion hsv init iso label master mode op order ps ratio region save solver stop t tgv viso wait",
"name": "NSCaraCyl.edp",
- "starts": 13655,
+ "starts": 23803,
"tags": "2D Navier-Stokes"
},
{
"dir": "mpi",
- "ends": 17452,
+ "ends": 27600,
"keywords": "fespace int macro matrix mesh mesh3 ofstream real solve string varf P1 P13d P2 P23d load be cout endl im label m max min mpisize n N nt nv P pi re region sparsesolver verbosity x y z buildlayers clock convect d dd dx dy dz exec int3d max min on plot savemesh set sqrt square A B bb cmm file init label labelmid mem op optimize order ps qforder ratio reffacelow reffaceup region save solver sparams t tgv wait zbound",
"name": "NSI3d-carac-mumps.edp",
- "starts": 17296,
+ "starts": 27444,
"tags": "3D Navier-Stokes"
},
{
"dir": "mpi",
- "ends": 14761,
+ "ends": 24909,
"keywords": "cout endl m n N P pi re y d B file t",
"name": "NSI3d-carac.edp",
- "starts": 14758,
+ "starts": 24906,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 15736,
+ "ends": 25884,
"keywords": "fespace int mesh mesh3 mpiComm real P0 include load ARGV be cout endl im m mpiCommWorld mpirank mpisize n N nt P pi re x y z broadcast cube d getARGV medit mpiBarrier mpiWtime processor A B t",
"name": "parmetis-3d.edp",
- "starts": 15700,
+ "starts": 25848,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 14919,
+ "ends": 25067,
"keywords": "fespace mesh mpiComm real P0 include load ARGV cout endl im m mpiCommWorld mpirank mpisize n N P pi re z broadcast d getARGV mpiBarrier mpiWtime plot processor square A B cmm fill t wait",
"name": "parmetis.edp",
- "starts": 14887,
+ "starts": 25035,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 14198,
+ "ends": 24346,
"keywords": "fespace func int mesh mesh3 mpiComm real P1 load be m max min mpiCommWorld mpirank n N nt P pi re x y z abs broadcast cube d max medit min mmg3d sqrt A B hmax hmin metric t",
"name": "parmmg.edp",
- "starts": 14171,
+ "starts": 24319,
"tags": "mmg 3D"
},
{
"dir": "mpi",
- "ends": 14757,
+ "ends": 24905,
"keywords": "border fespace int mesh mpiComm problem real solve P1 be Cholesky cout endl label m mpiCommWorld mpirank mpisize n N nt P pi re true verbosity x y z atan broadcast buildmesh cos d dx dy exit int2d mpiBarrier on plot processor sin tan B eps init inside label order ps solver t wait",
"name": "schwarz-2d.edp",
- "starts": 14685,
+ "starts": 24833,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 16702,
+ "ends": 26850,
"keywords": "border fespace int mesh mesh3 problem real solve P1 load be CG cout endl label m max min mpirank mpisize n N nt P pi re verbosity x y z atan broadcast buildlayers buildmesh chi cos d dx dy dz exit int3d max min on plot processor sin square tan B eps err fill init inside label labelmid order ps reffacelow reffaceup solver t wait zbound",
"name": "schwarz-3.edp",
- "starts": 16612,
+ "starts": 26760,
"tags": "3D"
},
{
"dir": "mpi",
- "ends": 18450,
+ "ends": 28598,
"keywords": "border fespace int mesh problem real solve P1 be Cholesky cout endl label m mpirank mpisize n N nt P pi re verbosity x y z atan broadcast buildmesh cos d dd dx dy exit int1d int2d on plot processor sin sqrt square tan B eps err init inside label op order ps solver stop t",
"name": "schwarz-b.edp",
- "starts": 18380,
+ "starts": 28528,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 17830,
+ "ends": 27978,
"keywords": "border fespace int mesh problem real solve P1 be Cholesky cout endl FILE label m mpirank mpisize n N nt P pi re verbosity x y z broadcast buildmesh cos d dd dx dy exit int1d int2d mpiAlltoall on plot processor sin sqrt square A B eps err init label op order ps solver stop t",
"name": "schwarz-c.edp",
- "starts": 17767,
+ "starts": 27915,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 17766,
+ "ends": 27914,
"keywords": "fespace func int macro matrix mesh mesh3 real solve varf P1 P2 include load ARGV be cout endl im label m mpirank mpisize n N nt nuTriangle P pi re region sparsesolver verbosity x y z broadcast change cube d dx dy dz getARGV int3d medit mpiWtime on plot processor set yn A B coef file fregion label master mem order qforder region solver t tgv",
"name": "Stokes-v1-matrix-mumps.edp",
- "starts": 17680,
+ "starts": 27828,
"tags": "3D Stokes"
},
{
"dir": "mpi",
- "ends": 14382,
+ "ends": 24530,
"keywords": "fespace func int macro matrix mesh mesh3 real solve string varf P1 P2 include load ARGV be cout endl im label m max min mpirank mpisize n N ndof nt P pi re sparsesolver x y z buildlayers clock d dx dy dz getARGV int3d max medit min on set square A B label labelmid mem order qforder reffacelow reffaceup solver sparams t tgv zbound",
"name": "Stokes-v2-matrix-mumps.edp",
- "starts": 14275,
+ "starts": 24423,
"tags": "3D"
},
{
"dir": "mpi",
- "ends": 14886,
+ "ends": 25034,
"keywords": "fespace func int macro matrix mesh mesh3 real solve string varf P1 P2 load be cout endl im label m max min mpirank mpisize n N ndof nt nuTriangle P pi re region sparsesolver x y z buildlayers change clock d dx dy dz int3d max medit min on set square A B fregion label labelmid mem order qforder reffacelow reffaceup region solver sparams t tgv zbound",
"name": "Stokes-v3-matrix-mumps.edp",
- "starts": 14762,
+ "starts": 24910,
"tags": "3D"
},
{
"dir": "mpi",
- "ends": 15552,
+ "ends": 25700,
"keywords": "ifstream int matrix real solve string load be cout default endl l2 linfty m mpirank n N nt P pi re sparsesolver verbosity version x y broadcast change d dy erf getline on processor Read set yn A B bb file lparams metric ps ratio refe solver sym t value",
"name": "testsolver_MUMPS.edp",
- "starts": 15463,
+ "starts": 25611,
"tags": "2D"
},
{
"dir": "mpi",
- "ends": 14274,
+ "ends": 24422,
"keywords": "fespace int macro Mat matrix mesh mesh3 real solve string varf P1 P2 include load be cout endl im label m max mpirank mpisize n N nt P pi re searchMethod x y z clock cube d dx dy dz int3d max medit movemesh movemesh3 on savemesh set sqrt A B coef eps label mem ps save sigma solver sparams t tgv transfo",
"name": "VG.edp",
- "starts": 14199,
+ "starts": 24347,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 29160,
+ "ends": 39308,
"keywords": "int real load cout endl m n nt re d aniso iso t",
"name": "aniso.edp",
- "starts": 29149,
+ "starts": 39297,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 22967,
+ "ends": 33115,
"keywords": "fespace int mesh problem real P1 P2 P3 P4 load be cout m max n nt P pi re true x y z abs adaptmesh atan change d dx dy exp int2d max on plot sin square tan aniso eps IsMetric iso op ps ratio t wait",
"name": "APk-AdaptEpsDeltaPk.edp",
- "starts": 22925,
+ "starts": 33073,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 27236,
+ "ends": 37384,
"keywords": "fespace func int mesh real P1 load be m n nt P re true x y adaptmesh d on plot sin square tan tanh IsMetric ps ratio t wait",
"name": "APk-ExplicitPkTest.edp",
- "starts": 27216,
+ "starts": 37364,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 28057,
+ "ends": 38205,
"keywords": "bool func int Mat mesh load area be cout endl false im m max min mpirank n N nt nv P pi re true x y adaptmesh d exit exp max min on plot readmesh savemesh square A aniso B boundary err file IsMetric iso metric op ps save split t wait",
"name": "APk-FreeFemQA.edp",
- "starts": 27977,
+ "starts": 38125,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 31019,
+ "ends": 41167,
"keywords": "fespace mesh P1 load cout endl im m n P re x y d plot square dim t wait",
"name": "APk-MetricPk.edp",
- "starts": 30989,
+ "starts": 41137,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28088,
+ "ends": 38236,
"keywords": "ifstream int ofstream real load binary cout endl m n nt pi re x y d bb bin t",
"name": "bfstream.edp",
- "starts": 28058,
+ "starts": 38206,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28276,
+ "ends": 38424,
"keywords": "fespace func int macro mesh real solve HCT P2 load be cout endl m max n N nt P qf5pT re x y abs assert d dx dxx dxy dy dyy int2d max on plot square A cmm err fill init qft t value wait",
"name": "bilapHCT.edp",
- "starts": 28227,
+ "starts": 38375,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31217,
+ "ends": 41365,
"keywords": "fespace int macro mesh real solve HCT P2 P2Morley load cout endl m max n nt P re x y abs assert d dx dxx dxy dy dyy int2d max on plot square cmm err fill init t value wait",
"name": "bilapMorley.edp",
- "starts": 31172,
+ "starts": 41320,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26830,
+ "ends": 36978,
"keywords": "fespace int macro mesh mesh3 real solve P3 load cout endl m max n N nt P re x y abs assert d dx dxx dxy dy dyy int2d intalledges jump max on plot splitmesh square cmm err fill init iso split t value wait",
"name": "bilapP3-hct-like.edp",
- "starts": 26787,
+ "starts": 36935,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29707,
+ "ends": 39855,
"keywords": "func int real load cout endl m max min n nt re verbosity x y abs cos d max min sin t",
"name": "bmo.edp",
- "starts": 29671,
+ "starts": 39819,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25096,
+ "ends": 35244,
"keywords": "border func int mesh mesh3 real string load be cout endl label m max min n nt P pi re region x y z buildlayers buildmesh cos d max min on plot savemesh sin tetg tetgtransfo A B cmm fregion label labeldown labelmid labelup nbofregions order region regionlist save switch t transfo zbound",
"name": "buildlayermesh.edp",
- "starts": 25033,
+ "starts": 35181,
"tags": "tetg 3D"
},
{
"dir": "plugin",
- "ends": 30295,
+ "ends": 40443,
"keywords": "fespace func int macro matrix mesh real solve varf P2 P2dc P3 load be cout endl l2 m max n N nt nv P re sparsesolver UMFPACK x y abs adaptmesh d dx dy int2d max on plot set square system yn A abserror B cmm coef cutoff eps err init iso nbiso nbvx order ps qforder solver t wait",
"name": "cavityNewtonP3pnc.edp",
- "starts": 30153,
+ "starts": 40301,
"tags": "adaptmesh 2D Navier-Stokes"
},
{
"dir": "plugin",
- "ends": 23061,
+ "ends": 33209,
"keywords": "func int mesh meshS real load be cout endl label m max min n nt pi re region sum verbosity x y z change cube d dd max medit min movemesh movemesh23 on square tetg y0 y1 B file label orientation region t transfo",
"name": "checkglumeshcube.edp",
- "starts": 22978,
+ "starts": 33126,
"tags": "tetg 3D"
},
{
"dir": "plugin",
- "ends": 23797,
+ "ends": 33945,
"keywords": "fespace mesh P0 load cout endl m n nt P re x y d square t",
"name": "CircumCenter.edp",
- "starts": 23786,
+ "starts": 33934,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26720,
+ "ends": 36868,
"keywords": "border int mesh real load area be cout endl l1 label m max min n N nt P pi re verbosity version x y z assert buildmesh cos d dumptable max min on plot randreal1 set sin segment yn bb close eps label nbvx op order ps t wait",
"name": "ClosePoints.edp",
- "starts": 26615,
+ "starts": 36763,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27844,
+ "ends": 37992,
"keywords": "bool border fespace func int macro mesh real solve P1 load be cout endl im l2 label length m max min n N nt P pi re region verbosity x y z arg BFGS buildmesh change cmaes cos d dx dxy dy int1d int2d max mean min on plot sin square B cmm dim eps fill init iso label nbiso nbiter op order ps refe region stop t value wait",
"name": "cmaes-oven.edp",
- "starts": 27679,
+ "starts": 37827,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29670,
+ "ends": 39818,
"keywords": "fespace func int matrix mesh real varf P1 load be im l2 m min n N ndof nt P re sum x y adaptmesh cmaes d dx dy int2d min on plot pow square A B cmm dim fill init iso nbiso op ratio split stop t tgv tol value vector which",
"name": "cmaes-VarIneq.edp",
- "starts": 29548,
+ "starts": 39696,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 28226,
+ "ends": 38374,
"keywords": "fespace int mesh mesh3 P0 P1 load adj be cout endl m n nt P re x y z adj cube d on plot set square cmm fill op t wait",
"name": "ConnectedComponents.edp",
- "starts": 28197,
+ "starts": 38345,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27922,
+ "ends": 38070,
"keywords": "bool border fespace int Mat matrix mesh problem real solve varf P1 load be CG m n N nt P pi qf1pT qf1pTlump re true x y buildmesh cos d exp int1d int2d mean plot sin A order qft solver t wait",
"name": "convect_dervieux.edp",
- "starts": 27880,
+ "starts": 38028,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25817,
+ "ends": 35965,
"keywords": "border fespace int Mat matrix mesh mesh3 problem real solve varf P1 load cout endl im m max min n nt nv P pi re verbosity x y z buildlayers buildmesh convect cos d exp int3d max min on plot sin A B cmm fill iso order ps solver t value viso wait zbound",
"name": "convectchacon-3d.edp",
- "starts": 25782,
+ "starts": 35930,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 26332,
+ "ends": 36480,
"keywords": "border fespace int Mat matrix mesh problem real solve varf P1 load CG cout endl im m max min n nt nv P pi re verbosity x y buildmesh convect cos d exp int2d max min on plot sin A B cmm dim fill iso order ps solver t value viso wait",
"name": "convectchacon.edp",
- "starts": 26301,
+ "starts": 36449,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27856,
+ "ends": 38004,
"keywords": "int mesh mesh3 real load be l1 label m n nt nv re region x y z d on plot randreal1 tetg tetgconvexhull label region t",
"name": "convexehull3d.edp",
- "starts": 27845,
+ "starts": 37993,
"tags": "tetg 2D"
},
{
"dir": "plugin",
- "ends": 31372,
+ "ends": 41520,
"keywords": "border int mesh mesh3 real load area be bordermeasure cout default endl label m max measure min n nt pi re region volume x y z abs assert cube d dd int2d int3d max min on plot sin A B err fill flags label order region t transfo value",
"name": "cube.edp",
- "starts": 31316,
+ "starts": 41464,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27305,
+ "ends": 37453,
"keywords": "border fespace int mesh real solve P1 load be cout endl l1 label m max n nt P pi re verbosity x y z abs assert buildmesh cos d extract int1d int2d isoline max mean plot sin A B cmm iso label order qforder t wait",
"name": "curvature.edp",
- "starts": 27271,
+ "starts": 37419,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 30988,
+ "ends": 41136,
"keywords": "complex fespace func int mesh mesh3 meshL real P1 load be cout endl im label m max min n N nt nv P pi re verbosity x y z abs assert cos cube d dfft dy max min on plot round set sin square segment tan yn cmm dim err fill label mode op periodic t value wait",
"name": "dfft-3d.edp",
- "starts": 30893,
+ "starts": 41041,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 26042,
+ "ends": 36190,
"keywords": "complex fespace func int matrix mesh real P1 load be cout endl label linfty m max min n N nt P pi re version x y abs assert cos d dfft dy max min on plot square yn cmm err fill label mode op order periodic t value wait",
"name": "dfft.edp",
- "starts": 25972,
+ "starts": 36120,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27976,
+ "ends": 38124,
"keywords": "fespace int mesh mesh3 real P1 load be cout endl im InternalEdge label m max n N nt P re verbosity x y abs change d dist dx dy max movemesh plot square tan cmm dim distmax iso label nbiso rmInternalEdges t value viso wait",
"name": "distance.edp",
- "starts": 27923,
+ "starts": 38071,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25842,
+ "ends": 35990,
"keywords": "fespace func int mesh real P1 load cout endl im m max min n nt P re verbosity x y buildmesh d dist max min plot tan bb cmm dim iso nbvx t value viso wait",
"name": "distance2.edp",
- "starts": 25818,
+ "starts": 35966,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26553,
+ "ends": 36701,
"keywords": "fespace func int mesh mesh3 real P1 load be cout endl im m max min n nt P re verbosity x y z abs cube d dist max medit min plot tan cmm dim distmax iso nbiso t value viso wait",
"name": "distance3.edp",
- "starts": 26519,
+ "starts": 36667,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27365,
+ "ends": 37513,
"keywords": "fespace func int mesh mesh3 FEQF P0 load be cout endl m n nt P re verbosity x y z cube d dumptable int2d int3d plot square trunc cmm fill flags init qfV t wait",
"name": "Element_QF.edp",
- "starts": 27306,
+ "starts": 37454,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 29547,
+ "ends": 39695,
"keywords": "fespace int mesh mesh3 real P1 load linfty m n ndof nt P re x y z assert buildlayers d lrint on plot rint square t wait",
"name": "exactpartition.edp",
- "starts": 29518,
+ "starts": 39666,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 23624,
+ "ends": 33772,
"keywords": "fespace func int matrix mesh problem real P1 load be cout endl find im m min n N nt nv P re sum version x y z arg change cos d exp min on plot sin square A B close file mode op order ratio refe t value wait which",
"name": "ffnewuoa.edp",
- "starts": 23520,
+ "starts": 33668,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31315,
+ "ends": 41463,
"keywords": "func load cout endl m n re y change d on randinit random srandom srandomdev init t",
"name": "ffrandom.edp",
- "starts": 31301,
+ "starts": 41449,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 30801,
+ "ends": 40949,
"keywords": "fespace int macro mesh Pmmap problem Psemaphore real P1 load be cin cout endl FILE m n N nt P pi re verbosity x y d dx dy int2d on Post Read square Wait Write A init master t wait",
"name": "ffslave.edp",
- "starts": 30739,
+ "starts": 40887,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29915,
+ "ends": 40063,
"keywords": "fespace func int mesh P0 P1 load be cout endl find im m min n nt nv P pi re verbosity x y d isoline min on plot sin sqrt square eps fill iso ps t wait",
"name": "findalllocalmin.edp",
- "starts": 29897,
+ "starts": 40045,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25315,
+ "ends": 35463,
"keywords": "fespace func int mesh real P1 load cout endl m max min n N nt P re x y arg d max min on plot square A init t wait",
"name": "funcTemplate.edp",
- "starts": 25257,
+ "starts": 35405,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31286,
+ "ends": 41434,
"keywords": "border func int mesh mesh3 real load area be cout endl label m max min n nbe nt nv re verbosity x y z buildlayers change d int2d max min movemesh movemesh3 plot savemesh square y0 y1 B label order save t transfo wait zbound",
"name": "glumesh3D.edp",
- "starts": 31233,
+ "starts": 41381,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 29979,
+ "ends": 40127,
"keywords": "complex gslspline int real solve P2 P3 include cout default endl im LU m max n N nt P pi re x y z abs assert cos d dd dy dyy dz dzz gslinterpakima gslinterpakimaperiodic gslinterpcsplineperiodic gslinterpcspline gslinterpsteffen gslinterplinear gslinterppolynomial max plot random rint sin square yn A B cmm err periodic ps t which",
"name": "gsl.edp",
- "starts": 29916,
+ "starts": 40064,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25670,
+ "ends": 35818,
"keywords": "complex fespace func int matrix mesh mesh3 real solve P1 include load ARGV be cout endl im length m n N nt nv P pi qfV1 qfV1lump re sparsesolver x y z abs cube d dist dy exp getARGV int3d medit on set sin sqrt trunc A B dim err init mode omega op qfV solver t",
"name": "Helmholtz_FD.edp",
- "starts": 25573,
+ "starts": 35721,
"tags": "3D Helmholtz"
},
{
"dir": "plugin",
- "ends": 26786,
+ "ends": 36934,
"keywords": "fespace func int matrix mesh real varf P1 P2 load cout diag LU m n ndof nt P pi re x y d dumptable int2d on round square precon t",
"name": "ilut.edp",
- "starts": 26743,
+ "starts": 36891,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31127,
+ "ends": 41275,
"keywords": "complex fespace func int macro matrix mesh real solve varf P1 load CG Cholesky cout diag endl GMRES LU m n ndof nt nv P pi re verbosity x y z clock d dx dy int2d on plot sin square A eps precon ps ratio solver sym t wait",
"name": "IncompleteCholesky.edp",
- "starts": 31020,
+ "starts": 41168,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28755,
+ "ends": 38903,
"keywords": "border fespace int macro mesh real solve P1 load be CG cout endl label linfty m max n nt P re verbosity x y buildmesh d dx dy int2d max movemesh on plot savemesh sqrt square bb eps fill init label op order ps save sigma solver t wait",
"name": "iohd5-beam-2d.edp",
- "starts": 28716,
+ "starts": 38864,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28560,
+ "ends": 38708,
"keywords": "fespace int macro mesh mesh3 real solve P1 include load be cout endl label m max n N nt P re verbosity x y z change cube d dx dy dz int3d max medit movemesh movemesh3 on plot savemesh sqrt B cmm coef eps label ps save sigma t transfo wait",
"name": "iohd5-beam-3d.edp",
- "starts": 28519,
+ "starts": 38667,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27515,
+ "ends": 37663,
"keywords": "fespace int mesh mesh3 real P1 load be cout endl m n nt P re region x y z atan cube d on savevtk tan bin dataname file order region save t",
"name": "iovtk.edp",
- "starts": 27501,
+ "starts": 37649,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 30738,
+ "ends": 40886,
"keywords": "border fespace func int macro matrix mesh real solve varf P1 load cout endl im l2 m n N ndof nt P re x y z assert d dx dy int1d int2d on plot sqrt square A A1 B cmm dim fill inside op order ratio t",
"name": "IpoptLap.edp",
- "starts": 30593,
+ "starts": 40741,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28802,
+ "ends": 38950,
"keywords": "fespace func int macro matrix mesh real varf P2 load cout endl m max min n nt P pi re x y acos acosh cos cosh d dx dy Gamma int2d max min on plot sqrt square y0 init op t tgv wait",
"name": "IpoptMinSurf.edp",
- "starts": 28756,
+ "starts": 38904,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29517,
+ "ends": 39665,
"keywords": "bool fespace func int matrix mesh meshS real string varf P1 load be cout endl im linfty m max n ndof nt nv P pi re volume x y z adaptmesh cos d display dx dy exp int2d max medit movemesh movemesh23 on plot pow sin sqrt square A B bb cmm dim eta fill hmax init inside maxit nbvx op periodic prev ratio refe sigma switch t tol transfo value wait which",
"name": "IpoptMinSurfVol.edp",
- "starts": 29264,
+ "starts": 39412,
"tags": "adaptmesh 3D"
},
{
"dir": "plugin",
- "ends": 23891,
+ "ends": 34039,
"keywords": "func int matrix real load cout endl im l2 m min n nt P re x d min on square op t",
"name": "IpoptTest.edp",
- "starts": 23798,
+ "starts": 33946,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29191,
+ "ends": 39339,
"keywords": "border fespace func int macro matrix mesh real solve varf P2 load CG m n nt P re x y d dx dy exp Gamma int2d on plot square A bb boundary op order solver t value wait",
"name": "IpoptVI.edp",
- "starts": 29161,
+ "starts": 39309,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24135,
+ "ends": 34283,
"keywords": "fespace func int macro matrix mesh real varf P1 load cout endl im m n N nt P re x y z adaptmesh d dx dy Gamma int2d interpolate on plot square A B dim err iso nbiso nbvx op t U2Vc wait",
"name": "IpoptVI2.edp",
- "starts": 24079,
+ "starts": 34227,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 28694,
+ "ends": 38842,
"keywords": "border fespace int mesh meshL meshS real P1 include load be cout endl im label m min n N nt P re verbosity x y z buildmesh buildmeshL clock d isoline min on plot sqrt square square3 beginend close cmm eps file iso label order ps ratio smoothing t value viso wait",
"name": "isoline.edp",
- "starts": 28561,
+ "starts": 38709,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 31474,
+ "ends": 41622,
"keywords": "fespace func int macro mesh real solve BDM1 BDM1Ortho P2 P3 load cout endl l2 m n N Nt nt P re UMFPACK x y d dx dy int1d int2d intalledges on plot sqrt square tan A A1 B err t wait",
"name": "lame-TD-NSS.edp",
- "starts": 31386,
+ "starts": 41534,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 22907,
+ "ends": 33055,
"keywords": "bool fespace func int mesh problem real solve P1 load cout endl im LU m max n nt P re UMFPACK verbosity x y abs assert clock d dx dy int1d int2d max on plot square A boundary err init op t",
"name": "lap-solvers.edp",
- "starts": 22861,
+ "starts": 33009,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25971,
+ "ends": 36119,
"keywords": "complex int macro matrix NewMacro EndMacro real load be cout endl linfty m n N nt nv P re version x y z assert d on set A A1 B err file t value",
"name": "lapack.edp",
- "starts": 25843,
+ "starts": 35991,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27089,
+ "ends": 37237,
"keywords": "border fespace func int macro mesh problem real solve varf P2 P3 P3dc P4 load be CG im m n N nt nTonEdge P re x y d dd dx dy Gamma int1d int2d intalledges jump on plot square A A1 B cmm err fill init metric op order qforder solver sym t value wait",
"name": "LapDG3.edp",
- "starts": 27034,
+ "starts": 37182,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27590,
+ "ends": 37738,
"keywords": "border fespace func int macro mesh problem real solve varf P2 P2dc be CG im m n N nt nTonEdge P re x y d dd dx dy Gamma int1d int2d intalledges jump on plot square A A1 B cmm err fill init metric op order solver sym t value wait",
"name": "LapDG4.edp",
- "starts": 27539,
+ "starts": 37687,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28335,
+ "ends": 38483,
"keywords": "fespace func int matrix mesh problem real solve varf P2 P2pnc P3 P3dc load cout endl m n ndof nt P re true x y d dx dy int2d on plot square A boundary eps ps solver t value",
"name": "LaplaceP2pnc.edp",
- "starts": 28316,
+ "starts": 38464,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27394,
+ "ends": 37542,
"keywords": "fespace int macro mesh mesh3 problem real solve P2 P3 load be CG cout endl l1 label m max n nt P re verbosity x y z abs assert cube d dx dy dz int3d max on plot err label qfV solver t wait",
"name": "LaplaceP3-3d.edp",
- "starts": 27366,
+ "starts": 37514,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 31232,
+ "ends": 41380,
"keywords": "fespace func int mesh problem solve P1 P3 load m n nt P qf7pT re true x y d dx dy int2d on plot square boundary eps ps qft t value",
"name": "LaplaceP3.edp",
- "starts": 31218,
+ "starts": 41366,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 30355,
+ "ends": 40503,
"keywords": "fespace func int mesh mesh3 problem real solve P1 P3 P4 load be cout endl m n nt P qf1pE qf1pElump qf1pT qf1pTlump re true verbosity x y abs assert cube d dx dy int1d int2d int3d on plot square boundary eps order ps qfe qforder qft t value",
"name": "LaplaceP4.edp",
- "starts": 30296,
+ "starts": 40444,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 24317,
+ "ends": 34465,
"keywords": "fespace func int mesh problem solve P1 P1dc RT1 load im m n N nt P re true x y d dimKrylov dx dy Gamma int1d int2d on plot square A coef dim eps fill init ps solver t tgv value wait",
"name": "LaplaceRT1.edp",
- "starts": 24276,
+ "starts": 34424,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31806,
+ "ends": 41954,
"keywords": "fespace func int macro mesh mesh3 problem real solve P1 P1dc RT1 load be cout endl im m max n N nt P re true x y z abs assert cube d dimKrylov dx dy dz Gamma int2d int3d max on plot A B dim eps err init iso ps solver t tgv value wait",
"name": "LaplaceRT13d.edp",
- "starts": 31752,
+ "starts": 41900,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 25142,
+ "ends": 35290,
"keywords": "fespace func int mesh problem solve P2 P2dc RT2 load m n N nt P re true x y d dx dy Gamma int1d int2d on plot square A coef eps fill init ps solver t value wait",
"name": "LaplaceRT2.edp",
- "starts": 25101,
+ "starts": 35249,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26489,
+ "ends": 36637,
"keywords": "fespace func int mesh problem solve P1 P3 load default m n N nt P qf7pT re true UMFPACK verbosity x y d dx dy int2d on plot square A boundary eps ps qft t value",
"name": "LapLNewSolver.edp",
- "starts": 26471,
+ "starts": 36619,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26518,
+ "ends": 36666,
"keywords": "fespace func int matrix mesh problem real solve varf P1 P3 load cout default endl linfty m n nt P qf7pT re sparsesolver true verbosity x y z d dx dy int2d on plot set square A boundary eps ps qft solver t value",
"name": "LapMUMPS_seq.edp",
- "starts": 26490,
+ "starts": 36638,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25730,
+ "ends": 35878,
"keywords": "fespace func int mesh problem solve P1 P3 load m n N nt P qf7pT re true verbosity x y d dx dy int2d on plot square boundary eps ps qft t value",
"name": "LapNewSolver.edp",
- "starts": 25715,
+ "starts": 35863,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24415,
+ "ends": 34563,
"keywords": "fespace func int mesh problem solve P1 P3 load default m n nt P qf7pT re true UMFPACK verbosity x y d dx dy int2d on plot square A boundary eps ps qft solver t value",
"name": "LapUmfpack64.edp",
- "starts": 24397,
+ "starts": 34545,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27500,
+ "ends": 37648,
"keywords": "mesh mesh3 load m re y buildlayers d savemesh square save",
"name": "layer.edp",
- "starts": 27496,
+ "starts": 37644,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 31751,
+ "ends": 41899,
"keywords": "border fespace func int mesh real string P1 load area be cout endl im label m max min n N nt P re verbosity x y z buildmesh d imag isoline max min movemesh on plot set sqrt square A beginend close eps grey init iso label order ps ratio smoothing t transfo value wait",
"name": "Leman-mesh.edp",
- "starts": 31717,
+ "starts": 41865,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31385,
+ "ends": 41533,
"keywords": "fespace func mesh P1 load cout endl m max min n P re x y d dumptable dy max min on square yn t",
"name": "load.edp",
- "starts": 31373,
+ "starts": 41521,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27678,
+ "ends": 37826,
"keywords": "fespace int Mat matrix mesh mesh3 Edge03d P0 P1 load be cout endl m n ndof nt P re verbosity x y z assert cube d square A err t",
"name": "mat_edgeP1.edp",
- "starts": 27651,
+ "starts": 37799,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27650,
+ "ends": 37798,
"keywords": "complex fespace int Mat matrix mesh real string varf P1 load binary cout endl linfty m n N nt P re version x y assert d dd erf int2d on square A B bin save t",
"name": "MatrixMarket.edp",
- "starts": 27591,
+ "starts": 37739,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 23785,
+ "ends": 33933,
"keywords": "border fespace func int macro mesh mesh3 problem P1 P2 load be cout endl false find label m max min n N nt P pi re verbosity x y z abs assert buildmesh cos cube d dd dx dy Gamma int2d max medit min on plot readmesh readmesh3 savemesh savesol sin sqrt init label meditff order save t",
"name": "meditddm.edp",
- "starts": 23712,
+ "starts": 33860,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27879,
+ "ends": 38027,
"keywords": "fespace int mesh meshS P0 load m n nt P re d erf plot square square3 cmm fill t wait",
"name": "metis.edp",
- "starts": 27857,
+ "starts": 38005,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 29263,
+ "ends": 39411,
"keywords": "fespace func int mesh real P0 P1 P2 load area cout endl m max min n nt nv P re sum x y abs adaptmesh cos d int2d log log10 max min on plot pow sin square tan tanh y0 cmm coef eps err fill hmin inquire IsMetric iso nbvx ps t value viso wait",
"name": "MetricKuate.edp",
- "starts": 29192,
+ "starts": 39340,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 29716,
+ "ends": 39864,
"keywords": "func string load cout endl m n x y d dy on yn t",
"name": "myfunction2.edp",
- "starts": 29708,
+ "starts": 39856,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 23377,
+ "ends": 33525,
"keywords": "load cout endl m n N x y d dd t",
"name": "myType.edp",
- "starts": 23372,
+ "starts": 33520,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25256,
+ "ends": 35404,
"keywords": "fespace func int macro matrix mesh real solve varf P0 P2 P2BR load cout endl im m min n N nt nv P re true UMFPACK x y z abs adaptmesh clock convect d dx dy int2d min on plot square A abserror B cmm coef cutoff err hmin init inquire iso nbiter op ratio solver t tol value wait",
"name": "NS_P2BR_P0.edp",
- "starts": 25143,
+ "starts": 35291,
"tags": "adaptmesh 2D Stokes"
},
{
"dir": "plugin",
- "ends": 23711,
+ "ends": 33859,
"keywords": "fespace func int matrix mesh real solve varf P0 P1 P2 P2BR load be cin cout endl m min n N nt nv P pi re x y abs adaptmesh assert clock convect d dx dy int2d min on plot sign square yn A abserror B cmm coef cutoff eps err hmin init inquire iso nbiter op ps ratio solver t tol value vector wait",
"name": "NSP2BRP0.edp",
- "starts": 23625,
+ "starts": 33773,
"tags": "adaptmesh 2D Stokes"
},
{
"dir": "plugin",
- "ends": 28315,
+ "ends": 38463,
"keywords": "complex fespace int matrix mesh real solve varf P1 load be cout endl im label m max min n N nt nv P re sparsesolver verbosity x y d dx dy int2d max min on plot set square A B cmm dim fill label metric ps solver sym t value wait",
"name": "PARDISO.edp",
- "starts": 28277,
+ "starts": 38425,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25032,
+ "ends": 35180,
"keywords": "int string load cout endl m min n N nt P pi re x y d getline min on plot set sin A bin err file ps t",
"name": "pipe.edp",
- "starts": 24995,
+ "starts": 35143,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25714,
+ "ends": 35862,
"keywords": "fespace func int mesh meshS P1 P3 load cout endl m min n N nt P re x y d dx dxx dxy dy dyy exec medit min movemesh movemesh23 plot savemesh square Wait cmm file save t transfo wait",
"name": "plot-fb-P3.edp",
- "starts": 25671,
+ "starts": 35819,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27495,
+ "ends": 37643,
"keywords": "fespace func int mesh meshS P1 P3 P3dc load cout endl m min n N nt P re x y d dx dxx dxy dy dyy exec medit min movemesh movemesh23 plot savemesh square Wait cmm file save t transfo wait",
"name": "plot-fb-P3dc.edp",
- "starts": 27451,
+ "starts": 37599,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 24078,
+ "ends": 34226,
"keywords": "fespace func int mesh meshS P1 P4 load cout endl m min n N nt P re x y d dx dxx dxy dy dyy medit min movemesh movemesh23 plot square Wait cmm t transfo wait",
"name": "plot-fb-P4.edp",
- "starts": 24042,
+ "starts": 34190,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 24275,
+ "ends": 34423,
"keywords": "fespace func int mesh meshS P1 P4 P4dc load cout endl m min n N nt P re x y d dx dxx dxy dy dyy exec medit min movemesh movemesh23 plot savemesh square Wait cmm file save t transfo wait",
"name": "plot-fb-P4dc.edp",
- "starts": 24230,
+ "starts": 34378,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 27270,
+ "ends": 37418,
"keywords": "fespace func int mesh P1 P3 P3dc load cout endl im m min n N nt P re x y d dx dxx dxy dy dyy min plot square Wait cmm dim t wait",
"name": "plotfb.edp",
- "starts": 27237,
+ "starts": 37385,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26470,
+ "ends": 36618,
"keywords": "bool border complex fespace func int mesh real solve P0 P1 P1nc P2 load be default false im label m max min n nt P pi re true verbosity x y z abs arg assert buildmesh cos d dx dy imag int2d interpolate isoline max min on plot sin B bb cmm eps file fill iso label nbiso op option options order ps t value vector viso wait",
"name": "plotPDF-sample.edp",
- "starts": 26333,
+ "starts": 36481,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29896,
+ "ends": 40044,
"keywords": "bool fespace int mesh real string P1 load be false im m n N nt P re x y assert d imag plot Read set square cmm save t wait",
"name": "ppm2rnm.edp",
- "starts": 29858,
+ "starts": 40006,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31300,
+ "ends": 41448,
"keywords": "fespace mesh real P1 load cout im l2 m n P pi re x y z d dd square Write t",
"name": "provadxw.edp",
- "starts": 31287,
+ "starts": 41435,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27450,
+ "ends": 37598,
"keywords": "func int mesh mesh3 meshS real load be im l2 label m min n nt pi re region verbosity volume x y z adaptmesh cos d medit min movemesh movemesh23 on plot sin sqrt square tetg tetgreconstruction A file fregion IsMetric label nbofregions orientation periodic region regionlist sizeofvolume switch t transfo wait",
"name": "refinesphere.edp",
- "starts": 27395,
+ "starts": 37543,
"tags": "adaptmesh tetg 3D"
},
{
"dir": "plugin",
- "ends": 27033,
+ "ends": 37181,
"keywords": "func int mesh mesh3 real P3 P3dc P4 P4dc include load be cout endl m max n N nt P re true verbosity x y assert d max mean on plot splitmesh Wait file op prev refe split t value",
"name": "regtests.edp",
- "starts": 26831,
+ "starts": 36979,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25572,
+ "ends": 35720,
"keywords": "fespace int mesh real RT0 load cout endl linfty m n ndof nt re x y assert d plot square cmm err t wait",
"name": "RT0dc.edp",
- "starts": 25548,
+ "starts": 35696,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28501,
+ "ends": 38649,
"keywords": "fespace func int macro mesh real varf P1 P2 P4 RT0 include load area be cout endl label m n N ndof nt P re x y z abs assert d int1d int2d on square trunc A B bb coef err flags label order qforder ratio sigma t vector",
"name": "RT2-ff.edp",
- "starts": 28336,
+ "starts": 38484,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26742,
+ "ends": 36890,
"keywords": "fespace int macro matrix mesh real varf P1 load cout endl m n nt P re x y assert d dx dy int2d on square A B file t",
"name": "SaveHB_sample.edp",
- "starts": 26721,
+ "starts": 36869,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28715,
+ "ends": 38863,
"keywords": "complex fespace int macro matrix mesh varf P1 load cout endl m n nt P re x y z assert d dx dy int2d on square A B file t",
"name": "SaveHB_sample_z.edp",
- "starts": 28695,
+ "starts": 38843,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29857,
+ "ends": 40005,
"keywords": "fespace func int macro Mat matrix mesh real varf P1 include load be cout endl l2 label m max n ndof nt P re sum verbosity x y z abs d dx dy int2d max movemesh on plot sort square trunc A B label mode op order sym t tgv wait",
"name": "Schur-Complement-V4.3.edp",
- "starts": 29717,
+ "starts": 39865,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27215,
+ "ends": 37363,
"keywords": "fespace int macro matrix mesh problem real solve varf P1 include load be cout endl find label m max n N ndof nt P re sum UMFPACK verbosity version x y z abs chi d dd dx dy int2d max movemesh on plot sin sort square tan trunc A B bin label metric mode order prev sym t tgv wait",
"name": "Schur-Complement.edp",
- "starts": 27090,
+ "starts": 37238,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 30152,
+ "ends": 40300,
"keywords": "bool fespace func int macro matrix mesh real solve varf P0 P1 load area be cout endl im label m max min n ndof nt P pi re true x y z abs assert change d dd dx dy Gamma int2d interpolate max min on plot set sqrt square trunc A cmm dim err fill inside label order ps qforder refe solver split t tgv value wait",
"name": "schwarz-nm.edp",
- "starts": 29980,
+ "starts": 40128,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24626,
+ "ends": 34774,
"keywords": "border fespace int mesh P0 load be im m n nt nuTriangle P pi re region x y z buildmesh cos d on plot sin square cmm fill order region t value wait",
"name": "scotch.edp",
- "starts": 24582,
+ "starts": 34730,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 30592,
+ "ends": 40740,
"keywords": "string load be cout endl FILE m n N nv P re verbosity version y d dd log on set file t",
"name": "shell.edp",
- "starts": 30553,
+ "starts": 40701,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 22977,
+ "ends": 33125,
"keywords": "int mesh real load m n nt re x y d plot square split t wait",
"name": "splitedges.edp",
- "starts": 22968,
+ "starts": 33116,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 28518,
+ "ends": 38666,
"keywords": "fespace int mesh mesh3 real P1 include load be cout endl m n nbe nt P re x y z assert cube d medit plot splitmesh B cmm split t wait",
"name": "splitmesh12.edp",
- "starts": 28502,
+ "starts": 38650,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 25100,
+ "ends": 35248,
"keywords": "mesh mesh3 load m re d plot splitmesh square split t wait",
"name": "splitmesh3.edp",
- "starts": 25097,
+ "starts": 35245,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 22924,
+ "ends": 33072,
"keywords": "fespace int mesh mesh3 real P1 include load be cout endl m n nbe nt P re x y z assert cube d medit plot splitmesh B cmm split t wait",
"name": "splitmesh4.edp",
- "starts": 22908,
+ "starts": 33056,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24229,
+ "ends": 34377,
"keywords": "fespace int matrix mesh solve varf P0 P1 RT0 load area m n N nt P re version x y d int2d intalledges interpolate mean on plot splitmesh square eta order qforder split t wait",
"name": "splitmesh6.edp",
- "starts": 24194,
+ "starts": 34342,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 27538,
+ "ends": 37686,
"keywords": "fespace func int macro mesh mesh3 solve P1 P1dc P2 P23d P2pnc P3 load be label m n nt P re x y z cube d dx dy dz int3d on plot iso label nbiso order qforder t wait",
"name": "Stokes-P2pnc3d.edp",
- "starts": 27516,
+ "starts": 37664,
"tags": "3D Stokes"
},
{
"dir": "plugin",
- "ends": 25474,
+ "ends": 35622,
"keywords": "border fespace func int macro mesh real solve P1 P2 load be cout endl label m max n N nt P re UMFPACK verbosity x y z abs buildmesh d dd dx dy erf int1d int2d isoline max on plot set sqrt A B bb cmm coef fill iso label op order ps t wait WindowIndex",
"name": "Stokes-surface-tension-axi.edp",
- "starts": 25316,
+ "starts": 35464,
"tags": "2D Stokes"
},
{
"dir": "plugin",
- "ends": 25547,
+ "ends": 35695,
"keywords": "complex fespace func int matrix mesh problem real solve P1 load cout endl GMRES LU m max n N nt P re sparsesolver true UMFPACK verbosity x y abs assert d dx dy int2d max on plot rint set square A bb boundary solver sparams sym t tgv value",
"name": "SuperLU.edp",
- "starts": 25475,
+ "starts": 35623,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24994,
+ "ends": 35142,
"keywords": "bool fespace func int macro mesh mesh3 real string P1 P2 P2pnc P3 P3dc P4 P4dc load area be cout endl label linfty m n nbe ndof nt nv P pi re region sum verbosity volume x y z abs assert change cube d dd dx dy dz int2d int3d medit on plot rint savemesh sort sqrt square swap tetg tetgconvexhull trunc A B boundary cmm coef err fill flabel label order qforder region save swap t wait",
"name": "test-Element_P2pnc_3d.edp",
- "starts": 24627,
+ "starts": 34775,
"tags": "tetg 3D"
},
{
"dir": "plugin",
- "ends": 31716,
+ "ends": 41864,
"keywords": "fespace func int macro mesh NewMacro EndMacro real varf BDM1 BDM1Ortho P0 P1 P1dc P1nc P2 P2dc P3 P4 RT1 RT1Ortho RT2 RT2Ortho load area cout endl lenEdge linfty m n N ndof ndofK nt nTonEdge nuTriangle P re version x y abs assert d dd dx dxx dy int1d int2d intalledges jump movemesh on plot square trunc y0 y1 A B cmm err fill flags op order qforder refe split t value wait",
"name": "test-ElementMixte.edp",
- "starts": 31475,
+ "starts": 41623,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24396,
+ "ends": 34544,
"keywords": "fespace int mesh real varf P1 load cout endl linfty m n nt P re verbosity x y adaptmesh assert d dist on plot savemesh square tan err IsMetric save t wait",
"name": "testdist.edp",
- "starts": 24379,
+ "starts": 34527,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 31855,
+ "ends": 42003,
"keywords": "fespace func int mesh mesh3 real P1 P1b P1b3d P1bl P1bl3d P1dc load be cout endl linfty m n ndof ndofK nt P re x y z assert cube d dx dy int2d plot splitmesh square cmm err split t wait",
"name": "testFE-P1bl.edp",
- "starts": 31807,
+ "starts": 41955,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 25781,
+ "ends": 35929,
"keywords": "bool fespace func int mesh mesh3 ofstream real P1 P2 P2b load be cout endl im imax linfty m max min n nt P re verbosity x y z abs assert cube d int3d max medit min plot readmesh readmesh3 sin trunc cmm err iso nbiso split t wait",
"name": "testFE-P2Bulle3.edp",
- "starts": 25731,
+ "starts": 35879,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 30428,
+ "ends": 40576,
"keywords": "fespace func int mesh real solve P1 P2 P2pnc P3 P3dc load area be cout endl label lenEdge linfty m n ndof ndofK nt P re x y z abs assert d dx dy int1d int2d movemesh plot sqrt square trunc err flags label order qforder split t wait",
"name": "testFE-P2pnc.edp",
- "starts": 30356,
+ "starts": 40504,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24581,
+ "ends": 34729,
"keywords": "fespace func int macro mesh meshL meshS real solve varf P0 P1 P3 P3dc load cout endl lenEdge linfty m max min n N ndof ndofK nt nuTriangle P re x y abs assert d dx dxx dy dyy int1d intalledges jump max min on plot sqrt square square3 segment y1 B cmm err t wait",
"name": "testFE-P3.edp",
- "starts": 24416,
+ "starts": 34564,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 26614,
+ "ends": 36762,
"keywords": "fespace int macro mesh real varf P0 P3 P3dc load cout endl lenEdge linfty m max min n N ndof ndofK nt nuTriangle P re x y abs assert d dx dxx dy dyy intalledges jump max min plot square y1 cmm t wait",
"name": "testFE-P3dc.edp",
- "starts": 26554,
+ "starts": 36702,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 24041,
+ "ends": 34189,
"keywords": "fespace func int mesh real solve P1 P3 P4 P4dc load area be cout endl l1 l2 label lenEdge linfty m n ndof ndofK nt nv P re x y abs assert d dx dy int1d int2d movemesh on plot sqrt square swap trunc cmm err flags label order ps qforder split swap t wait",
"name": "testFE-P3nc.edp",
- "starts": 23892,
+ "starts": 34040,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26300,
+ "ends": 36448,
"keywords": "fespace func int mesh real solve P1 P3 P4 P4dc load area be cout endl l1 l2 label lenEdge linfty m n ndof ndofK nt nv P re x y abs assert d dx dy int1d int2d movemesh on plot sqrt square swap trunc cmm err flags label order qforder split swap t wait",
"name": "testFE-P3pnc.edp",
- "starts": 26127,
+ "starts": 36275,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 23371,
+ "ends": 33519,
"keywords": "bool fespace func int macro mesh mesh3 meshL meshS real solve varf P0 P1 P4 P4dc load area be cout endl linfty m max min n N ndof ndofK nt nuTriangle P re true x y z abs assert cube d dx dxx dy dyy int1d intallfaces jump max min movemesh movemesh23 on plot sqrt square segment trunc y1 B cmm err flags op t transfo wait",
"name": "testFE-P4.edp",
- "starts": 23161,
+ "starts": 33309,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 24378,
+ "ends": 34526,
"keywords": "fespace int macro mesh real varf P0 P4 P4dc load cout endl lenEdge m max min n N ndof ndofK nt nuTriangle P re x y abs assert d dx dxx dy dyy intalledges jump max min plot square y1 cmm t wait",
"name": "testFE-P4dc.edp",
- "starts": 24318,
+ "starts": 34466,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 29040,
+ "ends": 39188,
"keywords": "fespace int macro mesh real P1 P2 P3 P4 load cout endl m max min n ndof ndofK nt nuTriangle P re x y abs assert d dx dy max min on plot savemesh square y1 fill flags init iso refe save t value viso wait",
"name": "testFE-PkEdge.edp",
- "starts": 28976,
+ "starts": 39124,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 30552,
+ "ends": 40700,
"keywords": "fespace int macro mesh real P2 P2BR load cout endl m max min n ndof ndofK nt nuTriangle P re x y abs assert d dx dy max min on plot square y1 B t wait",
"name": "testFE.edp",
- "starts": 30511,
+ "starts": 40659,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 31171,
+ "ends": 41319,
"keywords": "fespace int macro mesh real P2 P2BR load cout endl m max min n ndof ndofK nt nuTriangle P re true x y abs assert d dx dy max min on plot square y1 B t wait",
"name": "testFE_P2BR.edp",
- "starts": 31128,
+ "starts": 41276,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 23519,
+ "ends": 33667,
"keywords": "fespace func int macro mesh mesh3 real varf HCT P0 P3 P3dc load cout endl lenEdge linfty m max min n N ndof ndofK nt nuTriangle P re x y abs assert d dx dxx dxy dy dyx dyy int1d int2d intalledges jump max min plot splitmesh square trunc y1 cmm err flags split t wait",
"name": "testFEHCT.edp",
- "starts": 23378,
+ "starts": 33526,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 23160,
+ "ends": 33308,
"keywords": "fespace func int macro mesh real varf P0 P2 P2Morley load cout endl lenEdge m max min n N ndof ndofK nt nuTriangle P re x y abs assert d dx dxx dxy dy dyx dyy int1d int2d intalledges jump max min plot square y1 cmm t wait",
"name": "testFEMorley.edp",
- "starts": 23062,
+ "starts": 33210,
"tags": "2D"
},
{
"dir": "plugin",
- "ends": 26126,
+ "ends": 36274,
"keywords": "fespace int macro matrix mesh mesh3 meshL meshS varf P1 P1b P1dc P1nc load be cout endl im linfty m n N ndof ndofK nt P re x y assert cube d int2d plot square square3 cmm dim err fill order qforder t wait",
"name": "testp1dcnc.edp",
- "starts": 26043,
+ "starts": 36191,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 30510,
+ "ends": 40658,
"keywords": "border func int mesh mesh3 meshS real load be bordermeasure cout endl m max measure min n nt pi re region verbosity x y z cos cube d max medit min movemesh movemesh23 movemesh3 on savemesh sin square tetg y0 y1 A file fregion nbofregions order orientation region regionlist removeduplicate save switch t transfo wait",
"name": "tetgencube.edp",
- "starts": 30429,
+ "starts": 40577,
"tags": "tetg 3D"
},
{
"dir": "plugin",
- "ends": 30892,
+ "ends": 41040,
"keywords": "func int mesh mesh3 meshS real load cout endl im m max min n nt pi re region verbosity x y z adaptmesh cos d dd max medit min movemesh movemesh23 on plot savemesh sin square tetg A file fregion holelist IsMetric nbofholes nbofregions orientation periodic ps region regionlist save switch t transfo wait",
"name": "tetgenholeregion_rugby.edp",
- "starts": 30802,
+ "starts": 40950,
"tags": "adaptmesh tetg 3D"
},
{
"dir": "plugin",
- "ends": 24193,
+ "ends": 34341,
"keywords": "border fespace func int mesh mesh3 problem real solve P1 include load be CG cout endl label m n nt P pi re region verbosity x y atan buildmesh change cos cube d dx dy extract Gamma gmshload gmshload3 int2d medit on readmesh readmesh3 savevtk set sin tan tetg bin boundary dataname file label order region save solver t tgv vector wait",
"name": "ttestio.edp",
- "starts": 24136,
+ "starts": 34284,
"tags": "tetg 2D"
},
{
"dir": "plugin",
- "ends": 28975,
+ "ends": 39123,
"keywords": "border fespace func int matrix mesh problem real varf P1 load be im m min n N nbe ndof nt nv P re x y z adaptmesh BFGS d dx dy erf int2d min on plot sin square A B cmm dim err fill iso nbiso op order ratio stop t tgv tol value",
"name": "VarIneq2.edp",
- "starts": 28803,
+ "starts": 38951,
"tags": "adaptmesh 2D"
},
{
"dir": "plugin",
- "ends": 29148,
+ "ends": 39296,
"keywords": "complex fespace func int macro mesh mesh3 problem real solve Edge03d Edge13d P0 include load be cout endl im label m min n N nt P pi re sparsesolver sum x y z abs cos cube d dx dy dz exp int2d int3d medit min on plot sign sin sqrt segment tan B boundary dim err eta file init label omega sigma solver t value vector",
"name": "waveguide.edp",
- "starts": 29041,
+ "starts": 39189,
"tags": "3D"
},
{
"dir": "plugin",
- "ends": 28196,
+ "ends": 38344,
"keywords": "complex fespace func int macro mesh mesh3 problem real solve Edge03d Edge13d Edge23d P0 include load be cout endl im label m min n N nt P pi re sparsesolver sum x y z abs cos cube d dx dy dz exp int2d int3d medit min on plot sign sin sqrt segment tan B boundary dim err eta file init label omega sigma solver t value vector",
"name": "waveguide2.edp",
- "starts": 28089,
+ "starts": 38237,
"tags": "3D"
},
{
"dir": "tutorial",
- "ends": 6141,
+ "ends": 16289,
"keywords": "border fespace int mesh problem real P1 be cout endl im label m min n nt P pi re true x y adaptmesh atan buildmesh cos d dx dy erf int2d min on plot pow sin sqrt tan boundary err label order power t value wait",
"name": "a_tutorial.edp",
- "starts": 6081,
+ "starts": 16229,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 5448,
+ "ends": 15596,
"keywords": "border fespace int mesh problem real solve P1 be CG cout endl label m max min n nt P re x y adaptmesh buildmesh d dx dy int2d max min on plot savemesh A eps err label op order ps qforder save solver t wait",
"name": "adapt.edp",
- "starts": 5403,
+ "starts": 15551,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 8104,
+ "ends": 18252,
"keywords": "border fespace func int mesh problem real solve varf P0 P1 be CG cout endl hTriangle label lenEdge m max min n N nt P re x y adaptmesh buildmesh chi d dx dxx dy dyy int2d intalledges jump max min on plot savemesh sqrt square A aniso bb cmm eps err fill iso label nbiso op order ps qforder save solver t value viso wait",
"name": "adaptindicatorP1.edp",
- "starts": 8033,
+ "starts": 18181,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 7834,
+ "ends": 17982,
"keywords": "border fespace func int mesh problem real solve varf P0 P2 be CG cout endl hTriangle label lenEdge m max min n N nt P re x y adaptmesh buildmesh chi d dx dxx dy dyy int2d intalledges jump log log10 max min on plot savemesh sqrt square A aniso bb cmm eps err fill iso label nbiso op order ps qforder save solver t value viso wait",
"name": "adaptindicatorP2.edp",
- "starts": 7761,
+ "starts": 17909,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 8416,
+ "ends": 18564,
"keywords": "border fespace func int macro mesh problem real varf P0 P1 be cout endl hTriangle label lenEdge m max min n N nt nv P pi qfnbpE re sum unused x y z adaptmesh buildmesh chi d dx dxx dy dyy int2d intalledges jump max min on plot projection set sqrt square A bb coef eps eta fill init IsMetric label nbvx op order ps qforder sigma split splitpbedge t value wait",
"name": "AdaptResidualErrorIndicator.edp",
- "starts": 8292,
+ "starts": 18440,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 10755,
+ "ends": 20903,
"keywords": "fespace int macro matrix mesh real solve varf P1 cout endl linfty m n nt P re sparsesolver x y assert d dx dy int2d on plot set square A err solver t wait",
"name": "AdjointSolve.edp",
- "starts": 10731,
+ "starts": 20879,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 9664,
+ "ends": 19812,
"keywords": "bool fespace func int matrix mesh real solve varf P0 P1 CG Cholesky cout endl GMRES im linfty m max min n N nt nv P re sum verbosity version x y z abs AffineGMRES assert BFGS d dd dx dy int2d LinearCG LinearGMRES log max min NLCG on plot set square A B cmm eps err factorize fill init nbiter op precon ps solver stop t value veps wait",
"name": "algo.edp",
- "starts": 9486,
+ "starts": 19634,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 10262,
+ "ends": 20410,
"keywords": "complex fespace ifstream int macro matrix mesh ofstream real string P1 ARGV be cout diag endl find im imax imin l1 l2 linfty m max min n N nt P pi quantile re sum verbosity version x y z abs assert change d dd dist dy exp imag max min on plot projection set sort sqrt square yn A B dim eps fill init mem op ps t transfo value vector",
"name": "array.edp",
- "starts": 9782,
+ "starts": 19930,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11060,
+ "ends": 21208,
"keywords": "border fespace int macro mesh real solve P1 be cout endl label linfty m n nt P re sparsesolver x y buildmesh d dx dy int2d movemesh on plot sqrt B bb displacement eps label op order ps sigma solver t wait",
"name": "beam.edp",
- "starts": 11014,
+ "starts": 21162,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6915,
+ "ends": 17063,
"keywords": "border complex fespace func int macro matrix mesh real solve varf P1 include be cout endl im linfty m max n N nt P pi re sparsesolver x y abs arg BEM d dx dy exp imag int1d int2d max on plot set square A B boundary cmm eps err mem op order periodic ps qforder refe solver t wait",
"name": "BEM.edp",
- "starts": 6829,
+ "starts": 16977,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 10668,
+ "ends": 20816,
"keywords": "complex int real string be cout default endl fixed l2 linfty m n noshowpos nt P pi precision re scientific showpos version x y z arg conj d dd exp jn on set sqrt A B B1 op ratio t",
"name": "calculus.edp",
- "starts": 10579,
+ "starts": 20727,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11616,
+ "ends": 21764,
"keywords": "fespace int mesh problem real solve P1 P2 m n N nt nv P re x y z convect d dx dy int2d on plot square A cmm coef eps init ps t wait",
"name": "cavity.edp",
- "starts": 11531,
+ "starts": 21679,
"tags": "2D Navier-Stokes"
},
{
"dir": "tutorial",
- "ends": 8961,
+ "ends": 19109,
"keywords": "fespace func int macro matrix mesh real solve varf P1 P2 be cout endl l2 m max n N nt nv P re sparsesolver x y abs adaptmesh d dx dy int2d max on plot set square system yn A abserror B cmm coef cutoff eps err init iso nbiso nbvx ps solver t wait",
"name": "cavityNewton.edp",
- "starts": 8831,
+ "starts": 18979,
"tags": "adaptmesh 2D Navier-Stokes"
},
{
"dir": "tutorial",
- "ends": 11706,
+ "ends": 21854,
"keywords": "bool border fespace func int mesh problem real P1 cout endl im l2 m max min n nt nv P pi re true version x y z adaptmesh buildmesh change convect cos d int2d max min on plot set sin sqrt square tan tanh triangulate cmm dim err init inquire metric nomeshgeneration op order ratio save t tol wait",
"name": "convect-apt.edp",
- "starts": 11617,
+ "starts": 21765,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 8557,
+ "ends": 18705,
"keywords": "border fespace func int mesh problem real P1 im m max min n nt nv P pi re x y z buildmesh convect cos d exp max min on plot sin triangulate cmm init order t wait",
"name": "convect.edp",
- "starts": 8527,
+ "starts": 18675,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6432,
+ "ends": 16580,
"keywords": "border fespace func int mesh problem real solve P1 P2 CG im m max min n nt nv P pi re x y buildmesh convect cos d dx dy exp int2d max min on plot sin triangulate trunc A cmm init order solver split t wait",
"name": "convect2.edp",
- "starts": 6398,
+ "starts": 16546,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11366,
+ "ends": 21514,
"keywords": "border fespace func int mesh meshL real P0 P1 P3 load be cout endl m min n nt nv P pi re version x y buildmesh cos d dist dy exp int2d min on plot sin square segment tan tanh cmm eps eta fill order ps t value wait",
"name": "Convolution-Sample.edp",
- "starts": 11314,
+ "starts": 21462,
"tags": "3D"
},
{
"dir": "tutorial",
- "ends": 9061,
+ "ends": 19209,
"keywords": "func int Mat mesh mesh3 ofstream HCT P0 P1 P1b P1bl P1dc P1nc P2 P2b P2pnc P3 P3dc P4 P4dc load Cholesky cout endl m n N nt P pi re UMFPACK x y z cmaes d dd dfft dist dumptable exec freeyams isoline medit mmg3d mshmet on plot random splitmesh tan tetg Write A aniso B iso op ps split t",
"name": "dumptable.edp",
- "starts": 8962,
+ "starts": 19110,
"tags": "tetg mmg 3D"
},
{
"dir": "tutorial",
- "ends": 6080,
+ "ends": 16228,
"keywords": "fespace int matrix mesh solve varf P1 P2 CG m n nt P re version x y assert d dx dy int2d on sign sin square A B solver t",
"name": "ex-vf.edp",
- "starts": 6054,
+ "starts": 16202,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 5173,
+ "ends": 15321,
"keywords": "fespace func int mesh problem real solve P1 Cholesky cout endl m max n nt P pi re verbosity x y clock d dx dy int2d max on plot square B boundary solver t tol tolpivot",
"name": "exception.edp",
- "starts": 5139,
+ "starts": 15287,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 8830,
+ "ends": 18978,
"keywords": "fespace func int mesh varf P0 P1 P1dc P1nc P2 P2b P2dc cout endl m n N ndof ndofK nt P re verbosity version x y abs assert d dx int2d on plot square t tgv wait",
"name": "FE.edp",
- "starts": 8762,
+ "starts": 18910,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11258,
+ "ends": 21406,
"keywords": "complex fespace func int mesh problem real solve P0 P1 RT0 cout endl im LU m n nt P re true verbosity x y z assert d dx dy imag int2d on plot square boundary cmm eps err op optimize ps solver t tgv value wait",
"name": "FEComplex.edp",
- "starts": 11208,
+ "starts": 21356,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 5557,
+ "ends": 15705,
"keywords": "border fespace func int matrix mesh real solve string varf P1 P1dc P2 include be CG cout endl label linfty m max min n N nt P re sparsesolver true UMFPACK verbosity version x y z abs assert buildmesh d dx dy int1d int2d LinearCG max min movemesh on plot sign sqrt square A B bb cmm coef eps err init label metric nbiter op order ps ratio sigma solver sym t value wait",
"name": "fluidStruct.edp",
- "starts": 5449,
+ "starts": 15597,
"tags": "2D Stokes"
},
{
"dir": "tutorial",
- "ends": 5402,
+ "ends": 15550,
"keywords": "bool border fespace func int matrix mesh problem real solve string varf P1 P2 include be CG cout endl label linfty m max min n N nt P pi re sparsesolver true UMFPACK verbosity version x y z adaptmesh assert buildmesh d dx dy int1d int2d LinearCG max min movemesh on plot sign sqrt square A B bb boundary coef eps err init label metric nbiter op order ps ratio sigma solver sym t tgv value veps wait",
"name": "fluidStructAdapt.edp",
- "starts": 5231,
+ "starts": 15379,
"tags": "adaptmesh 2D Stokes"
},
{
"dir": "tutorial",
- "ends": 5607,
+ "ends": 15755,
"keywords": "int matrix real string cout endl m n nt re setw x abs assert atoi d dd set A t",
"name": "forall.edp",
- "starts": 5558,
+ "starts": 15706,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11013,
+ "ends": 21161,
"keywords": "border fespace int matrix mesh problem real solve string varf P1 CG cout endl im m max min n N nt P re verbosity x y z adaptmesh buildmesh checkmovemesh d dx dy int1d int2d max min movemesh on plot sqrt A cmm coef eps err order ps ratio solver t wait",
"name": "freeboundary-weak.edp",
- "starts": 10913,
+ "starts": 21061,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 8492,
+ "ends": 18640,
"keywords": "border fespace int mesh problem real solve P1 CG cout endl m min n N nt P re verbosity x y z adaptmesh buildmesh checkmovemesh d dx dy int1d int2d min movemesh on plot sqrt coef eps err fill order ps ratio solver t wait",
"name": "freeboundary.edp",
- "starts": 8417,
+ "starts": 18565,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 6204,
+ "ends": 16352,
"keywords": "func int mesh real cout endl m n N nt re sum verbosity version x y assert change d isInf isNaN NaN on set square A bb t value",
"name": "func.edp",
- "starts": 6142,
+ "starts": 16290,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11114,
+ "ends": 21262,
"keywords": "border fespace int macro mesh real solve P1 be cout endl label lenEdge m n nt nv P re verbosity x y buildmesh change d dx dy int1d int2d movemesh on plot savemesh sqrt square eps eta label order ps refe save t wait",
"name": "glumesh.edp",
- "starts": 11061,
+ "starts": 21209,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 7760,
+ "ends": 17908,
"keywords": "fespace int mesh ofstream real P2 be endl label m n nt P re true x y assert d exec on plot set square tan eps file iso label ps save t value vector wait",
"name": "gnuplot.edp",
- "starts": 7723,
+ "starts": 17871,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 9746,
+ "ends": 19894,
"keywords": "fespace func int macro matrix mesh real solve varf P1 area cout endl im m n N ndof nt P pi re sum verbosity x y abs assert change d dx dy int1d int2d on plot set sqrt square err levelset t wait",
"name": "intlevelset.edp",
- "starts": 9665,
+ "starts": 19813,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6754,
+ "ends": 16902,
"keywords": "border fespace func int macro mesh problem real solve P2 P2dc be CG cout endl im linfty m n N nt nTonEdge P re sparsesolver x y assert d dd dx dy Gamma int1d int2d intalledges jump mean on plot square A A1 B cmm err fill init metric op order solver sym t value wait",
"name": "LapDG2.edp",
- "starts": 6697,
+ "starts": 16845,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11161,
+ "ends": 21309,
"keywords": "fespace func int matrix mesh problem real solve varf P1 cout endl find m n N ndof nt P re sparsesolver x y d dx dy int2d on plot set square system A B bb boundary init op solver t value wait",
"name": "Laplace-lagrange-mult.edp",
- "starts": 11115,
+ "starts": 21263,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 7722,
+ "ends": 17870,
"keywords": "fespace func int matrix mesh problem real solve P1 cout endl im m max n nt nv P re sum verbosity x y adaptmesh d dx dy int2d interpolate max on plot square boundary coef dim err fill nbvx op t value wait",
"name": "Laplace-RHS-Dirac.edp",
- "starts": 7685,
+ "starts": 17833,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 8638,
+ "ends": 18786,
"keywords": "fespace func int mesh problem solve P1 GMRES m n nt P re true x y d dx dy int2d on plot square boundary eps ps solver t tgv value",
"name": "Laplace.edp",
- "starts": 8626,
+ "starts": 18774,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11889,
+ "ends": 22037,
"keywords": "fespace func int mesh problem solve P1 GMRES m n nt P re true x y d dx dy int1d int2d on plot square boundary eps ps solver t tgv value",
"name": "LaplaceP1.edp",
- "starts": 11875,
+ "starts": 22023,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11313,
+ "ends": 21461,
"keywords": "fespace func int mesh problem solve P1 CG cout endl GMRES m max min n nt P re true x y d dx dy int1d int2d max min on plot square boundary solver t tgv value",
"name": "LaplaceP1bis.edp",
- "starts": 11286,
+ "starts": 21434,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 8132,
+ "ends": 18280,
"keywords": "fespace func int mesh problem solve P1 P2 P2h CG m n nt P re true version x y z acos chi cos d dx dy int1d int2d on plot square boundary eps err ps solver t value wait",
"name": "LaplaceP1P2h.edp",
- "starts": 8105,
+ "starts": 18253,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 5214,
+ "ends": 15362,
"keywords": "fespace func int mesh problem solve P0 RT0 im m n N nt P re sparsesolver true x y d dimKrylov dx dy Gamma int1d int2d on plot square coef dim eps fill init ps solver t tgv value wait",
"name": "LaplaceRT.edp",
- "starts": 5174,
+ "starts": 15322,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 10730,
+ "ends": 20878,
"keywords": "fespace func int matrix mesh real P0 P1 be cout endl linfty m n nt P re version x y z assert d dd interpolate on plot square B composante eps inside op prev ps t U2Vc wait",
"name": "mat_interpol.edp",
- "starts": 10669,
+ "starts": 20817,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6007,
+ "ends": 16155,
"keywords": "fespace int mesh meshS ofstream real P1 load endl m n N nt P re x y d exec medit movemesh movemesh23 plot savemesh square bb file save t transfo",
"name": "medit.edp",
- "starts": 5976,
+ "starts": 16124,
"tags": "3D"
},
{
"dir": "tutorial",
- "ends": 8291,
+ "ends": 18439,
"keywords": "border int mesh real area be label m n N nt P pi re verbosity version x y z buildmesh cos d on plot set sin segment yn bb close eps label nbvx op order ps t wait",
"name": "mesh-internal.edp",
- "starts": 8245,
+ "starts": 18393,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 5975,
+ "ends": 16123,
"keywords": "border fespace func int mesh ofstream real string P0 P1 include adj area be cout default endl find good im label m max min n N nbe nt nuTriangle nv P pi re region true whoinElement verbosity version x y z abs adaptmesh adj assert atan buildmesh change checkmovemesh cos d emptymesh max min movemesh on plot readmesh rint savemesh set sin splitmesh square segment tan trunc y0 y1 yn A B bb boundary cmm coef eps err file fill fregion hmax hmin inquire IsMetric label nbvx op order ps region save split splitpbedge t value wait",
"name": "mesh.edp",
- "starts": 5608,
+ "starts": 15756,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 6696,
+ "ends": 16844,
"keywords": "fespace int mesh real varf P0 cout endl hTriangle m max min n nt nTonEdge P re x y z abs assert d intalledges max min on plot square fill hmin t value",
"name": "minlenedge.edp",
- "starts": 6674,
+ "starts": 16822,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 9485,
+ "ends": 19633,
"keywords": "bool border fespace func int macro matrix mesh meshL real solve varf P0 P0Edge P1 load be CG cout diag endl find im label lenEdge m max n N Nt ndof nt P pi qf1pE qf1pElump re region sparsesolver verbosity version x y z adaptmesh assert buildmesh buildmeshL cos d dx dy emptymesh Gamma int1d int2d interpolate LinearCG max on plot set sin sqrt tan trunc A B bb cmm dim eps err eta init inside IsMetric label nbiter nbvx op order precon ps qfe qforder ratio region solver split splitpbedge t tgv thetamax value veps wait",
"name": "mortar-DN-4.edp",
- "starts": 9215,
+ "starts": 19363,
"tags": "adaptmesh 3D"
},
{
"dir": "tutorial",
- "ends": 11285,
+ "ends": 21433,
"keywords": "fespace func int mesh problem real P1 area be cout endl im m min n nt P re x y change checkmovemesh d min movemesh on plot set square yn init mem memory prev save t value wait",
"name": "movemesh.edp",
- "starts": 11259,
+ "starts": 21407,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6502,
+ "ends": 16650,
"keywords": "fespace func int matrix mesh meshS real solve varf P1 P1dc load be cout endl im LU m n N nt P re x y z adaptmesh d dd dx dy int2d log medit movemesh movemesh23 on plot square cmm factorize init IsMetric op solver split splitpbedge t transfo value wait",
"name": "Newton.edp",
- "starts": 6433,
+ "starts": 16581,
"tags": "adaptmesh 3D"
},
{
"dir": "tutorial",
- "ends": 7684,
+ "ends": 17832,
"keywords": "border fespace int macro mesh real solve P2 include load be cout endl label linfty m max min n N nt P pi re x y arg assert buildmesh cos d dd int1d int2d log max min movemesh on plot sin sqrt trunc A B cmm coef eps err label order ps t tol wait",
"name": "nl-elas-neo-Hookean.edp",
- "starts": 7574,
+ "starts": 17722,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 7984,
+ "ends": 18132,
"keywords": "fespace func int macro Mat matrix mesh problem real solve P2 load be cout endl find im linfty m max min n N nt P re sum verbosity version x y z abs assert d dd dx dy int2d max min movemesh on plot sqrt square A cmm eps err metric mode op optimize ps sigma sym t vector wait",
"name": "nolinear-elas.edp",
- "starts": 7835,
+ "starts": 17983,
"tags": "elasticity 2D"
},
{
"dir": "tutorial",
- "ends": 6673,
+ "ends": 16821,
"keywords": "bool fespace func int macro matrix mesh real solve varf P1 P2 be cin cout endl l2 label m max min n N nt P re sparsesolver x y z abs adaptmesh assert d dx dy int1d int2d max min on plot set square trunc yn A abserror B bb cmm coef cutoff err hmin init IsMetric iso label nbiso nbvx op ps solver t value viso wait",
"name": "NS-BackwardStep.edp",
- "starts": 6503,
+ "starts": 16651,
"tags": "adaptmesh 2D Navier-Stokes"
},
{
"dir": "tutorial",
- "ends": 8244,
+ "ends": 18392,
"keywords": "border fespace func int macro matrix mesh real solve string varf P1 P1dc P2 be CG cout endl im label linfty m max min n N nt nv P pi qf2pT re UMFPACK verbosity x y z abs AffineCG assert buildmesh chi clock convect cos d dx dy int1d int2d max min on plot sin y0 A B B1 eps fill iso label nbiso nbiter order precon ps qft solver t value veps wait WindowIndex",
"name": "NSUzawaCahouetChabart.edp",
- "starts": 8133,
+ "starts": 18281,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 9214,
+ "ends": 19362,
"keywords": "fespace int mesh problem real solve P0 P1 RT0 Cholesky cout endl m n N nt P pi re x y atan cos d dx dy int2d on plot sin sqrt square tan init solver t value wait",
"name": "onde.edp",
- "starts": 9181,
+ "starts": 19329,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 5230,
+ "ends": 15378,
"keywords": "border fespace func int mesh problem solve P2 be label m n nt P pi re true x y cos d dx dy int2d on plot sin square boundary eps label order periodic ps t value",
"name": "Periodic.edp",
- "starts": 5215,
+ "starts": 15363,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 8761,
+ "ends": 18909,
"keywords": "border fespace func int mesh problem real P2 be cout endl label m n nt P pi re x y abs buildmesh cos d dx dy int2d on plot sin sqrt eps fill label order periodic ps t wait",
"name": "periodic4.edp",
- "starts": 8728,
+ "starts": 18876,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 8032,
+ "ends": 18180,
"keywords": "border fespace func int macro mesh real solve P1 area be cout endl fixed l1 l2 label LINE m n N nt P re verbosity x y abs buildmesh d dist dx dy int2d on plot sqrt square A B boundary fixedborder label order periodic t value wait",
"name": "periodic4bis.edp",
- "starts": 7985,
+ "starts": 18133,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6053,
+ "ends": 16201,
"keywords": "fespace int mesh real P2 m n nt P re true x y z assert d on plot square yn bb eps fill grey hsv iso mode ps ratio t value vector viso wait",
"name": "plot.edp",
- "starts": 6008,
+ "starts": 16156,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 8727,
+ "ends": 18875,
"keywords": "border fespace func ifstream int mesh ofstream real solve string P1 be binary cout endl flush good label length m n N nt P precision re tellp version x y assert buildmesh ceil cos d dd dx dy floor getline int1d int2d on plot readmesh savemesh seekg sin square tellg bin file label order save t",
"name": "readmesh.edp",
- "starts": 8639,
+ "starts": 18787,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 5138,
+ "ends": 15286,
"keywords": "func matrix mesh real P1 P1b P2 P2h be m n N nv P re region x y z convect d movemesh on plot readmesh A region t",
"name": "ref.edp",
- "starts": 5106,
+ "starts": 15254,
"tags": "2D Stokes"
},
{
"dir": "tutorial",
- "ends": 11736,
+ "ends": 21884,
"keywords": "border fespace int mesh solve P0 P1 cout endl m n nt P re region sum version x y buildmesh d dx dy exit int2d on plot sin B boundary eps fill order ps region t value wait",
"name": "region.edp",
- "starts": 11707,
+ "starts": 21855,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 7448,
+ "ends": 17596,
"keywords": "func int matrix mesh real P1 P1b P2 P2h include be cout endl linfty m max min n N nt nv P re region true verbosity x y z assert convect d dumptable max mean min movemesh on plot readmesh Wait A err file op prev ps refe region save t value",
"name": "regtests.edp",
- "starts": 6916,
+ "starts": 17064,
"tags": "2D Stokes"
},
{
"dir": "tutorial",
- "ends": 11808,
+ "ends": 21956,
"keywords": "fespace func ifstream int mesh ofstream real P2 cout endl m max min n nt P precision re verbosity x y assert change d max min on plot readmesh savemesh square save t value wait",
"name": "saverestore.edp",
- "starts": 11778,
+ "starts": 21926,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 8625,
+ "ends": 18773,
"keywords": "border fespace func int matrix mesh problem real solve varf P1 be CG Cholesky cout endl im label m n N nt P pi re verbosity x y z buildmesh clock cos d dx dy Gamma int1d int2d LinearCG on plot sin A B eps init inside label nbiter op order ps solver t vector",
"name": "schwarz-gc.edp",
- "starts": 8558,
+ "starts": 18706,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11777,
+ "ends": 21925,
"keywords": "border fespace int mesh problem solve P1 be Cholesky im label m n nt P pi true x y z buildmesh cos d dd dx dy int1d int2d on plot sin B dim eps fill init inside label order ps solver t wait",
"name": "schwarz-no-overlap.edp",
- "starts": 11737,
+ "starts": 21885,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 9781,
+ "ends": 19929,
"keywords": "border fespace int mesh problem real solve P1 be Cholesky label m n nt P pi re true x y z atan buildmesh cos d dx dy int2d on plot sin tan B eps init inside label order ps solver t wait",
"name": "schwarz-overlap.edp",
- "starts": 9747,
+ "starts": 19895,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 9129,
+ "ends": 19277,
"keywords": "border fespace int macro matrix mesh real varf P1 be label m n N ndof nt P re region x y z buildmesh d dx dy erf int1d int2d interpolate on plot trunc A B cmm label order region t",
"name": "schwarz2.edp",
- "starts": 9062,
+ "starts": 19210,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11530,
+ "ends": 21678,
"keywords": "border fespace func int macro matrix mesh problem real solve varf P0 P1 P1dc be CG Cholesky cout endl GMRES l1 l2 label m max min n N ndof nt P pi re region sparsesolver verbosity x y z buildmesh clock cos d dx dy emptymesh int1d int2d interpolate LinearCG max min on plot sin square trunc A A1 B boundary cmm eps eta fill init label nbiter order ps region solver t tgv value wait",
"name": "shur-comp.edp",
- "starts": 11367,
+ "starts": 21515,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6397,
+ "ends": 16545,
"keywords": "complex fespace func int macro matrix mesh real solve string varf P1 cout diag endl GMRES im l1 l2 linfty LU m n N nt P pi re sparsesolver UMFPACK verbosity version x y abs assert conj d dx dy exp imag int1d int2d interpolate on plot set square A B bb coef init op solver sym t tol tolpivot tolpivotsym wait",
"name": "sparse-cmatrix.edp",
- "starts": 6205,
+ "starts": 16353,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 10578,
+ "ends": 20726,
"keywords": "fespace func ifstream int matrix mesh ofstream real solve varf P1 P2 be cout diag endl find GMRES im l2 LU m n N nt P re sparsesolver sum UMFPACK verbosity version x y z abs assert change d dd dx dy int1d int2d interpolate on plot set sort square trunc A A1 B B1 coef mem order qforder solver t value vector wait",
"name": "sparse-matrix.edp",
- "starts": 10263,
+ "starts": 20411,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11929,
+ "ends": 22077,
"keywords": "func int mesh meshS real load im m n nt pi re verbosity x y z adaptmesh cos d exec medit movemesh movemesh23 on plot savemesh sin square inquire IsMetric periodic save t transfo wait",
"name": "sphere.edp",
- "starts": 11890,
+ "starts": 22038,
"tags": "adaptmesh 3D"
},
{
"dir": "tutorial",
- "ends": 9180,
+ "ends": 19328,
"keywords": "fespace int macro mesh mesh3 solve P1 P2 ENDIFMACRO IFMACRO load be im label m n N nt P re x y z change cube d dx dy dz int1d int2d int3d on plot square A B dim label t wait",
"name": "Stokes-macro2d-3d.edp",
- "starts": 9130,
+ "starts": 19278,
"tags": "3D Stokes"
},
{
"dir": "tutorial",
- "ends": 11207,
+ "ends": 21355,
"keywords": "fespace func int matrix mesh real solve varf P1 P2 CG m n nt P re true verbosity version x y assert clock d dx dy int2d LinearCG on plot sign square A B coef eps nbiter ps solver t value wait",
"name": "StokesUzawa.edp",
- "starts": 11162,
+ "starts": 21310,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 6828,
+ "ends": 16976,
"keywords": "func ifstream int macro real string be cout endl ffind FILE find im length LINE m n N nt re rfind version x y z d dd getline on Stringification bb op refe t",
"name": "string.edp",
- "starts": 6755,
+ "starts": 16903,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 10912,
+ "ends": 21060,
"keywords": "fespace ifstream int mesh real P1 cout endl m n nt P re region verbosity version x y d on plot triangulate file ps region t wait",
"name": "tablefunction.edp",
- "starts": 10892,
+ "starts": 21040,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 8526,
+ "ends": 18674,
"keywords": "int matrix real cout endl m min n nt P re sum version x y z d min on A init t",
"name": "taboftab.edp",
- "starts": 8493,
+ "starts": 18641,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11848,
+ "ends": 21996,
"keywords": "fespace int mesh real P1 im m n nt P pi re x y z cos d dd plot sin square cmm dim t",
"name": "testplot.edp",
- "starts": 11809,
+ "starts": 21957,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 11874,
+ "ends": 22022,
"keywords": "fespace int matrix mesh meshL real solve varf P1 load be cout diag GMRES label m n ndof nt P re verbosity x y z d int1d on set segment A coef label nev op solver sym t tgv value",
"name": "tgv-test.edp",
- "starts": 11849,
+ "starts": 21997,
"tags": "3D"
},
{
"dir": "tutorial",
- "ends": 10891,
+ "ends": 21039,
"keywords": "fespace func int matrix mesh ofstream problem real solve varf P1 CG cout endl im m n nt P re true x y d dd dx dy Gamma int1d int2d on plot square tan A boundary eps file fill ps solver t tgv wait",
"name": "thermic-fast.edp",
- "starts": 10847,
+ "starts": 20995,
"tags": "2D"
},
{
"dir": "tutorial",
- "ends": 10764,
+ "ends": 20912,
"keywords": "mesh im m max n re x adaptmesh d max on plot square eps IsMetric maxsubdiv nbvx ps t wait",
"name": "uniformmesh.edp",
- "starts": 10756,
+ "starts": 20904,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 7573,
+ "ends": 17721,
"keywords": "bool fespace func int matrix mesh problem real solve varf P1 be CG cout diag endl im m max min n N ndof nt P re x y z abs adaptmesh assert change d dd dx dy Gamma int2d max min on plot savemesh set sqrt square tan A boundary cmm eps err precon ps save solver strategy t tgv tol value wait",
"name": "VI-adap.edp",
- "starts": 7449,
+ "starts": 17597,
"tags": "adaptmesh 2D"
},
{
"dir": "tutorial",
- "ends": 10846,
+ "ends": 20994,
"keywords": "fespace func int Mat matrix mesh problem real solve varf P1 be CG cout diag endl im m n N ndof nt P re version x y change d dd dx dy Gamma int2d on plot savemesh set sqrt square tan A boundary cmm eps err op precon prev ps save solver stop strategy t tgv value wait",
"name": "VI.edp",
- "starts": 10765,
+ "starts": 20913,
"tags": "2D"
}
]
diff --git a/tools/all_examples.edp b/tools/all_examples.edp
index 775e6db5..e29ae207 100644
--- a/tools/all_examples.edp
+++ b/tools/all_examples.edp
@@ -2468,6 +2468,10154 @@ cout << " int2d(Th)(p-0.5) " << int2d(Th)(p-0.5) << " == 0 " << endl;
cout << " int2d(Th)(x+y) " << int2d(Th)(x+y) << " == " << (10*5)*(10+5)/2 << endl;
cout << " -------------\n\n " << endl;
+macro ffddmbuildZTAZ(prT,pr,Varf)
+
+if (pr#prfe#prmesh#isincomm)
+{
+pr#prfe#prmesh#tic(pr#tloc)
+
+if (!bpara) {
+ assert (Stringification(prT) == Stringification(pr)); /* TODO */
+ pr#ncoarsespace=pr#si;
+ if (mpiRank(pr#prfe#prmesh#mpicomm) == 0)
+ cout << "["+Stringification(pr)+"] CS size = " << pr#ncoarsespace << endl;
+ pr#sizelg = sizel; /* sizelg stores the number of ev for every subdomain */
+}
+else {
+ pr#ncoarsespace = 0; /* coarse space dimension */
+ mpiAllReduce(pr#si,pr#ncoarsespace,pr#prfe#prmesh#mpicomm,mpiSUM);
+}
+
+if (pr#ncoarsespace > 0)
+if (!bpara) {
+ pr#prfe#K[int,int] Zm(pr#prfe#Ndofglobal,pr#ncoarsespace);
+ int cpt = 0;
+ /* the 2 fors loop over the columns of Z subdomainwise */
+ for (int jj=0; jj Zms = Zm;
+ matrix tmp = pr#Aglobal*Zms;
+ pr#E = Zms'*tmp;
+ set(pr#E,solver=sparsesolver,sym=vsym,commworld=pr#prfe#prmesh#commself,factorize=3);
+}
+else {
+ /* Assemble E on proc 0
+ see PhD thesis of P.Jolivet pag 46 and following */
+
+ pr#sizelg = 0;
+ mpiAllReduce(sizel,pr#sizelg,pr#prfe#prmesh#mpicomm,mpiSUM); /* sizelg stores the number of ev for every subdomain */
+
+ pr#offseti = 0; /* offseti[i]: index of the first ev of the subdomain i in the global numbering of the columns of Z */
+ for (int ii=0; ii < pr#prfe#prmesh#npart; ii++)
+ pr#offseti[ii] = (ii == 0 ? 0 : pr#offseti[ii-1] + pr#sizelg[ii-1]);
+
+ if (!pr#prfe#prmesh#exclude) {
+ pr#sizelgworld = pr#sizelg;
+ pr#offsetiworld = pr#offseti;
+ }
+ else {
+ for (int i = 0; i < mpiSize(pr#prfe#prmesh#mpicomm); i++) {
+ if (i < pr#prfe#prmesh#pCS) {
+ pr#sizelgworld[i] = 0;
+ pr#offsetiworld[i] = 0;
+ }
+ else {
+ pr#sizelgworld[i] = pr#sizelg[i-pr#prfe#prmesh#pCS];
+ pr#offsetiworld[i] = pr#offseti[i-pr#prfe#prmesh#pCS];
+ }
+ }
+ }
+
+ /* PRT */
+ prT#ncoarsespace = 0; /* coarse space dimension */
+ mpiAllReduce(prT#si,prT#ncoarsespace,prT#prfe#prmesh#mpicomm,mpiSUM);
+ if (mpiRank(prT#prfe#prmesh#mpicomm) == 0)
+ cout << "["+Stringification(pr)+"] CS size = " << pr#ncoarsespace << " x " << prT#ncoarsespace << endl;
+
+ /* Assemble E on proc 0
+ see PhD thesis of P.Jolivet pag 46 and following */
+
+ if (Stringification(prT) == Stringification(pr))
+ sizelT = sizel;
+ prT#sizelg = 0;
+ mpiAllReduce(sizelT,prT#sizelg,prT#prfe#prmesh#mpicomm,mpiSUM); /* sizelg stores the number of ev for every subdomain */
+
+ prT#offseti = 0; /* offseti[i]: index of the first ev of the subdomain i in the global numbering of the columns of Z */
+ for (int ii=0; ii < prT#prfe#prmesh#npart; ii++)
+ prT#offseti[ii] = (ii == 0 ? 0 : prT#offseti[ii-1] + prT#sizelg[ii-1]);
+
+ if (!prT#prfe#prmesh#exclude) {
+ prT#sizelgworld = prT#sizelg;
+ prT#offsetiworld = prT#offseti;
+ }
+ else {
+ for (int i = 0; i < mpiSize(prT#prfe#prmesh#mpicomm); i++) {
+ if (i < prT#prfe#prmesh#pCS) {
+ prT#sizelgworld[i] = 0;
+ prT#offsetiworld[i] = 0;
+ }
+ else {
+ prT#sizelgworld[i] = prT#sizelg[i-prT#prfe#prmesh#pCS];
+ prT#offsetiworld[i] = prT#offseti[i-prT#prfe#prmesh#pCS];
+ }
+ }
+ }
+
+ pr#prfe#K[int,int] AiZmi(1,1); /* A_i Z_i */
+
+ IFMACRO(pr#localmacrominoverlap,1)
+ ffddmsetupOperator(localprAug, pr#prfe#Aug, Varf)
+ ;
+ ENDIFMACRO
+
+ if (!pr#prfe#prmesh#excluded)
+ AiZmi.resize(pr#prfegeneo#Dk[mpiRank(pr#prfegeneo#prmesh#commddm)].n,pr#si);
+
+ for (int ii=0; ii < pr#si; ii++) {
+ IFMACRO(pr#localmacrominoverlap,1)
+ pr#prfe#K[int] tmp2 = pr#prfegeneo#interp'*pr#Z[ii];
+ pr#prfe#K[int] tmp = localprAug#aRd[mpiRank(pr#prfegeneo#prmesh#commddm)]*tmp2;
+ ENDIFMACRO
+ IFMACRO(pr#localmacrominoverlap,0)
+
+ IFMACRO(pr#geneofullpattern)
+ pr#prfe#K[int] tmp = pr#geneofullpatternOP(pr#Z[ii],1);
+ ENDIFMACRO
+ IFMACRO(!pr#geneofullpattern)
+ pr#prfe#K[int] tmp = pr#aRd[mpiRank(pr#prfe#prmesh#commddm)]*pr#Z[ii];
+ ENDIFMACRO
+
+ ENDIFMACRO
+ AiZmi(:,ii) = tmp;
+ }
+
+ /* step 3 of P.Jolivet thesis (page 47) */
+ pr#prfe#K[int,int][int] mrcv(pr#prfegeneo#prmesh#numberIntersection);
+ pr#prfe#K[int,int][int] msnd(pr#prfegeneo#prmesh#numberIntersection);
+
+ pr#prfe#K[int,int] Eii(prT#si,pr#si);
+ pr#prfe#K[int,int][int] Eij(pr#prfegeneo#prmesh#numberIntersection);
+
+ if (!pr#prfe#prmesh#excluded) {
+ mpiRequest[int] rq(pr#prfegeneo#prmesh#numberIntersection*2);
+ for(int j=0;j mpiRank(pr#prfe#prmesh#mpicomm);
+
+ func int rkrdd(int i) {return i*pr#prfe#prmesh#pCS+mpiRank(pr#prfe#prmesh#mpicomm);};
+ func int rkr(int i) {return pr#prfe#prmesh#exclude*pr#prfe#prmesh#pCS+rkrdd(i);};
+
+ func int rks(int i) {return i%pr#prfe#prmesh#pCS;};
+
+ int[int] tabnumberIntersection(locnpart);
+ if (mpiRank(pr#prfe#prmesh#mpicomm) < pr#prfe#prmesh#pCS) {
+ mpiRequest[int] rqt(locnpart-(!pr#prfe#prmesh#excluded));
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ Irecv(processor(rkr(i),pr#prfe#prmesh#mpicomm,rqt[i-!pr#prfe#prmesh#excluded]),tabnumberIntersection[i]);
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ int k = mpiWaitAny(rqt);
+ }
+ else if (!pr#prfe#prmesh#excluded) {
+ mpiRequest rqt;
+ Isend(processor(rks(mpiRank(pr#prfe#prmesh#mpicomm)),pr#prfe#prmesh#mpicomm,rqt),fullnumberIntersection);
+ mpiWait(rqt);
+ }
+
+ int[int][int] tabarrayIntersection(locnpart); /* i: global numbering of neighbouring subdomains of proc i */
+
+ if (mpiRank(pr#prfe#prmesh#mpicomm) < pr#prfe#prmesh#pCS) {
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ tabarrayIntersection[i].resize(tabnumberIntersection[i]);
+ mpiRequest[int] rqt(locnpart-(!pr#prfe#prmesh#excluded));
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ Irecv(processor(rkr(i),pr#prfe#prmesh#mpicomm,rqt[i-!pr#prfe#prmesh#excluded]),tabarrayIntersection[i]);
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ int k = mpiWaitAny(rqt);
+ }
+ else if (!pr#prfe#prmesh#excluded) {
+ mpiRequest rqt;
+ Isend(processor(rks(mpiRank(pr#prfe#prmesh#mpicomm)),pr#prfe#prmesh#mpicomm,rqt),fullarrayIntersection);
+ mpiWait(rqt);
+ }
+
+ int nbij = 0;
+ if (mpiRank(pr#prfe#prmesh#mpicomm) < pr#prfe#prmesh#pCS)
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ nbij += tabnumberIntersection[i];
+
+ pr#prfe#K[int,int][int] tabEij(nbij); /* big vector of full matrices for the blocks Eij */
+ pr#prfe#K[int,int][int] tabEii(locnpart); /* big vector of full matrices for the blocks Eii */
+
+ /* commCS procs resize tabEii and receive Eii blocks */
+ if (mpiRank(pr#prfe#prmesh#mpicomm) < pr#prfe#prmesh#pCS) {
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ tabEii[i].resize(prT#sizelg[rkrdd(i)],pr#sizelg[rkrdd(i)]);
+ mpiRequest[int] rqt(locnpart-(!pr#prfe#prmesh#excluded));
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ Irecv(processor(rkr(i),pr#prfe#prmesh#mpicomm,rqt[i-!pr#prfe#prmesh#excluded]),tabEii[i]);
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ int k = mpiWaitAny(rqt);
+ }
+ else if (!pr#prfe#prmesh#excluded) {
+ mpiRequest rqt;
+ Isend(processor(rks(mpiRank(pr#prfe#prmesh#mpicomm)),pr#prfe#prmesh#mpicomm,rqt),Eii);
+ mpiWait(rqt);
+ }
+
+ /* commCS procs resize tabEij and receive Eij blocks */
+ if (mpiRank(pr#prfe#prmesh#mpicomm) < pr#prfe#prmesh#pCS) {
+ int cpt = 0;
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ for (int j=0; j < tabnumberIntersection[i]; j++) {
+ tabEij[cpt].resize(prT#sizelg[rkrdd(i)],pr#sizelg[tabarrayIntersection[i][j]]);
+ cpt++;
+ }
+ mpiRequest[int] rqt(nbij);
+ cpt = 0;
+ for (int i = !pr#prfe#prmesh#excluded; i < locnpart; i++)
+ for (int j=0; j < tabnumberIntersection[i]; j++) {
+ Irecv(processor(rkr(i),pr#prfe#prmesh#mpicomm,rqt[cpt]),tabEij[cpt]);
+ cpt++;
+ }
+ for (int i=0; i < nbij; i++)
+ int k = mpiWaitAny(rqt);
+ }
+ else if (!pr#prfe#prmesh#excluded) {
+ mpiRequest[int] rqt(fullnumberIntersection);
+ for (int i=0; i < pr#prfegeneo#prmesh#numberIntersection; i++)
+ Isend(processor(rks(mpiRank(pr#prfe#prmesh#mpicomm)),pr#prfe#prmesh#mpicomm,rqt[i]),Eij[i]);
+ IFMACRO(pr#geneofullpattern)
+ for (int i=0; i < fullnumberIntersection-pr#prfegeneo#prmesh#numberIntersection; i++)
+ Isend(processor(rks(mpiRank(pr#prfe#prmesh#mpicomm)),pr#prfe#prmesh#mpicomm,rqt[pr#prfegeneo#prmesh#numberIntersection+i]),Ekj[tabarrayIntersectionflat[i]]);
+ ENDIFMACRO
+ for (int i=0; i < fullnumberIntersection; i++)
+ int k = mpiWaitAny(rqt);
+ }
+
+ if (mpiRank(pr#prfe#prmesh#mpicomm) < pr#prfe#prmesh#pCS) { /* fill E0 with Eii and Eij */
+ int[int] offsetl(locnpart);
+ for (int i = 0; i < locnpart; i++)
+ offsetl[i] = (i == 0 ? 0 : offsetl[i-1] + pr#sizelg[rkrdd(i-1)]);
+
+ int[int] offsetc(locnpart);
+ for (int i = 0; i < locnpart; i++)
+ offsetl[i] = (i == 0 ? 0 : offsetl[i-1] + pr#sizelg[rkrdd(i-1)]);
+
+ pr#E0.resize(offsetl[locnpart-1] + pr#sizelg[rkrdd(locnpart-1)], pr#ncoarsespace);
+ pr#E0 = 0;
+
+ if (!pr#prfe#prmesh#excluded) {
+ int k = mpiRank(pr#prfe#prmesh#mpicomm);
+ /* block Epp */
+ for (int jj=0; jj< pr#sizelg[mpiRank(pr#prfe#prmesh#mpicomm)]; jj++)
+ pr#E0(0:prT#sizelg[k]-1,pr#offseti[k]+jj) = Eii(:,jj);
+
+ /* blocks Epj */
+ for(int j=0;j mRl = [Rlc,Rl,Rlk];
+ mRl.resize(Rl.n, pr#ncoarsespace);
+ pr#E.resize(Rl.n, pr#ncoarsespace);
+ pr#E = mRl'*pr#E;
+ ENDIFMACRO
+ }
+
+ IFMACRO(!pr#CSwithpetsc)
+ if (!pr#prfe#prmesh#binexactCS)
+ if (Stringification(prT) == Stringification(pr))
+ if (mpiRank(pr#prfe#prmesh#mpicomm) < pr#prfe#prmesh#pCS)
+ set(pr#E,solver="MUMPS",sym=vsym,commworld=pr#prfe#prmesh#commCS,master=-1,factorize=3);
+ ENDIFMACRO
+ }
+ else {
+
+ NewMacro localmacroinexact pr#prfe#prmesh#minexactgeneoCS EndMacro
+ IFMACRO (localmacroinexact,1)
+
+ ffddmsetupsuper(pr)
+
+ int[int][int] inisuperwithoverlap(pr#prfe#prmesh#listofsupers.n);
+ int[int]inisuperwithoverlapsize(pr#prfe#prmesh#listofsupers.n);
+ inisuperwithoverlapsize = 0;
+ for (int i=0; i weightedTmp;
+
+ weightedTmp=pr#aR[i]*pr#prfe#Dih[i];
+
+ matrix weighted;
+
+ weighted=pr#prfe#Dih[i]*weightedTmp;
+
+ /*
+ pr#prfe#K[int] dofsinoverlap(pr#prfe#Dk[i].n);
+ dofsinoverlap = 1;
+ pr#prfe#update(dofsinoverlap,false);
+ for [j,bj: dofsinoverlap] bj = abs(bj) > 1;
+
+ matrix Movl = dofsinoverlap;
+
+ weighted = weighted*Movl;
+ weighted = Movl*weighted;
+ */
+
+ IFMACRO(!pr#algebraic)
+ {
+ if (pr#prfe#prmesh#overlap > 0) {
+ Varf(vN,pr#prfe#prmesh#Thi,pr#prfe#Vhi)
+ pr#matN = vN(pr#prfe#Vhi,pr#prfe#Vhi,sym=vsym,tgv=vtgv,solver=GMRES);
+ }
+ }
+ ENDIFMACRO
+
+ if (ffddminertia) {
+ nev = ffddmnu;
+ matrix NA = pr#matN-ffddmtau*weighted;
+ int[int] info(40);
+ set(NA,solver = sparsesolver,sym=1,commworld=pr#prfe#prmesh#commself,factorize=3,info=info);
+ int ninertia = info[11];
+ if (pr#verbosity >= 1 && ninertia > nev) cout << "["+Stringification(pr)+"] " << nev << " Warning: inertia = " << ninertia << ", maximum number of eigenvectors too low (" << nev << ", from -ffddm_geneo_nu) in subdomain " << i << endl;
+ nev = min(nev,ninertia);
+ if (pr#verbosity >= 10) cout << "["+Stringification(pr)+"] " << nev << " eigenvectors will be computed in subdomain " << i << endl;
+ }
+
+ set(pr#matN,solver = sparsesolver,sym=1,commworld=pr#prfe#prmesh#commself);
+
+ pr#prfe#K[int,int] eV(pr#prfe#Dk[i].n,nev);
+ pr#prfe#K[int] ev(nev);
+
+ int kk = EigenValue(pr#matN,weighted,sym=1,value=ev,rawvector=eV,ncv=max(20,3*nev));
+
+ IFMACRO(!pr#superalgebraic)
+ pr#matN.clear;
+ ENDIFMACRO
+
+ int nok = 0;
+
+ for(int j=0;j mmass = vmass(pr#prfe#Vhi,pr#prfe#Vhi);
+
+AttachCoarseOperator(pr#prfe#prmesh#commddm, pr#hpddmOP, A = pr#matN, B = mmass, pattern = pr#aRd[mpiRank(pr#prfe#prmesh#commddm)]);
+
+pr#prfe#prmesh#toc(pr#tloc,"building E",pr#tbuildE)
+
+ENDIFMACRO
+
+IFMACRO(!pr#withhpddm)
+
+if (!bpara) /* If sequential */
+ pr#Z.resize(nev*pr#prfe#prmesh#npart);
+else if (!pr#prfe#prmesh#excluded)
+ pr#Z.resize(nev);
+
+pr#si=0;
+pr#prfe#prmesh#tic(pr#tloc) /* For timings */
+
+int[int] sizel(pr#prfe#prmesh#npart);
+int[int] sizelT(pr#prfe#prmesh#npart);
+
+for(int i=0;i 0) {
+ Ji[b10[j]-1] = j;
+ Ii[b10[j]-1] = b10[j]-1;
+ Ki[b10[j]-1] = 1;
+ }
+ else {
+ Jiint[-b10[j]-1] = j;
+ Iiint[-b10[j]-1] = -b10[j]-1;
+ Kiint[-b10[j]-1] = 1;
+ }
+ }
+
+ /* Restriction operators */
+ matrix R10 = [Ii,Ji,Ki];
+ matrix Rint = [Iiint,Jiint,Kiint];
+
+ R10.resize(ndof10,pr#prfe#Vhi.ndof);
+ Rint.resize(ndofint,pr#prfe#Vhi.ndof);
+
+ IFMACRO(!pr#algebraic)
+ {
+ if (pr#prfe#prmesh#overlap > 0) {
+ Varf(vN,pr#prfe#prmesh#Thi,pr#prfe#Vhi)
+ pr#matN = vN(pr#prfe#Vhi,pr#prfe#Vhi,sym=vsym,tgv=vtgv,solver=GMRES);
+ }
+ }
+ ENDIFMACRO
+
+ /* Local stiffness matrices */
+ matrix A10t = R10*pr#matN;
+ matrix A10 = A10t*R10';
+
+ matrix Aintt = Rint*pr#matN;
+ matrix Aint = Aintt*Rint';
+ set(Aint,solver=sparsesolver,commworld=pr#prfe#prmesh#commself);
+
+ /* Transfer operators as part of the Schur complement */
+ matrix Aint10t = Rint*pr#matN;
+ matrix Aint10 = Aint10t*R10';
+
+ matrix A10intt = R10*pr#matN;
+ matrix A10int = A10intt*Rint';
+
+ /* Interface mass matrix */
+ varf vmass(pr#prfe#mdef(u),pr#prfe#mdef(v)) = pr#prfe#prmesh#intbN(pr#prfe#prmesh#Thi,ffddminterfacelabel)(pr#prfe#mdef(u)'*pr#prfe#mdef(v));
+ matrix mmass = vmass(pr#prfe#Vhi,pr#prfe#Vhi);
+ matrix mmass10t = R10*mmass;
+ matrix mmass10 = mmass10t*R10';
+ set(mmass10,solver=sparsesolver,commworld=pr#prfe#prmesh#commself);
+
+ /* Set up for interface eigenvectors and eigenvalues */
+ pr#prfe#K[int,int] eVC(ndof10,nev);
+ pr#prfe#K[int] ev(nev);
+
+ pr#prfe#K[int] tmp(pr#prfe#Vhi.ndof); /* For extension of eigenfunction */
+
+ pr#prfe#K[int] vinta(ndofint), vintb(ndofint);
+ pr#prfe#K[int] v10a(ndof10), v10b(ndof10);
+
+ int cptA = 0, cptB = 0;
+
+ /* Left-hand side of the generalised eigenproblem */
+ func pr#prfe#K[int] FA(pr#prfe#K[int] & u) {
+ vinta = Aint10*u;
+ vintb = Aint^-1*vinta;
+ v10a = A10int*vintb;
+ v10b = A10*u;
+ v10b -= v10a;
+ cptA++;
+ return v10b;
+ }
+
+ /* Right-hand side of the generalised eigenproblem */
+ func pr#prfe#K[int] FB(pr#prfe#K[int] & u) {
+ cptB++;
+ v10a = mmass10*u;
+ return v10a;
+ }
+
+ /* Solve for right-hand side of generalised eigenproblem */
+ func pr#prfe#K[int] FB1(pr#prfe#K[int] & u) {
+ cptB++;
+ v10a = mmass10^-1*u;
+ return v10a;
+ }
+
+ int ncv = max(2*nev+1,100);
+
+ int kk = complexEigenValue(ndof10,A=FA,B=FB,B1=FB1,value=ev,rawvector=eVC,which="SR",mode=2,ncv=ncv,tol=0.001);
+
+ int nok = 0;
+
+ for(int j=0;j2) cout <<" Barycenter: " << B << endl;
+
+R3 NL(int1d(TL,qforder=1)((Tl^(P-B)).x),int1d(TL)((Tl^(P-B)).y),int1d(TL)((Tl^(P-B)).z));
+
+NL /= NL.l2;
+if(verbosity) cout << " NL = "<< NL << endl;
+R3 U0 = (B-TL(0).P);
+R3 V = U0^NL; V /=V.l2;
+R3 U = V^NL ;
+if(verbosity>5) cout << " det = " << det(U,V,NL) << " == " << 1 << endl;
+assert(abs(det(U,V,NL)-1)< 1e-6);
+if(verbosity>2) cout << " New Frame : "<< U << " , " << V << " , " << NL << endl;
+real bu = U'*B, bv=V'*B, bn = NL'*B;
+meshL TLm = movemeshL(TL,transfo=[U'*P-bu,V'*P-bv,NL'*P-bn]);
+meshL TL0 = movemeshL(TL,transfo=[U'*P-bu,V'*P-bv,0]);
+fespace VLm(TLm,P1); VLm zLm = z;
+fespace VL0(TL0,P1); VL0 zL0; zL0[]= zLm[];
+mesh Th = buildmesh(TL0,fixeborder=1);
+real[int] bb(4);
+boundingbox(Th,bb);
+if(verbosity>5) cout << " bb = "<< bb << endl;
+real lTh = max(bb[1]-bb[0],bb[3]-bb[2]); // lg characteristic of Th
+if(withp) plot(Th,TLm,wait=1);
+fespace V2(Th,P1);
+V2 g=zL0;
+real ginf =g[].linfty;
+if(verbosity>5) cout << " ginf "<< ginf << " " << lTh << endl;
+real errf = 0.1*g[].linfty/lTh;// err fixe point
+real errN = 1e-6*g[].linfty/lTh;// err newton..
+V2 u=0,v,up;
+macro grad(u) [dx(u),dy(u)]//
+int[int] labs=labels(Th);
+int nbiter = 100;
+if( minsurf == 0 || ginf < 1e-3*lTh) nbiter = 1;
+for(int i=0; i< nbiter; ++i)
+{
+ up[]=u[];
+ solve Pb(u,v) = int2d(Th)( (dx(u)*dx(v) + dy(u)*dy(v) )
+ / sqrt( 1+ (dx(up)*dx(up) + dy(up)*dy(up) )) )
+ +on(labs,u=g);
+ real area = int2d(Th)( sqrt(1+ (dx(u)*dx(u) + dy(u)*dy(u) )));
+ up[] -= u[];
+ real err= up[].linfty ;
+ if(verbosity) cout << i << " fixed point, surface = "<< area<< " err infty = " << err << "/" << errf << endl;
+ if(withp) plot(u, dim=3,fill=3, cmm=i+" area="+area+" err= "+err);
+ if(err10)
+ {
+ int i2 = (i-1)%3;
+ int i1 = (i-2)%3;
+ if(Strouhal3(1,i1) < Strouhal3(1,i2) & Strouhal3(1,i2) > Strouhal3(1,i3) )
+ {
+ real dt = t- Strouhal3(0,i2);
+ real t2 = Strouhal3(0,i2);
+ int ii = nbmaxS%Strouhal.m;
+ real tm = t2+dt*t1MaxO2(Strouhal3(1,i1),Strouhal3(1,i2),Strouhal3(1,i3));
+ real fm = MaxO2(Strouhal3(1,i1),Strouhal3(1,i2),Strouhal3(1,i3));
+ Strouhal(0,ii) =tm;
+ Strouhal(1,ii) =fm;
+ ++nbmaxS;
+ // if(mpirank==0) cout << ii << " " << " " << Strouhal3(0,i1) << " < " << Strouhal3(0,i2) << " > " << Strouhal3(0,i3) << endl;
+ }
+ }
+ if(nbmaxS > 3)
+ {
+ int ii = (nbmaxS-1)%Strouhal.m;
+ int jj = (nbmaxS-4)%Strouhal.m;
+ real per = (Strouhal(0,ii)-Strouhal(0,jj))/3.;
+ // if(mpirank==0) cout << "zzzz " << ii << " " << jj << " " << per << endl;
+ s= 1/per;
+ }
+ return s;
+}
+
+// MPIGMRSmacro.idp file.. version 0.1
+// include in MPIGMRES.edp file ..
+// Frederic Hecht 2010
+// LGPL licence
+// Author Frederic.Hecht@upmc.fr
+// -------------------------------
+
+// macro to def // send-recv message
+// -----------------------------------
+
+/******************************************************************/
+func real maxM(matrix & A)
+ {
+ int[int] I(1),J(1);
+ real[int] C(1);
+ [I,J,C] =A;
+ return C.max ;
+ }
+
+/******************************************************************/
+macro InitU(n,Vh,Th,aTh,U)
+Vh[int] U(n);
+for(int j=0;j> Ri[j];
+}
+// EOM
+
+/******************************************************************/
+macro CheckUV(comm,jpart,Si,Ri)
+{
+ int n= jpart.n;
+ int[int] rn(n),sn(n),in(n);
+ for (int j=0;j> rn[j];
+ for (int j=0;j> in[j];
+
+ int err=0;
+ for (int j=0;j " << in[j] << " " << err << endl;
+
+ }
+ assert(err==0);
+}//EOM
+
+/******************************************************************/
+macro SendRecvUV(comm,jpart,Si,Ri)
+{
+ int n= jpart.n;
+ mpiRequest[int] rq(n);
+ for (int j=0;j> Ri[j][];*/
+
+ for (int j=0;j1 && ipart==0)
+ metisdual(part[],Thg,npart);
+
+ broadcast(processor(0,comm),part[]);
+
+} /* build ... */
+
+
+if(vdebug>10&& mpirank==0 && !NoGraphicWindow)
+ plot(part,fill=1,cmm="dual",wait=1);
+
+/* overlapping partition */
+Vhi unssd;
+int nnn = sizeoverlaps*2;/* to be sure exact in thii */
+
+{
+ int[int] n2o(1);
+ Phg suppi= abs(part-ipart)<0.1;
+ /* boolean function 1 in the subdomain 0 elswhere */
+ Thin=trunc(Thg,suppi>0,label=10,renum=false); /* non-overlapping mesh, interfaces have label 10 */
+ AddLayers(Thg,suppi[],nnn,unssd[]); /* see above ! suppi and unssd are modified */
+ unssd[] *= nnn; /* to put value nnn a 0 */
+ /* build a local mesh of thii such that all compuation of the unit partition are */
+ /* exact in thii */
+ Thii=trunc(Thg,unssd> 0.001 ,label=10,new2old=n2o,renum=false); /* overlapping mesh, interfaces have label 10 */
+ unssd= unssd;/* put on Thii*/
+ real[int] p=part[];
+ part=0.; part[]=p(n2o);
+
+ real nnn0 = nnn - sizeoverlaps + 0.001 ;
+ Thi=trunc(Thii,unssd>nnn0 ,label=10,renum=false); /* overlapping mesh, interfaces have label 10 */
+
+}
+ settt
+
+
+ int npij=npart;
+ Vhi[int] pij(npij);/* local partition of unit + pii */
+
+
+
+ { /*
+ construction of the partition of the unit,
+ let phi_i P1 FE function 1 on Thin and zero ouside of Thi and positive
+ the partition is build with
+ $$ p_i = phi_i/ \sum phi_i
+
+ to build the partition of one domain i
+ we nned to find all j such that supp(phi_j) \cap supp(phi_j) is not empty
+ <=> int phi_j
+ */
+
+
+ {
+ /* find all j mes (supp(p_j) \cap supp(p_i)) >0 */
+ /* compute all phi_j on Thii */
+ /* remark supp p_i include in Thi */
+ /* */
+ fespace Phii(Thii,P0);
+ fespace Vhii(Thii,P1);
+ Vhi sumphi=0;
+ jpart=0;
+ njpart=0;
+ if(ipart==0)
+ cout <<" sizeoverlaps=" << sizeoverlaps << " " << " nnn = " << nnn<< endl;
+ if(dplot1) plot(unssd,wait=1,cmm=" bbbb");
+
+ pii= max(unssd-sizeoverlaps,0.)/sizeoverlaps;
+ if(RAS) pii[]=pii[] ? 1. : 0.;
+ if(dplot1) plot(pii,wait=1,cmm=" 0000 max="+pii[].max);
+ sumphi[] += pii[];
+ if(dplot1) plot(sumphi,wait=1,cmm=" summ 0000");
+ Vhii phii=0;
+ real epsmes=1e-10*Thii.mesure;
+ /*cout << " epsmes = " << epsmes < 0.5)
+ {
+ AddLayers(Thii,suppii[],sizeoverlaps,phii[]);
+ if(RAS)
+ { phii[]=phii[] ? 1. : 0.;
+ if(dplot1) plot(phii,wait=1,cmm=" RAS ij");
+
+ }
+ assert(phii[].min >= -1e-10);
+ real interij = int#mesh(Thi)( phii);
+ if(interij>epsmes)
+ {
+ pij[njpart]=abs(phii);
+ if(vdebug1>2) cout << " ***** " << int#mesh(Thi)(real(pij[njpart])<0) << " " <2)
+ cout << " sum min " < 1.-1e-6 && sumphi[].max< 1.+1e-6);
+ /* verification */
+ }}/* (Thii is remove here) */
+ /* end of the construction of the local partition of the unity ... */
+ /* on Thi ... */
+ /* ----------------------------------------------------------------- */
+if(mpiRank(comm)==0) cout << " *** end build partition " << endl;
+
+/* computation of number of intersection .. */
+/* ------------------------------------------ */
+
+/* here pii and the pij is the locate partition of the unite on */
+/* Thi ( mesh with overlap ).... */
+/*Thi=splitmesh(Thi,2); */
+if(dplot1 )
+ { plot(Thi,pii,wait=1);
+ for(int j=0;j99)savemesh(Thij,"Th-"+j+"--"+ipart+".mesh");
+ int [int] U2Vdata=[0];
+ matrix I = interpolate(Whij,Whi,U2Vc=U2Vdata); /* Whji <- Whi */
+ sMj[jp] = I*Pii; /* Whi -> s Whij */
+ rMj[jp] = interpolate(Whij,Whi,t=1,U2Vc=U2Vdata); /* Whji -> Whi */
+ if(vdebug>10) {
+ {Whi defPk#N(uuu,)=Times#N(1); Whij defPk#N(vvv,)=Times#N(-1);
+ cout << vvv[].n <<"+=" << I.n << "x" << I.m << "*" << uuu[].n << endl;
+ vvv[]+=I*uuu[]; cout << jp << " %%% " << vvv[].linfty << endl; assert(vvv[].linfty < 1e-6);}
+ {Whi defPk#N(uuu,)=Times#N(1); Whij defPk#N(vvv,)=Times#N(-1) ;
+ vvv[]+=rMj[jp]'*uuu[]; cout << jp << " ### " << vvv[].linfty << endl; assert(vvv[].linfty < 1e-6);}}
+ }}
+if(ipart==0) cout << " *** end build transfert matrix " << endl;
+settt
+
+/* alloc array of send and recv data .. */
+
+InitUdef(jpart.n,Whij,Thij,aThij,Usend,N) /* initU(n,Vh,Th,aTh,U) */
+InitUdef(jpart.n,Whij,Thij,aThij,Vrecv,N) /* ... */
+if(ipart==0) cout << " *** end init data for send/revc " << endl;
+//
+/******************************************************************/
+macro BuildTransferMat(ipart,mesh,Pk,N,U2V,Thi,Whi,Whij,Thij,aThij,Usend,Vrecv,jpart,vdebug)
+ BuildTransferMat2(ipart,mesh,Pk,N,U2V,Thi,Whi,Whij,Thij,aThij,Usend,Vrecv,jpart,Pii,vdebug)
+ //
+/******************************************************************/
+
+
+/******************************************************************/
+// usage uplot is allu or [allu,allu1] :
+macro PLOTMPIALLU(mesh,Pk,defPk, Th, u, uplot, plotparm)
+{ int ver=verbosity;
+ verbosity=2;
+ if(NoGraphicWindow==0)
+ {
+ if(mpirank==0)
+ {
+ mesh Thi=Th;
+ mesh[int] ath(mpisize);
+ fespace Xh(Thi,Pk);
+ Xh[int] defPk(allu,)(mpisize);
+ allu[0][]=u;
+ ath[0]=Th;
+ mpiRequest[int] rq(mpisize);
+ for(int i= 1; i 0)
+{
+if(orient)
+solve Pbabciss(abslabs,atest,solver=GMRES)
+= int2d(Th,qft=qf1pTlump)(abslabs*atest*1e-8/area)
+ + int1d(Th,labs,qfe=qf1pElump)([dx(abslabs),dy(abslabs)]'*[-N.y,+N.x]*atest)
+ - int1d(Th,labs,qfe=qf1pElump)(orient*atest);
+ else abslabs= 1.; /* no sorting*/
+ real abslabsmax = abs(2*abslabs[].max);
+ varf vlabsneg(u,v) = on(labs,u=abslabs-abslabsmax);
+ if(0) plot(abslabs,wait=1);
+ real[int] absc=vlabsneg(0,Wh);
+ doflabs.resize(Wh.ndof);
+ doflabs=0:Wh.ndof-1;
+ sort(absc,doflabs);
+ absc= absc? 1:0;
+ doflabs.resize(absc.sum+0.5);
+}
+else
+ doflabs.resize(0);
+}
+//
+load "msh3"
+load "medit"
+include "getARGV.idp"
+
+func f= 1. ; // right hand side function
+func g=0.; ; // boundary condition function
+func u0= 0;
+real dt=getARGV("-dt",0.01);
+int nn=getARGV("-n",10);
+int imax=getARGV("-niter",10);
+int op=getARGV("-op",1);
+int pplot=getARGV("-plot",0);
+
+mesh Th2D=square(nn,nn);
+int[int] refm=[1,1,2,1,3,1,4,1];
+int[int] refu=[0,1];
+mesh3 Th=buildlayers(Th2D,nn,zbound=[0.,1.],labelmid=refm,labelup=refu,labeldown=refu);
+
+
+// to slip integral on each processor
+// set a region number of a processor number
+real ccc = mpisize/real(Th.nt) ;
+if(op) Th=change(Th,fregion= min(mpisize-1,int(nuTriangle* ccc+1e-10)));
+else Th=change(Th,fregion=0);
+int reg= op ? mpirank : 0;
+// end of trick
+cout << " *** Th: vol " << Th.mesure << " " << int3d(Th,reg)(1.) << endl;
+fespace Vh(Th,P2) ; // P1 FE space
+Vh uh=u0 ; // unkown and test function.
+
+
+real temps=clock();
+
+real time1,time2,time6;
+time1=clock();
+
+// compute only on region number = processor number
+varf vlaplace(uh,vh) = // definition de problem
+ int3d(Th,reg)( uh*vh+ dt*(dx(uh)*dx(vh) + dy(uh)*dy(vh)+ dz(uh)*dz(vh)) ) // bil. form
+ + int3d(Th,reg)( dt*vh*f) + on(1,uh=g) ;
+varf vmasse(u,v) = int3d(Th,reg)(u*v);
+varf von1(uh,vh) = on(1,uh=1) ;
+
+matrix AA = vlaplace(Vh,Vh,tgv=ttgv) ;
+time1=clock()-time1;
+// reduce the matrice to get the full matrice
+// warning the tgv number is now mpisize*tgv for B.C.
+varf vffullpattern(u,v) = int2d(Th,qforder=1)(u*v);
+matrix A=vffullpattern(Vh,Vh);
+time6=clock();
+if(op) mpiAllReduce(AA,A,mpiCommWorld,mpiSUM);
+else A=AA;
+
+time6 = clock()-time6;
+time2=clock();
+set(A,solver=sparsesolver,tgv=ttgv) ; // factorize
+time2=clock()-time2;
+
+real time3=clock();
+matrix M = vmasse(Vh,Vh);
+time3=clock()-time3;
+
+real [int] b(A.n),bb(A.n) ;
+real[int] bcl= vlaplace(0,Vh,tgv=ttgv) ; // The B.C vector
+real[int] Gamma = von1(0,Vh,tgv=1); //
+
+real time4=0,time5=0;
+
+for(int i=0 ;i> Ri[j];
+}
+// EOM
+
+
+macro CheckUV(comm,jpart,Si,Ri)
+{
+ int ipart=mpiRank(comm);
+ int n= jpart.n;
+ int[int] rn(n),sn(n),in(n);
+ for (int j=0;j> rn[j];
+ for (int j=0;j> in[j];
+
+ int err=0;
+ for (int j=0;j " << in[j] << " " << err << endl;
+
+ }
+ assert(err==0);
+}//EOM
+
+
+macro SendRecvUV(comm,jpart,Si,Ri)
+{
+ int n= jpart.n;
+ mpiRequest[int] rq(n);
+ for (int j=0;j> Ri[j][];*/
+
+ for (int j=0;j ff_gsl_awk.hpp
+load "gsl"
+gslrng ffrng;
+ gslabortonerror=0;
+cout << "gsl_cdf_ugaussian_P(0.55) = " << gslcdfugaussianP(0.55) << endl;
+cout << "gsl_cdf_ugaussian_Q(0.55) = " << gslcdfugaussianQ(0.55) << endl;
+cout << "gsl_cdf_ugaussian_Pinv(0.55) = " << gslcdfugaussianPinv(0.55) << endl;
+cout << "gsl_cdf_ugaussian_Qinv(0.55) = " << gslcdfugaussianQinv(0.55) << endl;
+cout << "gsl_cdf_gaussian_P(0.55, 0.55) = " << gslcdfgaussianP(0.55, 0.55) << endl;
+cout << "gsl_cdf_gaussian_Q(0.55, 0.55) = " << gslcdfgaussianQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_gaussian_Pinv(0.55, 0.55) = " << gslcdfgaussianPinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_gaussian_Qinv(0.55, 0.55) = " << gslcdfgaussianQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_gamma_P(0.55,0.55,0.55) = " << gslcdfgammaP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gamma_Q(0.55,0.55,0.55) = " << gslcdfgammaQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gamma_Pinv(0.55,0.55,0.55) = " << gslcdfgammaPinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gamma_Qinv(0.55,0.55,0.55) = " << gslcdfgammaQinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_cauchy_P(0.55, 0.55) = " << gslcdfcauchyP(0.55, 0.55) << endl;
+cout << "gsl_cdf_cauchy_Q(0.55, 0.55) = " << gslcdfcauchyQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_cauchy_Pinv(0.55, 0.55) = " << gslcdfcauchyPinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_cauchy_Qinv(0.55, 0.55) = " << gslcdfcauchyQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_laplace_P(0.55, 0.55) = " << gslcdflaplaceP(0.55, 0.55) << endl;
+cout << "gsl_cdf_laplace_Q(0.55, 0.55) = " << gslcdflaplaceQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_laplace_Pinv(0.55, 0.55) = " << gslcdflaplacePinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_laplace_Qinv(0.55, 0.55) = " << gslcdflaplaceQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_rayleigh_P(0.55, 0.55) = " << gslcdfrayleighP(0.55, 0.55) << endl;
+cout << "gsl_cdf_rayleigh_Q(0.55, 0.55) = " << gslcdfrayleighQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_rayleigh_Pinv(0.55, 0.55) = " << gslcdfrayleighPinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_rayleigh_Qinv(0.55, 0.55) = " << gslcdfrayleighQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_chisq_P(0.55, 0.55) = " << gslcdfchisqP(0.55, 0.55) << endl;
+cout << "gsl_cdf_chisq_Q(0.55, 0.55) = " << gslcdfchisqQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_chisq_Pinv(0.55, 0.55) = " << gslcdfchisqPinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_chisq_Qinv(0.55, 0.55) = " << gslcdfchisqQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_exponential_P(0.55, 0.55) = " << gslcdfexponentialP(0.55, 0.55) << endl;
+cout << "gsl_cdf_exponential_Q(0.55, 0.55) = " << gslcdfexponentialQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_exponential_Pinv(0.55, 0.55) = " << gslcdfexponentialPinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_exponential_Qinv(0.55, 0.55) = " << gslcdfexponentialQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_exppow_P(0.55,0.55,0.55) = " << gslcdfexppowP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_exppow_Q(0.55,0.55,0.55) = " << gslcdfexppowQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_tdist_P(0.55, 0.55) = " << gslcdftdistP(0.55, 0.55) << endl;
+cout << "gsl_cdf_tdist_Q(0.55, 0.55) = " << gslcdftdistQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_tdist_Pinv(0.55, 0.55) = " << gslcdftdistPinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_tdist_Qinv(0.55, 0.55) = " << gslcdftdistQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_fdist_P(0.55,0.55,0.55) = " << gslcdffdistP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_fdist_Q(0.55,0.55,0.55) = " << gslcdffdistQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_fdist_Pinv(0.55,0.55,0.55) = " << gslcdffdistPinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_fdist_Qinv(0.55,0.55,0.55) = " << gslcdffdistQinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_beta_P(0.55,0.55,0.55) = " << gslcdfbetaP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_beta_Q(0.55,0.55,0.55) = " << gslcdfbetaQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_beta_Pinv(0.55,0.55,0.55) = " << gslcdfbetaPinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_beta_Qinv(0.55,0.55,0.55) = " << gslcdfbetaQinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_flat_P(0.55,0.55,0.55) = " << gslcdfflatP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_flat_Q(0.55,0.55,0.55) = " << gslcdfflatQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_flat_Pinv(0.55,0.55,0.55) = " << gslcdfflatPinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_flat_Qinv(0.55,0.55,0.55) = " << gslcdfflatQinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_lognormal_P(0.55,0.55,0.55) = " << gslcdflognormalP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_lognormal_Q(0.55,0.55,0.55) = " << gslcdflognormalQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_lognormal_Pinv(0.55,0.55,0.55) = " << gslcdflognormalPinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_lognormal_Qinv(0.55,0.55,0.55) = " << gslcdflognormalQinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel1_P(0.55,0.55,0.55) = " << gslcdfgumbel1P(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel1_Q(0.55,0.55,0.55) = " << gslcdfgumbel1Q(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel1_Pinv(0.55,0.55,0.55) = " << gslcdfgumbel1Pinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel1_Qinv(0.55,0.55,0.55) = " << gslcdfgumbel1Qinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel2_P(0.55,0.55,0.55) = " << gslcdfgumbel2P(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel2_Q(0.55,0.55,0.55) = " << gslcdfgumbel2Q(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel2_Pinv(0.55,0.55,0.55) = " << gslcdfgumbel2Pinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_gumbel2_Qinv(0.55,0.55,0.55) = " << gslcdfgumbel2Qinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_weibull_P(0.55,0.55,0.55) = " << gslcdfweibullP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_weibull_Q(0.55,0.55,0.55) = " << gslcdfweibullQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_weibull_Pinv(0.55,0.55,0.55) = " << gslcdfweibullPinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_weibull_Qinv(0.55,0.55,0.55) = " << gslcdfweibullQinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_pareto_P(0.55,0.55,0.55) = " << gslcdfparetoP(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_pareto_Q(0.55,0.55,0.55) = " << gslcdfparetoQ(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_pareto_Pinv(0.55,0.55,0.55) = " << gslcdfparetoPinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_pareto_Qinv(0.55,0.55,0.55) = " << gslcdfparetoQinv(0.55,0.55,0.55) << endl;
+cout << "gsl_cdf_logistic_P(0.55, 0.55) = " << gslcdflogisticP(0.55, 0.55) << endl;
+cout << "gsl_cdf_logistic_Q(0.55, 0.55) = " << gslcdflogisticQ(0.55, 0.55) << endl;
+cout << "gsl_cdf_logistic_Pinv(0.55, 0.55) = " << gslcdflogisticPinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_logistic_Qinv(0.55, 0.55) = " << gslcdflogisticQinv(0.55, 0.55) << endl;
+cout << "gsl_cdf_binomial_P(0,0.55,0) = " << gslcdfbinomialP(0,0.55,0) << endl;
+cout << "gsl_cdf_binomial_Q(0,0.55,0) = " << gslcdfbinomialQ(0,0.55,0) << endl;
+cout << "gsl_cdf_poisson_P(0, 0.55) = " << gslcdfpoissonP(0, 0.55) << endl;
+cout << "gsl_cdf_poisson_Q(0, 0.55) = " << gslcdfpoissonQ(0, 0.55) << endl;
+cout << "gsl_cdf_geometric_P(0, 0.55) = " << gslcdfgeometricP(0, 0.55) << endl;
+cout << "gsl_cdf_geometric_Q(0, 0.55) = " << gslcdfgeometricQ(0, 0.55) << endl;
+cout << "gsl_cdf_negative_binomial_P(0,0.55,0.55) = " << gslcdfnegativebinomialP(0,0.55,0.55) << endl;
+cout << "gsl_cdf_negative_binomial_Q(0,0.55,0.55) = " << gslcdfnegativebinomialQ(0,0.55,0.55) << endl;
+cout << "gsl_cdf_pascal_P(0,0.55,0) = " << gslcdfpascalP(0,0.55,0) << endl;
+cout << "gsl_cdf_pascal_Q(0,0.55,0) = " << gslcdfpascalQ(0,0.55,0) << endl;
+cout << "gsl_ran_bernoulli_pdf(0, 0.55) = " << gslranbernoullipdf(0, 0.55) << endl;
+cout << "gsl_ran_beta(ffrng,0.55,0.55) = " << gslranbeta(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_beta_pdf(0.55,0.55,0.55) = " << gslranbetapdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_binomial_pdf(0,0.55,0) = " << gslranbinomialpdf(0,0.55,0) << endl;
+cout << "gsl_ran_exponential(ffrng, 0.55) = " << gslranexponential(ffrng, 0.55) << endl;
+cout << "gsl_ran_exponential_pdf(0.55, 0.55) = " << gslranexponentialpdf(0.55, 0.55) << endl;
+cout << "gsl_ran_exppow(ffrng,0.55,0.55) = " << gslranexppow(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_exppow_pdf(0.55,0.55,0.55) = " << gslranexppowpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_cauchy(ffrng, 0.55) = " << gslrancauchy(ffrng, 0.55) << endl;
+cout << "gsl_ran_cauchy_pdf(0.55, 0.55) = " << gslrancauchypdf(0.55, 0.55) << endl;
+cout << "gsl_ran_chisq(ffrng, 0.55) = " << gslranchisq(ffrng, 0.55) << endl;
+cout << "gsl_ran_chisq_pdf(0.55, 0.55) = " << gslranchisqpdf(0.55, 0.55) << endl;
+cout << "gsl_ran_erlang(ffrng,0.55,0.55) = " << gslranerlang(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_erlang_pdf(0.55,0.55,0.55) = " << gslranerlangpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_fdist(ffrng,0.55,0.55) = " << gslranfdist(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_fdist_pdf(0.55,0.55,0.55) = " << gslranfdistpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_flat(ffrng,0.55,0.55) = " << gslranflat(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_flat_pdf(0.55,0.55,0.55) = " << gslranflatpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_gamma(ffrng,0.55,0.55) = " << gslrangamma(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_gamma_int(ffrng, 0) = " << gslrangammaint(ffrng, 0) << endl;
+cout << "gsl_ran_gamma_pdf(0.55,0.55,0.55) = " << gslrangammapdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_gamma_mt(ffrng,0.55,0.55) = " << gslrangammamt(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_gamma_knuth(ffrng,0.55,0.55) = " << gslrangammaknuth(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_gaussian(ffrng, 0.55) = " << gslrangaussian(ffrng, 0.55) << endl;
+cout << "gsl_ran_gaussian_ratio_method(ffrng, 0.55) = " << gslrangaussianratiomethod(ffrng, 0.55) << endl;
+cout << "gsl_ran_gaussian_ziggurat(ffrng, 0.55) = " << gslrangaussianziggurat(ffrng, 0.55) << endl;
+cout << "gsl_ran_gaussian_pdf(0.55, 0.55) = " << gslrangaussianpdf(0.55, 0.55) << endl;
+cout << "gsl_ran_ugaussian(ffrng) = " << gslranugaussian(ffrng) << endl;
+cout << "gsl_ran_ugaussian_ratio_method(ffrng) = " << gslranugaussianratiomethod(ffrng) << endl;
+cout << "gsl_ran_ugaussian_pdf(0.55) = " << gslranugaussianpdf(0.55) << endl;
+cout << "gsl_ran_gaussian_tail(ffrng,0.55,0.55) = " << gslrangaussiantail(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_gaussian_tail_pdf(0.55,0.55,0.55) = " << gslrangaussiantailpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_ugaussian_tail(ffrng, 0.55) = " << gslranugaussiantail(ffrng, 0.55) << endl;
+cout << "gsl_ran_ugaussian_tail_pdf(0.55, 0.55) = " << gslranugaussiantailpdf(0.55, 0.55) << endl;
+cout << "gsl_ran_landau(ffrng) = " << gslranlandau(ffrng) << endl;
+cout << "gsl_ran_landau_pdf(0.55) = " << gslranlandaupdf(0.55) << endl;
+cout << "gsl_ran_geometric_pdf(0, 0.55) = " << gslrangeometricpdf(0, 0.55) << endl;
+cout << "gsl_ran_gumbel1(ffrng,0.55,0.55) = " << gslrangumbel1(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_gumbel1_pdf(0.55,0.55,0.55) = " << gslrangumbel1pdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_gumbel2(ffrng,0.55,0.55) = " << gslrangumbel2(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_gumbel2_pdf(0.55,0.55,0.55) = " << gslrangumbel2pdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_logistic(ffrng, 0.55) = " << gslranlogistic(ffrng, 0.55) << endl;
+cout << "gsl_ran_logistic_pdf(0.55, 0.55) = " << gslranlogisticpdf(0.55, 0.55) << endl;
+cout << "gsl_ran_lognormal(ffrng,0.55,0.55) = " << gslranlognormal(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_lognormal_pdf(0.55,0.55,0.55) = " << gslranlognormalpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_logarithmic_pdf(0, 0.55) = " << gslranlogarithmicpdf(0, 0.55) << endl;
+cout << "gsl_ran_negative_binomial_pdf(0,0.55,0.55) = " << gslrannegativebinomialpdf(0,0.55,0.55) << endl;
+cout << "gsl_ran_pascal_pdf(0,0.55,0) = " << gslranpascalpdf(0,0.55,0) << endl;
+cout << "gsl_ran_pareto(ffrng,0.55,0.55) = " << gslranpareto(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_pareto_pdf(0.55,0.55,0.55) = " << gslranparetopdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_poisson_pdf(0, 0.55) = " << gslranpoissonpdf(0, 0.55) << endl;
+cout << "gsl_ran_rayleigh(ffrng, 0.55) = " << gslranrayleigh(ffrng, 0.55) << endl;
+cout << "gsl_ran_rayleigh_pdf(0.55, 0.55) = " << gslranrayleighpdf(0.55, 0.55) << endl;
+cout << "gsl_ran_rayleigh_tail(ffrng,0.55,0.55) = " << gslranrayleightail(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_rayleigh_tail_pdf(0.55,0.55,0.55) = " << gslranrayleightailpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_ran_tdist(ffrng, 0.55) = " << gslrantdist(ffrng, 0.55) << endl;
+cout << "gsl_ran_tdist_pdf(0.55, 0.55) = " << gslrantdistpdf(0.55, 0.55) << endl;
+cout << "gsl_ran_laplace(ffrng, 0.55) = " << gslranlaplace(ffrng, 0.55) << endl;
+cout << "gsl_ran_laplace_pdf(0.55, 0.55) = " << gslranlaplacepdf(0.55, 0.55) << endl;
+cout << "gsl_ran_levy(ffrng,0.55,0.55) = " << gslranlevy(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_weibull(ffrng,0.55,0.55) = " << gslranweibull(ffrng,0.55,0.55) << endl;
+cout << "gsl_ran_weibull_pdf(0.55,0.55,0.55) = " << gslranweibullpdf(0.55,0.55,0.55) << endl;
+cout << "gsl_sf_airy_Ai(0.55, 0) = " << gslsfairyAi(0.55, 0) << endl;
+cout << "gsl_sf_airy_Bi(0.55, 0) = " << gslsfairyBi(0.55, 0) << endl;
+cout << "gsl_sf_airy_Ai_scaled(0.55, 0) = " << gslsfairyAiscaled(0.55, 0) << endl;
+cout << "gsl_sf_airy_Bi_scaled(0.55, 0) = " << gslsfairyBiscaled(0.55, 0) << endl;
+cout << "gsl_sf_airy_Ai_deriv(0.55, 0) = " << gslsfairyAideriv(0.55, 0) << endl;
+cout << "gsl_sf_airy_Bi_deriv(0.55, 0) = " << gslsfairyBideriv(0.55, 0) << endl;
+cout << "gsl_sf_airy_Ai_deriv_scaled(0.55, 0) = " << gslsfairyAiderivscaled(0.55, 0) << endl;
+cout << "gsl_sf_airy_Bi_deriv_scaled(0.55, 0) = " << gslsfairyBiderivscaled(0.55, 0) << endl;
+cout << "gsl_sf_airy_zero_Ai(0) = " << gslsfairyzeroAi(0) << endl;
+cout << "gsl_sf_airy_zero_Bi(0) = " << gslsfairyzeroBi(0) << endl;
+cout << "gsl_sf_airy_zero_Ai_deriv(0) = " << gslsfairyzeroAideriv(0) << endl;
+cout << "gsl_sf_airy_zero_Bi_deriv(0) = " << gslsfairyzeroBideriv(0) << endl;
+cout << "gsl_sf_bessel_J0(0.55) = " << gslsfbesselJ0(0.55) << endl;
+cout << "gsl_sf_bessel_J1(0.55) = " << gslsfbesselJ1(0.55) << endl;
+cout << "gsl_sf_bessel_Jn(0, 0.55) = " << gslsfbesselJn(0, 0.55) << endl;
+cout << "gsl_sf_bessel_Y0(0.55) = " << gslsfbesselY0(0.55) << endl;
+cout << "gsl_sf_bessel_Y1(0.55) = " << gslsfbesselY1(0.55) << endl;
+cout << "gsl_sf_bessel_Yn(0, 0.55) = " << gslsfbesselYn(0, 0.55) << endl;
+cout << "gsl_sf_bessel_I0(0.55) = " << gslsfbesselI0(0.55) << endl;
+cout << "gsl_sf_bessel_I1(0.55) = " << gslsfbesselI1(0.55) << endl;
+cout << "gsl_sf_bessel_In(0, 0.55) = " << gslsfbesselIn(0, 0.55) << endl;
+cout << "gsl_sf_bessel_I0_scaled(0.55) = " << gslsfbesselI0scaled(0.55) << endl;
+cout << "gsl_sf_bessel_I1_scaled(0.55) = " << gslsfbesselI1scaled(0.55) << endl;
+cout << "gsl_sf_bessel_In_scaled(0, 0.55) = " << gslsfbesselInscaled(0, 0.55) << endl;
+cout << "gsl_sf_bessel_K0(0.55) = " << gslsfbesselK0(0.55) << endl;
+cout << "gsl_sf_bessel_K1(0.55) = " << gslsfbesselK1(0.55) << endl;
+cout << "gsl_sf_bessel_Kn(0, 0.55) = " << gslsfbesselKn(0, 0.55) << endl;
+cout << "gsl_sf_bessel_K0_scaled(0.55) = " << gslsfbesselK0scaled(0.55) << endl;
+cout << "gsl_sf_bessel_K1_scaled(0.55) = " << gslsfbesselK1scaled(0.55) << endl;
+cout << "gsl_sf_bessel_Kn_scaled(0, 0.55) = " << gslsfbesselKnscaled(0, 0.55) << endl;
+cout << "gsl_sf_bessel_j0(0.55) = " << gslsfbesselj0(0.55) << endl;
+cout << "gsl_sf_bessel_j1(0.55) = " << gslsfbesselj1(0.55) << endl;
+cout << "gsl_sf_bessel_j2(0.55) = " << gslsfbesselj2(0.55) << endl;
+cout << "gsl_sf_bessel_jl(0, 0.55) = " << gslsfbesseljl(0, 0.55) << endl;
+cout << "gsl_sf_bessel_y0(0.55) = " << gslsfbessely0(0.55) << endl;
+cout << "gsl_sf_bessel_y1(0.55) = " << gslsfbessely1(0.55) << endl;
+cout << "gsl_sf_bessel_y2(0.55) = " << gslsfbessely2(0.55) << endl;
+cout << "gsl_sf_bessel_yl(0, 0.55) = " << gslsfbesselyl(0, 0.55) << endl;
+cout << "gsl_sf_bessel_i0_scaled(0.55) = " << gslsfbesseli0scaled(0.55) << endl;
+cout << "gsl_sf_bessel_i1_scaled(0.55) = " << gslsfbesseli1scaled(0.55) << endl;
+cout << "gsl_sf_bessel_i2_scaled(0.55) = " << gslsfbesseli2scaled(0.55) << endl;
+cout << "gsl_sf_bessel_il_scaled(0, 0.55) = " << gslsfbesselilscaled(0, 0.55) << endl;
+cout << "gsl_sf_bessel_k0_scaled(0.55) = " << gslsfbesselk0scaled(0.55) << endl;
+cout << "gsl_sf_bessel_k1_scaled(0.55) = " << gslsfbesselk1scaled(0.55) << endl;
+cout << "gsl_sf_bessel_k2_scaled(0.55) = " << gslsfbesselk2scaled(0.55) << endl;
+cout << "gsl_sf_bessel_kl_scaled(0, 0.55) = " << gslsfbesselklscaled(0, 0.55) << endl;
+cout << "gsl_sf_bessel_Jnu(0.55, 0.55) = " << gslsfbesselJnu(0.55, 0.55) << endl;
+cout << "gsl_sf_bessel_Ynu(0.55, 0.55) = " << gslsfbesselYnu(0.55, 0.55) << endl;
+cout << "gsl_sf_bessel_Inu_scaled(0.55, 0.55) = " << gslsfbesselInuscaled(0.55, 0.55) << endl;
+cout << "gsl_sf_bessel_Inu(0.55, 0.55) = " << gslsfbesselInu(0.55, 0.55) << endl;
+cout << "gsl_sf_bessel_Knu_scaled(0.55, 0.55) = " << gslsfbesselKnuscaled(0.55, 0.55) << endl;
+cout << "gsl_sf_bessel_Knu(0.55, 0.55) = " << gslsfbesselKnu(0.55, 0.55) << endl;
+cout << "gsl_sf_bessel_lnKnu(0.55, 0.55) = " << gslsfbessellnKnu(0.55, 0.55) << endl;
+cout << "gsl_sf_bessel_zero_J0(0) = " << gslsfbesselzeroJ0(0) << endl;
+cout << "gsl_sf_bessel_zero_J1(0) = " << gslsfbesselzeroJ1(0) << endl;
+cout << "gsl_sf_bessel_zero_Jnu(0.55, 0) = " << gslsfbesselzeroJnu(0.55, 0) << endl;
+cout << "gsl_sf_clausen(0.55) = " << gslsfclausen(0.55) << endl;
+cout << "gsl_sf_hydrogenicR_1(0.55, 0.55) = " << gslsfhydrogenicR1(0.55, 0.55) << endl;
+cout << "gsl_sf_dawson(0.55) = " << gslsfdawson(0.55) << endl;
+cout << "gsl_sf_debye_1(0.55) = " << gslsfdebye1(0.55) << endl;
+cout << "gsl_sf_debye_2(0.55) = " << gslsfdebye2(0.55) << endl;
+cout << "gsl_sf_debye_3(0.55) = " << gslsfdebye3(0.55) << endl;
+cout << "gsl_sf_debye_4(0.55) = " << gslsfdebye4(0.55) << endl;
+cout << "gsl_sf_debye_5(0.55) = " << gslsfdebye5(0.55) << endl;
+cout << "gsl_sf_debye_6(0.55) = " << gslsfdebye6(0.55) << endl;
+cout << "gsl_sf_dilog(0.55) = " << gslsfdilog(0.55) << endl;
+cout << "gsl_sf_multiply(0.55, 0.55) = " << gslsfmultiply(0.55, 0.55) << endl;
+cout << "gsl_sf_ellint_Kcomp(0.55, 0) = " << gslsfellintKcomp(0.55, 0) << endl;
+cout << "gsl_sf_ellint_Ecomp(0.55, 0) = " << gslsfellintEcomp(0.55, 0) << endl;
+cout << "gsl_sf_ellint_Pcomp(0.55,0.55,0) = " << gslsfellintPcomp(0.55,0.55,0) << endl;
+cout << "gsl_sf_ellint_Dcomp(0.55, 0) = " << gslsfellintDcomp(0.55, 0) << endl;
+cout << "gsl_sf_ellint_F(0.55,0.55,0) = " << gslsfellintF(0.55,0.55,0) << endl;
+cout << "gsl_sf_ellint_E(0.55,0.55,0) = " << gslsfellintE(0.55,0.55,0) << endl;
+cout << "gsl_sf_ellint_RC(0.55,0.55,0) = " << gslsfellintRC(0.55,0.55,0) << endl;
+cout << "gsl_sf_erfc(0.55) = " << gslsferfc(0.55) << endl;
+cout << "gsl_sf_log_erfc(0.55) = " << gslsflogerfc(0.55) << endl;
+cout << "gsl_sf_erf(0.55) = " << gslsferf(0.55) << endl;
+cout << "gsl_sf_erf_Z(0.55) = " << gslsferfZ(0.55) << endl;
+cout << "gsl_sf_erf_Q(0.55) = " << gslsferfQ(0.55) << endl;
+cout << "gsl_sf_hazard(0.55) = " << gslsfhazard(0.55) << endl;
+cout << "gsl_sf_exp(0.55) = " << gslsfexp(0.55) << endl;
+cout << "gsl_sf_exp_mult(0.55, 0.55) = " << gslsfexpmult(0.55, 0.55) << endl;
+cout << "gsl_sf_expm1(0.55) = " << gslsfexpm1(0.55) << endl;
+cout << "gsl_sf_exprel(0.55) = " << gslsfexprel(0.55) << endl;
+cout << "gsl_sf_exprel_2(0.55) = " << gslsfexprel2(0.55) << endl;
+cout << "gsl_sf_exprel_n(0, 0.55) = " << gslsfexpreln(0, 0.55) << endl;
+cout << "gsl_sf_expint_E1(0.55) = " << gslsfexpintE1(0.55) << endl;
+cout << "gsl_sf_expint_E2(0.55) = " << gslsfexpintE2(0.55) << endl;
+cout << "gsl_sf_expint_En(0, 0.55) = " << gslsfexpintEn(0, 0.55) << endl;
+cout << "gsl_sf_expint_E1_scaled(0.55) = " << gslsfexpintE1scaled(0.55) << endl;
+cout << "gsl_sf_expint_E2_scaled(0.55) = " << gslsfexpintE2scaled(0.55) << endl;
+cout << "gsl_sf_expint_En_scaled(0, 0.55) = " << gslsfexpintEnscaled(0, 0.55) << endl;
+cout << "gsl_sf_expint_Ei(0.55) = " << gslsfexpintEi(0.55) << endl;
+cout << "gsl_sf_expint_Ei_scaled(0.55) = " << gslsfexpintEiscaled(0.55) << endl;
+cout << "gsl_sf_Shi(0.55) = " << gslsfShi(0.55) << endl;
+cout << "gsl_sf_Chi(0.55) = " << gslsfChi(0.55) << endl;
+cout << "gsl_sf_expint_3(0.55) = " << gslsfexpint3(0.55) << endl;
+cout << "gsl_sf_Si(0.55) = " << gslsfSi(0.55) << endl;
+cout << "gsl_sf_Ci(0.55) = " << gslsfCi(0.55) << endl;
+cout << "gsl_sf_atanint(0.55) = " << gslsfatanint(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_m1(0.55) = " << gslsffermidiracm1(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_0(0.55) = " << gslsffermidirac0(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_1(0.55) = " << gslsffermidirac1(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_2(0.55) = " << gslsffermidirac2(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_int(0, 0.55) = " << gslsffermidiracint(0, 0.55) << endl;
+cout << "gsl_sf_fermi_dirac_mhalf(0.55) = " << gslsffermidiracmhalf(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_half(0.55) = " << gslsffermidirachalf(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_3half(0.55) = " << gslsffermidirac3half(0.55) << endl;
+cout << "gsl_sf_fermi_dirac_inc_0(0.55, 0.55) = " << gslsffermidiracinc0(0.55, 0.55) << endl;
+cout << "gsl_sf_lngamma(0.55) = " << gslsflngamma(0.55) << endl;
+cout << "gsl_sf_gamma(0.55) = " << gslsfgamma(0.55) << endl;
+cout << "gsl_sf_gammastar(0.55) = " << gslsfgammastar(0.55) << endl;
+cout << "gsl_sf_gammainv(0.55) = " << gslsfgammainv(0.55) << endl;
+cout << "gsl_sf_taylorcoeff(0, 0.55) = " << gslsftaylorcoeff(0, 0.55) << endl;
+cout << "gsl_sf_fact(0) = " << gslsffact(0) << endl;
+cout << "gsl_sf_doublefact(0) = " << gslsfdoublefact(0) << endl;
+cout << "gsl_sf_lnfact(0) = " << gslsflnfact(0) << endl;
+cout << "gsl_sf_lndoublefact(0) = " << gslsflndoublefact(0) << endl;
+cout << "gsl_sf_lnchoose(0, 0) = " << gslsflnchoose(0, 0) << endl;
+cout << "gsl_sf_choose(0, 0) = " << gslsfchoose(0, 0) << endl;
+cout << "gsl_sf_lnpoch(0.55, 0.55) = " << gslsflnpoch(0.55, 0.55) << endl;
+cout << "gsl_sf_poch(0.55, 0.55) = " << gslsfpoch(0.55, 0.55) << endl;
+cout << "gsl_sf_pochrel(0.55, 0.55) = " << gslsfpochrel(0.55, 0.55) << endl;
+cout << "gsl_sf_gamma_inc_Q(0.55, 0.55) = " << gslsfgammaincQ(0.55, 0.55) << endl;
+cout << "gsl_sf_gamma_inc_P(0.55, 0.55) = " << gslsfgammaincP(0.55, 0.55) << endl;
+cout << "gsl_sf_gamma_inc(0.55, 0.55) = " << gslsfgammainc(0.55, 0.55) << endl;
+cout << "gsl_sf_lnbeta(0.55, 0.55) = " << gslsflnbeta(0.55, 0.55) << endl;
+cout << "gsl_sf_beta(0.55, 0.55) = " << gslsfbeta(0.55, 0.55) << endl;
+cout << "gsl_sf_beta_inc(0.55,0.55,0.55) = " << gslsfbetainc(0.55,0.55,0.55) << endl;
+cout << "gsl_sf_gegenpoly_1(0.55, 0.55) = " << gslsfgegenpoly1(0.55, 0.55) << endl;
+cout << "gsl_sf_gegenpoly_2(0.55, 0.55) = " << gslsfgegenpoly2(0.55, 0.55) << endl;
+cout << "gsl_sf_gegenpoly_3(0.55, 0.55) = " << gslsfgegenpoly3(0.55, 0.55) << endl;
+cout << "gsl_sf_gegenpoly_n(0,0.55,0.55) = " << gslsfgegenpolyn(0,0.55,0.55) << endl;
+cout << "gsl_sf_hyperg_0F1(0.55, 0.55) = " << gslsfhyperg0F1(0.55, 0.55) << endl;
+cout << "gsl_sf_hyperg_1F1_int(0,0,0.55) = " << gslsfhyperg1F1int(0,0,0.55) << endl;
+cout << "gsl_sf_hyperg_1F1(0.55,0.55,0.55) = " << gslsfhyperg1F1(0.55,0.55,0.55) << endl;
+cout << "gsl_sf_hyperg_U_int(0,0,0.55) = " << gslsfhypergUint(0,0,0.55) << endl;
+cout << "gsl_sf_hyperg_U(0.55,0.55,0.55) = " << gslsfhypergU(0.55,0.55,0.55) << endl;
+cout << "gsl_sf_hyperg_2F0(0.55,0.55,0.55) = " << gslsfhyperg2F0(0.55,0.55,0.55) << endl;
+cout << "gsl_sf_laguerre_1(0.55, 0.55) = " << gslsflaguerre1(0.55, 0.55) << endl;
+cout << "gsl_sf_laguerre_2(0.55, 0.55) = " << gslsflaguerre2(0.55, 0.55) << endl;
+cout << "gsl_sf_laguerre_3(0.55, 0.55) = " << gslsflaguerre3(0.55, 0.55) << endl;
+cout << "gsl_sf_laguerre_n(0,0.55,0.55) = " << gslsflaguerren(0,0.55,0.55) << endl;
+cout << "gsl_sf_lambert_W0(0.55) = " << gslsflambertW0(0.55) << endl;
+cout << "gsl_sf_lambert_Wm1(0.55) = " << gslsflambertWm1(0.55) << endl;
+cout << "gsl_sf_legendre_Pl(0, 0.55) = " << gslsflegendrePl(0, 0.55) << endl;
+cout << "gsl_sf_legendre_P1(0.55) = " << gslsflegendreP1(0.55) << endl;
+cout << "gsl_sf_legendre_P2(0.55) = " << gslsflegendreP2(0.55) << endl;
+cout << "gsl_sf_legendre_P3(0.55) = " << gslsflegendreP3(0.55) << endl;
+cout << "gsl_sf_legendre_Q0(0.55) = " << gslsflegendreQ0(0.55) << endl;
+cout << "gsl_sf_legendre_Q1(0.55) = " << gslsflegendreQ1(0.55) << endl;
+cout << "gsl_sf_legendre_Ql(0, 0.55) = " << gslsflegendreQl(0, 0.55) << endl;
+cout << "gsl_sf_legendre_Plm(0,0,0.55) = " << gslsflegendrePlm(0,0,0.55) << endl;
+cout << "gsl_sf_legendre_sphPlm(0,0,0.55) = " << gslsflegendresphPlm(0,0,0.55) << endl;
+//cout << "gsl_sf_legendre_array_size(0, 0) = " << gslsflegendrearraysize(0, 0) << endl;
+cout << "gsl_sf_conicalP_half(0.55, 0.55) = " << gslsfconicalPhalf(0.55, 0.55) << endl;
+cout << "gsl_sf_conicalP_mhalf(0.55, 0.55) = " << gslsfconicalPmhalf(0.55, 0.55) << endl;
+cout << "gsl_sf_conicalP_0(0.55, 0.55) = " << gslsfconicalP0(0.55, 0.55) << endl;
+cout << "gsl_sf_conicalP_1(0.55, 0.55) = " << gslsfconicalP1(0.55, 0.55) << endl;
+cout << "gsl_sf_conicalP_sph_reg(0,0.55,0.55) = " << gslsfconicalPsphreg(0,0.55,0.55) << endl;
+cout << "gsl_sf_conicalP_cyl_reg(0,0.55,0.55) = " << gslsfconicalPcylreg(0,0.55,0.55) << endl;
+cout << "gsl_sf_legendre_H3d_0(0.55, 0.55) = " << gslsflegendreH3d0(0.55, 0.55) << endl;
+cout << "gsl_sf_legendre_H3d_1(0.55, 0.55) = " << gslsflegendreH3d1(0.55, 0.55) << endl;
+cout << "gsl_sf_legendre_H3d(0,0.55,0.55) = " << gslsflegendreH3d(0,0.55,0.55) << endl;
+cout << "gsl_sf_log(0.55) = " << gslsflog(0.55) << endl;
+cout << "gsl_sf_log_abs(0.55) = " << gslsflogabs(0.55) << endl;
+cout << "gsl_sf_log_1plusx(0.55) = " << gslsflog1plusx(0.55) << endl;
+cout << "gsl_sf_log_1plusx_mx(0.55) = " << gslsflog1plusxmx(0.55) << endl;
+cout << "gsl_sf_pow_int(0.55, 0) = " << gslsfpowint(0.55, 0) << endl;
+cout << "gsl_sf_psi_int(0) = " << gslsfpsiint(0) << endl;
+cout << "gsl_sf_psi(0.55) = " << gslsfpsi(0.55) << endl;
+cout << "gsl_sf_psi_1piy(0.55) = " << gslsfpsi1piy(0.55) << endl;
+cout << "gsl_sf_psi_1_int(0) = " << gslsfpsi1int(0) << endl;
+cout << "gsl_sf_psi_1(0.55) = " << gslsfpsi1(0.55) << endl;
+cout << "gsl_sf_psi_n(0, 0.55) = " << gslsfpsin(0, 0.55) << endl;
+cout << "gsl_sf_synchrotron_1(0.55) = " << gslsfsynchrotron1(0.55) << endl;
+cout << "gsl_sf_synchrotron_2(0.55) = " << gslsfsynchrotron2(0.55) << endl;
+cout << "gsl_sf_transport_2(0.55) = " << gslsftransport2(0.55) << endl;
+cout << "gsl_sf_transport_3(0.55) = " << gslsftransport3(0.55) << endl;
+cout << "gsl_sf_transport_4(0.55) = " << gslsftransport4(0.55) << endl;
+cout << "gsl_sf_transport_5(0.55) = " << gslsftransport5(0.55) << endl;
+cout << "gsl_sf_sin(0.55) = " << gslsfsin(0.55) << endl;
+cout << "gsl_sf_cos(0.55) = " << gslsfcos(0.55) << endl;
+cout << "gsl_sf_hypot(0.55, 0.55) = " << gslsfhypot(0.55, 0.55) << endl;
+cout << "gsl_sf_sinc(0.55) = " << gslsfsinc(0.55) << endl;
+cout << "gsl_sf_lnsinh(0.55) = " << gslsflnsinh(0.55) << endl;
+cout << "gsl_sf_lncosh(0.55) = " << gslsflncosh(0.55) << endl;
+cout << "gsl_sf_angle_restrict_symm(0.55) = " << gslsfanglerestrictsymm(0.55) << endl;
+cout << "gsl_sf_angle_restrict_pos(0.55) = " << gslsfanglerestrictpos(0.55) << endl;
+cout << "gsl_sf_zeta_int(0) = " << gslsfzetaint(0) << endl;
+cout << "gsl_sf_zeta(0.55) = " << gslsfzeta(0.55) << endl;
+cout << "gsl_sf_zetam1(0.55) = " << gslsfzetam1(0.55) << endl;
+cout << "gsl_sf_zetam1_int(0) = " << gslsfzetam1int(0) << endl;
+cout << "gsl_sf_hzeta(0.55, 0.55) = " << gslsfhzeta(0.55, 0.55) << endl;
+cout << "gsl_sf_eta_int(0) = " << gslsfetaint(0) << endl;
+cout << "gsl_sf_eta(0.55) = " << gslsfeta(0.55) << endl;
+load "scotch"
+load "metis"
+
+/*# beginPartition #*/
+macro ffddmbuildDmeshf(prmesh, Th, partdof, sizeoverlaps)
+if (prmesh#isincomm)
+{
+ prmesh#tic(prmesh#tdecompi)
+ if (!prmesh#excluded) {
+ int backup = searchMethod;
+ searchMethod = 1;
+
+ int ssplit = max(prmesh#inexactCSsplit,1);
+
+ prmesh#overlap = sizeoverlaps*ssplit;
+
+ if (prmesh#npart == 1) {
+ if (ffddmsplit*ssplit == 1)
+ prmesh#Thi = Th;
+ else
+ prmesh#Thi=trunc(Th,1,split=ssplit*ffddmsplit); /* freefem's trick, formal definition*/
+
+ prmesh#aTh[0]=prmesh#Thi;
+ real[int] one(prmesh#VhiP1.ndof);
+ one=1.;
+ prmesh#RihP1[0]=one;
+ prmesh#DP1[0]=1.;
+ }
+ else
+ for(int ii=0;ii 0.001 && (suppSmooth < 0.999));
+ fespace Oh(neighbors, P0);
+ Oh partOverlap = part;
+
+ Unique(partOverlap[], arrayIntersectioni);
+
+ }
+
+ prmesh#VhiP1[int] partitionIntersectioni(arrayIntersectioni.n);
+ prmesh#partitionIntersectionbasei.resize(arrayIntersectioni.n);
+
+ IFMACRO(!prmesh#partcubes)
+ if(ffddmsplit>1) {
+ overlapName = trunc(overlapName, suppSmooth > 0.001, split = ffddmsplit, label=9999);
+ supp = abs(part - ii) < 0.1;
+ suppSmooth = 0;
+ AddLayers(overlapName, supp[], (sizeoverlaps == 0) + 2 * sizeoverlaps, suppSmooth[]);
+ }
+ ENDIFMACRO
+
+ prmesh#Thi = trunc(overlapName, suppSmooth > 0.001, split=ssplit);
+ overlapName = trunc(overlapName, suppSmooth > 0.001, label=9999);
+
+ supp = supp;
+ suppSmooth = suppSmooth;
+
+ prmesh#meshN borderName;
+ if (sizeoverlaps > 0) {
+
+ IFMACRO(prmesh#partcubes,1)
+ prmesh#Thi=trunc(overlapName, abs(part - ii) < 0.1, label = 9999);
+ real lx, ly, lz, ux, uy, uz;
+ lx = ly = lz = 1e+30;
+ ux = uy = uz = -1.e+30;
+ int[int] labs(6), labsi(6);
+ labs = 0;
+
+ for (int ii=0; ii 0.501, label = ffddminterfacelabel);
+ if (prmesh#Thi.nt != overlapName.nt)
+ borderName = trunc(overlapName, (suppSmooth > (sizeoverlaps - 0.999) / (2 * sizeoverlaps)) && (suppSmooth < 0.501), label = (abs(ffddminterfacelabel) + 1) * 100);
+ ENDIFMACRO
+ }
+ else {
+ fespace fP0(prmesh#Thi,P0);
+ fP0 part0 = part;
+ prmesh#Thi = trunc(prmesh#Thi, abs(part - ii) < 0.1, label = ffddminterfacelabel);
+ borderName = trunc(overlapName, suppSmooth < 0.999, label = (abs(ffddminterfacelabel) + 1) * 100);
+ }
+
+ prmesh#VhiP1 khi;
+ if (sizeoverlaps > 0) {
+ khi = max(suppSmooth*2 - 1.0, 0.) ;
+ if(usedARGV("-steep") != -1)
+ khi = khi > 0.001 ? 1.0 : 0.0;
+
+ else if (usedARGV("-raspart") != -1) {
+ VhGlobalff phir;
+ PhGlobalff suppP0 = abs(ii - part) < 0.1;
+ varf vSuppi(u,v) = prmesh#intN(overlapName,qforder=1)(suppP0*v);
+ phir[] = vSuppi(0,VhGlobalff);
+ phir = phir > 0.;
+ khi = phir;
+ }
+ }
+ else {
+ khi[] = 1.;
+ }
+
+ prmesh#VhiP1 sum = khi;
+ VhGlobalff phi = 0, phibase = 0;
+
+ /*real eps=int2d(overlapName)(1.);*/
+ real eps = prmesh#intN(overlapName)(1.0);
+ real[int] epsn(arrayIntersectioni.n);
+ if(bpara){ /* version for very ugly meshes, not implemented yet for bseq*/
+ mpiRequest[int] rqn(2*arrayIntersectioni.n);
+ for(int j=0;j 0) {
+ AddLayers(overlapName, suppPartition[], sizeoverlaps, phi[]);
+ phibase[] = phi[];
+
+ if(usedARGV("-steep") != -1)
+ phi = phi > 0.001 ? 1.0 : 0.0;
+ else if (usedARGV("-raspart") != -1) {
+ VhGlobalff phir;
+ varf vSuppi(u,v) = prmesh#intN(overlapName,qforder=1)(suppP0*v);
+ phir[] = vSuppi(0,VhGlobalff);
+ phir = phir > 0.;
+ phi = phir;
+ }
+ }
+ else {
+ VhGlobalff phir;
+ varf vSuppi(u,v) = prmesh#intN(overlapName,qforder=1)(suppP0*v);
+ phir[] = vSuppi(0,VhGlobalff);
+ phir = phir > 0.;
+ phi = phir;
+ phibase[] = phi[];
+ }
+
+ /*real intersection=prmesh#intN(overlapName)(phibase)/eps;*/
+ /*if(arrayIntersectioni[i] <=1)*/
+ real epsi=0;
+ if(bpara){ /* version for very ugly meshes, not implemented yet for bseq */
+ epsi = min(eps,epsn[i]);
+ }
+ else{
+ epsi = eps;
+ }
+ real intersection;
+ if (prmesh#overlap > 0)
+ intersection = prmesh#intN(overlapName)(phibase) / epsi;
+ else {
+ partitionIntersectioni[numberIntersectioni] = phi;
+ intersection = partitionIntersectioni[numberIntersectioni][].max;
+ }
+ if( intersection>1e-6)
+ {
+ partitionIntersectioni[numberIntersectioni] = phi;
+
+ prmesh#partitionIntersectionbasei[numberIntersectioni] = phibase;
+
+ sum[] += partitionIntersectioni[numberIntersectioni][];
+ arrayIntersectioni[numberIntersectioni++] = arrayIntersectioni[i];
+ }
+
+ }
+
+ khi[] = khi[] ./= sum[];
+
+ overlapName = prmesh#minimalMesh;
+ if(numberIntersectioni != arrayIntersectioni.n)
+ arrayIntersectioni.resize(numberIntersectioni);
+
+ /* PoU for inexactsplit > 1 */
+ if (prmesh#inexactCSsplit > 1) {
+
+ fespace Phi(prmesh#Thi,P0);
+ Phi suppP0i = abs(ii - part) < 0.1;
+ varf vSuppii(u,v) = prmesh#intN(prmesh#Thi,qforder=1)(suppP0i*v);
+ prmesh#VhiP1 phiri;
+ phiri[] = vSuppii(0,prmesh#VhiP1);
+ phiri = phiri > 0.;
+
+ prmesh#VhiP1 sumi = phiri;
+
+ for(int i = 0; i < arrayIntersectioni.n; ++i) {
+ Phi suppP0n = abs(arrayIntersectioni[i] - part) < 0.1;
+ varf vSuppin(u,v) = prmesh#intN(prmesh#Thi,qforder=1)(suppP0n*v);
+ prmesh#VhiP1 phirn;
+ phirn[] = vSuppin(0,prmesh#VhiP1);
+ phirn = phirn > 0.;
+ sumi[] += phirn[];
+ }
+
+ khi[] = phiri[] ./= sumi[];
+ }
+
+ if (bpara) {
+ prmesh#numberIntersection = numberIntersectioni;
+ prmesh#arrayIntersection.resize(prmesh#numberIntersection);
+ prmesh#arrayIntersection = arrayIntersectioni;
+ }
+
+ if(!bnoGlob)
+ {
+ fespace prmesh#VhglobP1(prmesh#Thglob,P1);
+ prmesh#RihP1[ii]=interpolate(prmesh#VhiP1,prmesh#VhglobP1);
+
+
+ int[int] I(1),J(1);
+ real[int] Kc(1);
+ [I,J,Kc] = prmesh#RihP1[ii];
+ for (int i=0;i 0.99)
+ Kc[i] = 1.;
+ prmesh#RihP1[ii] = [I,J,Kc];
+
+ prmesh#RihP1[ii].thresholding(1e-10);
+ prmesh#RihP1[ii].resize(prmesh#VhiP1.ndof,prmesh#VhglobP1.ndof);
+ }
+
+ prmesh#aTh[ii]=prmesh#Thi;
+ prmesh#aThborder[ii]=trunc(borderName,1,split=ssplit);
+
+ if (bpara && prmesh#overlap == 0) {
+ IFMACRO(prmesh#mminoverlap,1)
+ fespace prmesh#PhAugP0(prmesh#AugThi,P0);
+ prmesh#PhAugP0 phaug = part;
+ prmesh#partAug.resize(prmesh#PhAugP0.ndof);
+ prmesh#partAug = phaug[];
+ ENDIFMACRO
+ IFMACRO(prmesh#mminoverlap,0)
+ cout << "["+Stringification(prmesh)+"] ffddmbuildDmesh PB: you need to define macro \""+Stringification(prmesh)+"mminoverlap\" to 1 when using overlap=0, e.g. by adding \"-D"+Stringification(prmesh)+"mminoverlap=1\" to the command line" << endl;
+ assert(0);
+ ENDIFMACRO
+ ;
+ }
+
+ prmesh#DP1[ii] = khi;
+
+ if (!bnopartloc) {
+ fespace Phii0(prmesh#Thi,P0);
+ Phii0 prmesh#p0 = part;
+ prmesh#partloc.resize(Phii0.ndof);
+ prmesh#partloc = prmesh#p0[];
+ }
+ }
+ searchMethod = backup;
+ }
+
+ if (bseq)
+ prmesh#Thi = prmesh#Thglob;
+
+ prmesh#toc(prmesh#tdecompi,"",prmesh#tdecomp)
+}
+//EOM
+
+macro ffddminitDmeshf(prmesh,comm)
+IFMACRO(!prmesh#meshinit)
+
+IFMACRO(((!prmesh#dim)&(dimension,2))|(prmesh#dim,2))
+NewMacro prmesh#meshN()mesh EndMacro /* two-dimensional problem */
+NewMacro prmesh#intN()int2d EndMacro /* two-dimensional integral */
+NewMacro prmesh#intbN()int1d EndMacro /* one-dimensional integral */
+NewMacro prmesh#minimalMesh()square(1,1) EndMacro
+ENDIFMACRO
+
+IFMACRO(((!prmesh#dim)&(dimension,3))|(prmesh#dim,3))
+NewMacro prmesh#meshN()mesh3 EndMacro /* three-dimensional problem */
+NewMacro prmesh#intN()int3d EndMacro /* three-dimensional integral */
+NewMacro prmesh#intbN()int2d EndMacro /* two-dimensional integral */
+NewMacro prmesh#minimalMesh()cube(1,1,1) EndMacro
+ENDIFMACRO
+
+IFMACRO(((!prmesh#dim)&(dimension,3S))|(prmesh#dim,3S))
+NewMacro prmesh#meshN()meshS EndMacro /* three-dimensional surface problem */
+NewMacro prmesh#intN()int2d EndMacro
+NewMacro prmesh#intbN()int1d EndMacro
+NewMacro prmesh#minimalMesh()square3(1,1,[x,y,z]) EndMacro
+ENDIFMACRO
+
+IFMACRO(((!prmesh#dim)&(dimension,3L))|(prmesh#dim,3L))
+NewMacro prmesh#meshN()meshL EndMacro /* three-dimensional line problem */
+NewMacro prmesh#intN()int1d EndMacro
+NewMacro prmesh#intbN()int0d EndMacro
+NewMacro prmesh#minimalMesh()Sline(2,[x,y,z]) EndMacro
+ENDIFMACRO
+
+int prmesh#npart = ffddmnpart;
+
+/*int prmesh#verbosity = ffddmverbosity;*/
+
+real prmesh#tdecompi;
+real prmesh#tdecomp = 0;
+
+NewMacro prmesh#tic(tim) tim = mpiWtime(); EndMacro
+NewMacro prmesh#toc(tim,msg,totaltime)
+if (prmesh#isincomm)
+{
+ tim = mpiWtime() - tim;
+
+ real ttimeg = 0;
+ mpiAllReduce(tim,ttimeg,prmesh#mpicomm,mpiMAX);
+ if ((mpiRank(prmesh#mpicomm) == 0) /*&& (prmesh#verbosity > 0)*/ && (msg != ""))
+ cout << "["+Stringification(prmesh)+"] timings - " << msg << " : " << ttimeg << " s" << endl;
+ totaltime += ttimeg;
+
+ /*totaltime += tim;*/
+}
+EndMacro
+
+NewMacro prmesh#toccomm(tim,msg,totaltime,comm)
+if (prmesh#isincomm)
+{
+ tim = mpiWtime() - tim;
+
+ real ttimeg = 0;
+ mpiAllReduce(tim,ttimeg,comm,mpiMAX);
+ if ((mpiRank(comm) == 0) && (msg != ""))
+ cout << "["+Stringification(prmesh)+"] timings - " << msg << " : " << ttimeg << " s" << endl;
+ totaltime += ttimeg;
+
+ /*totaltime += tim;*/
+}
+EndMacro
+
+prmesh#meshN prmesh#Thi = prmesh#minimalMesh;
+
+fespace prmesh#VhiP1(prmesh#Thi,P1);
+
+prmesh#VhiP1[int] prmesh#partitionIntersectionbasei(0);
+
+int prmesh#overlap = 0;
+
+int prmesh#numberIntersection = 0;
+
+int[int] prmesh#arrayIntersection(0);
+
+prmesh#meshN prmesh#Thglob = prmesh#minimalMesh;
+
+matrix[int] prmesh#RihP1(prmesh#npart);
+prmesh#VhiP1[int] prmesh#DP1(prmesh#npart);
+
+NewMacro prmesh#mpicomm()comm EndMacro
+
+int[int] prmesh#procddm = [mpirank];
+int[int] prmesh#procCS = [mpirank];
+
+int prmesh#isincomm = (mpiRank(comm) >= 0);
+
+int prmesh#excluded = !prmesh#isincomm;
+
+if (prmesh#isincomm) {
+ int[int] globranks(mpiSize(comm));
+ int myglobrank = mpirank;
+
+ mpiAllgather(myglobrank,globranks,comm);
+
+ if ((prmesh#pCS > 1) && (mpiRank(comm) < prmesh#pCS)) {
+ prmesh#procCS.resize(prmesh#pCS);
+ for (int i=0; i 1)
+ for (int i=0; i 1)
+ for (int i=0; i= 5)) {
+ if (ffddmbffplot)
+ plot(upart,wait=0,cmm="partition",value=1,fill=1);
+ if (ffddmbmedit)
+ medit("partition",Th,upart);
+ }
+
+ res.resize(upart[].n);
+ res = upart[];
+ }
+
+ prmesh#toc(prmesh#tdecompi,"",prmesh#tdecomp)
+}
+// EOM
+
+macro ffddminitDfespacef(prfe,prmsh,scalar,udef,uinit,mPk,udefpart,uinitpart,mPkP0)
+IFMACRO(!prfe#feinit)
+NewMacro prfe#prmesh()prmsh EndMacro
+
+NewMacro prfe#K scalar EndMacro
+NewMacro prfe#mdef udef EndMacro
+NewMacro prfe#minit uinit EndMacro
+
+NewMacro prfe#mdefpart udefpart EndMacro
+NewMacro prfe#minitpart uinitpart EndMacro
+
+NewMacro prfe#fPk mPk EndMacro
+NewMacro prfe#fPkP0 mPkP0 EndMacro
+
+fespace prfe#Vhi(prmsh#Thi,prfe#fPk);
+
+fespace prfe#Vhglob(prmsh#Thglob,prfe#fPk);
+
+prfe#K[int][int] prfe#Dk(prmsh#npart);
+
+matrix[int] prfe#Rih(prmsh#npart); /* local restriction operators */
+matrix[int] prfe#Dih(prmsh#npart); /* partition of unity operators */
+
+matrix[int] prfe#restrictionIntersection(0);
+
+/* communication buffers */
+prfe#K[int][int] prfe#rcv(0);
+prfe#K[int][int] prfe#snd(0);
+
+int prfe#Ndofglobal = 0;
+
+IFMACRO(prmsh#buildAug,1)
+matrix prfe#Auginterp;
+ENDIFMACRO
+
+/* Update u_i = R_i sum_j (R_j' u_j)
+ if (scale) u_i = R_i sum_j (R_j' D_j u_j)
+ using communication buffers in the overlap */
+func int prfe#update(scalar[int] vv, bool scale)
+{
+ if (!prmsh#excluded)
+ {
+ if (scale)
+ vv = vv .* prfe#Dk[mpiRank(prmsh#commddm)];
+ mpiRequest[int] rq(prmsh#numberIntersection*2);
+ for(int j=0;j& m, bool scale)
+{
+ if (!prmsh#excluded)
+ {
+ matrix[int] rest(prmsh#arrayIntersection.n);
+ matrix[int] restSend(prmsh#arrayIntersection.n);
+
+ mpiRequest[int] rq(prmsh#numberIntersection*2);
+ for(int j=0;j extens = prfe#restrictionIntersection[j]'*rest[j];
+ extens = extens*prfe#restrictionIntersection[j];
+ m = m + extens;
+ }
+ }
+ return 0;
+}
+
+func int prfe#updatematrix(scalar[int,int]& m, bool scale)
+{
+ if (!prmsh#excluded)
+ {
+ scalar[int,int][int] rest(prmsh#arrayIntersection.n);
+ scalar[int,int][int] restSend(prmsh#arrayIntersection.n);
+
+ mpiRequest[int] rq(prmsh#numberIntersection*2);
+ for(int jj=0;jj prfe#transferMat#VhName;
+matrix prfe#transferMat#VhName#restrict;
+ENDIFMACRO
+
+if (prmsh#isincomm)
+{
+assert(!bnopartloc);
+fespace prfe#Phtransfer(prmsh#Thi,P0);
+prfe#Phtransfer partkP0;
+partkP0[] = prmsh#partloc;
+prmsh#meshN Ths = trunc(prmsh#Thi, abs(partkP0 - mpirank) < 1e-2);
+reconstructDmesh(Ths)
+Mat Mats;
+createMat(Ths, Mats, prfe#fPk)
+
+matrix At(VhName.ndof, VhName.ndof);
+Mat Matt(At);
+
+prmsh#meshN Thtarget = VhName.Th;
+
+transferMat(Ths, prfe#fPk, Mats, Thtarget, Pknew, Matt, prfe#transferMat#VhName)
+
+fespace prfe#Vhitransfer(Ths,prfe#fPk);
+matrix R = interpolate(prfe#Vhitransfer,prfe#Vhi);
+prfe#transferMat#VhName#restrict = R;
+}
+
+IFMACRO(!prfe#transferMat#VhName#init)
+NewMacro prfe#transferMat#VhName#init()1 EndMacro
+ENDIFMACRO
+EndMacro
+
+NewMacro prfe#transferfromVhi(ui,VhName,Pknew,res)
+IFMACRO(!prfe#transferMat#VhName#init)
+prfe#buildtransferfromVhi(VhName,Pknew)
+ENDIFMACRO
+
+if (prmsh#isincomm)
+{
+prfe#K[int] rui = prfe#transferMat#VhName#restrict*ui[];
+res[] = prfe#transferMat#VhName*rui;
+}
+EndMacro
+
+NewMacro prfe#feinit()1 EndMacro
+ENDIFMACRO
+// EOM
+
+macro ffddmbuildDfespacef(prfe,prmsh,scalar,udef,uinit,mPk,udefpart,uinitpart,mPkP0)
+
+ffddminitDfespacef(prfe,prmsh,scalar,udef,uinit,mPk,udefpart,uinitpart,mPkP0)
+
+prfe#Ndofglobal = prfe#Vhglob.ndof;
+
+if (!bpara && ffddmverbosity)
+cout << "["+Stringification(prfe)+"] (seqddm) ndof = " << prfe#Ndofglobal << endl;
+
+if (prmsh#isincomm && !prmsh#excluded)
+{
+ for(int ii=0;ii 0) {
+
+ IFMACRO(prmsh#partcubes,1)
+ fespace Phii(prmsh#Thi,P0);
+ Phii parti;
+ parti[] = prmsh#partloc;
+ prmsh#meshN meshIntersection = trunc(prmsh#Thi, abs(parti - prmsh#arrayIntersection[i]) < 0.1);
+ real lx, ly, lz, ux, uy, uz;
+ lx = ly = lz = 1e+30;
+ ux = uy = uz = -1.e+30;
+ for (int ii=0; ii < meshIntersection.nbe; ii++)
+ for (int jj=0; jj < dimension; jj++){
+ lx = min(lx,meshIntersection.be(ii)[jj].x); ux = max(ux,meshIntersection.be(ii)[jj].x);
+ ly = min(ly,meshIntersection.be(ii)[jj].y); uy = max(uy,meshIntersection.be(ii)[jj].y);
+ IFMACRO(dimension,3)
+ lz = min(lz,meshIntersection.be(ii)[jj].z); uz = max(uz,meshIntersection.be(ii)[jj].z);
+ ENDIFMACRO
+ }
+
+ IFMACRO(dimension,2)
+ real p0x = prmsh#Thi(prmsh#Thi[0][0]).x, p0y = prmsh#Thi(prmsh#Thi[0][0]).y;
+ real p1x = prmsh#Thi(prmsh#Thi[0][1]).x, p1y = prmsh#Thi(prmsh#Thi[0][1]).y;
+ real p2x = prmsh#Thi(prmsh#Thi[0][2]).x, p2y = prmsh#Thi(prmsh#Thi[0][2]).y;
+ real h = min(sqrt((p1x-p0x)^2+(p1y-p0y)^2),sqrt((p2x-p0x)^2+(p2y-p0y)^2));
+ lx -= h*prmsh#overlap; ly -= h*prmsh#overlap;
+ ux += h*prmsh#overlap; uy += h*prmsh#overlap;
+ meshIntersection = trunc(prmsh#Thi, (x>=lx)&&(x<=ux)&&(y>=ly)&&(y<=uy), new2old = n2o, label=9999);
+ ENDIFMACRO
+ IFMACRO(dimension,3)
+ real p0x = prmsh#Thi(prmsh#Thi.be(0)[0]).x, p0y = prmsh#Thi(prmsh#Thi.be(0)[0]).y, p0z = prmsh#Thi(prmsh#Thi.be(0)[0]).z;
+ real p1x = prmsh#Thi(prmsh#Thi.be(0)[1]).x, p1y = prmsh#Thi(prmsh#Thi.be(0)[1]).y, p1z = prmsh#Thi(prmsh#Thi.be(0)[1]).z;
+ real p2x = prmsh#Thi(prmsh#Thi.be(0)[2]).x, p2y = prmsh#Thi(prmsh#Thi.be(0)[2]).y, p2z = prmsh#Thi(prmsh#Thi.be(0)[2]).z;
+ real h = min(sqrt((p1x-p0x)^2+(p1y-p0y)^2+(p1z-p0z)^2), sqrt((p2x-p0x)^2+(p2y-p0y)^2+(p2z-p0z)^2));
+ lx -= h*prmsh#overlap; ly -= h*prmsh#overlap; lz -= h*prmsh#overlap;
+ ux += h*prmsh#overlap; uy += h*prmsh#overlap; uz += h*prmsh#overlap;
+ meshIntersection = trunc(prmsh#Thi, (x>=lx)&&(x<=ux)&&(y>=ly)&&(y<=uy)&&(z>=lz)&&(z<=uz), new2old = n2o, label=9999);
+ ENDIFMACRO
+
+ ENDIFMACRO
+
+ IFMACRO(!prmsh#partcubes)
+ prmsh#meshN meshIntersection = trunc(prmsh#Thi, (prmsh#partitionIntersectionbasei[i] > 1.0e-6), new2old = n2o, label=9999);
+ ENDIFMACRO
+
+ fespace WhIntersection(meshIntersection, prfe#fPk);
+ int[int] renum = restrict(WhIntersection, prfe#Vhi,n2o);
+ int[int] Ic = (0:WhIntersection.ndof-1);
+ real[int] Kc(WhIntersection.ndof);
+ Kc = 1;
+ R = [Ic,renum,Kc];
+ R.resize(WhIntersection.ndof, prfe#Vhi.ndof);
+ }
+ else {
+ IFMACRO(prmsh#mminoverlap,1)
+ matrix RP1 = interpolate(prmsh#VhiP1,prmsh#AugVhiP1);
+ prmsh#AugVhiP1 partaugP1;
+ partaugP1[] = RP1'*prmsh#partitionIntersectionbasei[i][];
+ prmsh#meshN meshIntersection = trunc(prmsh#AugThi, (partaugP1 > 1.0e-6), new2old = n2o);
+ fespace prfe#PhAugP0(prmsh#AugThi,P0);
+ prfe#PhAugP0 paug;
+ paug[] = prmsh#partAug;
+ paug = abs(paug-prmsh#arrayIntersection[i]) < 0.1;
+ prmsh#meshN meshNeighbor = trunc(prmsh#AugThi, paug > 0.001, label=-10);
+
+ fespace WhIntersection(meshIntersection, prfe#fPkP0);
+
+ fespace WhNeighbor(meshNeighbor, prfe#fPkP0);
+
+ matrix Rn = interpolate(WhNeighbor,prfe#AugVhi,inside=true);
+
+ varf vneighbor(udef(u),udef(v)) = on(-10, udef(u) = uinit(1));
+ real[int] bbord = vneighbor(0,WhNeighbor,tgv=1);
+ real[int] bbordaug = Rn'*bbord;
+
+ int[int] renum = restrict(WhIntersection, prfe#AugVhi, n2o);
+
+ WhIntersection udefpart(utmpi);
+
+ matrix RR = interpolate(prfe#Vhi,prfe#AugVhi);
+
+ varf vbord(udef(u),udef(v)) = on(ffddminterfacelabel, udef(u) = uinit(1));
+ real[int] bmybord = vbord(0,prfe#Vhi,tgv=1);
+ real[int] bmybordaug = RR'*bmybord;
+
+ for [i,bi: utmpi[]] bi = (bbordaug[renum[i]] > 0.999 && bmybordaug[renum[i]] > 0.999 ? 1 : 0);
+
+ int[int] rest(WhIntersection.ndof);
+ int ninter = 0;
+ for (int j=0; j 0.999)
+ rest[ninter++] = renum[j];
+ rest.resize(ninter);
+ if (ninter > 0){
+ int[int] Ic(1);
+ if (ninter > 1)
+ Ic = (0:ninter-1);
+ real[int] Kc(ninter);
+ Kc = 1;
+ matrix Raug = [Ic,rest,Kc];
+ Raug.resize(ninter, prfe#AugVhi.ndof);
+ R = Raug*RR';
+ usum[] += R'*Kc;
+ }
+ else {
+ R.resize(0, prfe#AugVhi.ndof);
+ }
+ ENDIFMACRO
+ IFMACRO(prmsh#mminoverlap,0)
+ cout << "["+Stringification(prfe)+"] ffddmbuildDfespace PB: you need to define macro \""+Stringification(prmsh)+"mminoverlap\" to 1 when using overlap=0, e.g. by adding \"-D"+Stringification(prmsh)+"mminoverlap=1\" to the command line" << endl;
+ assert(0);
+ ENDIFMACRO
+ }
+
+ /*cout << mpirank << " " << prmsh#arrayIntersection[i] << " " << R.n << " " << R.m << endl;*/
+ prfe#restrictionIntersection[i] = R;
+ prfe#rcv[i].resize(prfe#restrictionIntersection[i].n);
+ prfe#snd[i].resize(prfe#restrictionIntersection[i].n);
+ }
+ searchMethod = backup;
+ }
+
+ if (prmsh#overlap == 0)
+ utmp[] = utmp[] ./= usum[];
+
+ prfe#Dk[ii].resize(Vhipart.ndof);
+ IFMACRO(prfe#K,complex)
+ prfe#Dk[ii].re = utmp[];
+ ENDIFMACRO
+ IFMACRO(prfe#K,real)
+ prfe#Dk[ii] = utmp[];
+ ENDIFMACRO
+ matrix Dihreal = utmp[];
+ Dihreal.thresholding(1e-10);
+ prfe#Dih[ii] = Dihreal;
+
+ if(!bnoGlob) {
+ matrix Rihreal=interpolate(prfe#Vhi,prfe#Vhglob);
+ int[int] I(1),J(1);
+ real[int] Kc(1);
+ [I,J,Kc] = Rihreal;
+ for (int i=0;i 0.99)
+ Kc[i] = 1.;
+ Rihreal = [I,J,Kc];
+ Rihreal.thresholding(1e-10);
+ prfe#Rih[ii] = Rihreal;
+ prfe#Rih[ii].resize(prfe#Vhi.ndof, prfe#Vhglob.ndof);
+ }
+
+ if (bseq)
+ prmsh#Thi = prmsh#Thglob;
+
+ if (bpara)
+ {
+ func ftest = x+y;
+ prfe#Vhi prfe#mdef(uu), prfe#mdef(vv) = prfe#minit(0.);
+
+ uu[] = 1.;
+
+ vv[] = prfe#Dk[ii];
+
+ prfe#K[int][int] rcv(prmsh#numberIntersection);
+ prfe#K[int][int] snd(prmsh#numberIntersection);
+
+ mpiRequest[int] rq(prmsh#numberIntersection*2);
+
+
+ for(int j=0;j 1.e-8)
+ cout << "["+Stringification(prfe)+"] Probleme partition de l'unite : uu[].linfty = " << uu[].linfty << endl;
+ }
+
+ if (bpara){
+ /* To count the total number of dofs (inspired from statistics hpddm) */
+ int ndofglobi=0;
+ int[int] table(prfe#Vhi.ndof);
+ /* table to label dofs */
+ table = ii;
+ for(int j=0;j prmesh#cubesnx * prmesh#cubesny * prmesh#cubesnz) {
+ prmesh#cubesnx = ni; prmesh#cubesny = nj; prmesh#cubesnz = nk;
+ }
+ }
+ p = prmesh#cubesnx * prmesh#cubesny * prmesh#cubesnz;
+
+ if (mpiRank(comm) == 0) cout << "The domain will be decomposed in " << prmesh#cubesnx << " x " << prmesh#cubesny << " x " << prmesh#cubesnz << " cubic subdomains" << endl;
+ if (mpiRank(comm) == 0 && (p != mpiSize(comm)))
+ cout << "WARNING: the cuboid decomposition will only use " << p << " of the " << mpiSize(comm) << " available cores" << endl;
+ prmesh#cubesnpart = p;
+}
+
+/* define sub-communicator if we are not using all cores */
+int[int] prmesh#Icubesauto = (0:prmesh#cubesnpart-1);
+mpiGroup prmesh#grpcubesauto(prmesh#Icubesauto);
+mpiComm prmesh#commcubesauto(comm,prmesh#grpcubesauto);
+
+ffddminitDmeshf(prmesh,prmesh#commcubesauto)
+
+IFMACRO(!prmesh#mminoverlap)
+NewMacro prmesh#mminoverlap()0 EndMacro
+ENDIFMACRO
+
+IFMACRO(!prmesh#buildAug)
+IFMACRO(prmesh#mminoverlap,1)
+NewMacro prmesh#buildAug()1 EndMacro
+ENDIFMACRO
+ENDIFMACRO
+
+IFMACRO(!prmesh#buildAug)
+NewMacro prmesh#buildAug()0 EndMacro
+ENDIFMACRO
+
+IFMACRO(prmesh#buildAug,1)
+int prmesh#AuginexactCSsplit = 0;
+int prmesh#AugbinexactCS = 0;
+int prmesh#AugbinexactgeneoCS = 0;
+int prmesh#AugpCS = ffddmpCS;
+int prmesh#Augexclude = ffddmexclude;
+IFMACRO(!prmesh#Augmminoverlap)
+NewMacro prmesh#Augmminoverlap()0 EndMacro
+ENDIFMACRO
+ffddminitDmeshf(prmesh#Aug,prmesh#commcubesauto)
+
+prmesh#AugThglob = prmesh#Thglob;
+IFMACRO (!prmesh#AugbuildAug)
+NewMacro prmesh#AugbuildAug()0 EndMacro
+ENDIFMACRO
+ENDIFMACRO
+
+if (prmesh#isincomm)
+{
+ int nx = prmesh#cubesnx, ny = prmesh#cubesny, nz = prmesh#cubesnz;
+ int zx = nx - (N[0]%nx), zy = ny - (N[1]%ny), zz = nz - (N[2]%nz);
+ int px = ceil(1.*N[0]/nx), py = ceil(1.*N[1]/ny), pz = ceil(1.*N[2]/nz);
+
+ if (mpiRank(prmesh#commcubesauto) == 0) cout << "Subdomain size " << px+1 << " x " << py+1 << " x " << pz+1 << endl;
+
+ int boundzl = mpiRank(prmesh#commcubesauto) / ( nx * ny );
+ int nr = mpiRank(prmesh#commcubesauto) - boundzl * nx * ny;
+ int boundyl = nr / nx;
+ int boundxl = nr % nx;
+
+ boundxl *= px; boundyl *= py; boundzl *= pz;
+
+ int boundzu = (mpiRank(prmesh#commcubesauto) / ( nx * ny ) < nz - 1 ? boundzl + pz - 1 : N[2]-1);
+ int boundyu = (nr / nx < ny - 1 ? boundyl + py - 1 : N[1] - 1);
+ int boundxu = (nr % nx < nx - 1 ? boundxl + px - 1 : N[0] - 1);
+
+ boundxl = max(0,boundxl-3*ffddmoverlap); boundxu = min(N[0]-1,boundxu+3*ffddmoverlap);
+ boundyl = max(0,boundyl-3*ffddmoverlap); boundyu = min(N[1]-1,boundyu+3*ffddmoverlap);
+ boundzl = max(0,boundzl-3*ffddmoverlap); boundzu = min(N[2]-1,boundzu+3*ffddmoverlap);
+
+ int nbnx = boundxu-boundxl+1;
+ int nbny = boundyu-boundyl+1;
+ int nbnz = boundzu-boundzl+1;
+
+ /* truncate global grid around the subdomain before partitioning to avoid defining the full grid */
+ real h = (B(0,1)-B(0,0))/N[0];
+ int[int] NN=[nbnx,nbny,nbnz];
+
+ real [int,int] BB=[[B(0,0)+boundxl*h,B(0,0)+(boundxu+1)*h],[B(1,0)+boundyl*h,B(1,0)+(boundyu+1)*h],[B(2,0)+boundzl*h,B(2,0)+(boundzu+1)*h]];
+ int [int,int] LL=[[L(0,0)+100*(boundxl!=0),L(0,1)+100*(boundxu!=N[0]-1)],[L(1,0)+100*(boundyl!=0),L(1,1)+100*(boundyu!=N[1]-1)],[L(2,0)+100*(boundzl!=0),L(2,1)+100*(boundzu!=N[2]-1)]];
+
+ mesh3 Thtcube = Cube(NN,BB,LL);
+
+ func int partcube(int ii, int jj, int kk) {
+ return min(kk / pz, int(nz-1))*nx*ny + min(jj / py, int(ny-1))*nx + min(ii / px, int(nx-1));
+ }
+
+ fespace prmesh#Phgcube(Thtcube,P0);
+ prmesh#Phgcube partglob;
+
+ /* define the regular partitioning as a P0 function on Th */
+ partglob=partcube(floor((x-B(0,0))/(B(0,1)-B(0,0))*N[0]), floor((y-B(1,0))/(B(1,1)-B(1,0))*N[1]), floor((z-B(2,0))/(B(2,1)-B(2,0))*N[2]));
+
+ ffddmbuildDmeshf(prmesh,Thtcube,partglob[],ffddmoverlap)
+}
+// EOM
+
+macro ffddmbuildDfespaceEdgeNested(prfe,prmesh,scalar,def,init,Pk,defpart,initpart,Pkpart)
+ffddmbuildDfespaceEdge(prfe#Coarse,prmesh#Coarse,scalar,def,init,Pk,defpart,initpart,Pkpart)
+ffddmbuildDfespaceEdge(prfe,prmesh,scalar,def,init,Pk,defpart,initpart,Pkpart)
+// EOM
+
+macro ffddmbuildDfespaceNested(prfe,prmesh,scalar,def,init,Pk)
+ffddmbuildDfespaceEdgeNested(prfe,prmesh,scalar,def,init,Pk,def,init,Pk)
+// EOM
+
+macro ffddmbuild(pr,Th,scalar,def,init,Pk,comm)
+ffddmbuildDmesh(pr,Th,comm)
+ffddmbuildDfespace(pr,pr,scalar,def,init,Pk)
+// EOM
+
+macro ffddmbuildEdge(pr,Th,scalar,def,init,Pk,defpart,initpart,Pkpart,comm)
+ffddmbuildDmesh(pr,Th,comm)
+ffddmbuildDfespaceEdge(pr,pr,scalar,def,init,Pk,defpart,initpart,Pkpart)
+// EOM
+
+macro ffddmbuildEdgeNested(pr,Thc,sp,scalar,def,init,Pk,defpart,initpart,Pkpart,comm)
+ffddmbuildDmeshNested(pr,Thc,sp,comm)
+ffddmbuildDfespaceEdgeNested(pr,pr,scalar,def,init,Pk,defpart,initpart,Pkpart)
+// EOM
+
+macro ffddmbuildNested(pr,Thc,sp,scalar,def,init,Pk,comm)
+ffddmbuildEdgeNested(pr,Thc,sp,scalar,def,init,Pk,def,init,Pk,comm)
+// EOM
+
+macro ffddmbuildEdgeAug(pr,Th,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+IFMACRO(!pr#buildAug)
+NewMacro pr#buildAug()1 EndMacro
+ENDIFMACRO
+ffddmbuildEdge(pr,Th,scalar,def,init,Pk,defpart,initpart,PkP0,comm) // EOM
+
+macro ffddmbuildAug(pr,Th,scalar,def,init,Pk,comm)
+ffddmbuildEdgeAug(pr,Th,scalar,def,init,Pk,def,init,Pk,comm) // EOM
+
+/*
+macro ffddmbuildEdge(pr,Th,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+if ((mpirank == 0) && ffddmverbosity)
+cout << "Building decomposition from mesh of " << Th.nt << " elements" << endl;
+int pr#inexactCSsplit = 0;
+int pr#binexactCS = 0;
+int pr#pCS = ffddmpCS;
+int pr#exclude = ffddmexclude;
+ffddminitf(pr,Th,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+
+IFMACRO(pr#buildAug,1)
+int pr#AuginexactCSsplit = 0;
+int pr#AugbinexactCS = 0;
+int pr#AugpCS = ffddmpCS;
+int pr#Augexclude = ffddmexclude;
+ffddminitf(pr#Aug,Th,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+pr#Augverbosity = pr#verbosity;
+ENDIFMACRO
+
+{
+real[int] partition;
+ffddmpartf(pr,Th,partition)
+ffddmbuildf(pr,Th,partition)
+
+IFMACRO(pr#buildAug,1)
+ffddmoverlap += 1;
+ffddmbuildf(pr#Aug,Th,partition)
+ffddmoverlap -= 1;
+ENDIFMACRO
+}
+
+IFMACRO(pr#buildAug,1)
+if (bseq)
+pr#Auginterp = interpolate(pr#AugVhi,pr#Vhglob);
+else if (bpara)
+pr#Auginterp = interpolate(pr#Vhi,pr#AugVhi);
+ENDIFMACRO
+// EOM
+
+macro ffddmbuild(pr,Th,scalar,def,init,Pk,comm)
+ffddmbuildEdge(pr,Th,scalar,def,init,Pk,def,init,Pk,comm) // EOM
+
+macro ffddmbuildaugEdge(pr,Th,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+NewMacro pr#buildAug()1 EndMacro
+ffddmbuildEdge(pr,Th,scalar,def,init,Pk,defpart,initpart,PkP0,comm) // EOM
+
+macro ffddmbuildaug(pr,Th,scalar,def,init,Pk,comm)
+ffddmbuildaugEdge(pr,Th,scalar,def,init,Pk,def,init,Pk,comm) // EOM
+
+macro ffddmbuildNestedEdge(pr,Thc,sp,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+if ((mpirank == 0) && !bpara)
+cout << "ffddmbuildNestedEdge PB: two-level nested mesh decomposition is to be used only in parallel mode" << endl;
+assert(bpara);
+if ((mpirank == 0) && ffddmverbosity)
+cout << "Building nested decomposition from coarse mesh of " << Thc.nt << " elements, with splitting parameter " << sp << endl << "Setting binexactCS = 1, pCS = mpisize, exclude = 0 for prefix \""+Stringification(pr)+"\"" << endl;
+
+int pr#inexactCSsplit = sp;
+int pr#binexactCS = 1;
+NewMacro pr#minexactCS 1 EndMacro
+int pr#pCS = ffddmpCS;
+int pr#exclude = ffddmexclude;
+
+int pr#CoarseinexactCSsplit = 1;
+int pr#CoarsebinexactCS = 0;
+int pr#CoarsepCS = ffddmpCS;
+int pr#Coarseexclude = ffddmexclude;
+
+ffddminitf(pr#Coarse,Thc,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+ffddminitf(pr,Thc,scalar,def,init,Pk,defpart,initpart,PkP0,comm)
+
+{
+real[int] partition;
+ffddmpartf(pr,Thc,partition)
+ffddmbuildf(pr#Coarse,Thc,partition)
+ffddmbuildf(pr,Thc,partition)
+}
+
+pr#Coarseverbosity = 1;
+
+// EOM
+
+macro ffddmbuildNested(pr,Thc,sp,scalar,def,init,Pk,comm) ffddmbuildNestedEdge(pr,Thc,sp,scalar,def,init,Pk,def,init,Pk,comm) // EOM
+*/
+load "msh3"
+load "medit"
+// ! basic functions to build regular mesh of a cube
+/*
+ mesh3 Cube(NN,BB,L);
+ -- build the surface mesh of a 3d box
+ where: for exqmple:
+ int[int] NN=[nx,ny,nz]; // the number of seg in the 3 direction
+ real [int,int] BB=[[xmin,xmax],[ymin,ymax],[zmin,zmax]]; // bounding bax
+ int [int,int] L=[[1,2],[3,4],[5,6]]; // the label of the 6 face left,right, front, back, down, right
+*/
+func mesh3 Cube(int[int] & NN,real[int,int] &BB ,int[int,int] & L)
+{
+ // first build the 6 faces of the hex.
+ real x0=BB(0,0),x1=BB(0,1);
+ real y0=BB(1,0),y1=BB(1,1);
+ real z0=BB(2,0),z1=BB(2,1);
+
+ int nx=NN[0],ny=NN[1],nz=NN[2];
+ mesh Thx = square(nx,ny,[x0+(x1-x0)*x,y0+(y1-y0)*y]);
+
+ int[int] rup=[0,L(2,1)], rdown=[0,L(2,0)],
+ rmid=[1,L(1,0), 2,L(0,1), 3, L(1,1), 4, L(0,0) ];
+ mesh3 Th=buildlayers(Thx,nz, zbound=[z0,z1],
+ labelmid=rmid, labelup = rup,
+ labeldown = rdown);
+
+ return Th;
+}
+func mesh3 Cube(int Nx,int Ny,int Nz)
+{
+ int[int] NN=[Nx,Ny,Nz];
+ real [int,int] BB=[[0,1],[0,1],[0,1]];
+ int[int,int] LL=[[1,2],[3,4],[5,6]];
+ return Cube(NN,BB,LL);
+}
+
+
+
+// --- begin meshes building --------------
+real[int] theta(nbsd+1),cost(nbsd),sint(nbsd);
+
+for (int i=0;i=0 && jv>=0)
+ w(i,j) = v(iv,jv);
+ }
+ return w;
+}
+
+func int [int,int] renum1(int [int,int] & v,int[int] &I,int[int] &J)
+{
+ int [int,int] w(I.n,J.n);
+ w=0;
+ for(int i=0; i=0 && jv>=0)
+ w(iv,jv) = v(i,j);
+ }
+ return w;
+}
+
+func int [int] renum(int [int] & v,int[int] &I)
+{
+ int [int] w(I.n);
+ w=0;
+ for(int i=0; i=0 )
+ w(i) = v(iv);
+ }
+ return w;
+}
+
+func int [int] renum1(int [int] & v,int[int] &I)
+{
+ int [int] w(I.n);
+ w=0;
+ for(int i=0; i=0 )
+ w(iv) = v(i);
+ }
+ return w;
+}
+
+func bool CCt(string t,real[int,int] & v)
+{ real[int,int] vt = v';
+ CC(t,vt);
+}
+func bool CCt(string t,int[int,int] & v)
+{ int[int,int] vt = v';
+ CC(t,vt);
+}
+/*
+ a function do movemesh add some laplacien smoothing before movemesh
+ Th mesh,
+ lab the array of label with fixe diplacement on boundary
+ ux,uy the x,y movevement (P1 fespace on Th)
+ nstep : max number of laplacien smoothing
+*/
+func mesh movemeshsmooth(mesh & Th,int[int] &lab,real[int] &ux,real[int] &uy,int nstep)
+{
+fespace WWWWWh(Th,P1);
+WWWWWh u,v;
+WWWWWh uo,vo;
+u[]=ux;
+v[]=uy;
+uo[]=ux;
+vo[]=uy;
+varf vmass(u,v) = int2d(Th)(u*v/area);
+varf vmass1(u,v) = int2d(Th)(v/area);
+varf vonu(u,v) = on(lab,u=uo);
+varf vonv(u,v) = on(lab,u=vo);
+matrix Mg = vmass(WWWWWh,WWWWWh);
+real[int] Dii = vmass1(0,WWWWWh);
+real[int] D1(Dii.n); D1=1;
+D1 = D1 ./ Dii;
+int step ;
+for(step= 0; step < nstep; ++ step)
+{
+ real[int] um=Mg*u[];
+ um ./= Dii;
+ um += vonu(0,WWWWWh,tgv=1);
+ real[int] vm=Mg*v[];
+ vm ./= Dii;
+ vm += vonv(0,WWWWWh,tgv=1);
+ u[] -= um;
+ v[] -= vm;
+
+ real err = u[].linfty + v[].linfty ;
+ u[]=um;
+ v[]=vm;
+ if(verbosity>5) cout << " err "<< err << " " << step << endl;
+
+ if(verbosity>9999){
+ if(verbosity>99999) plot([u,v], wait=1);
+ mesh Thm= movemesh(Th,[u,v]);
+ plot(Thm,Th);
+ }
+ if(err < 1e-6) break;
+}
+return movemesh(Th,[u,v]);
+}
+/*
+// For test ...
+// smothing before move mesh
+mesh Th=square(3,3);
+int[int] lab=[1,2,3,4];
+Th=adaptmesh(Th,0.1,IsMetric=1);
+fespace Vh(Th,P1);
+
+Vh u=x,v=y;
+verbosity=10;
+Th=movemeshsmooth(Th,lab,u[],v[],100);
+*/
+NewMacro DMMDeffuncAndGlobals(prefix,comm,jpart,Whi,Vhc,Pknbcomp,Ai,vPbC,onG10,Pii,Usend,Vrecv,U2V)
+/*
+
+*/
+
+int prefix#rgmres=0;
+int prefix#kiter=-1;
+/* the global name user... */
+/*
+ jpart,njpart : partition
+ Usend, Vrecv : buffer
+ Ai , Bi
+ rMj, sMj : matrices
+
+ onG10: tgv only on DDM s Gamma and not on Gamma
+*/
+/*---- for coarse solver ... */
+
+
+matrix prefix#AC,prefix#Rci,prefix#Pci;/**/
+{
+int[int] Sigma11=U2V;
+prefix#Pci= interpolate(Whi,VhC,U2Vc=Sigma11);
+prefix#Rci = prefix#Pci'*Pii;
+/*Rci= interpolate(Whi,VhC,t=1,U2Vc=Sigma11(0:Pknbcomp-1));
+Pci = Pii*Rci'; */
+}
+
+/*----End of Global Def -------------*/
+
+/*-----------------*/
+/*-----------------*/
+
+
+func bool prefix#Update(real[int] &ui, real[int] &vi)
+{
+ for(int j=0;j I ~ - C1AC2A +C1A +C2A
+ New Prec P= C1+C2 - C1AC2 = C1(I- A C2) +C2
+ ( C1(I- A C2) +C2 ) Uo
+ V = - C2*Uo
+ .... */
+ real[int] V(U.n);
+ prefix#CoarseSolve(V,U,comm);
+ V = -V; /* -C2*Uo */
+ U += Ai*V; /* U = (I-A C2) Uo */
+ real[int] b= onG10 ? 0. : U;
+ U = Ai^-1*b; /* ( C1( I -A C2) Uo */
+ V = U -V; /**/
+ prefix#Update(V,U);
+ return U;
+}
+
+/*-----------------*/
+/*-----------------*/
+/*-----------------*/
+
+func real[int] prefix#PDJC2(real[int]& U) /* bogus ???? */
+{ /* Precon C1= precon Coarse C2 precon Precon
+ Idea : F. Nataf.
+ 0 ~ (I C1A)(I-C2A) => I ~ - C1AC2A +C1A +C2A
+ New Prec P= C1+C2 - C1AC2 = C1(I- A C2) +C2
+ ( C1(I- A C2) +C2 ) Uo
+ V = - C2*Uo
+ ....
+ V = - C2 Uo
+ W = Uo + A V
+ V + C1 W
+ */
+ real[int] V(U.n);
+ real[int] b= onG10 ? 0. : U;
+ V = Ai^-1*b;
+ b=U;
+
+ V = -V;
+ prefix#Update(V,U);
+ U += Ai*V;
+
+ prefix#CoarseSolve(U,b,comm);
+ V = U -V;
+ prefix#Update(V,U);
+ return U;
+}
+/*-----------------*/
+/*-----------------*/
+/*-----------------*/
+
+ func real[int] prefix#DJ0(real[int]& U)
+{
+ ++prefix#kiter;
+ real[int] V(U.n);
+ real[int] b= onG10 .* U;
+ b = onG10 ? b : Bi ;
+ V = Ai^-1*b;
+ prefix#Update(V,U);
+ V -= U;
+ return V;
+}
+
+/*-----------------*/
+/*-----------------*/
+/*-----------------*/
+
+func bool prefix#CheckUpdate()
+{ /* verification.....*/
+
+ Whi defPk#Pknbcomp(u,) =Times#Pknbcomp(1),defPk#Pknbcomp(v,);
+ prefix#Update(u[],v[]);
+ u[]-=v[];
+ if(mpirank==0 || (u[].linfty>1e-6))
+ cout << "CheckUpdate " << u[].linfty << " rank: " << mpirank <1e-6) plot(u,cmm="bug ????");
+ assert( u[].linfty<1e-6);
+
+ return 1; }
+
+func bool prefix#Saveff(string sff,real epss,int ksplit,int nloc,int sizeoverlaps)
+{ if(sff != "")
+ {
+ ofstream ff(sff+".txt",append);
+ cout << " ++++ " ;
+ cout << mpirank <<"/" << mpisize << " k=" << ksplit << " n= " << nloc << " "
+ << sizeoverlaps << " it= " << prefix#kiter ;
+ for (int i=1; i2) plot (cmm="Triangle",Triangle,wait=1);
+
+func f = 1;
+
+
+meshS Triangle3 = movemesh23(Triangle,transfo=[x,0,y]);//trianglesup
+if(wplot>2) plot (cmm="Triangle3",Triangle3,wait=1);
+
+meshS TriangleS = change(fregion=1,movemeshS(Triangle3,transfo=[x,sinico*y+cosico*z,-cosico*y+sinico*z]));//rotation de -(pi - diedre) par rapport à l'axe des x pour former une face de la pyramide pentagonale
+if(wplot>2) plot (cmm="TriangleS",TriangleS,wait=1);
+//medit("face pyramide pentagonale",TriangleS);
+
+meshS TriangleI = change(fregion=2,movemeshS(TriangleS,transfo=[x,-cosdiedre*y+sindiedre*z,-sindiedre*y-cosdiedre*z],orientation=-1));//triangle inf rotation de l'angle diedre par rapport au triangle sup
+if(wplot>2) plot (cmm="TriangleI",TriangleI,wait=1);
+
+meshS Triangles = TriangleI+TriangleS;
+
+if(wplot>1) plot (cmm="Triangles",Triangles,wait=1);
+//medit("face pyramide pentagonale + face antiprisme d'ordre 5",Triangles);
+
+meshS T1 = change(movemeshS(Triangles,transfo=[x-0.5,y-sinpi3*cosico,z],orientation=1),fregion = region);//translation pour que la figure soit sur le bord du pentagone
+meshS T2 = change(movemeshS(T1,transfo=[cos2pi5*x-sin2pi5*y,sin2pi5*x+cos2pi5*y,z],orientation=1),fregion = region+2);;
+meshS T3 = change(movemeshS(T2,transfo=[cos2pi5*x-sin2pi5*y,sin2pi5*x+cos2pi5*y,z]),fregion = region+2);;
+meshS T4 = change(movemeshS(T3,transfo=[cos2pi5*x-sin2pi5*y,sin2pi5*x+cos2pi5*y,z]),fregion = region+2);;
+meshS T5 = change(movemeshS(T4,transfo=[cos2pi5*x-sin2pi5*y,sin2pi5*x+cos2pi5*y,z]),fregion = region+2);;
+
+meshS Tdemi= T1+T2+T3+T4+T5;//moitié de l'icosaedre
+meshS Tdemi0 = movemeshS(Tdemi,transfo=[x,y,z+0.5*h]);//moitié supérieure
+meshS Tdemi1 = movemeshS(Tdemi0,transfo=[x,y,-z]);//moitié inférieure
+meshS Tdemi1rot = change(movemeshS(Tdemi1,transfo=[cospi5*x-sinpi5*y,sinpi5*x+cospi5*y,z],orientation=-1),fregion = region+10);//rotation de la moitié inférieure pour les emboiter
+meshS Ticosaedre = Tdemi0+Tdemi1rot;
+//Ticosaedre=trunc(Ticosaedre,1,split=5);
+if(wplot) plot(Ticosaedre,wait=1);
+//cout << regions(Ticosaedre) << endl;
+return Ticosaedre;
+}
+
+func meshS Icosahedron (int orientation)
+{
+ return Icosahedron(orientation,0);
+}
+func meshS Sphere20 (real R,int N,int orientation,int wplot)
+{// Isocaedre regulier !!!! Thank G. Vergez ..
+meshS Ticosaedre = Icosahedron(orientation,wplot);
+Ticosaedre=trunc(Ticosaedre,1,split=N);
+if(wplot) plot(cmm="Icosaedre",Ticosaedre,wait=1);
+
+//=================================================================================
+//Construction de la sphere 3D
+//=================================================================================
+func metric =dist(x,y,z)/R;
+meshS Th = movemeshS(Ticosaedre,transfo=[x/metric,y/metric,z/metric]);
+if(wplot) plot (cmm="Th",Th,wait=1);
+return Th;
+}
+
+func meshS Sphere20 (real R,int N,int orientation)
+{
+ return Sphere20(R,N,orientation,0);
+}
+
+/* test:
+ load "tetgen"
+ {
+ real hs = 0.1; // mesh size on sphere
+ int[int] N=[20,20,20];
+ real [int,int] B=[[-1,1],[-1,1],[-1,1]];
+ int [int,int] L=[[1,2],[3,4],[5,6]];
+
+ ////////////////////////////////
+ meshS ThH =
+ (N,B,L,1);
+ meshS ThS =Sphere(0.5,hs,7,1); // "gluing" surface meshs to tolat boundary meshes
+ cout << " xxxx" << ThH.nv << " " << ThS.nv << endl;
+
+ meshS ThHS=ThH+ThS;
+ savemesh(ThHS,"Hex-Sphere.mesh");
+ exec("ffmedit Hex-Sphere.mesh;rm Hex-Sphere.mesh");
+
+ real voltet=(hs^3)/6.;
+ cout << " voltet = " << voltet << endl;
+ real[int] domaine = [0,0,0,1,voltet,0,0,0.7,2,voltet];
+
+ mesh3 Th = tetg(ThHS,switch="pqaAAYYQ",nbofregions=2,regionlist=domaine);
+ medit("Cube-With-Ball",Th);
+ }
+
+*/
+// --------------------------------------------------------------------------
+// Definition of Kinematics Operators
+// --------------------------------------------------------------------------
+// notation ...\hfilll
+//
+// all 2x2 symetric matrix [[a11,a12], [a21,a22] are see as an array \hfilll
+// [a11,a22,a12] .. \hfilll
+// the strain(d) = $ \varepsilon(d) = (\nabla d + {}^t(\nabla d)/2 $ matrix is \hfilll
+// we always use the differential notation \hfilll
+// so $F(y)$ is a fonction ; when $ dy \mapsto dF(y,dy)$ is the Frechet differentiel \hfilll
+// add second Frechet differentiel is $ (dy,ddy) \mapsto ddF(y,dy,ddy)$ \hfilll
+
+// --------------------------------------------------------------------------
+// the vector displacement parameter d = [d1,d2] \hfilll
+macro Strain2(d)
+[
+dx(d[0]),
+dy(d[1]),
+dy(d[0])+dx(d[1])
+] //EOM
+
+// --------------------------------------------------------------------------
+// definition of C(d) = $ {}^t F F$ and 2 differentiel
+// with , with $F = Id + \nabla d$ where $Id$ is the identity matrix
+macro C2(d)
+[
+1. + 2.*dx(d[0]) + dx(d[0])*dx(d[0]) + dx(d[1])*dx(d[1]) ,
+1. + 2.*dy(d[1]) + dy(d[0])*dy(d[0]) + dy(d[1])*dy(d[1]) ,
+ dy(d[0]) + dx(d[1]) + dx(d[0])*dy(d[0]) + dx(d[1])*dy(d[1])
+] //
+macro dC2(d,dd)
+[
+ 2.*dx((dd)[0]) + 2.*dx((dd)[0])*dx(d[0]) + 2.*dx((dd)[1])*dx(d[1]) ,
+ 2.*dy((dd)[1]) + 2.*dy((dd)[0])*dy(d[0]) + 2.*dy((dd)[1])*dy(d[1]) ,
+ dy((dd)[0]) + dx((dd)[1]) + dx((dd)[0])*dy(d[0]) + dx((dd)[1])*dy(d[1])
+ + dx(d[0])*dy((dd)[0]) + dx(d[1])*dy((dd)[1])
+] //
+macro ddC2(dd,ddd)
+[
+ 2.*dx((dd)[0])*dx((ddd)[0]) + 2.*dx((dd)[1])*dx((ddd)[1]) ,
+ 2.*dy((dd)[0])*dy((ddd)[0]) + 2.*dy((dd)[1])*dy((ddd)[1]) ,
+ dx((dd)[0])*dy((ddd)[0]) + dx((dd)[1])*dy((ddd)[1])
+ + dx((ddd)[0])*dy((dd)[0]) + dx((ddd)[1])*dy((dd)[1])
+] //
+
+// --------------------------------------------------------------------------
+// definition of the 3 invariant I[0], I[1], I[2]in 2d
+// so the value is an array size 3 .
+// I2C (I (C) 2d ..)
+//
+// I[0] = trace(C) +1
+// I[1] = (trace(C)^2 - trace(C^2) )/2
+// I[2] = det(C)
+// ************** BIZARRE FH ***********************
+
+macro I2C(C)
+[
+ C[0] + C[1] + 1.,
+ C[0]*C[1] + C[1] + C[0] - C[2]*C[2],
+ C[0]*C[1] - C[2]*C[2]
+] //EOM
+
+macro dI2C(C,dC)
+ [
+ dC[0] + dC[1] ,
+ dC[0]*C[1] + dC[1] + dC[0] - 2.*dC[2]*C[2] + C[0]*dC[1],
+ dC[0]*C[1] + C[0]*dC[1] - 2.*C[2]*dC[2]
+ ] //
+
+macro ddI2C(dC,ddC)
+[
+ 0.*dC[0]*ddC[0] ,
+ dC[0]*ddC[1] - 2.*dC[2]*ddC[2] + ddC[0]*dC[1],
+ dC[0]*ddC[1] + ddC[0]*dC[1] - 2.*ddC[2]*dC[2]
+ ] //
+
+
+macro I2d(d) I2C(C2(d)) //
+macro dI2d(d,dd) dI2C( C2(d) , dC2(d,(dd)) ) //
+macro ddI2d(d,dd,ddd) ( ddI2C( dC2(d,(dd)),dC2(d,(ddd)) ) + dI2C( C2(d) , ddC2((dd),(ddd)) ) ) //
+macro W2d(d) W(I2d(d)) //
+macro dW2d(d,dd) dW( I2d(d) , dI2d(d,(dd)) ) //
+macro ddW2d(d,dd,ddd)
+( ddW( I2d(d) , dI2d(d,(dd)) ,dI2d(d,(ddd)) ) + dW( I2d(d) , ddI2d(d,(dd),(ddd)) ) ) //
+
+
+
+
+load "medit"
+load "MUMPS_mpi"
+
+include "getARGV.idp"// to process command line options
+
+include "ffddm_parameters.idp"
+
+include "ffddm_partitioning.idp"
+
+include "ffddm_coarsemeshCS.idp"
+
+include "ffddm_geneoCS.idp"
+
+include "ffddm_functions.idp"
+
+include "ffddm_geneoCS_3rdlvl.idp"
+
+include "ffddm_geneoCS_saddlepoint.idp"
+
+func string removespaces(string& str) {
+ string res = "";
+ for (int i = 0; i < str.size; i++)
+ if (str(i:i) != " " && str(i:i) != "\t" && str(i:i) != "\n")
+ res = res + str(i:i);
+ return res;
+}
+
+macro ffddmsetupPrecondinit(pr)
+IFMACRO(!pr#setupprecondinit)
+
+IFMACRO(pr#localmacroaug,1)
+matrix pr#CSinterp;
+ENDIFMACRO
+
+matrix pr#AglobEprec;
+matrix[int] pr#aR(pr#prfe#prmesh#npart); /* local (ras or Robin) matrices (for the preconditioner) */
+matrix pr#aRdEprec;
+
+string pr#prec = "none";
+
+int pr#bCM = 0;
+
+string pr#corr = "none";
+
+matrix pr#E;
+pr#prfe#K[int,int] pr#E0(1,1);
+matrix pr#ZCM,pr#ZCMi,pr#ECM;
+
+int pr#si;
+
+int[int] pr#sizelg(pr#prfe#prmesh#npart), pr#offseti(pr#prfe#prmesh#npart);
+
+int[int] pr#sizelgworld(mpiSize(pr#prfe#prmesh#mpicomm)), pr#offsetiworld(mpiSize(pr#prfe#prmesh#mpicomm));
+
+int pr#ncoarsespace = 0;
+
+pr#prfe#K[int][int] pr#Z(0);
+
+int pr#nbiter = 0;
+
+pr#prfe#K[int][int] pr#RitzValues(0),pr#RitzHarmonicValues(0);
+
+ffddmgeneratePrecondfunctions(pr,pr#prfe)
+
+NewMacro pr#setupprecondinit()1 EndMacro
+ENDIFMACRO
+// EOM
+
+macro ffddmsetupOperatorinit(pr,preffe,preffe2)
+IFMACRO(!pr#setupoperatorinit)
+
+IFMACRO(pr#bem,1)
+NewMacro pr#Tmatrix() HMatrix EndMacro
+ENDIFMACRO
+IFMACRO(!pr#bem)
+NewMacro pr#Tmatrix() matrix EndMacro
+ENDIFMACRO
+
+NewMacro pr#localmacroaug preffe#prmesh#buildAug EndMacro
+
+NewMacro pr#prfe()preffe EndMacro
+NewMacro pr#prfe2()preffe2 EndMacro
+int pr#isrect = Stringification(preffe) != Stringification(preffe2);
+
+NewMacro pr#fromVhi(ui,VhName,res)
+if (preffe#prmesh#isincomm)
+{
+ string str = Stringification(VhName);
+ string svhglob = Stringification(preffe#Vhglob);
+ string svhi = Stringification(preffe#Vhi);
+ string svhaug = Stringification(preffe#AugVhi);
+ string svhcoarse = Stringification(pr#VhCoarse);
+ str = removespaces(str);
+ svhglob = removespaces(svhglob);
+ svhi = removespaces(svhi);
+ svhaug = removespaces(svhaug);
+ svhcoarse = removespaces(svhcoarse);
+
+ if (bseq) {
+ assert(ui.n == preffe#Vhglob.ndof);
+ if (str == svhglob) {
+ res = ui;
+ }
+ else if (str == svhi) {
+ res = ui;
+ }
+ else if (str == svhaug) {
+ assert(0);
+ IFMACRO(pr#localmacroaug,0)
+ cout << "you need to use ffddmbuildaug" << endl;
+ assert(0);
+ ENDIFMACRO
+ IFMACRO(pr#localmacroaug,1)
+ res = preffe#Auginterp*ui;
+ ENDIFMACRO
+ }
+ else if (str == svhcoarse) {
+ IFMACRO(pr#localmacroaug,0)
+ cout << "you need to use ffddmbuildaug" << endl;
+ assert(0);
+ ENDIFMACRO
+ IFMACRO(pr#localmacroaug,1)
+ res = pr#CSinterp*ui;
+ ENDIFMACRO
+ }
+ else {
+ cout << "***** TODO *****" << endl;
+ assert(0);
+ }
+ }
+ else {
+ assert(ui.n == preffe#Vhi.ndof);
+ if (str == svhi) {
+ res = ui;
+ }
+ else if (str == svhaug) {
+ IFMACRO(pr#localmacroaug,0)
+ cout << "you need to use ffddmbuildaug" << endl;
+ assert(0);
+ ENDIFMACRO
+ IFMACRO(pr#localmacroaug,1)
+ preffe#K[int] tmp = ui .* preffe#Dk[mpiRank(preffe#prmesh#commddm)];
+ res = preffe#Auginterp'*tmp;
+ preffe#Augupdate(res,false);
+ ENDIFMACRO
+ }
+ else if (str == svhcoarse) {
+ IFMACRO(pr#localmacroaug,0)
+ cout << "you need to use ffddmbuildaug" << endl;
+ assert(0);
+ ENDIFMACRO
+ IFMACRO(pr#localmacroaug,1)
+ preffe#K[int] tmp(res.n);
+ if (!preffe#prmesh#excluded) {
+ preffe#K[int] ls = ui .* preffe#Dk[mpiRank(preffe#prmesh#commddm)];
+ tmp = pr#CSinterp*ls;
+ }
+ else
+ tmp = 0;
+ res = 0;
+ mpiReduce(tmp,res,processor(0,preffe#prmesh#mpicomm),mpiSUM);
+ if (mpiRank(preffe#prmesh#mpicomm) < preffe#prmesh#pCS)
+ broadcast(processor(0,preffe#prmesh#commCS),res);
+ ENDIFMACRO
+ }
+ else {
+ preffe#K[int] inttmp(VhName.ndof);
+ inttmp = 0;
+ if (!preffe#prmesh#excluded) {
+ IFMACRO(preffe#K,complex)
+ matrix Mintr = interpolate(preffe#Vhi,VhName);
+ matrix Mint = Mintr;
+ ENDIFMACRO
+ IFMACRO(preffe#K,real)
+ matrix Mint = interpolate(preffe#Vhi,VhName);
+ ENDIFMACRO
+ preffe#K[int] inttmp2 = ui .* preffe#Dk[mpiRank(preffe#prmesh#commddm)];
+ inttmp = Mint'*inttmp2;
+ }
+ mpiAllReduce(inttmp,res,preffe#prmesh#mpicomm,mpiSUM);
+ }
+ }
+}
+EndMacro
+
+real pr#tdirect = 0, pr#teigenv = 0, pr#tbuildE = 0, pr#ttotal = 0;
+real pr#tgmresi, pr#tpreci, pr#tmvi, pr#tfactoi, pr#ttotali;
+real pr#tgmres = 0, pr#tprec = 0, pr#tmv = 0, pr#tfacto =0;
+real pr#tscalprod = 0;
+real pr#tloc = 0, pr#tglob = 0;
+real pr#tcsi, pr#tcs = 0;
+real pr#ttotalelapsed = mpiWtime();
+
+NewMacro pr#writesummary
+if (preffe#prmesh#isincomm)
+{
+ real[int] timings = [preffe#prmesh#tdecomp,pr#tfacto,pr#tbuildE,pr#tgmres,pr#tmv,pr#tprec,pr#tcs,pr#teigenv,pr#tdirect];
+ real[int] timingsg(timings.n);
+ timingsg = 0;
+ mpiAllReduce(timings,timingsg,preffe#prmesh#mpicomm,mpiMAX);
+ if (mpiRank(preffe#prmesh#mpicomm) == 0) {
+ cout << "["+Stringification(pr)+"] timings - decomp and partition : " << timingsg[0] << endl;
+ cout << "["+Stringification(pr)+"] timings - assembly and factorization local matrices : " << timingsg[1] << endl;
+ cout << "["+Stringification(pr)+"] timings - assembly and factorization coarse problem : " << timingsg[2] << endl;
+ cout << "["+Stringification(pr)+"] timings - GMRES : " << timingsg[3] << endl;
+ cout << "["+Stringification(pr)+"] timings - MV : " << timingsg[4] << endl;
+ cout << "["+Stringification(pr)+"] timings - PREC : " << timingsg[5] << endl;
+ cout << "["+Stringification(pr)+"] timings - COARSE SOLVE : " << timingsg[6] << endl;
+ /*cout << "timings - scalprod : " << timingsg[7] << endl;*/
+ cout << "["+Stringification(pr)+"] timings - total_sum : " << timingsg[3]+timingsg[0]+timingsg[1]+timingsg[2]+timingsg[7]+timingsg[8] << endl;
+ cout << "["+Stringification(pr)+"] timings - total elapsed wall time : " << mpiWtime()-pr#ttotalelapsed << endl;
+ }
+ pr#tgmres = 0; pr#tmv = 0; pr#tprec = 0; pr#tcs = 0; pr#tscalprod = 0;
+}
+EndMacro
+
+int pr#verbosity = ffddmverbosity;
+
+int pr#bdirect = ffddmbdirect;
+
+pr#Tmatrix pr#Aglobal;
+matrix[int] pr#aRd(preffe#prmesh#npart); /* local Dirichlet matrices for parallel matrix vector product */
+matrix pr#matN;
+
+IFMACRO((pr#withhpddm)|(pr#withpetsc))
+if (!bpara){
+ if (mpiRank(preffe#prmesh#mpicomm) == 0)
+ cout << "["+Stringification(pr)+"] Error: HPDDM/PETSc is to be used only in parallel mode" << endl;
+ assert(bpara);
+}
+
+int[int][int] pr#intersectionhpddm(1 + preffe#prmesh#numberIntersection);
+{
+ pr#intersectionhpddm[0].resize(preffe#prmesh#arrayIntersection.n);
+ pr#intersectionhpddm[0] = preffe#prmesh#arrayIntersection;
+ preffe#K[int] CC;
+ int[int] II;
+ for (int j=0; j pr#hpddmOP(pr#aRd[mpiRank(preffe#prmesh#commddm)], pr#intersectionhpddm, preffe#Dk[mpiRank(preffe#prmesh#commddm)], scaled = false, communicator = preffe#prmesh#commddm);
+ENDIFMACRO
+IFMACRO(preffe#K,complex)
+real[int] pr#hpddmDk = preffe#Dk[mpiRank(preffe#prmesh#commddm)].re;
+schwarz pr#hpddmOP(pr#aRd[mpiRank(preffe#prmesh#commddm)], pr#intersectionhpddm, pr#hpddmDk, scaled = false, communicator = preffe#prmesh#commddm);
+ENDIFMACRO
+set(pr#hpddmOP,sparams="-hpddm_"+Stringification(pr)+"_verbosity "+pr#verbosity+" -hpddm_"+Stringification(pr)+"_schwarz_method " +ffddmprecond, prefix=Stringification(pr)+"_");
+if (preffe#prmesh#inexactCSsplit == 1)
+ set(pr#hpddmOP,sparams="-hpddm_"+Stringification(pr)+"_reuse_preconditioner 1", prefix=Stringification(pr)+"_");
+ENDIFMACRO
+
+IFMACRO((pr#withpetsc)|(pr#CSwithpetsc))
+IFMACRO(preffe#K,real)
+load "PETSc"
+ENDIFMACRO
+IFMACRO(preffe#K,complex)
+load "PETSc-complex"
+ENDIFMACRO
+ENDIFMACRO
+
+IFMACRO(pr#withpetsc)
+pr#aRd[mpiRank(preffe#prmesh#commddm)].resize(preffe#Dk[mpiRank(preffe#prmesh#commddm)].n, preffe#Dk[mpiRank(preffe#prmesh#commddm)].n);
+IFMACRO(preffe#K,real)
+real[int] pr#petscDk = preffe#Dk[mpiRank(preffe#prmesh#commddm)];
+ENDIFMACRO
+IFMACRO(preffe#K,complex)
+real[int] pr#petscDk = preffe#Dk[mpiRank(preffe#prmesh#commddm)].re;
+ENDIFMACRO
+Mat pr#petscOP(pr#aRd[mpiRank(preffe#prmesh#commddm)], pr#intersectionhpddm, pr#petscDk, communicator = preffe#prmesh#commddm);
+ENDIFMACRO
+
+IFMACRO(pr#CSwithpetsc)
+Mat pr#petscE(0,communicator = preffe#prmesh#commCS);
+ENDIFMACRO
+
+NewMacro pr#localmacrominoverlap() preffe#prmesh#mminoverlap EndMacro
+
+IFMACRO(!pr#prfegeneo)
+IFMACRO(pr#localmacrominoverlap,0)
+NewMacro pr#prfegeneo() preffe EndMacro
+ENDIFMACRO
+
+IFMACRO(pr#localmacrominoverlap,1)
+NewMacro pr#prfegeneo() preffe#Aug EndMacro
+ENDIFMACRO
+ENDIFMACRO
+
+ffddmgenerateOperatorfunctions(pr,preffe)
+
+ffddmsetupPrecondinit(pr)
+
+NewMacro pr#setupoperatorinit()1 EndMacro
+ENDIFMACRO
+// EOM
+
+
+macro ffddmsetupOperatorBeminit(pr,preffe)
+NewMacro pr#bem()1 EndMacro
+ffddmsetupOperatorinit(pr,preffe,preffe)
+// EOM
+
+macro ffddmsetupinit(pr,preffe)
+ffddmsetupOperatorinit(pr,preffe,preffe)
+// EOM
+
+macro ffddmsetupOperatorRect(pr,preffe,preffe2,Varf)
+
+ffddmsetupOperatorinit(pr,preffe,preffe2)
+
+if (preffe#prmesh#isincomm)
+{
+ preffe#prmesh#tic(pr#tfactoi)
+
+ IFMACRO(pr#bem,1)
+ if (!preffe#prmesh#excluded) {
+ Varf(vaglobal,preffe#prmesh#Thglob,preffe#Vhglob)
+ pr#Aglobal = vaglobal(preffe#Vhglob,preffe#Vhglob,commworld=pr#prfe#prmesh#commddm);
+ }
+ ENDIFMACRO
+
+ IFMACRO(!pr#bem)
+ if (pr#bdirect || bseq) {
+ IFMACRO(pr#myOperator)
+ pr#myOperator(pr#Aglobal, preffe#prmesh#Thglob, preffe#Vhglob)
+ ENDIFMACRO
+ IFMACRO(!pr#myOperator)
+ Varf(vaglobal,preffe#prmesh#Thglob,preffe#Vhglob)
+ pr#Aglobal = vaglobal(preffe#Vhglob,preffe2#Vhglob,sym=vsym*(!pr#isrect),tgv=vtgvelim);
+ ENDIFMACRO
+ }
+
+ preffe#K[int] rhsFull(1), rhs(1);
+
+ for(int i = 0;i 0) {
+
+ IFMACRO(!pr#myOperator)
+ Varf(vPb, preffe#prmesh#AugThi, preffe#AugVhi)
+ ENDIFMACRO
+
+ if (!pr#isrect) {
+ IFMACRO(pr#myOperator)
+ pr#myOperator(pr#aRd[i], preffe#prmesh#AugThi, preffe#AugVhi)
+ ENDIFMACRO
+ IFMACRO(!pr#myOperator)
+ if (preffe#prmesh#inexactCSsplit > 1)
+ pr#aRd[i] = vPb(preffe#AugVhi, preffe#AugVhi,sym=vsym,tgv=vtgvelim,solver=GMRES);
+ else
+ pr#aRd[i] = vPb(preffe#AugVhi, preffe#AugVhi,sym=vsym,tgv=vtgv,solver=GMRES);
+ ENDIFMACRO
+ renumbering(pr#aRd[i], preffe#Auginterp, eps=-1);
+ }
+ else {
+ ;
+ IFMACRO(!pr#myOperator)
+ matrix Auginterp2;
+ fespace AugVhi2(preffe2#prmesh#AugThi, preffe2#fPk);
+ int[int] n2o = (0:preffe2#prmesh#Thi.nt-1);
+ int[int] renum = restrict(preffe2#Vhi, AugVhi2,n2o);
+ int[int] Ic = (0:preffe2#Vhi.ndof-1);
+ preffe#K[int] Kc(preffe2#Vhi.ndof);
+ Kc = 1;
+ Auginterp2 = [Ic,renum,Kc];
+ Auginterp2.resize(preffe2#Vhi.ndof, AugVhi2.ndof);
+ matrix Auginterp1 = preffe#Auginterp;
+
+ pr#aRd[i] = vPb(preffe#AugVhi, AugVhi2,sym=0,tgv=vtgv,solver=GMRES);
+
+ matrix tmp = pr#aRd[i]*Auginterp1';
+ pr#aRd[i] = Auginterp2*tmp;
+ ENDIFMACRO
+ }
+
+ IFMACRO(pr#withhpddm)
+ ChangeOperator(pr#hpddmOP,pr#aRd[mpiRank(preffe#prmesh#commddm)]);
+ ENDIFMACRO
+ IFMACRO(pr#withpetsc)
+ Mat mat(pr#aRd[mpiRank(preffe#prmesh#commddm)], pr#intersectionhpddm, pr#petscDk, communicator = preffe#prmesh#commddm);
+ pr#petscOP = mat;
+ ENDIFMACRO
+ }
+ else {
+ ;
+ IFMACRO(!pr#myOperator)
+ Varf(vN,preffe#prmesh#Thi,preffe#Vhi)
+ pr#matN = vN(preffe#Vhi,preffe2#Vhi,sym=vsym*(!pr#isrect),tgv=vtgv,solver=GMRES);
+ ENDIFMACRO
+ IFMACRO(pr#myOperator)
+ pr#myOperator(pr#matN, preffe#prmesh#Thi, preffe#Vhi)
+ ENDIFMACRO
+ IFMACRO(pr#withhpddm)
+ ChangeOperator(pr#hpddmOP,pr#matN);
+ ENDIFMACRO
+ IFMACRO(pr#withpetsc)
+ Mat mat(pr#matN, pr#intersectionhpddm, pr#petscDk, communicator = preffe#prmesh#commddm);
+ pr#petscOP = mat;
+ ENDIFMACRO
+ }
+ }
+
+ }
+ if (bseq)
+ preffe#prmesh#Thi = preffe#prmesh#Thglob;
+ ENDIFMACRO
+
+ preffe#prmesh#toc(pr#tfactoi,"",pr#tfacto)
+}
+//EOM
+
+macro ffddmsetupOperator(pr,preffe,Varf)
+ffddmsetupOperatorRect(pr,preffe,preffe,Varf)
+//EOM
+
+macro ffddmsetupOperatorBem(pr,preffe,Varf)
+ffddmsetupOperatorBeminit(pr,preffe)
+ffddmsetupOperator(pr,preffe,Varf)
+//EOM
+
+macro ffddmsetupPrecond(pr,VarfPrec)
+
+pr#prec = ffddmprecond;
+
+if (pr#prfe#prmesh#isincomm)
+{
+ pr#prfe#prmesh#tic(pr#tfactoi)
+
+ pr#prfe#K[int] rhsFull(1), rhs(1);
+
+ for(int i = 0;i 1 && !bpara) cout << "["+Stringification(pr)+"] Domain :" << i << "/" << pr#prfe#prmesh#npart << endl;
+
+ IFMACRO((!VarfPrec)&(!pr#myPrecond))
+ if (bseq) cout << "Error in ffddmsetupPrecond: you need to provide the varf macro for the preconditioner in sequential mode" << endl;
+ assert(!bseq);
+ pr#aR[i] = pr#aRd[i];
+ ENDIFMACRO
+ IFMACRO((VarfPrec)|(pr#myPrecond))
+ pr#prfe#prmesh#Thi = pr#prfe#prmesh#aTh[i];
+
+ if (pr#prfe#prmesh#Thi.nt > 0) {
+ if (pr#prec == "oras" || pr#prec == "soras"){
+ IFMACRO(!pr#bem)
+ IFMACRO(pr#myPrecond)
+ pr#myPrecond(pr#aR[i], pr#prfe#prmesh#Thi, pr#prfe#Vhi)
+ ENDIFMACRO
+ IFMACRO(!pr#myPrecond)
+ VarfPrec(RobinInt,pr#prfe#prmesh#Thi,pr#prfe#Vhi)
+ if (pr#prfe#prmesh#inexactCSsplit > 1)
+ pr#aR[i] = RobinInt(pr#prfe#Vhi,pr#prfe#Vhi,sym=vsym,tgv=vtgvelim,solver=GMRES);
+ else
+ pr#aR[i] = RobinInt(pr#prfe#Vhi,pr#prfe#Vhi,sym=vsym,tgv=vtgv,solver=GMRES);
+ ENDIFMACRO
+ ENDIFMACRO
+ IFMACRO(pr#bem,1)
+ cout << "TODO" << endl;
+ assert(0);
+ ENDIFMACRO
+ }
+ else if (pr#prec == "ras" || pr#prec == "asm") {
+ NewMacro localmacroaug pr#prfe#prmesh#buildAug EndMacro
+ IFMACRO(localmacroaug,1)
+ pr#prfe#prmesh#AugThi = pr#prfe#prmesh#AugaTh[i];
+ ENDIFMACRO
+ IFMACRO(localmacroaug,0)
+ pr#prfe#prmesh#meshN pr#prfe#prmesh#AugThi = pr#prfe#prmesh#Thi + pr#prfe#prmesh#aThborder[i]; /* local mesh augmented of one layer to define local Dirichlet matrices without the global matrix*/
+ fespace pr#prfe#AugVhi(pr#prfe#prmesh#AugThi, pr#prfe#fPk);
+ int[int] n2o = (0:pr#prfe#prmesh#Thi.nt-1);
+ int[int] renum = restrict(pr#prfe#Vhi, pr#prfe#AugVhi,n2o);
+ int[int] Ic = (0:pr#prfe#Vhi.ndof-1);
+ real[int] Kc(pr#prfe#Vhi.ndof);
+ Kc = 1;
+ matrix pr#prfe#Auginterp = [Ic,renum,Kc];
+ pr#prfe#Auginterp.resize(pr#prfe#Vhi.ndof, pr#prfe#AugVhi.ndof);
+ ENDIFMACRO
+
+ IFMACRO(!pr#bem)
+ IFMACRO(pr#myPrecond)
+ pr#myPrecond(pr#aR[i], pr#prfe#prmesh#AugThi, pr#prfe#AugVhi)
+ ENDIFMACRO
+ IFMACRO(!pr#myPrecond)
+ VarfPrec(vPb, pr#prfe#prmesh#AugThi, pr#prfe#AugVhi)
+ if (pr#prfe#prmesh#inexactCSsplit > 1)
+ pr#aR[i] = vPb(pr#prfe#AugVhi, pr#prfe#AugVhi,sym=vsym,tgv=vtgvelim,solver=GMRES);
+ else
+ pr#aR[i] = vPb(pr#prfe#AugVhi, pr#prfe#AugVhi,sym=vsym,tgv=vtgv,solver=GMRES);
+ ENDIFMACRO
+ ENDIFMACRO
+ IFMACRO(pr#bem,1)
+ VarfPrec(vPb, pr#prfe#prmesh#AugThi, pr#prfe#AugVhi)
+ pr#Tmatrix Hloc = vPb(pr#prfe#AugVhi, pr#prfe#AugVhi,commworld=pr#prfe#prmesh#commself);
+ pr#prfe#K[int,int] mdense(pr#prfe#AugVhi.ndof, pr#prfe#AugVhi.ndof);
+ mdense = Hloc;
+ pr#aR[i] = mdense;
+ ENDIFMACRO
+
+ renumbering(pr#aR[i], pr#prfe#Auginterp, eps=-1);
+ }
+ else if (pr#prec != "none")
+ assert(0);
+ }
+ ENDIFMACRO
+ IFMACRO((!pr#withhpddm)&(!pr#withpetsc))
+ set(pr#aR[i],solver = sparsesolver,sym=vsym,commworld=pr#prfe#prmesh#commself,factorize=3);
+ ENDIFMACRO
+ }
+ if (bseq)
+ pr#prfe#prmesh#Thi = pr#prfe#prmesh#Thglob;
+
+ pr#prfe#prmesh#toc(pr#tfactoi,"",pr#tfacto)
+}
+//EOM
+
+macro ffddmsetup(pr,preffe,Varf,VarfPrec)
+ffddmsetupOperator(pr,preffe,Varf)
+ffddmsetupPrecond(pr,VarfPrec)
+// EOM
+
+macro ffddmbuildrhs(pr,Varfrhs,rhs)
+if (pr#prfe#prmesh#isincomm)
+{
+ if (pr#bdirect || bseq)
+ {
+ {
+ Varfrhs(vaglobalrhs,pr#prfe#prmesh#Thglob,pr#prfe#Vhglob)
+ rhs.resize(pr#prfe#Vhglob.ndof);
+ rhs = vaglobalrhs(0,pr#prfe#Vhglob,tgv=vtgvelim);
+ }
+ }
+
+ if (bpara && !pr#prfe#prmesh#excluded)
+ {
+
+ pr#prfe#prmesh#Thi = pr#prfe#prmesh#aTh[mpiRank(pr#prfe#prmesh#commddm)];
+
+ rhs.resize(pr#prfe#Vhi.ndof);
+
+ Varfrhs(vPbrhs, pr#prfe#prmesh#Thi, pr#prfe#Vhi)
+ rhs = vPbrhs(0,pr#prfe#Vhi,tgv=vtgvelim);
+
+ pr#prfe#update(rhs, pr#prfe#prmesh#overlap > 0);
+ }
+}
+// EOM
+
+macro ffddmset(pr,param,value)
+pr#param = value;
+// EOM
+
+macro ffddmplot(pr,sol,msg)
+pr#mplot(sol,msg)
+// EOM
+macro ffddmcoarsemeshsetupinit(pr,Thc)
+IFMACRO(!pr#coarsemeshsetupinit)
+
+pr#bCM = 1;
+
+pr#prfe#prmesh#meshN pr#ThCoarse = pr#prfe#prmesh#minimalMesh;
+fespace pr#VhCoarse(pr#ThCoarse,pr#prfe#fPk); /* fespace on the coarse mesh */
+
+if (pr#prfe#prmesh#isincomm) {
+ if (!pr#prfe#prmesh#binexactCS) {
+ pr#ThCoarse = Thc;
+ pr#ncoarsespace = pr#VhCoarse.ndof;
+
+ if (!bpara) {
+ matrix Zc = interpolate(pr#prfe#Vhglob,pr#VhCoarse); /* ZCM=R0^T */
+ Zc.thresholding(1.e-10);
+ pr#ZCM = Zc; /* (from real to 'complex' matrix for FreeFem) */
+ }
+ else if (!pr#prfe#prmesh#excluded){
+ matrix Zci = interpolate(pr#prfe#Vhi,pr#VhCoarse);
+ Zci.thresholding(1.e-10);
+ pr#ZCMi = Zci;
+ }
+ NewMacro localmacroaug pr#prfe#prmesh#buildAug EndMacro
+ IFMACRO(localmacroaug,1)
+ if (bseq) {
+ pr#CSinterp = interpolate(pr#VhCoarse,pr#prfe#Vhglob);
+ }
+ else if (!pr#prfe#prmesh#excluded) {
+ pr#CSinterp = interpolate(pr#VhCoarse,pr#prfe#Vhi);
+ }
+ ENDIFMACRO
+ }
+ else if (!pr#prfe#prmesh#excluded){
+ NewMacro localmacroinexact pr#prfe#prmesh#minexactCS EndMacro
+ IFMACRO (localmacroinexact,1)
+ matrix Zci = interpolate(pr#prfe#Vhi,pr#prfe#CoarseVhi);
+ Zci.thresholding(1.e-10);
+ pr#ZCMi = Zci;
+ pr#ncoarsespace = pr#prfe#CoarseNdofglobal;
+ ENDIFMACRO
+ ;
+ }
+
+ if (!pr#prfe#prmesh#excluded && pr#verbosity && (mpiRank(pr#prfe#prmesh#commddm) == 0))
+ cout << "["+Stringification(pr)+"] Coarse space dimension: " << pr#ncoarsespace << endl;
+}
+
+NewMacro pr#coarsemeshsetupinit()1 EndMacro
+ENDIFMACRO
+// EOM
+
+macro ffddmcoarsemeshsetup(pr,Thc,VarfEprec,VarfA)
+ffddmcoarsemeshsetupinit(pr,Thc)
+if (pr#prfe#prmesh#isincomm)
+{
+pr#corr = ffddmcorrection;
+
+pr#prfe#prmesh#tic(pr#tloc)
+
+if(bseq) {
+ IFMACRO(VarfA)
+ VarfA(vaglobalEprec,pr#prfe#prmesh#Thglob,pr#prfe#Vhglob)
+ pr#AglobEprec = vaglobalEprec(pr#prfe#Vhglob,pr#prfe#Vhglob,sym=vsym,tgv=vtgvelim);
+ ENDIFMACRO
+ ;
+}
+else if (!pr#prfe#prmesh#excluded) {
+ int i = mpiRank(pr#prfe#prmesh#commddm);
+
+ IFMACRO(VarfA)
+ pr#prfe#prmesh#Thi = pr#prfe#prmesh#aTh[i];
+
+ NewMacro localmacroaug pr#prfe#prmesh#buildAug EndMacro
+ IFMACRO(localmacroaug,1)
+ pr#prfe#prmesh#AugThi = pr#prfe#prmesh#AugaTh[i];
+ ENDIFMACRO
+ IFMACRO(localmacroaug,0)
+ pr#prfe#prmesh#meshN pr#prfe#prmesh#AugThi = pr#prfe#prmesh#Thi + pr#prfe#prmesh#aThborder[i]; /* local mesh augmented of one layer to define local Dirichlet matrices without the global matrix*/
+ fespace pr#prfe#AugVhi(pr#prfe#prmesh#AugThi, pr#prfe#fPk);
+ int[int] n2o = (0:pr#prfe#prmesh#Thi.nt-1);
+ int[int] renum = restrict(pr#prfe#Vhi, pr#prfe#AugVhi,n2o);
+ int[int] Ic = (0:pr#prfe#Vhi.ndof-1);
+ real[int] Kc(pr#prfe#Vhi.ndof);
+ Kc = 1;
+ matrix pr#prfe#Auginterp = [Ic,renum,Kc];
+ pr#prfe#Auginterp.resize(pr#prfe#Vhi.ndof, pr#prfe#AugVhi.ndof);
+ ENDIFMACRO
+
+ VarfA(vPb, pr#prfe#prmesh#AugThi, pr#prfe#AugVhi)
+ pr#aRdEprec = vPb(pr#prfe#AugVhi, pr#prfe#AugVhi, sym=vsym,tgv=vtgvelim);
+
+ pr#prfe#K[int] rhsFull(pr#prfe#AugVhi.ndof);
+ pr#prfe#K[int] rhs(pr#prfe#Vhi.ndof);
+
+ renumbering(pr#aRdEprec, pr#prfe#Auginterp, rhsFull, rhs, eps=-1);
+ ENDIFMACRO
+}
+
+if (!pr#prfe#prmesh#binexactCS) {
+ {
+ IFMACRO(!pr#bem)
+ VarfEprec(cvaglobalEprec,pr#ThCoarse,pr#VhCoarse)
+ /*if (mpirank < pr#prfe#prmesh#pCS || !bpara)*/
+ if (mpirank == 0 || !bpara) {
+ pr#ECM = cvaglobalEprec(pr#VhCoarse,pr#VhCoarse,sym=vsym,tgv=vtgv,solver=GMRES); /* this is A_{eps,0} of Euan paper */
+ /*pr#ECM.thresholding(1.e-10);*/
+ }
+ ENDIFMACRO
+ /*
+ IFMACRO(pr#bem,1)
+ pr#Tmatrix Hloc = VarfEprec(pr#VhCoarse, pr#VhCoarse);
+ pr#prfe#K[int,int] mdense(pr#VhCoarse.ndof, pr#VhCoarse.ndof);
+ mdense = Hloc;
+ pr#ECM = mdense;
+ ENDIFMACRO
+ */
+ }
+
+ if (bseq || mpirank < pr#prfe#prmesh#pCS) {
+ set(pr#ECM,solver=sparsesolver,sym=vsym,commworld=pr#prfe#prmesh#commCS,master=0,factorize=3); /* -1 */
+ }
+}
+
+IFMACRO(pr#withhpddm)
+AttachCoarseOperator(pr#prfe#prmesh#commddm, pr#hpddmOP, pr#Q);
+ENDIFMACRO
+
+pr#prfe#prmesh#toc(pr#tloc,"building E",pr#tbuildE)
+} // EOM
+macro ffddmbuildSuper(pr,Th,nsup,scalar,def,init,Pk)
+
+int pr#nsuper = nsup;
+
+int pr#superchunksize = (mpisize-ffddmexclude*nsup)/nsup;
+
+/* supers = (0 2 4) (1 3 5) */
+
+int pr#issuper = mpirank < nsup;
+int pr#mysuper = mpirank%nsup;
+int pr#mysuperrank = pr#mysuper;
+
+int[int] pr#insuperinterior(pr#superchunksize);
+if (pr#superchunksize == 1)
+ pr#insuperinterior[0] = mpirank;
+else {
+ for (int i=0; i 1)
+ metisdual(lpart,Th,pr#nsuper);
+else
+ lpart = 0;
+if (pr#issuper) {
+ broadcast(processor(0, pr#commsuper), lpart);
+ for(int i=0;i 1 )
+ metisdual(mylpart,Thsuper,pr#superchunksize);
+ else
+ mylpart = 0;
+
+ fespace Phsuper(Thsuper,P0);
+ Phsuper partsuper;
+
+ for(int i=0;i> nn;
+ neighbors.resize(nn);
+ processor(i+pr#exclude*pr#pCS) >> neighbors;
+ }
+ for(int j=0;jpr#insuperinterior.n)
+ pr#insuperwithoverlap(pr#insuperinterior.n:pr#insuperwithoverlap.n-1) = pr#neighborsofsuper;
+
+ tmp.resize(pr#neighborsofsuper.n);
+ pr#superarrayIntersection.resize(tmp.n);
+ for (int i=0; i pr#RsuperCS;
+int[int] pr#superlocalnuminv(0);
+NewMacro pr#superalgebraic()1 EndMacro
+ffddmsetupinit(pr#super,preffe#super)
+// EOM
+
+macro ffddmsetupsuper(pr)
+
+if (pr#prfe#prmesh#issuper) {
+ /*
+ broadcast(processor(0,pr#prfe#prmesh#commsuper),pr#E);
+ */
+
+ pr#prfe#superDk[mpiRank(pr#prfe#prmesh#commsuper)].resize(pr#ncoarsespace);
+ pr#prfe#superDk[mpiRank(pr#prfe#prmesh#commsuper)] = 0;
+
+ int[int] localnum(pr#ncoarsespace);
+ int nloc = 0;
+
+ for (int j=0; j S
+ on fait Szi = S Zi
+ on envoie Szi a nos voisins qui appartiennent au super avec overlap
+ on fait Sii = Zi' S Zi
+ on fait Sij = Zi' Szj
+ on envoie Sij au super
+ */
+
+ pr#prfe#prmesh#supertic(pr#supertloc)
+ pr#prfe#prmesh#tic(pr#tloc)
+
+ matrix[int] restNeumann(pr#prfe#prmesh#arrayIntersection.n);
+ matrix[int] restNeumannSend(pr#prfe#prmesh#arrayIntersection.n);
+
+ mpiRequest[int] rqn(pr#prfe#prmesh#arrayIntersection.n*2);
+ for (int i=0; i SumNeumann;
+ if (pr#prfe#prmesh#mysuperrank == isuper)
+ SumNeumann = pr#matN;
+ for(int cj=0;cj extens = pr#prfe#restrictionIntersection[j]'*restNeumann[j];
+ extens = extens*pr#prfe#restrictionIntersection[j];
+ SumNeumann = SumNeumann+extens;
+ }
+
+ pr#prfe#K[int,int] Szi(pr#matN.n,pr#si);
+ for (int ii=0; ii < pr#si; ii++) {
+ pr#prfe#K[int] tmp(SumNeumann.n);
+ tmp = SumNeumann*pr#Z[ii];
+ Szi(:,ii) = tmp;
+ }
+
+ for (int ii=0; ii < pr#si; ii++)
+ for (int jj=0; jj < pr#si; jj++) {
+ Sii[is](ii,jj) = pr#Z[ii]'*Szi(:,jj);
+ }
+
+ for(int j=0;j=0;--i)
+ if(ARGV[i]==after) { ret=++i; break;}
+ if(ARGV.n0) d=strtol(ARGV[k]);
+ return d;
+}
+func real getARGV(int n,real default)
+{
+ real d=default;
+ int k=usedARGV(n);
+ if(k>0) d=strtod(ARGV[k]);
+ return d;
+}
+func string getARGV(int n,string default)
+{
+ string d=default;
+ int k=usedARGV(n);
+ if(k>0) d=ARGV[k];
+ return d;
+}
+
+func int getARGV(string after,int default)
+{
+ int d=default;
+ int k=usedARGV(after);
+ if(k>0) d=strtol(ARGV[k]);
+ return d;
+}
+func real getARGV(string after,real default)
+{
+ real d=default;
+ int k=usedARGV(after);
+ if(k>0) d=strtod(ARGV[k]);
+ return d;
+}
+func string getARGV(string after,string default)
+{
+ string d=default;
+ int k=usedARGV(after);
+ if(k>0) d=ARGV[k];
+ return d;
+}
+
+/*
+cout << getARGV(1,100) << endl;
+cout << getARGV(2,200.) << endl;
+cout << getARGV(3,"300.000") << endl;
+cout << getARGV("-n"," xxx") << endl;
+*/
+ENDIFMACRO
+// example to build a mesh a cone
+load "msh3"
+func mesh3 BuildBall(real RR,real h,int lab)
+{
+border Taxe(t=-RR,RR){x=t;y=0;label=0;}
+border CC(t=0,pi){x=RR*cos(t);y=RR*sin(t);label=lab;}
+mesh Th2=buildmesh( Taxe(2*RR/h)+ CC(pi*RR/h) ) ;
+
+int MaxLayersT=(int(2*pi*RR/h)/4)*4;
+func zminT = 0;
+func zmaxT = 2*pi;
+func fx= y*cos(z);// / max( abs(cos(z) ), abs(sin(z)));
+func fy= y*sin(z);// / max( abs(cos(z) ), abs(sin(z)));
+func fz= x;
+mesh3 Th=buildlayers(Th2,coef= min(max(.01,y/RR*1.3),1.) , MaxLayersT,zbound=[zminT,zmaxT],transfo=[fx,fy,fz],facemerge=1);
+return Th;
+}
+func mesh3 BuildAxiOx(mesh &Th2,real h)
+{
+load "msh3"
+real[int] bb(4);
+boundingbox(Th2,bb);
+if(verbosity>4) cout << bb << endl;
+real RR = bb[3];
+// cone using buildlayers with a triangle
+int MaxLayersT=(int(2*pi*RR/h)/4)*4;
+func zminT = 0;
+func zmaxT = 2*pi;
+func fx= y*cos(z);// / max( abs(cos(z) ), abs(sin(z)));
+func fy= y*sin(z);// / max( abs(cos(z) ), abs(sin(z)));
+func fz= x;
+mesh3 Th=buildlayers(Th2,coef= min(max(.01,y/RR*1.3),1.) , MaxLayersT,zbound=[zminT,zmaxT],transfo=[fx,fy,fz],facemerge=1);
+return Th;
+}
+macro ffddmgenerateOperatorfunctions(pr,preffe)
+IFMACRO (pr#myA)
+pr#myA
+ENDIFMACRO
+IFMACRO (!pr#myA)
+func preffe#K[int] pr#A(preffe#K[int] &u)
+{
+ /* Matrix vector product with the global matrix */
+ preffe#K[int] res(pr#isrect ? pr#prfe2#Vhi.ndof : u.n);
+ if (preffe#prmesh#isincomm) {
+ preffe#prmesh#tic(pr#tmvi)
+ if (!bpara)
+ res = pr#Aglobal*u;
+ else if (!preffe#prmesh#excluded){
+ IFMACRO(pr#bem,1)
+ int mrhs = u.n / pr#prfe#Vhi.ndof; /* multi rhs */
+ preffe#K[int] ug(preffe#Vhglob.ndof*mrhs), scaledug(preffe#Vhglob.ndof*mrhs);
+ ug = 0; scaledug = 0;
+ for (int i=0; i 0) {
+ res = pr#aRd[mpiRank(preffe#prmesh#commddm)]*u;
+ pr#prfe2#update(res,true);
+ }
+ else {
+ res = pr#matN*u;
+ pr#prfe2#update(res,false);
+ }
+ ENDIFMACRO
+ }
+ preffe#prmesh#toc(pr#tmvi,"",pr#tmv)
+ }
+ return res;
+}
+
+func preffe#K[int] pr#AT(preffe#K[int] &u)
+{
+ /* Matrix vector product with the transpose of the global matrix */
+ preffe#K[int] res(pr#isrect ? pr#prfe#Vhi.ndof : u.n);
+ IFMACRO(!pr#bem)
+ if (preffe#prmesh#isincomm) {
+ preffe#prmesh#tic(pr#tmvi)
+ if (!bpara)
+ res = pr#Aglobal'*u;
+ else if (!preffe#prmesh#excluded){
+ if (preffe#prmesh#overlap > 0) {
+ res = pr#aRd[mpiRank(preffe#prmesh#commddm)]'*u;
+ pr#prfe#update(res,true);
+ }
+ else {
+ res = pr#matN'*u;
+ pr#prfe#update(res,false);
+ }
+ }
+ preffe#prmesh#toc(pr#tmvi,"",pr#tmv)
+ }
+ ENDIFMACRO
+ IFMACRO(pr#bem,1)
+ if (mpirank == 0) cout << "TODO" << endl;
+ assert(0);
+ ENDIFMACRO
+ return res;
+}
+ENDIFMACRO
+
+func preffe#K[int] pr#directsolve(preffe#K[int]& rhs)
+{
+ preffe#K[int] res(rhs.n);
+
+ IFMACRO(pr#bem,1)
+ if (mpirank == 0)
+ cout << "No way to use a direct solver for BEM for now !" << endl;
+ assert(0);
+ ENDIFMACRO
+
+ IFMACRO(!pr#bem)
+ preffe#prmesh#tic(pr#tloc)
+
+ if (preffe#prmesh#isincomm) {
+ if (!bpara) {
+ set(pr#Aglobal,solver = sparsesolver,commworld=preffe#prmesh#commself);
+ res = pr#Aglobal^-1*rhs;
+ }
+ else if (!preffe#prmesh#excluded) {
+ matrix matloc;
+ if (preffe#prmesh#overlap > 0) {
+ matloc = preffe#Dih[mpiRank(preffe#prmesh#commddm)]*pr#aRd[mpiRank(preffe#prmesh#commddm)];
+ matloc = preffe#Rih[mpiRank(preffe#prmesh#commddm)]'*matloc;
+ }
+ else
+ matloc = preffe#Rih[mpiRank(preffe#prmesh#commddm)]'*pr#matN;
+ matloc = matloc*preffe#Rih[mpiRank(preffe#prmesh#commddm)];
+ set(matloc,solver = sparsesolver,commworld=preffe#prmesh#commddm,master=-1);
+ preffe#K[int] scaledrhs = preffe#Dih[mpiRank(preffe#prmesh#commddm)]*rhs;
+ preffe#K[int] scaledrhsg(preffe#Vhglob.ndof);
+ scaledrhsg = preffe#Rih[mpiRank(preffe#prmesh#commddm)]'*scaledrhs;
+ preffe#K[int] resg = matloc^-1*scaledrhsg;
+ res = preffe#Rih[mpiRank(preffe#prmesh#commddm)]*resg;
+ }
+ }
+
+ preffe#prmesh#toc(pr#tloc,"direct solver",pr#tdirect)
+ ENDIFMACRO
+
+ return res;
+}
+// EOM
+
+macro ffddmgeneratePrecondfunctions(pr,preffe)
+
+ func preffe#K[int] pr#AEprec(preffe#K[int] &x)
+ {
+ preffe#K[int] res(x.n);
+ if (preffe#prmesh#isincomm) {
+ IFMACRO(!pr#bem)
+ if (!bpara) {
+ if (pr#AglobEprec.n > 0)
+ res = pr#AglobEprec*x;
+ else
+ res = pr#Aglobal*x;
+ }
+ else if (!preffe#prmesh#excluded){
+ if (pr#aRdEprec.n > 0)
+ res = pr#aRdEprec*x;
+ else
+ res = pr#aRd[mpiRank(preffe#prmesh#commddm)]*x;
+ pr#prfe#update(res,true);
+ }
+ ENDIFMACRO
+ IFMACRO(pr#bem,1)
+ res = pr#A(x);
+ ENDIFMACRO
+ }
+ return res;
+ }
+
+ func preffe#K[int] pr#Q(preffe#K[int] &l, int mrhs) /* Q = Z*E^-1*Z^T */
+ {
+ preffe#K[int] res(l.n);
+ res=0.;
+ if (preffe#prmesh#isincomm) {
+ if(pr#bCM){
+ preffe#K[int] vaux(1), tmp(1), zaux(1);
+
+ /* Z^T l */
+ if (!bpara) {
+ vaux.resize(pr#ncoarsespace); tmp.resize(pr#ncoarsespace); zaux.resize(pr#ncoarsespace);
+ vaux = pr#ZCM'*l;
+ }
+ else if (!preffe#prmesh#binexactCS){
+ vaux.resize(pr#ncoarsespace); tmp.resize(pr#ncoarsespace); zaux.resize(pr#ncoarsespace);
+ if (!preffe#prmesh#excluded) {
+ preffe#K[int] ls = l .* preffe#Dk[mpiRank(preffe#prmesh#commddm)]; /* Z = sum_i D_i Z_i */
+ tmp = pr#ZCMi'*ls;
+ }
+ else
+ tmp = 0;
+ vaux = 0;
+ mpiReduce(tmp,vaux,processor(0,preffe#prmesh#mpicomm),mpiSUM);
+ }
+ else {
+ NewMacro localmacroinexact preffe#prmesh#minexactCS EndMacro
+ IFMACRO (localmacroinexact,1)
+ vaux.resize(mrhs*preffe#CoarseVhi.ndof); tmp.resize(mrhs*preffe#CoarseVhi.ndof); zaux.resize(mrhs*preffe#CoarseVhi.ndof);
+ if (!preffe#prmesh#excluded) {
+ for (int m=0; m3) {
+ Vhi pr#mdef(u0),pr#mdef(ucmcg);
+ u0[] = 0;
+ ffcmcgrhs(Vhi,Thi,ThAugmented,l,u0,ucmcg)
+ cpt++;
+ return ucmcg[];
+ }
+ else{
+ cpt++;
+ return pr#PREC1(l);
+ }
+}
+*/
+
+IFMACRO (pr#myPREC)
+pr#myPREC
+ENDIFMACRO
+IFMACRO (!pr#myPREC)
+func preffe#K[int] pr#PREC(preffe#K[int] &l)
+{
+ if (pr#corr == "test")
+ return pr#PRECTEST(l);
+ else if (pr#corr == "none")
+ return pr#PREC1(l);
+ else
+ return pr#PREC2level(l);
+}
+ENDIFMACRO
+
+func preffe#K[int] pr#fGMRES(preffe#K[int]& x0, preffe#K[int]& rhs, real eps, int maxit, string sprec)
+{
+ if (preffe#prmesh#isincomm) {
+ preffe#prmesh#tic(pr#tgmresi)
+
+ preffe#K[int] uni(x0.n);
+
+ int dim = min(maxit,ffddmrestart);
+
+ IFMACRO(pr#withhpddmkrylov)
+ load "hpddm"
+ if (!preffe#prmesh#excluded) {
+ uni = x0;
+ IterativeMethod(pr#A, rhs,uni, precon = pr#PREC, sparams = "-hpddm_tol "+eps+" -hpddm_variant "+(preffe#prmesh#binexactCS ? "flexible" : sprec)+" -hpddm_gmres_restart "+dim+" -hpddm_max_it "+maxit+(mpirank == 0 ? " -hpddm_verbosity "+pr#verbosity : "")+" -hpddm_orthogonalization mgs",communicator = preffe#prmesh#mpicomm);
+ }
+ else
+ IterativeMethod(pr#A, uni,uni, precon = pr#PREC, sparams = "-hpddm_tol "+eps+" -hpddm_variant "+(preffe#prmesh#binexactCS ? "flexible" : sprec)+" -hpddm_gmres_restart "+dim+" -hpddm_max_it "+maxit+(mpirank == 0 ? " -hpddm_verbosity "+pr#verbosity : "")+" -hpddm_orthogonalization mgs",communicator = preffe#prmesh#mpicomm);
+ ENDIFMACRO
+
+ IFMACRO(pr#withhpddm)
+ uni = x0;
+ real[int] timings(1);
+ string prefix = Stringification(pr)+"_";
+ set(pr#hpddmOP, sparams = "-hpddm_"+prefix+"schwarz_method "+pr#prec+" -hpddm_"+prefix+"tol "+eps+" -hpddm_"+prefix+"variant "+(preffe#prmesh#binexactCS ? "flexible" : sprec)+" -hpddm_"+prefix+"gmres_restart "+dim+" -hpddm_"+prefix+"max_it "+maxit+" -hpddm_"+prefix+"verbosity "+pr#verbosity+" -hpddm_"+prefix+"orthogonalization mgs", prefix=prefix);
+ if (pr#corr == "AD")
+ set(pr#hpddmOP, sparams = "-hpddm_"+prefix+"schwarz_coarse_correction additive", prefix=prefix);
+ else if (pr#corr == "BNN")
+ set(pr#hpddmOP, sparams = "-hpddm_"+prefix+"schwarz_coarse_correction balanced", prefix=prefix);
+ else if (pr#corr == "ADEF1")
+ set(pr#hpddmOP, sparams = "-hpddm_"+prefix+"schwarz_coarse_correction deflated", prefix=prefix);
+
+ if (pr#prec == "oras" || pr#prec == "soras")
+ DDM(pr#hpddmOP,rhs,uni,O=pr#aR[mpiRank(preffe#prmesh#commddm)],communicator=preffe#prmesh#commddm,timing=timings);
+ else
+ DDM(pr#hpddmOP,rhs,uni,communicator=preffe#prmesh#commddm,timing=timings);
+
+ /*
+ real[int] timingsg(timings.n);
+ mpiAllReduce(timings,timingsg,mpiCommWorld,mpiMAX);
+ */
+ pr#tgmres -= timings[0];
+ pr#tfacto += timings[0];
+ ENDIFMACRO
+
+ IFMACRO(pr#withpetsc)
+ uni = x0;
+ uni = pr#petscOP^-1*rhs;
+ ENDIFMACRO
+
+ IFMACRO((!pr#withhpddm)&(!pr#withhpddmkrylov)&(!pr#withpetsc))
+ preffe#K[int,int] Hn(dim+2,dim+1); /* Hessenberg matrix */
+ Hn = 0.;
+
+ IFMACRO(pr#withritz)
+ preffe#K[int,int] Hessenberg(dim+2,dim+1); /* copy of Hessenberg matrix for Ritz values/harmonics */
+ Hessenberg=0.;
+ pr#RitzValues.resize(dim+1);
+ for (int i=0;i 1.e+20 ? 0 : bi);
+ }
+
+ if (sprec == "right")
+ normb = sqrt(real(pr#prfe#scalprod(wi,wi)));
+ else{
+ vi = pr#PREC(wi);
+ normb = sqrt(real(pr#prfe#scalprod(vi,vi)));
+ }
+ if (normb < 1.e-20 || eps < 0) normb = 1.;
+
+ real relres = 0;
+
+ pr#nbiter = 1;
+
+ x0i = x0;
+
+ while (pr#nbiter <= maxit) {
+
+ if (pr#corr=="ADEF2" || pr#corr=="RBNN1" || pr#corr=="RBNN2")
+ /* TODO handle restart */
+ x0i = pr#Q(rhs);
+
+ ri = pr#A(x0i);
+
+ if (!preffe#prmesh#excluded)
+ ri -= rhs;
+ ri *= -1.0;
+
+ if (sprec == "right")
+ zi = ri;
+ else
+ zi = pr#PREC(ri);
+
+ g[0] = sqrt(real(pr#prfe#scalprod(zi,zi)));
+
+ if(abs(g[0])/normb < abs(eps)) {
+ if (pr#verbosity && (mpiRank(preffe#prmesh#mpicomm)==0)) {
+ cout << "["+Stringification(pr)+"] GMRES has converged in 0 iteration " << endl;
+ cout << "["+Stringification(pr)+"] The relative residual is " + abs(g[0])/normb << endl;
+ }
+ pr#nbiter = 0;
+ uni = x0;
+ break;
+ }
+
+ Vi[0]=1/g[0]*zi; /* first basis vector */
+
+ for(int it=0; it=0; i--) {
+ g1[i] = g[i];
+ for(int j=i+1; j= 3 && (mpiRank(preffe#prmesh#mpicomm)==0)) {
+ if (pr#bdirect)
+ cout << "["+Stringification(pr)+"] It: "<< pr#nbiter << " Residual = " << relres << " Rel res = " << relres/normb << " Relative L2 Error = "<< relerr << endl;
+ else
+ cout << "["+Stringification(pr)+"] It: "<< pr#nbiter << " Residual = " << relres << " Rel res = " << relres/normb << endl;
+ }
+
+ if (pr#verbosity >= 10){
+ IFMACRO(preffe#defplot)
+ preffe#Vhi def(unih);
+ unih[] = uni;
+ preffe#mplot(preffe#defplot(unih), "["+Stringification(pr)+"] Approximate solution at step " + pr#nbiter)
+ ENDIFMACRO
+ ;
+ }
+
+ if(relres/normb < abs(eps)) {
+ if (pr#verbosity && (mpiRank(preffe#prmesh#mpicomm)==0)) {
+ cout << "["+Stringification(pr)+"] GMRES has converged in " + (pr#nbiter) + " iterations " << endl;
+ cout << "["+Stringification(pr)+"] The relative residual is " + relres/normb << endl;
+ }
+ break;
+ }
+ pr#nbiter++;
+ if (pr#nbiter > maxit)
+ break;
+ }
+ if(relres/normb < abs(eps) || pr#nbiter > maxit)
+ break;
+
+ x0i = uni;
+ if (pr#verbosity && (mpiRank(preffe#prmesh#mpicomm)==0))
+ cout << "["+Stringification(pr)+"] GMRES restart(" + dim +")" << endl;
+ }
+ if(relres/normb >= abs(eps))
+ if (pr#verbosity && (mpiRank(preffe#prmesh#mpicomm)==0)) {
+ cout << "["+Stringification(pr)+"] GMRES did not converge in " + maxit + " iterations " << endl;
+ cout << "["+Stringification(pr)+"] The relative residual is " + relres/normb << endl;
+ }
+ ENDIFMACRO
+ preffe#prmesh#toc(pr#tgmresi,"",pr#tgmres)
+ return uni;
+ }
+ else
+ return x0; /* dummy, not in comm */
+}
+/*# finGMRESsolve #*/
+
+// EOM
+
+include "macro_ddm.idp"
+
+macro partitionSubstructuring(meshName, interfaceNb, globalName, PhGlobal, part, s, ndofSkeleton, BC, comm, fakeInterface, labDirichlet)
+ meshName = trunc(globalName, abs(part - mpiRank(comm)) < 0.1, label = fakeInterface);
+ fespace VhGlobal(globalName, P1);
+ PhGlobal supp = abs(part - mpiRank(comm)) < 0.1;
+ VhGlobal suppSmooth;
+ AddLayers(globalName, supp[], 2, suppSmooth[]);
+ ndofSkeleton.resize(1);
+ ndofSkeleton[0].resize(0);
+ {
+ int[int] n2o;
+ meshN neighbors = trunc(globalName, suppSmooth > 0.001, new2old = n2o);
+ int[int] partOverlap(n2o.n);
+ for[i, v : n2o] partOverlap[i] = part[][v];
+ Unique(partOverlap, ndofSkeleton[0], remove = mpiRank(comm));
+ }
+ VhGlobal[int] partitionIntersection(ndofSkeleton[0].n);
+ if(s > 1) {
+ globalName = trunc(globalName, suppSmooth > 0.001, split = s, label = fakeInterface);
+ supp = abs(part - mpiRank(comm)) < 0.1;
+ suppSmooth = 0;
+ AddLayers(globalName, supp[], 2, suppSmooth[]);
+ meshName = trunc(meshName, 1, split = s);
+ }
+ globalName = trunc(globalName, suppSmooth > 0.501, label = fakeInterface);
+ real eps = intN(globalName)(1.0);
+ real[int] epsTab(ndofSkeleton[0].n);
+ mpiRequest[int] rq(2 * ndofSkeleton[0].n);
+ for(int j = 0; j < ndofSkeleton[0].n; ++j)
+ Irecv(processor(ndofSkeleton[0][j], comm, rq[j]), epsTab[j]);
+ for(int j = 0; j < ndofSkeleton[0].n; ++j)
+ Isend(processor(ndofSkeleton[0][j], comm, rq[ndofSkeleton[0].n + j]), eps);
+ VhGlobal phi = 0;
+ part = part;
+ int numberIntersection = 0;
+ for(int k = 0; k < 2 * ndofSkeleton[0].n; ++k)
+ mpiWaitAny(rq);
+ for(int i = 0; i < ndofSkeleton[0].n; ++i) {
+ PhGlobal suppPartition = abs(ndofSkeleton[0][i] - part) < 0.1;
+ AddLayers(globalName, suppPartition[], 1, phi[]);
+ if(intN(globalName)(phi) / min(eps, epsTab[i]) > 1.0e-10) {
+ partitionIntersection[numberIntersection] = phi;
+ ndofSkeleton[0][numberIntersection++] = ndofSkeleton[0][i];
+ }
+ }
+ if(numberIntersection != ndofSkeleton[0].n)
+ ndofSkeleton[0].resize(numberIntersection);
+ Wh def(interface);
+ varf vPbInterface(def(u), def(v)) = on(fakeInterface, BC(u, 1.0)) + on(labDirichlet, BC(u, 0.0));
+ interface[] = vPbInterface(0, Wh, tgv = 1);
+ matrix[int] R(ndofSkeleton[0].n);
+
+ for(int i = 0; i < ndofSkeleton[0].n; ++i) {
+ meshN meshIntersection = trunc(globalName, (part == mpiRank(comm) || part == ndofSkeleton[0][i]) && partitionIntersection[i] > 1e-6, label = fakeInterface);
+ fespace WhIntersection(meshIntersection, Pk);
+ R[i] = interpolate(WhIntersection, Wh, inside = 1);
+ }
+ buildSkeleton(interface[], R, ndofSkeleton, interface = interfaceNb, redundancy = getARGV("-redundancy", 1), communicator = comm);// EOM
+
+macro buildSubstructuringWithPartitioning(Th, interfaceNb, userPartitioning, fakeInterface, labDirichlet, labNeumann, s, intersection, P, BC, comm, excluded)
+{
+ real timing = mpiWtime();
+ fespace WhLocal(Th, Pk);
+ if(mpiSize(comm) > 1 && !excluded) {
+ meshN ThGlobal = Th;
+ fespace PhGlobal(ThGlobal, P0);
+ PhGlobal partGlobal;
+ if(userPartitioning.n != PhGlobal.ndof) {
+ if(mpiRank(comm) == 0) {
+ if(verbosity > 0)
+ cout.scientific << " --- global mesh of " << ThGlobal.nt << " elements (prior to refinement) partitioned with " << Stringification(partitioner);
+ timing = mpiWtime();
+ partitionerSeq(partGlobal[], ThGlobal, mpiSize(comm));
+ }
+ partitionerPar(partGlobal[], ThGlobal, comm, mpiSize(comm));
+ if(mpiRank(comm) == 0 && verbosity > 0)
+ cout.scientific << " (in " << mpiWtime() - timing << ")" << endl;
+ timing = mpiWtime();
+ }
+ else {
+ partGlobal[] = userPartitioning;
+ broadcast(processor(0, comm), partGlobal[]);
+ }
+ partitionSubstructuring(Th, interfaceNb, ThGlobal, PhGlobal, partGlobal, s, intersection, BC, comm, fakeInterface, labDirichlet)
+ }
+ else if(mpiSize(comm) == 1) {
+ if(s > 1)
+ Th = trunc(Th, 1, split = s);
+ Wh def(interface);
+ varf vPbInterface(def(u), def(v)) = on(labNeumann, BC(u, 1.0)) + on(labDirichlet, BC(u, 0.0));
+ interface[] = vPbInterface(0, Wh, tgv = 1);
+ interfaceNb.resize(Wh.ndof);
+ int j = 0;
+ for(int i = 0; i < Wh.ndof; ++i) {
+ if(interface[][i] > 0.9)
+ interfaceNb[j++] = i;
+ }
+ interfaceNb.resize(j);
+ }
+ mpiBarrier(mpiCommWorld);
+ if(verbosity > 0 && mpirank == 0) cout.scientific << " --- partition of unity built (in " << mpiWtime() - timing << ")" << endl;
+}// EOM
+
+macro buildSubstructuring(Th, interfaceNb, fakeInterface, labDirichlet, labNeumann, s, intersection, P, BC, comm, excluded)
+{
+ real[int] emptyArray(0);
+ buildSubstructuringWithPartitioning(Th, interfaceNb, emptyArray, fakeInterface, labDirichlet, labNeumann, s, intersection, P, BC, comm, excluded)
+}// EOM
+verbosity = 0;
+int ffddmverbosity = getARGV("-ffddm_verbosity", 5);
+/*
+if (mpirank != 0)
+ mverbosity = 0;
+*/
+
+string ffddmprecond = getARGV("-ffddm_schwarz_method", "ras");
+string ffddmvariant = getARGV("-ffddm_variant", "right"); // right(default) or left preconditioning
+int ffddmrestart = getARGV("-ffddm_gmres_restart",200);
+int ffddmmaxit = getARGV("-ffddm_max_it", 200);
+real ffddmtol = getARGV("-ffddm_tol", 1.e-6);
+real ffddminexactCStol = getARGV("-ffddm_inexactCS_tol", 1.e-1);
+int ffddmnu = getARGV("-ffddm_geneo_nu", 20); // number of local eigenvectors to compute for DtN CS (choice criterion 4.3 of Lea's paper is applied to these computed eigenvectors unless -noLea is activated)
+real ffddmtau = getARGV("-ffddm_geneo_threshold",0.5);
+if (usedARGV("-ffddm_geneo_nu") > -1 && usedARGV("-ffddm_geneo_threshold") <= -1)
+ ffddmtau = 0;
+int ffddminertia = usedARGV("-ffddm_geneo_threshold") > -1 && usedARGV("-ffddm_geneo_no_inertia") <= -1;
+if (ffddminertia && usedARGV("-ffddm_geneo_nu") <= -1)
+ ffddmnu = 500;
+
+string ffddmcorrection = getARGV("-ffddm_schwarz_coarse_correction", "ADEF1"); // for 2 level preconditioner
+
+int ffddmexclude = getARGV("-ffddm_master_exclude", 0);
+int ffddmpCS = getARGV("-ffddm_master_p", 1);
+
+int ffddminterfacelabel = 10;
+int[int] ffddmcubelabels = [10,10,10,10,10,10];
+
+/*
+int binexactCS = usedARGV("-inexactCS") > -1 ? 1 : 0;
+int inexactCSsplit = getARGV("-inexactCS_split", 1);
+if (binexactCS) {
+ exclude = 0;
+ pCS = mpisize;
+}
+*/
+
+/*
+if (!bCS) {
+ exclude = 0;
+ pCS = 0;
+}
+*/
+
+int ffddmoverlap = getARGV("-ffddm_overlap", 1);
+int ffddmsplit = getARGV("-ffddm_split", 1);
+int ffddmpartitioner = getARGV("-ffddm_partitioner", 1); // 0: simple, 1: metis, 2: scotch
+int ffddmbmedit = usedARGV("-ffddm_medit") > -1 ? 1 : 0;
+int ffddmbffplot = usedARGV("-ffddm_disable_plots") > -1 ? 0 : 1;
+int ffddmbplot = (ffddmbmedit || ffddmbffplot) && !NoGraphicWindow;
+int ffddmnbiso = getARGV("-ffddm_nbiso", 20);
+int ffddmbdirect = usedARGV("-direct") > -1 ? 1 : 0;
+int ffddmnpart = getARGV("-seqddm", -1);
+int bpara = 0;
+int bseq = 1;
+if (ffddmnpart <= 0) {
+ bseq = 0;
+ bpara = 1;
+ ffddmnpart = mpisize-ffddmexclude*ffddmpCS;
+}
+
+int bnoGlob = usedARGV("-noGlob") > -1 ? 1 : 0;
+int bnoGlobwithpartloc = usedARGV("-noGlobwithpartloc") > -1 ? 1 : 0;
+int bnopartloc = bnoGlob;
+bnoGlob = bnoGlob || bnoGlobwithpartloc;
+
+//if (abs(ffddmsplit)>1) bnoGlob = 1;
+if (bseq || ffddmbplot || ffddmbdirect)
+ assert(!bnoGlob);
+
+real vtgv = -1;//1.e+30;
+real vtgvelim = -1;//-2;
+int vsym = 0;//
+//macro msym GMRES//CG//EOM
+
+/*
+if (binexactCS) {
+ assert(bCS && bCM && bpara);
+}
+*/
+
+/*
+macro simple(PhGlobal, part, comm)
+{
+ part = 1;
+}
+// EOM
+*/
+
+/*
+real diam;
+macro bbN(boundingMesh, overshoot, ThGlobal)
+ real[int] bb(4);
+ boundingbox(bb, boundingMesh);
+ diam = sqrt((bb(1) - bb(0))^2 + (bb(3) - bb(2))^2);
+ bb(0) -= overshoot;
+ bb(1) += overshoot;
+ bb(2) -= overshoot;
+ bb(3) += overshoot;
+
+ ThGlobal = mtrunc(ThGlobal, (x >= bb(0) && x <= bb(1) && y >= bb(2) && y <= bb(3)));// EOM
+*/
+
+
+IFMACRO(!macroDDMidp)
+macro macroDDMidp()1// EOM
+include "getARGV.idp"
+IFMACRO(!partitioner)
+macro partitioner()metis// EOM
+ENDIFMACRO
+IFMACRO(partitioner,metis)
+load "metis"
+macro partitionerSeq(part, Th, size){ if(size <= 1) part = 0; else metisdual(part, Th, size); }// EOM
+macro partitionerPar(part, Th, comm, size)broadcast(processor(0, comm), part)// EOM
+ENDIFMACRO
+IFMACRO(partitioner,scotch)
+load "scotch"
+macro partitionerSeq(part, Th, size){ if(size <= 1) part = 0; else scotch(part, Th, size); }// EOM
+macro partitionerPar(part, Th, comm, size)broadcast(processor(0, comm), part)// EOM
+ENDIFMACRO
+IFMACRO(partitioner,parmetis)
+load "parmetis"
+macro partitionerSeq(part, Th, size)// EOM
+macro partitionerPar(part, Th, comm, size)parmetis(part, Th, size, communicator = comm, worker = getARGV("-parmetis_worker", 1))// EOM
+ENDIFMACRO
+IFMACRO(!partitionerSeq)
+cout << "The macro 'partitioner' must be set to 'metis', 'scotch', or 'parmetis'" << endl;
+exit(1);
+ENDIFMACRO
+IFMACRO(dimension,2)
+macro meshN()mesh// EOM // two-dimensional problem
+macro intN()int2d// EOM // two-dimensional integral
+macro intN1()int1d// EOM // one-dimensional integral
+macro readmeshN()readmesh// EOM // two-dimensional problem
+macro defVel(uP)[uP, uP#Y]// EOM // two-dimensional velocity for convect/advect
+ENDIFMACRO
+IFMACRO(dimension,3)
+load "msh3"
+macro meshN()mesh3// EOM // three-dimensional problem
+macro intN()int3d// EOM // three-dimensional integral
+macro intN1()int2d// EOM // two-dimensional integral
+macro readmeshN()readmesh3// EOM // three-dimensional problem
+macro defVel(uP)[uP, uP#Y, uP#Z]// EOM // three-dimensional velocity for convect/advect
+ENDIFMACRO
+IFMACRO(dimension,3S)
+load "msh3"
+macro meshN()meshS// EOM // three-dimensional surface problem
+macro intN()int2d// EOM // two-dimensional integral
+macro intN1()int1d// EOM // one-dimensional integral
+macro intNxN()int2dx2d// EOM // two-dimensional integral for BEM
+ENDIFMACRO
+IFMACRO(dimension,3L)
+load "msh3"
+macro meshN()meshL// EOM // three-dimensional line problem
+macro intN()int1d// EOM // one-dimensional integral
+macro intN1()int0d// EOM // zero-dimensional integral
+macro intNxN()int1dx1d// EOM // one-dimensional integral for BEM
+ENDIFMACRO
+
+macro plotDmesh(Th, params)
+if(!NoGraphicWindow || usedARGV("-fglut") != -1) {
+ fespace PhPlotPrivate(Th, P0);
+ PhPlotPrivate plt;
+ if(Th.nt)
+ plt[] = mpirank;
+NewMacro defPlt#Th(uPrivate)uPrivate EndMacro
+ plotMPI(Th, plt, P0, defPlt#Th, real, params)
+}//
+
+macro plotD(Th, uPrivate, params)
+if(!NoGraphicWindow || usedARGV("-fglut") != -1) {
+ fespace VhPlotPrivate(Th, P1);
+ VhPlotPrivate plt;
+ if(Th.nt)
+ plt = uPrivate;
+NewMacro defPlt#Th(vPrivate)vPrivate EndMacro
+ plotMPI(Th, plt, P1, defPlt#Th, real, params)
+}//
+
+macro plotMPI(Th, uPrivate, Pk, def, K, params)
+if(!NoGraphicWindow || usedARGV("-fglut") != -1) {
+IFMACRO(!meshN)
+ NewMacro meshN()mesh EndMacro
+ENDIFMACRO
+IFMACRO(!def)
+ NewMacro def(i)i EndMacro
+ENDIFMACRO
+ meshN ThCurrent = Th;
+ fespace XhPlotPrivate(ThCurrent, Pk);
+ XhPlotPrivate def(uSend);
+ if(ThCurrent.nt)
+ def(uSend) = uPrivate;
+ if(mpirank == 0) {
+ meshN[int] meshTab(mpisize);
+ XhPlotPrivate[int] def(uTab)(mpisize);
+ if(ThCurrent.nt)
+ uTab[0][] = uSend[];
+ meshTab[0] = ThCurrent;
+ mpiRequest[int] rq(mpisize - 1);
+ for(int i = 1; i < mpisize; ++i)
+ Irecv(processor(i, mpiCommWorld, rq[i - 1]), meshTab[i]);
+ mpiWaitAll(rq);
+ for(int i = 1; i < mpisize; ++i) {
+ ThCurrent = meshTab[i];
+ if(ThCurrent.nt)
+ Irecv(processor(i, mpiCommWorld, rq[i - 1]), uTab[i][]);
+ }
+ mpiWaitAll(rq);
+ plot(def(uTab), params);
+ }
+ else {
+ mpiRequest[int] rq(2);
+ Isend(processor(0, rq[0]), ThCurrent);
+ if(ThCurrent.nt)
+ Isend(processor(0, rq[1]), uSend[]);
+ mpiWaitAll(rq);
+ }
+}// EOM
+
+macro partitionPrivate(meshName, borderName, globalName, PhGlobalPrivate, VhGlobalPrivate, part, rank, size, s, overlap, level, prolongation, D, P, intersection, comm, fakeInterface, PkPart, defPart, initPart, bs) {
+ int backupSM = searchMethod;
+ searchMethod = 1;
+ assert(level >= 1);
+IFMACRO(!privateCreatePartition)
+IFMACRO(!privateCreateMat)
+ intersection.resize(1);
+ intersection[0].resize(0);
+ PhGlobalPrivate supp;
+ VhGlobalPrivate suppSmooth;
+ {
+ int constant = rank;
+ for[i, value : supp[]] value = abs(part[][i] - constant) < 0.1;
+ AddLayers(globalName, supp[], 2 * overlap, suppSmooth[]);
+ int[int] n2o;
+ meshN neighbors;
+ bool connected = false;
+ for[i, value : suppSmooth[]] if(abs(value - 0.5) < 0.5) connected = true;
+ if(!connected)
+ n2o.resize(0);
+ else
+ neighbors = trunc(globalName, suppSmooth > 0.001 && suppSmooth < 0.999, new2old = n2o);
+ int[int] partOverlap(n2o.n);
+ for[i, value : n2o] partOverlap[i] = part[][value];
+ Unique(partOverlap, intersection[0], remove = constant);
+ if(s > 1 && level <= 1) {
+ globalName = trunc(globalName, suppSmooth > 0.001, split = s);
+ supp = abs(part - constant) < 0.1;
+ suppSmooth = 0;
+ AddLayers(globalName, supp[], 2 * overlap, suppSmooth[]);
+ }
+ }
+ int[int] n2oGlobalPrivate, n2oNeighbor;
+IFMACRO(!privateDmesh#CartesianPartitioning)
+ globalName = trunc(globalName, suppSmooth > 0.001, label = 9999, new2old = n2oGlobalPrivate);
+ENDIFMACRO
+ real eps = globalName.measure;
+ real[int] epsTab(intersection[0].n);
+ mpiRequest[int] rq(2 * intersection[0].n);
+ if(mpiSize(comm) == size) {
+ for(int j = 0; j < intersection[0].n; ++j)
+ Irecv(processor(intersection[0][j], comm, rq[j]), epsTab[j]);
+ for(int j = 0; j < intersection[0].n; ++j)
+ Isend(processor(intersection[0][j], comm, rq[intersection[0].n + j]), eps);
+ }
+ else
+ epsTab = 1.0e+30;
+ suppSmooth = suppSmooth;
+IFMACRO(!privateDmesh#N2O)
+ meshName[level - 1] = trunc(globalName, suppSmooth > 0.501, label = fakeInterface, new2old = n2oNeighbor);
+IFMACRO(privateDmesh#CartesianPartitioning)
+ real[int] bb(2 * dimension);
+ boundingbox(meshName[level - 1], bb);
+ meshName[level - 1] = trunc(globalName, x > bb[0] && x < bb[1] && y > bb[2] && y < bb[3]
+IFMACRO(dimension,3)
+ && z > bb[4] && z < bb[5]
+ENDIFMACRO
+ , label = fakeInterface);
+ globalName = meshName[level - 1];
+ n2oNeighbor = 0:globalName.nt - 1;
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(privateDmesh#N2O)
+ meshName[level - 1] = trunc(globalName, suppSmooth > 0.501, label = fakeInterface, new2old = privateDmesh#N2O);
+IFMACRO(privateDmesh#CartesianPartitioning)
+ real[int] bb(2 * dimension);
+ boundingbox(meshName[level - 1], bb);
+ meshName[level - 1] = trunc(globalName, x > bb[0] && x < bb[1] && y > bb[2] && y < bb[3]
+IFMACRO(dimension,3)
+ && z > bb[4] && z < bb[5]
+ENDIFMACRO
+ , label = fakeInterface, new2old = privateDmesh#N2O);
+ globalName = meshName[level - 1];
+ n2oNeighbor = 0:globalName.nt - 1;
+ENDIFMACRO
+IFMACRO(!privateDmesh#CartesianPartitioning)
+ {
+ int[int] backup = privateDmesh#N2O;
+ int[int] new = n2oGlobalPrivate(privateDmesh#N2O);
+ privateDmesh#N2O.resize(new.n);
+ privateDmesh#N2O = new;
+ n2oNeighbor.resize(backup.n);
+ n2oNeighbor = backup;
+ }
+ENDIFMACRO
+ENDIFMACRO
+ if(level > 1) {
+ prolongation.resize(level - 1);
+ if(s > 1) {
+ meshN globalNameRefined = globalName;
+ for(int i = level - 1; i > 0; --i) {
+ globalNameRefined = trunc(globalNameRefined, 1, split = s);
+ meshName[i - 1] = trunc(globalNameRefined, suppSmooth > 0.501, label = fakeInterface);
+ fespace WhLocalRefinedPrivate(meshName[i - 1], P);
+ fespace WhLocalCoarsePrivate(meshName[i], P);
+ prolongation[i - 1] = interpolate(WhLocalRefinedPrivate, WhLocalCoarsePrivate);
+ }
+ }
+ else
+ for(int i = level - 1; i > 0; --i)
+ meshName[i - 1] = meshName[i];
+ }
+ if(!removeZeros && (fakeInterface != -111111 || overlap != 1)) {
+ if(suppSmooth[].min < 0.501) {
+ supp = supp;
+ borderName[level - 1] = trunc(globalName, (suppSmooth > (overlap - 0.999) / real(2 * overlap)) && (suppSmooth < 0.501), label = (abs(fakeInterface) + 1) * 100);
+ if(s > 1)
+ for(int i = level - 2; i >= 0; --i) {
+ borderName[i] = trunc(borderName[i + 1], 1, split = s, label = (abs(fakeInterface) + 1) * 100);
+ meshN tempRefined = meshName[i] + borderName[i];
+ fespace PhRefinedPrivate(tempRefined, P0);
+ PhRefinedPrivate suppRefined = supp;
+ fespace VhBorderRefinedPrivate(borderName[i], P1);
+ VhBorderRefinedPrivate suppBorder = suppRefined;
+ borderName[i] = trunc(borderName[i], suppBorder > 0.01);
+ }
+ else
+ for(int i = level - 2; i >= 0; --i)
+ borderName[i] = borderName[i + 1];
+ }
+ }
+ fespace VhLocalPrivate(meshName[level - 1], P1);
+IFMACRO(!privateDmesh#meshName)
+NewMacro privateDmesh#meshName#intersectionDef()partitionIntersectionTab EndMacro
+ real[int][int] partitionIntersectionTab(1 + intersection[0].n);
+ privateDmesh#meshName#intersectionDef[0].resize(intersection[0].n);
+ENDIFMACRO
+IFMACRO(privateBuildDmesh)
+ privateDmesh#meshName#intersectionDef.resize(1 + intersection[0].n);
+ privateDmesh#meshName#intersectionDef[0].resize(intersection[0].n);
+ENDIFMACRO
+ VhLocalPrivate khi = max(2 * suppSmooth - 1.0, 0.0);
+ VhLocalPrivate sum;
+ sum[] = khi[];
+ VhGlobalPrivate phi;
+ if(n2oGlobalPrivate.n == globalName.nt && s == 1) {
+ real[int] restrictionPart(n2oGlobalPrivate.n);
+ restrictionPart = part[](n2oGlobalPrivate);
+ part = 0.0;
+ part[] = restrictionPart;
+ }
+ else
+ part = part;
+ n2oGlobalPrivate.resize(0);
+ int numberIntersection = 0;
+ {
+ int[int] restriction = restrict(VhLocalPrivate, VhGlobalPrivate, n2oNeighbor);
+ n2oNeighbor.resize(0);
+ mpiWaitAll(rq);
+ for(int i = 0; i < intersection[0].n; ++i) {
+ PhGlobalPrivate suppPartition = abs(part - intersection[0][i]) < 0.1;
+ AddLayers(globalName, suppPartition[], overlap, phi[]);
+ if(min(eps, epsTab[i]) > 0.0) {
+ if(intN(globalName, qforder = 2)(phi) / min(eps, epsTab[i]) > 1.0e-10) {
+ privateDmesh#meshName#intersectionDef[1 + numberIntersection].resize(restriction.n);
+ privateDmesh#meshName#intersectionDef[1 + numberIntersection] = phi[](restriction);
+ if(!trueRestrict)
+ sum[] += privateDmesh#meshName#intersectionDef[1 + numberIntersection];
+ intersection[0][numberIntersection++] = intersection[0][i];
+ }
+ }
+ }
+ }
+ if(numberIntersection != intersection[0].n) {
+ intersection[0].resize(numberIntersection);
+ privateDmesh#meshName#intersectionDef.resize(1 + numberIntersection);
+ }
+ intersection.resize(1 + level * numberIntersection);
+ENDIFMACRO
+IFMACRO(privateCreateMat)
+ assert(level == 1);
+ int numberIntersection = privateDmesh#meshName#intersectionDef.n - 1;
+ intersection.resize(1 + level * numberIntersection);
+ intersection[0].resize(numberIntersection);
+ intersection[0] = lround(privateDmesh#meshName#intersectionDef[0]);
+ fespace VhLocalPrivate(meshName[level - 1], P1);
+IFMACRO(privateDmesh#N2O)
+IFMACRO(privateDmesh#Original)
+IFMACRO(privateDmesh#Restriction)
+ {
+ fespace WhLocalPrivate(meshName[level - 1], P);
+ fespace WhOriginalPrivate(privateDmesh#Original, P);
+ privateDmesh#Restriction.resize(WhOriginalPrivate.ndof);
+ privateDmesh#Restriction = restrict(WhLocalPrivate, WhOriginalPrivate, privateDmesh#N2O);
+ }
+ENDIFMACRO
+ENDIFMACRO
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(privateBuildDmesh)
+ privateDmesh#meshName#intersectionDef[0].resize(numberIntersection);
+ for[i, value : intersection[0]] privateDmesh#meshName#intersectionDef[0][i] = value;
+ENDIFMACRO
+ meshN[int] meshIntersection(numberIntersection);
+IFMACRO(!privateCreateMat)
+ int[int][int] n2oIntersection(0);
+ if(trueRestrict && mpiSize(comm) == size && removeZeros)
+ n2oIntersection.resize(numberIntersection);
+ENDIFMACRO
+ for(int j = 0; j < (s == 1 ? 1 : level); ++j) {
+ for(int i = 0; i < numberIntersection; ++i) {
+ int[int] n2o;
+ VhLocalPrivate partitionIntersection;
+ partitionIntersection[] = privateDmesh#meshName#intersectionDef[1 + i];
+ meshIntersection[i] = trunc(meshName[j], partitionIntersection > 1.0e-6, new2old = n2o, label = 9999);
+IFMACRO(privateDmesh#CartesianPartitioning)
+ real[int] bb(2 * dimension);
+ boundingbox(meshIntersection[i], bb);
+ meshIntersection[i] = trunc(meshName[j], x > bb[0] && x < bb[1] && y > bb[2] && y < bb[3]
+IFMACRO(dimension,3)
+ && z > bb[4] && z < bb[5]
+ENDIFMACRO
+ , new2old = n2o, label = 9999);
+ENDIFMACRO
+IFMACRO(!privateCreateMat)
+ if(j == 0 && trueRestrict && mpiSize(comm) == size && removeZeros) {
+ n2oIntersection[i].resize(n2o.n);
+ n2oIntersection[i] = n2o;
+ }
+ if(!removeZeros)
+ENDIFMACRO
+ {
+IFMACRO(vectorialfe)
+ fespace singleComponentWhPrivate(meshName[j], vectorialfe);
+ fespace WhIntersectionPrivate(meshIntersection[i], vectorialfe);
+ENDIFMACRO
+IFMACRO(!vectorialfe)
+ fespace singleComponentWhPrivate(meshName[j], P);
+ fespace WhIntersectionPrivate(meshIntersection[i], P);
+ENDIFMACRO
+ intersection[1 + i + j * numberIntersection] = restrict(WhIntersectionPrivate, singleComponentWhPrivate, n2o);
+ }
+ }
+ }
+IFMACRO(!privateCreateMat)
+ if(s == 1 && level > 1 && !removeZeros)
+ for(int j = 1; j < level; ++j)
+ for(int i = 0; i < numberIntersection; ++i) {
+ intersection[1 + i + j * numberIntersection].resize(intersection[1 + i].n);
+ intersection[1 + i + j * numberIntersection] = intersection[1 + i];
+ }
+ for(int i = 0; i < level - 1; ++i) {
+ fespace VhRefinedPrivate(meshName[i], P1);
+ fespace PhRefinedPrivate(meshName[i], P0);
+ PhRefinedPrivate partRefined = part;
+ PhRefinedPrivate supp = abs(partRefined - rank) < 0.1;
+ varf vSupp(uPrivate, vPrivate) = intN(meshName[i], qforder = 1)(supp * vPrivate);
+ VhRefinedPrivate khiL;
+ khiL[] = vSupp(0, VhRefinedPrivate);
+ khiL = khiL > 0.0;
+ VhRefinedPrivate sum = khiL;
+ for(int j = 0; j < numberIntersection; ++j) {
+ supp = abs(partRefined - intersection[0][j]) < 0.1;
+ VhRefinedPrivate phiL;
+ phiL[] = vSupp(0, VhRefinedPrivate);
+ phiL = phiL > 0.0;
+ sum[] += phiL[];
+ }
+ khiL[] ./= sum[];
+ fespace WhRefinedPrivate(meshName[i], PkPart);
+ WhRefinedPrivate defPart(func2vec);
+ defPart(func2vec) = initPart(khiL);
+ D[i].resize(WhRefinedPrivate.ndof);
+ D[i] = func2vec[];
+ }
+ if(!trueRestrict)
+ khi[] ./= sum[];
+ else {
+ khi = abs(part - rank) < 0.1;
+ VhLocalPrivate sigma = part;
+ for(int i = 0; i < numberIntersection; ++i) {
+ if(rank < intersection[0][i]) {
+ for[j, value : khi[]] {
+ if(value > 0.9 && abs(sigma[][j] - intersection[0][i]) < 0.1)
+ value = 0.0;
+ }
+ }
+ }
+ }
+ if(trueRestrict && mpiSize(comm) == size && removeZeros) {
+ assert(level == 1);
+ meshN ThIntersection;
+ mpiRequest[int] rq(2 * numberIntersection);
+ int[int] skip(0);
+ {
+ fespace PhIntersectionPrivate(ThIntersection, P0);
+ PhIntersectionPrivate[int] recv(numberIntersection);
+ PhIntersectionPrivate[int] send(numberIntersection);
+ for(int i = 0; i < numberIntersection; ++i) {
+ ThIntersection = meshIntersection[i];
+ Irecv(processor(intersection[0][i], comm, rq[i]), recv[i][]);
+ send[i] = khi;
+ Isend(processor(intersection[0][i], comm, rq[numberIntersection + i]), send[i][]);
+ }
+ real[int] tmpRemove(meshName[0].nt);
+ int[int] n2oRemove;
+IFMACRO(!privateDmesh#N2O)
+ meshName[0] = trunc(meshName[0], khi > 1.0e-6, label = 9999, new2old = n2oRemove);
+ENDIFMACRO
+IFMACRO(privateDmesh#N2O)
+ {
+ int[int] n2oFilter;
+ meshName[0] = trunc(meshName[0], khi > 1.0e-6, label = 9999, new2old = n2oRemove);
+ n2oFilter.resize(n2oRemove.n);
+ n2oFilter = privateDmesh#N2O(n2oRemove);
+ privateDmesh#N2O.resize(n2oFilter.n);
+ privateDmesh#N2O = n2oFilter;
+ }
+ENDIFMACRO
+ khi = khi;
+ fespace PhLocalPrivate(meshName[0], P0);
+ for(int k = 0; k < 2 * numberIntersection; ++k) {
+ int i = mpiWaitAny(rq);
+ if(i < numberIntersection) {
+ ThIntersection = meshIntersection[i];
+ PhIntersectionPrivate intersection = send[i] > 1.0e-6 && recv[i] > 1.0e-6;
+ if(intersection[].l2 > 1.0e-6) {
+ tmpRemove = 0.0;
+ tmpRemove(n2oIntersection[i]) = intersection[];
+ PhLocalPrivate afterTrunc;
+ afterTrunc[] = tmpRemove(n2oRemove);
+ meshIntersection[i] = trunc(meshName[0], afterTrunc > 1.0e-6, label = 9999, new2old = n2oIntersection[i]);
+ }
+ else {
+ skip.resize(skip.n + 1);
+ skip[skip.n - 1] = i;
+ }
+ }
+ }
+ }
+ skip.sort;
+ real[int][int] recv(numberIntersection);
+ real[int][int] send(numberIntersection);
+ int j = 0;
+ for(int i = 0; i < numberIntersection; ++i) {
+ bool skipped = false;
+ if(j < skip.n) {
+ if(skip[j] == i) {
+ ++j;
+ skipped = true;
+ }
+ }
+ if(!skipped) {
+ recv[i].resize(meshIntersection[i].nv);
+ Irecv(processor(intersection[0][i], comm, rq[i]), recv[i]);
+ fespace VhIntersectionPrivate(meshIntersection[i], P1);
+ int[int] restriction = restrict(VhIntersectionPrivate, VhLocalPrivate, n2oIntersection[i]);
+ send[i].resize(meshIntersection[i].nv);
+ send[i] = khi[](restriction);
+ Isend(processor(intersection[0][i], comm, rq[numberIntersection + i]), send[i]);
+ }
+ }
+ mpiWaitAll(rq);
+ intersection.resize(1 + numberIntersection - skip.n);
+ j = 0;
+ for(int i = 0; i < numberIntersection; ++i) {
+ bool skipped = false;
+ if(j < skip.n) {
+ if(skip[j] == i) {
+ ++j;
+ skipped = true;
+ }
+ }
+ if(!skipped) {
+IFMACRO(vectorialfe)
+ fespace singleComponentWhPrivate(meshName[0], vectorialfe);
+ fespace WhIntersectionPrivate(meshIntersection[i], vectorialfe);
+ENDIFMACRO
+IFMACRO(!vectorialfe)
+ fespace singleComponentWhPrivate(meshName[0], P);
+ fespace WhIntersectionPrivate(meshIntersection[i], P);
+ENDIFMACRO
+ intersection[1 + i - j] = restrict(WhIntersectionPrivate, singleComponentWhPrivate, n2oIntersection[i]);
+ fespace VhIntersectionPrivate(meshIntersection[i], P1);
+ int[int] restriction = restrict(VhIntersectionPrivate, VhLocalPrivate, n2oIntersection[i]);
+ privateDmesh#meshName#intersectionDef[1 + i - j].resize(VhLocalPrivate.ndof);
+ privateDmesh#meshName#intersectionDef[1 + i - j] = 0.0;
+ privateDmesh#meshName#intersectionDef[1 + i - j](restriction) = recv[i];
+ intersection[0][i - j] = intersection[0][i];
+ }
+ }
+ numberIntersection -= skip.n;
+ intersection[0].resize(numberIntersection);
+ privateDmesh#meshName#intersectionDef.resize(1 + numberIntersection);
+ privateDmesh#meshName#intersectionDef[0].resize(numberIntersection);
+ for[i, value : intersection[0]] privateDmesh#meshName#intersectionDef[0][i] = value;
+ if(fakeInterface != -111111 || overlap != 1) {
+ PhGlobalPrivate suppPartition = khi > 0.1;
+ AddLayers(globalName, suppPartition[], 1, phi[]);
+ borderName[0] = trunc(globalName, phi > 0.001 && phi < 0.501, label = (abs(fakeInterface) + 1) * 100);
+ }
+ }
+ENDIFMACRO
+IFMACRO(vectorialfe)
+ if(bs > 1)
+ for(int i = 0; i < intersection.n - 1; ++i) {
+ int n = intersection[1 + i].n;
+ intersection[1 + i].resize(n * bs);
+ for(int j = n - 1; j != -1; --j)
+ for(int k = bs - 1; k != -1; --k)
+ intersection[1 + i][j * bs + k] = intersection[1 + i][j] * bs + k;
+ }
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(privateCreatePartition)
+ fespace VhLocalPrivate(meshName[level - 1], P1);
+IFMACRO(!privateCreateMat)
+ VhLocalPrivate khi;
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(privateCreateMat)
+ VhLocalPrivate khi;
+ khi[] = privateDmesh#meshName#khiDef[0];
+ENDIFMACRO
+ fespace WhPartPrivate(meshName[level - 1], PkPart);
+ WhPartPrivate defPart(func2vec);
+ D[level - 1].resize(WhPartPrivate.ndof);
+ if((WhPartPrivate.ndof % meshName[level - 1].nt) == 0 && WhPartPrivate.ndof != meshName[level - 1].nv) {
+ int constant = rank;
+IFMACRO(privateCreateMat)
+ fespace PhLocalPrivate(meshName[level - 1], P0);
+ PhLocalPrivate partLocal;
+ partLocal[] = privateDmesh#meshName#khiDef[1];
+ defPart(func2vec) = initPart(abs(partLocal - constant) < 0.1);
+ENDIFMACRO
+IFMACRO(!privateCreateMat)
+ defPart(func2vec) = initPart(abs(part - constant) < 0.1);
+ENDIFMACRO
+ }
+ else if(WhPartPrivate.ndof == meshName[level - 1].nv && (WhPartPrivate.ndof % meshName[level - 1].nt) != 0)
+ func2vec[] = khi[];
+ else
+ defPart(func2vec) = initPart(khi);
+ D[level - 1] = func2vec[];
+IFMACRO(privateDmesh#PostProcessD)
+ privateDmesh#PostProcessD(D[level - 1]);
+ENDIFMACRO
+IFMACRO(!privateCreatePartition)
+IFMACRO(!privateCreateMat)
+IFMACRO(privateBuildDmesh)
+ fespace PhLocalPrivate(meshName[level - 1], P0);
+ PhLocalPrivate partLocal;
+ partLocal = part;
+ privateDmesh#meshName#khiDef[1].resize(partLocal[].n);
+ privateDmesh#meshName#khiDef[1] = partLocal[];
+ENDIFMACRO
+ENDIFMACRO
+ENDIFMACRO
+ searchMethod = backupSM;
+}// EOM
+
+macro saveDmesh(ThName, name)
+IFMACRO(privateDmesh#ThName)
+{
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(dimension,3)
+savemesh(ThName, name + "_" + mpiRank(ThName#Comm) + "_" + mpiSize(ThName#Comm) + ".meshb");
+ENDIFMACRO
+IFMACRO(dimension,2)
+savemesh(ThName, name + "_" + mpiRank(ThName#Comm) + "_" + mpiSize(ThName#Comm) + ".msh");
+ENDIFMACRO
+ofstream khi(name + "_" + mpiRank(ThName#Comm) + "_" + mpiSize(ThName#Comm) + ".khi");
+khi << privateDmesh#ThName#khi << endl;
+khi << privateDmesh#ThName#intersection << endl;
+IFMACRO(ThName#N2O)
+khi << ThName#N2O << endl;
+ENDIFMACRO
+}
+ENDIFMACRO
+IFMACRO(!privateDmesh#ThName)
+assert(0);
+ENDIFMACRO
+EndMacro
+
+macro loadDmesh(ThName, name)
+IFMACRO(!privateDmesh#ThName)
+NewMacro privateDmesh#ThName()privateDmesh#ThName EndMacro
+NewMacro privateDmesh#ThName#khi()privateDmesh#ThName#khiDef EndMacro
+NewMacro privateDmesh#ThName#intersection()privateDmesh#ThName#intersectionDef EndMacro
+real[int][int] privateDmesh#ThName#khi(2);
+real[int][int] privateDmesh#ThName#intersection;
+ENDIFMACRO
+{
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(dimension,3)
+ThName = readmesh3(name + "_" + mpiRank(ThName#Comm) + "_" + mpiSize(ThName#Comm) + ".meshb");
+ENDIFMACRO
+IFMACRO(dimension,2)
+ThName = readmesh(name + "_" + mpiRank(ThName#Comm) + "_" + mpiSize(ThName#Comm) + ".msh");
+ENDIFMACRO
+privateDmesh#ThName#khi.resize(2);
+privateDmesh#ThName#khi[0].resize(ThName.nv);
+privateDmesh#ThName#khi[1].resize(ThName.nt);
+if(mpiSize(ThName#Comm) > 1) {
+ ifstream khi(name + "_" + mpiRank(ThName#Comm) + "_" + mpiSize(ThName#Comm) + ".khi");
+ int m;
+ khi >> m;
+ assert(m == 2);
+ khi >> privateDmesh#ThName#khi[0];
+ khi >> privateDmesh#ThName#khi[1];
+ khi >> m;
+ privateDmesh#ThName#intersection.resize(m);
+ for(int j = 0; j < m; ++j) {
+ int n;
+ khi >> n;
+ privateDmesh#ThName#intersection[j].resize(n);
+ for[i, value : privateDmesh#ThName#intersection[j]]
+ khi >> value;
+ }
+IFMACRO(ThName#N2O)
+ ThName#N2O.resize(ThName.nt);
+ khi >> ThName#N2O;
+ENDIFMACRO
+}
+else {
+ privateDmesh#ThName#khi[0] = 1.0;
+ privateDmesh#ThName#khi[1] = 1.0;
+IFMACRO(ThName#N2O)
+ ThName#N2O.resize(ThName.nt);
+ ThName#N2O = 0:ThName.nt - 1;
+ENDIFMACRO
+}
+}
+EndMacro
+
+macro buildDmesh(ThName)
+IFMACRO(!privateDmesh#ThName)
+NewMacro privateDmesh#ThName()privateDmesh#ThName EndMacro
+NewMacro privateDmesh#ThName#khi()privateDmesh#ThName#khiDef EndMacro
+NewMacro privateDmesh#ThName#intersection()privateDmesh#ThName#intersectionDef EndMacro
+real[int][int] privateDmesh#ThName#khi(2);
+real[int][int] privateDmesh#ThName#intersection;
+ENDIFMACRO
+{
+IFMACRO(!meshN)
+IFMACRO(dimension,3)
+NewMacro meshN()mesh3 EndMacro /* three-dimensional problem */
+NewMacro intN()int3d EndMacro /* three-dimensional integral */
+ENDIFMACRO
+IFMACRO(dimension,3S)
+NewMacro meshN()meshS EndMacro /* three-dimensional surface problem */
+NewMacro intN()int2d EndMacro /* two-dimensional integral */
+ENDIFMACRO
+IFMACRO(dimension,3L)
+NewMacro meshN()meshL EndMacro /* three-dimensional line problem */
+NewMacro intN()int1d EndMacro /* one-dimensional integral */
+ENDIFMACRO
+IFMACRO(!meshN)
+NewMacro meshN()mesh EndMacro /* two-dimensional problem */
+NewMacro intN()int2d EndMacro /* two-dimensional integral */
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+NewMacro privateBuildDmesh()1 EndMacro
+int[int][int] intersection;
+NewMacro privateDmesh#ThTab()privateDmesh#ThName EndMacro
+NewMacro privateDmesh#ThTab#khi()privateDmesh#ThName#khiDef EndMacro
+NewMacro privateDmesh#ThTab#intersection()privateDmesh#ThName#intersectionDef EndMacro
+IFMACRO(ThName#N2O)
+NewMacro privateDmesh#N2O()ThName#N2O EndMacro
+IFMACRO(ThName#RefinementFactor)
+exit(10); /* not currently implemented */
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(ThName#UserPartitioning)
+IFMACRO(ThName#RefinementFactor)
+exit(11); /* not currently implemented */
+ENDIFMACRO
+buildWithPartitioning(ThName, ThName#UserPartitioning, 1, intersection, privateDmesh#ThName#khi[0], P1, ThName#Comm);
+ENDIFMACRO
+IFMACRO(ThName#Periodicity)
+IFMACRO(ThName#RefinementFactor)
+exit(12); /* not currently implemented */
+ENDIFMACRO
+buildPeriodic(ThName, 1, intersection, privateDmesh#ThName#khi[0], P1, ThName#Comm, ThName#Periodicity);
+ENDIFMACRO
+IFMACRO(!ThName#UserPartitioning)
+IFMACRO(!ThName#Periodicity)
+IFMACRO(ThName#CartesianPartitioning)
+IFMACRO(!dimension)
+NewMacro dimension()2 EndMacro
+ENDIFMACRO
+NewMacro privateDmesh#CartesianPartitioning() EndMacro
+IFMACRO(ThName#RefinementFactor)
+exit(13); /* not currently implemented */
+ENDIFMACRO
+IFMACRO(removeZeros,true)
+exit(103); /* not currently implemented */
+ENDIFMACRO
+IFMACRO(trueRestrict,true)
+exit(103); /* not currently implemented */
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(!ThName#RefinementFactor)
+int privateS = 1;
+ENDIFMACRO
+IFMACRO(ThName#RefinementFactor)
+int privateS = ThName#RefinementFactor;
+ENDIFMACRO
+IFMACRO(ThName#Overlap)
+meshN privateBorder;
+buildOverlap(ThName, privateBorder, -111111, privateS, ThName#Overlap, intersection, privateDmesh#ThName#khi[0], P1, ThName#Comm, false);
+ENDIFMACRO
+IFMACRO(!ThName#Overlap)
+build(ThName, privateS, intersection, privateDmesh#ThName#khi[0], P1, ThName#Comm);
+ENDIFMACRO
+ENDIFMACRO
+ENDIFMACRO
+}
+EndMacro
+
+macro reconstructDmesh(ThName)
+IFMACRO(!privateDmesh#ThName)
+NewMacro privateDmesh#ThName()privateDmesh#ThName EndMacro
+NewMacro privateDmesh#ThName#khi()privateDmesh#ThName#khiDef EndMacro
+NewMacro privateDmesh#ThName#intersection()privateDmesh#ThName#intersectionDef EndMacro
+real[int][int] privateDmesh#ThName#khi(2);
+real[int][int] privateDmesh#ThName#intersection;
+ENDIFMACRO
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+if(ThName#Comm) {
+IFMACRO(!dimension)
+ NewMacro dimension()2 EndMacro
+ENDIFMACRO
+IFMACRO(!meshN)
+ NewMacro meshN()mesh EndMacro
+ NewMacro intN()int2d EndMacro
+ENDIFMACRO
+ int[int] neighbors;
+ {
+ real[int] bb(2 * dimension);
+ boundingbox(ThName, bb);
+ real[int] bbAll(2 * dimension * mpiSize(ThName#Comm));
+ mpiAllgather(bb, bbAll, ThName#Comm);
+ real hmax;
+ {
+ real tmp = ThName.hmax;
+ mpiAllReduce(tmp, hmax, ThName#Comm, mpiMAX);
+ }
+ int between = 0;
+ int size = mpiSize(ThName#Comm);
+ int rank = mpiRank(ThName#Comm);
+ for(int i = 0; i < size; ++i) {
+ if(i != rank &&
+IFMACRO(dimension,2)
+ !(bbAll[1 + 4 * i] < bb[0] - hmax
+ || bbAll[0 + 4 * i] > bb[1] + hmax
+ || bbAll[3 + 4 * i] < bb[2] - hmax
+ || bbAll[2 + 4 * i] > bb[3] + hmax)
+ENDIFMACRO
+IFMACRO(dimension,3)
+ !(bbAll[1 + 6 * i] < bb[0] - hmax
+ || bbAll[0 + 6 * i] > bb[1] + hmax
+ || bbAll[3 + 6 * i] < bb[2] - hmax
+ || bbAll[2 + 6 * i] > bb[3] + hmax
+ || bbAll[5 + 6 * i] < bb[4] - hmax
+ || bbAll[4 + 6 * i] > bb[5] + hmax)
+ENDIFMACRO
+ ) {
+ neighbors.resize(neighbors.n + 1);
+ neighbors[neighbors.n - 1] = i;
+ }
+ }
+ }
+ reconstructDmeshWithNeighbors(ThName, neighbors)
+}
+EndMacro
+macro reconstructDmeshWithNeighbors(ThName, neighborsName)
+IFMACRO(!privateDmesh#ThName)
+NewMacro privateDmesh#ThName()privateDmesh#ThName EndMacro
+NewMacro privateDmesh#ThName#khi()privateDmesh#ThName#khiDef EndMacro
+NewMacro privateDmesh#ThName#intersection()privateDmesh#ThName#intersectionDef EndMacro
+real[int][int] privateDmesh#ThName#khi(2);
+real[int][int] privateDmesh#ThName#intersection;
+ENDIFMACRO
+{
+IFMACRO(!ThName#Comm)
+ NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+ real[int] part;
+ {
+ if(verbosity > 0)
+ mpiBarrier(ThName#Comm);
+ real timerReconstruction = mpiWtime();
+ varf vG(uPrivate, vPrivate) = on(labels(ThName), uPrivate = 1.0);
+ fespace VhGammaPrivate(ThName, P1);
+ VhGammaPrivate gamma;
+ gamma[] = vG(0, VhGammaPrivate, tgv = -1);
+ meshN[int] ThTab(neighborsName.n + 2);
+ neighborsName.sort;
+ int between = 0;
+ int rank = mpiRank(ThName#Comm);
+ for(int i = 0; i < neighborsName.n; ++i)
+ if(neighborsName[i] > rank) {
+ between = i;
+ break;
+ }
+ if(neighborsName.n)
+ if(neighborsName[neighborsName.n - 1] < rank)
+ between = neighborsName.n;
+ mpiRequest[int] rqRecv(neighborsName.n);
+ for[i, value : neighborsName]
+ Irecv(processor(value, ThName#Comm, rqRecv[i]), ThTab[i + (i >= between)]);
+IFMACRO(!ThName#Overlap)
+ ThTab[between] = trunc(ThName, gamma > 0.01, label = -111112);
+ENDIFMACRO
+IFMACRO(ThName#Overlap)
+ ThTab[between] = ThName;
+ENDIFMACRO
+ mpiRequest[int] rqSend(neighborsName.n);
+ for[i, value : neighborsName]
+IFMACRO(!ThName#Overlap)
+ Isend(processor(value, ThName#Comm, rqSend[i]), ThTab[between]);
+ENDIFMACRO
+IFMACRO(ThName#Overlap)
+ Isend(processor(value, ThName#Comm, rqSend[i]), ThName);
+ENDIFMACRO
+IFMACRO(!ThName#Overlap)
+ ThTab[neighborsName.n + 1] = trunc(ThName, gamma < 0.01, label = -111112);
+ENDIFMACRO
+ mpiWaitAll(rqRecv);
+IFMACRO(dimension,3)
+ ThName = gluemesh(ThTab);
+ ThName = change(ThName, rmlfaces = -111112);
+ENDIFMACRO
+IFMACRO(dimension,2)
+ ThName = gluemesh(ThTab, labtodel = -111112);
+ENDIFMACRO
+ part.resize(ThName.nt);
+ int m = 0;
+ for(int i = 0; i < between; ++i) {
+ part(m:m + ThTab[i].nt - 1) = neighborsName[i];
+ m += ThTab[i].nt;
+ }
+ part(m:m + ThTab[between].nt - 1) = rank;
+ m += ThTab[between].nt;
+ for(int i = between; i < neighborsName.n; ++i) {
+ part(m:m + ThTab[i + 1].nt - 1) = neighborsName[i];
+ m += ThTab[i + 1].nt;
+ }
+ if(m != ThName.nt)
+ part(m:ThName.nt - 1) = rank;
+ mpiWaitAll(rqSend);
+ if(verbosity > 0) {
+ mpiBarrier(ThName#Comm);
+ if(mpiRank(ThName#Comm) == 0)
+ cout.scientific << " --- distributed mesh reconstructed (in " << mpiWtime() - timerReconstruction << ")" << endl;
+ }
+ }
+ NewMacro privateBuildDmesh()1 EndMacro
+ NewMacro privateReconstructDmesh()1 EndMacro
+ int[int][int] intersection;
+ NewMacro privateDmesh#ThTab()privateDmesh#ThName EndMacro
+ NewMacro privateDmesh#ThTab#khi()privateDmesh#ThName#khiDef EndMacro
+ NewMacro privateDmesh#ThTab#intersection()privateDmesh#ThName#intersectionDef EndMacro
+IFMACRO(ThName#N2O)
+ NewMacro privateDmesh#N2O()ThName#N2O EndMacro
+ENDIFMACRO
+IFMACRO(ThName#Overlap)
+ meshN ThBorder;
+ buildOverlapWithPartitioning(ThName, ThBorder, part, -111111, 1, ThName#Overlap, intersection, privateDmesh#ThName#khi[0], P1, ThName#Comm, false);
+ENDIFMACRO
+IFMACRO(!ThName#Overlap)
+ buildWithPartitioning(ThName, part, 1, intersection, privateDmesh#ThName#khi[0], P1, ThName#Comm);
+ENDIFMACRO
+}
+EndMacro
+macro initializeDmesh(NewName)
+IFMACRO(!privateDmesh#NewName)
+NewMacro privateDmesh#NewName()privateDmesh#NewName EndMacro
+NewMacro privateDmesh#NewName#khi()privateDmesh#NewName#khiDef EndMacro
+NewMacro privateDmesh#NewName#intersection()privateDmesh#NewName#intersectionDef EndMacro
+real[int][int] privateDmesh#NewName#khi(2);
+real[int][int] privateDmesh#NewName#intersection;
+ENDIFMACRO
+EndMacro
+macro copyDmesh(OldName, NewName)
+DmeshInitialize(NewName)
+IFMACRO(privateDmesh#OldName)
+NewName = OldName;
+privateDmesh#NewName#khi[0].resize(privateDmesh#OldName#khi[0].n);
+privateDmesh#NewName#khi[0] = privateDmesh#OldName#khi[0];
+privateDmesh#NewName#khi[1].resize(privateDmesh#OldName#khi[1].n);
+privateDmesh#NewName#khi[1] = privateDmesh#OldName#khi[1];
+privateDmesh#NewName#intersection.resize(privateDmesh#OldName#intersection.n);
+for(int i = 0; i < privateDmesh#NewName#intersection.n; ++i) {
+ privateDmesh#NewName#intersection[i].resize(privateDmesh#OldName#intersection[i].n);
+ privateDmesh#NewName#intersection[i] = privateDmesh#OldName#intersection[i];
+}
+ENDIFMACRO
+EndMacro
+macro createMat(ThName, MatName, PkName)
+IFMACRO(privateDmesh#ThName)
+{
+IFMACRO(!meshN)
+IFMACRO(dimension,3)
+NewMacro meshN()mesh3 EndMacro /* three-dimensional problem */
+NewMacro intN()int3d EndMacro /* three-dimensional integral */
+ENDIFMACRO
+IFMACRO(dimension,3S)
+NewMacro meshN()meshS EndMacro /* three-dimensional surface problem */
+NewMacro intN()int2d EndMacro /* two-dimensional integral */
+ENDIFMACRO
+IFMACRO(dimension,3L)
+NewMacro meshN()meshL EndMacro /* three-dimensional line problem */
+NewMacro intN()int1d EndMacro /* one-dimensional integral */
+ENDIFMACRO
+IFMACRO(!meshN)
+NewMacro meshN()mesh EndMacro /* two-dimensional problem */
+NewMacro intN()int2d EndMacro /* two-dimensional integral */
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!privateCreateMatCheckDmesh)
+if(ThName.nv != privateDmesh#ThName#khi[0].n || (privateDmesh#ThName#khi[1].n && ThName.nt != privateDmesh#ThName#khi[1].n)) {
+ DmeshCreate(ThName)
+}
+ENDIFMACRO
+NewMacro privateCreateMat()1 EndMacro
+int[int][int] intersection;
+real[int][int] DTab(1);
+meshN[int] ThTab(1);
+ThTab[0] = ThName;
+NewMacro privateDmesh#ThTab()privateDmesh#ThName EndMacro
+NewMacro privateDmesh#ThTab#khi()privateDmesh#ThName#khiDef EndMacro
+NewMacro privateDmesh#ThTab#intersection()privateDmesh#ThName#intersectionDef EndMacro
+IFMACRO(!def)
+NewMacro def(i)i EndMacro
+ENDIFMACRO
+IFMACRO(!init)
+NewMacro init(i)i EndMacro
+ENDIFMACRO
+if(mpiSize(ThName#Comm) > 1) {
+IFMACRO(ThName#N2O)
+IFMACRO(ThName#Original)
+IFMACRO(ThName#Restriction)
+ NewMacro privateDmesh#N2O()ThName#N2O EndMacro
+ NewMacro privateDmesh#Original()ThName#Original EndMacro
+ NewMacro privateDmesh#Restriction()ThName#Restriction EndMacro
+ENDIFMACRO
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(!ThName#PkPart)
+ NewMacro ThName#PkPart()PkName EndMacro
+ENDIFMACRO
+IFMACRO(ThName#CartesianPartitioning)
+ NewMacro privateDmesh#CartesianPartitioning() EndMacro
+IFMACRO(!dimension)
+ NewMacro dimension()2 EndMacro
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(ThName#PostProcessD)
+ NewMacro privateDmesh#PostProcessD(arg)ThName#PostProcessD(arg) EndMacro
+IFMACRO(removeZeros,true)
+ exit(105); /* not currently implemented */
+ENDIFMACRO
+IFMACRO(trueRestrict,true)
+ exit(105); /* not currently implemented */
+ENDIFMACRO
+ENDIFMACRO
+ partitionPrivate(ThTab, privateCreateMat, privateCreateMat, privateCreateMat, privateCreateMat, privateCreateMat, mpiRank(ThName#Comm), mpiSize(ThName#Comm), 1, 1, 1, privateCreateMat, DTab, PkName, intersection, ThName#Comm, -111111, ThName#PkPart, def, init, 1)
+}
+else {
+ fespace WhGlobalPrivate(ThName, PkName);
+ DTab[0].resize(WhGlobalPrivate.ndof);
+ DTab[0] = 1;
+ intersection.resize(0);
+IFMACRO(ThName#N2O)
+IFMACRO(ThName#Original)
+IFMACRO(ThName#Restriction)
+ ThName#Restriction.resize(WhGlobalPrivate.ndof);
+ ThName#Restriction = 0:WhGlobalPrivate.ndof - 1;
+ENDIFMACRO
+ENDIFMACRO
+ENDIFMACRO
+}
+IFMACRO(!privateCreatePartition)
+constructor(MatName, DTab[0].n, intersection, DTab[0], communicator = ThName#Comm);
+ENDIFMACRO
+IFMACRO(privateCreatePartition)
+privateCreatePartition.resize(DTab[0].n);
+privateCreatePartition = DTab[0];
+ENDIFMACRO
+}
+ENDIFMACRO
+IFMACRO(!privateDmesh#ThName)
+DmeshCreate(ThName)
+{
+IFMACRO(!meshN)
+IFMACRO(dimension,3)
+ NewMacro meshN()mesh3 EndMacro /* three-dimensional problem */
+ NewMacro intN()int3d EndMacro /* three-dimensional integral */
+ENDIFMACRO
+IFMACRO(dimension,3S)
+ NewMacro meshN()meshS EndMacro /* three-dimensional surface problem */
+ NewMacro intN()int2d EndMacro /* two-dimensional integral */
+ENDIFMACRO
+IFMACRO(dimension,3L)
+ NewMacro meshN()meshL EndMacro /* three-dimensional line problem */
+ NewMacro intN()int1d EndMacro /* one-dimensional integral */
+ENDIFMACRO
+IFMACRO(!meshN)
+ NewMacro meshN()mesh EndMacro /* two-dimensional problem */
+ NewMacro intN()int2d EndMacro /* two-dimensional integral */
+ENDIFMACRO
+ENDIFMACRO
+ NewMacro privateCreateMatCheckDmesh()1 EndMacro
+ MatCreate(ThName, MatName, PkName)
+}
+ENDIFMACRO
+EndMacro
+
+macro createPartition(ThName, PartName, PkName)
+IFMACRO(!privateDmesh#ThName)
+DmeshCreate(ThName)
+ENDIFMACRO
+{
+ NewMacro privateCreateMatCheckDmesh()1 EndMacro
+ NewMacro privateCreatePartition()PartName EndMacro
+ MatCreate(ThName, privateCreatePartition, PkName)
+}
+EndMacro
+
+macro buildOverlapEdgePeriodicRecursive(Th, ThBorder, fakeInterface, s, overlap, level, prolongation, intersection, DTab, P, comm, excluded, PkPart, defPart, initPart, labPeriodic, userPartitioning, bs) {
+IFMACRO(!def)
+ NewMacro def(i)i EndMacro
+ENDIFMACRO
+IFMACRO(!init)
+ NewMacro init(i)i EndMacro
+ENDIFMACRO
+ Th.resize(level);
+ ThBorder.resize(level);
+ prolongation.resize(level - 1);
+ real timerPartition = mpiWtime();
+ if(mpiSize(comm) > 1 && !excluded) {
+ meshN ThGlobal = Th[level - 1];
+ fespace PhGlobalPrivate(ThGlobal, P0);
+ fespace VhGlobalPrivate(ThGlobal, P1);
+ PhGlobalPrivate partGlobal;
+IFMACRO(!privateReconstructDmesh)
+IFMACRO(privateDmesh#CartesianPartitioning)
+ {
+ real[int] bb(2 * dimension);
+ boundingbox(ThGlobal, bb);
+ PhGlobalPrivate xx = x / (bb[1] - bb[0]), yy = y / (bb[3] - bb[2])
+IFMACRO(dimension,2)
+ ;
+ int i = int(sqrt(mpiSize(comm)));
+ while(mpiSize(comm) % i != 0)
+ --i;
+ int j = mpiSize(comm) / i;
+ partGlobal = int(j * xx) + int(i * yy) * j;
+ENDIFMACRO
+IFMACRO(dimension,3)
+ , zz = z / (bb[5] - bb[4]);
+ i = int(mpiSize(comm)^(0.333333333333333));
+ while(mpiSize(comm) % i != 0)
+ --i;
+ real p = mpiSize(comm) / i;
+ j = int(sqrt(p));
+ while(p % j != 0)
+ --j;
+ real k = int(p / j);
+ partGlobal = int(i * zz) * k * j + int(j * yy) * k + int(k * xx);
+ENDIFMACRO
+ }
+ENDIFMACRO
+IFMACRO(!privateDmesh#CartesianPartitioning)
+ if(userPartitioning.n != PhGlobalPrivate.ndof || labPeriodic.n > 0) {
+ timerPartition = mpiWtime();
+ meshN ThGlobalPeriodic;
+ if(labPeriodic.n > 0) {
+ VhGlobalPrivate marker;
+ for(int i = 0; i < labPeriodic.n; ++i) {
+ varf vMarker(uPrivate, vPrivate) = on(labPeriodic[i], uPrivate = 1.0);
+ marker[] += vMarker(0, VhGlobalPrivate, tgv = -1);
+ }
+ PhGlobalPrivate partPeriodic = marker > 0.1;
+ while(1) {
+ AddLayers(ThGlobal, partPeriodic[], 1 + overlap, marker[]);
+ partPeriodic = marker > 0.001;
+ ThGlobalPeriodic = trunc(ThGlobal, partPeriodic < 0.999);
+ if(ThGlobal.nt / real(ThGlobalPeriodic.nt) > mpisize / real(mpisize - 1))
+ break;
+ }
+ }
+ if(mpiRank(comm) == 0) {
+ if(verbosity > 0)
+ cout.scientific << " --- global mesh of " << ThGlobal.nt << " elements (prior to refinement) partitioned with " << Stringification(partitioner);
+ if(labPeriodic.n > 0) {
+ fespace PhPeriodicPrivate(ThGlobalPeriodic, P0);
+ PhPeriodicPrivate partPeriodic;
+ if(mpiSize(comm) > 2) {
+ partitionerSeq(partPeriodic[], ThGlobalPeriodic, mpiSize(comm) - 1);
+ partPeriodic[] += 1.0;
+ }
+ else
+ partPeriodic[] = 1.0;
+ partGlobal = partPeriodic;
+ }
+ else {
+ partitionerSeq(partGlobal[], ThGlobal, mpiSize(comm));
+ }
+ }
+ if(labPeriodic.n > 0 && Stringification(partitioner) != "metis" && Stringification(partitioner) != "scotch") {
+ fespace PhPeriodicPrivate(ThGlobalPeriodic, P0);
+ PhPeriodicPrivate partPeriodic;
+ if(mpiSize(comm) > 2) {
+ partitionerPar(partPeriodic[], ThGlobalPeriodic, comm, mpiSize(comm) - 1);
+ partPeriodic[] += 1.0;
+ }
+ else
+ partPeriodic[] = 1.0;
+ partGlobal = partPeriodic;
+ }
+ else
+ partitionerPar(partGlobal[], ThGlobal, comm, mpiSize(comm));
+ if(mpiRank(comm) == 0 && verbosity > 0)
+ cout.scientific << " (in " << mpiWtime() - timerPartition << ")" << endl;
+ timerPartition = mpiWtime();
+ }
+ else {
+ partGlobal[] = userPartitioning;
+ }
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(privateReconstructDmesh)
+ partGlobal[] = userPartitioning;
+ENDIFMACRO
+IFMACRO(!trueRestrict)
+ bool trueRestrict = usedARGV("-true_restrict") != -1;
+ENDIFMACRO
+IFMACRO(!removeZeros)
+ bool removeZeros = trueRestrict && overlap == 1 && usedARGV("-remove_zeros") != -1;
+ENDIFMACRO
+ if(verbosity > 0) {
+ mpiBarrier(comm);
+ timerPartition = mpiWtime();
+ }
+IFMACRO(privateBuildDmesh)
+ NewMacro defP1(i)i EndMacro
+ NewMacro initP1(i)i EndMacro
+ partitionPrivate(Th, ThBorder, ThGlobal, PhGlobalPrivate, VhGlobalPrivate, partGlobal, mpiRank(comm), mpiSize(comm), s, overlap, level, prolongation, DTab, P, intersection, comm, fakeInterface, PkPart, defP1, initP1, bs)
+ENDIFMACRO
+IFMACRO(!privateBuildDmesh)
+ partitionPrivate(Th, ThBorder, ThGlobal, PhGlobalPrivate, VhGlobalPrivate, partGlobal, mpiRank(comm), mpiSize(comm), s, overlap, level, prolongation, DTab, P, intersection, comm, fakeInterface, PkPart, defPart, initPart, bs)
+ENDIFMACRO
+ }
+ else if(mpiSize(comm) == 1) {
+ for(int i = level - 1; i > 0; --i) {
+ Th[i - 1] = trunc(Th[i], 1, split = s);
+ fespace WhLocalRefinedPrivate(Th[i - 1], P);
+ fespace WhLocalCoarsePrivate(Th[i], P);
+ prolongation[i - 1] = interpolate(WhLocalRefinedPrivate, WhLocalCoarsePrivate);
+ DTab[i].resize(WhLocalCoarsePrivate.ndof);
+ DTab[i] = 1.0;
+ }
+ if(level == 1) {
+IFMACRO(privateBuildDmesh)
+IFMACRO(privateDmesh#N2O)
+ if(s > 1)
+ Th[0] = trunc(Th[0], 1, split = s, new2old = privateDmesh#N2O);
+ else {
+ privateDmesh#N2O.resize(Th[0].nt);
+ privateDmesh#N2O = 0:Th[0].nt-1;
+ }
+ENDIFMACRO
+IFMACRO(!privateDmesh#N2O)
+ if(s > 1)
+ Th[0] = trunc(Th[0], 1, split = s);
+ENDIFMACRO
+ENDIFMACRO
+IFMACRO(!privateBuildDmesh)
+ if(s > 1)
+ Th[0] = trunc(Th[0], 1, split = s);
+ENDIFMACRO
+ }
+ fespace WhLocalPrivate(Th[0], P);
+ DTab[0].resize(WhLocalPrivate.ndof);
+ DTab[0] = 1.0;
+ }
+ if(verbosity > 0) {
+ mpiBarrier(comm);
+ if(mpiRank(comm) == 0)
+ cout.scientific << " --- partition of unity built (in " << mpiWtime() - timerPartition << ")" << endl;
+ }
+}// EOM
+
+macro buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, labPeriodic, userPartitioning, bs) {
+ meshN[int] ThTab(1);
+ meshN[int] ThBorderTab(1);
+ real[int][int] DTab(1);
+ ThTab[0] = Th;
+ matrix[int] prolongation(0);
+ buildOverlapEdgePeriodicRecursive(ThTab, ThBorderTab, fakeInterface, s, overlap, 1, prolongation, intersection, DTab, P, comm, excluded, PkPart, defPart, initPart, labPeriodic, userPartitioning, bs)
+ Th = ThTab[0];
+ ThBorder = ThBorderTab[0];
+ D.resize(DTab[0].n);
+ D = DTab[0];
+}// EOM
+
+IFMACRO(vectorialfe)
+macro buildOverlapEdgeRecursive(Th, ThBorder, fakeInterface, s, overlap, level, prolongation, intersection, D, P, comm, excluded, PkPart, defPart, initPart, bs) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorder, fakeInterface, s, overlap, level, prolongation, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, emptyRealArray, bs)
+}// EOM
+macro buildOverlapEdge(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, bs) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, emptyRealArray, bs)
+}// EOM
+macro buildOverlapEdgeWithPartitioning(Th, ThBorder, part, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, bs) {
+ int[int] emptyArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, part, bs)
+}// EOM
+macro buildOverlapWithPartitioning(Th, ThBorder, part, fakeInterface, s, overlap, intersection, D, P, comm, excluded, bs) {
+ int[int] emptyArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, part, bs)
+}// EOM
+macro buildOverlap(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, bs) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, emptyRealArray, bs)
+}// EOM
+macro buildOverlapPeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, labPeriodic, bs) {
+ real[int] emptyArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, labPeriodic, emptyArray, bs)
+}// EOM
+macro buildEdgeWithPartitioning(Th, part, s, intersection, D, P, comm, PkPart, defPart, initPart, bs) {
+ int[int] emptyArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, part, bs)
+}// EOM
+macro buildWithPartitioning(Th, part, s, intersection, D, P, comm, bs) {
+ int[int] emptyArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, part, bs)
+}// EOM
+macro build(Th, s, intersection, D, P, comm, bs) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, emptyRealArray, bs)
+}// EOM
+macro buildPeriodic(Th, s, intersection, D, P, comm, labPeriodic, bs) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, labPeriodic, emptyRealArray, bs)
+}// EOM
+macro buildMinimalist(Th, intersection, D, P, bs) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, 1, overlap, intersection, D, P, mpiCommWorld, excluded, P, def, init, emptyArray, emptyRealArray, bs)
+}// EOM
+macro buildRecursive(Th, s, level, prolongation, intersectionMat, DTab, P, comm, bsMat) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN[int] ThBorderTab(level);
+ DTab.resize(level);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, level, prolongation, intersectionMat, DTab, P, comm, false, P, def, init, emptyArray, emptyRealArray, bsMat)
+}// EOM
+macro buildMatRecursive(Th, s, nlevel, prolongation, A, P, comm, bsMat) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN[int] ThBorderTab(nlevel);
+ int[int][int] intersectionMat;
+ real[int][int] DTab(nlevel);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, nlevel, prolongation, intersectionMat, DTab, P, comm, false, P, def, init, emptyArray, emptyRealArray, bsMat)
+ for(int i = 0; i < nlevel; ++i)
+ constructor(A[i], DTab[i].n, intersectionMat, DTab[i], bs = bsMat, communicator = comm, level = i);
+}// EOM
+macro buildMatEdgeRecursive(Th, s, nlevel, prolongation, A, P, comm, PkPart, defPart, initPart, bsMat) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN[int] ThBorderTab(nlevel);
+ int[int][int] intersectionMat;
+ real[int][int] DTab(nlevel);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, nlevel, prolongation, intersectionMat, DTab, P, comm, false, PkPart, defPart, initPart, emptyArray, emptyRealArray, bsMat)
+ for(int i = 0; i < nlevel; ++i)
+ constructor(A[i], DTab[i].n, intersectionMat, DTab[i], bs = bsMat, communicator = comm, level = i);
+}// EOM
+macro buildMatEdgeRecursiveWithPartitioning(Th, part, s, nlevel, prolongation, A, P, comm, PkPart, defPart, initPart, bsMat) {
+ int[int] emptyArray(0);
+ meshN[int] ThBorderTab(nlevel);
+ int[int][int] intersectionMat;
+ real[int][int] DTab(nlevel);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, nlevel, prolongation, intersectionMat, DTab, P, comm, false, PkPart, defPart, initPart, emptyArray, part, bsMat)
+ for(int i = 0; i < nlevel; ++i)
+ constructor(A[i], DTab[i].n, intersectionMat, DTab[i], bs = bsMat, communicator = comm, level = i);
+}// EOM
+macro buildMatEdgeWithPartitioning(Th, part, s, A, P, comm, PkPart, defPart, initPart, bsMat) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildEdgeWithPartitioning(Th, part, s, intersectionMat, DMat, P, comm, PkPart, defPart, initPart, bsMat)
+ constructor(A, DMat.n, intersectionMat, DMat, bs = bsMat, communicator = comm);
+}// EOM
+macro buildMatWithPartitioning(Th, part, s, A, P, comm, bsMat) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildWithPartitioning(Th, part, s, intersectionMat, DMat, P, comm, bsMat)
+ constructor(A, DMat.n, intersectionMat, DMat, bs = bsMat, communicator = comm);
+}// EOM
+macro buildMat(Th, s, A, P, comm, bsMat) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ build(Th, s, intersectionMat, DMat, P, comm, bsMat)
+ constructor(A, DMat.n, intersectionMat, DMat, bs = bsMat, communicator = comm);
+}// EOM
+macro buildMatPeriodic(Th, s, A, P, comm, labPeriodic, bsMat) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildPeriodic(Th, s, intersectionMat, DMat, P, comm, labPeriodic, bsMat)
+ constructor(A, DMat.n, intersectionMat, DMat, bs = bsMat, communicator = comm);
+}// EOM
+macro buildMatMinimalist(Th, A, P, bsMat) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildMinimalist(Th, intersectionMat, DMat, P, bsMat)
+ constructor(A, DMat.n, intersectionMat, DMat, bs = bsMat, communicator = comm);
+}// EOM
+ENDIFMACRO
+IFMACRO(!vectorialfe)
+macro buildOverlapEdgeRecursive(Th, ThBorder, fakeInterface, s, overlap, level, prolongation, intersection, D, P, comm, excluded, PkPart, defPart, initPart) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorder, fakeInterface, s, overlap, level, prolongation, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, emptyRealArray, 1)
+}// EOM
+macro buildOverlapEdge(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, emptyRealArray, 1)
+}// EOM
+macro buildOverlapEdgeWithPartitioning(Th, ThBorder, part, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart) {
+ int[int] emptyArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, part, 1)
+}// EOM
+macro buildOverlapWithPartitioning(Th, ThBorder, part, fakeInterface, s, overlap, intersection, D, P, comm, excluded) {
+ int[int] emptyArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, part, 1)
+}// EOM
+macro buildOverlap(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, emptyRealArray, 1)
+}// EOM
+macro buildOverlapPeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, labPeriodic) {
+ real[int] emptyArray(0);
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, labPeriodic, emptyArray, 1)
+}// EOM
+macro buildEdgeWithPartitioning(Th, part, s, intersection, D, P, comm, PkPart, defPart, initPart) {
+ int[int] emptyArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, PkPart, defPart, initPart, emptyArray, part, 1)
+}// EOM
+macro buildWithPartitioning(Th, part, s, intersection, D, P, comm) {
+ int[int] emptyArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, part, 1)
+}// EOM
+macro build(Th, s, intersection, D, P, comm) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, emptyArray, emptyRealArray, 1)
+}// EOM
+macro buildPeriodic(Th, s, intersection, D, P, comm, labPeriodic) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, s, overlap, intersection, D, P, comm, excluded, P, def, init, labPeriodic, emptyRealArray, 1)
+}// EOM
+macro buildMinimalist(Th, intersection, D, P) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN ThBorder;
+ int fakeInterface = -111111;
+ int overlap = 1;
+ bool excluded = false;
+ buildOverlapEdgePeriodic(Th, ThBorder, fakeInterface, 1, overlap, intersection, D, P, mpiCommWorld, excluded, P, def, init, emptyArray, emptyRealArray, 1)
+}// EOM
+macro buildRecursive(Th, s, level, prolongation, intersectionMat, DTab, P, comm) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN[int] ThBorderTab(level);
+ DTab.resize(level);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, level, prolongation, intersectionMat, DTab, P, comm, false, P, def, init, emptyArray, emptyRealArray, 1)
+}// EOM
+macro buildMatRecursive(Th, s, nlevel, prolongation, A, P, comm) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN[int] ThBorderTab(nlevel);
+ int[int][int] intersectionMat;
+ real[int][int] DTab(nlevel);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, nlevel, prolongation, intersectionMat, DTab, P, comm, false, P, def, init, emptyArray, emptyRealArray, 1)
+ for(int i = 0; i < nlevel; ++i)
+ constructor(A[i], DTab[i].n, intersectionMat, DTab[i], communicator = comm, level = i);
+}// EOM
+macro buildMatEdgeRecursive(Th, s, nlevel, prolongation, A, P, comm, PkPart, defPart, initPart) {
+ int[int] emptyArray(0);
+ real[int] emptyRealArray(0);
+ meshN[int] ThBorderTab(nlevel);
+ int[int][int] intersectionMat;
+ real[int][int] DTab(nlevel);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, nlevel, prolongation, intersectionMat, DTab, P, comm, false, PkPart, defPart, initPart, emptyArray, emptyRealArray, 1)
+ for(int i = 0; i < nlevel; ++i)
+ constructor(A[i], DTab[i].n, intersectionMat, DTab[i], communicator = comm, level = i);
+}// EOM
+macro buildMatEdgeRecursiveWithPartitioning(Th, part, s, nlevel, prolongation, A, P, comm, PkPart, defPart, initPart) {
+ int[int] emptyArray(0);
+ meshN[int] ThBorderTab(nlevel);
+ int[int][int] intersectionMat;
+ real[int][int] DTab(nlevel);
+ buildOverlapEdgePeriodicRecursive(Th, ThBorderTab, -111111, s, 1, nlevel, prolongation, intersectionMat, DTab, P, comm, false, PkPart, defPart, initPart, emptyArray, part, 1)
+ for(int i = 0; i < nlevel; ++i)
+ constructor(A[i], DTab[i].n, intersectionMat, DTab[i], communicator = comm, level = i);
+}// EOM
+macro buildMatEdgeWithPartitioning(Th, part, s, A, P, comm, PkPart, defPart, initPart) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildEdgeWithPartitioning(Th, part, s, intersectionMat, DMat, P, comm, PkPart, defPart, initPart)
+ constructor(A, DMat.n, intersectionMat, DMat, communicator = comm);
+}// EOM
+macro buildMatWithPartitioning(Th, part, s, A, P, comm) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildWithPartitioning(Th, part, s, intersectionMat, DMat, P, comm)
+ constructor(A, DMat.n, intersectionMat, DMat, communicator = comm);
+}// EOM
+macro buildMat(Th, s, A, P, comm) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ build(Th, s, intersectionMat, DMat, P, comm)
+ constructor(A, DMat.n, intersectionMat, DMat, communicator = comm);
+}// EOM
+macro buildMatPeriodic(Th, s, A, P, comm, labPeriodic) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildPeriodic(Th, s, intersectionMat, DMat, P, comm, labPeriodic)
+ constructor(A, DMat.n, intersectionMat, DMat, communicator = comm);
+}// EOM
+macro buildMatMinimalist(Th, A, P) {
+ real[int] DMat;
+ int[int][int] intersectionMat;
+ buildMinimalist(Th, intersectionMat, DMat, P)
+ constructor(A, DMat.n, intersectionMat, DMat);
+}// EOM
+ENDIFMACRO
+
+macro convectParallel(ThName, uVel, dt, uKhi, safety)
+IFMACRO(privateDmesh#ThName)
+{
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!ThName#VelocityPk)
+func ThSinglePk = P1;
+ENDIFMACRO
+IFMACRO(ThName#VelocityPk)
+func ThSinglePk = ThName#VelocityPk;
+ENDIFMACRO
+if(verbosity >= 0)
+ mpiBarrier(ThName#Comm);
+real timerConvect = mpiWtime();
+if(mpiSize(ThName#Comm) == 1) {
+ uKhi = convect(uVel, dt, uKhi);
+}
+else {
+ int backupSM = searchMethod;
+ searchMethod = 0;
+ real[int] bb(2 * dimension);
+ boundingbox(ThName, bb);
+ bb(0) -= safety * ThName.hmax;
+ bb(1) += safety * ThName.hmax;
+ bb(2) -= safety * ThName.hmax;
+ bb(3) += safety * ThName.hmax;
+IFMACRO(dimension,3)
+ bb(4) -= safety * ThName.hmax;
+ bb(5) += safety * ThName.hmax;
+ENDIFMACRO
+ int size = mpiSize(ThName#Comm);
+ real[int] bbAll(2 * dimension * size);
+ mpiAllgather(bb, bbAll, ThName#Comm);
+ int[int] rankExchange(0);
+ for(int i = 0; i < size; ++i) {
+IFMACRO(dimension,2)
+ if(!(bbAll[1 + 4 * i] < bb[0]
+ || bbAll[0 + 4 * i] > bb[1]
+ || bbAll[3 + 4 * i] < bb[2]
+ || bbAll[2 + 4 * i] > bb[3]))
+ENDIFMACRO
+IFMACRO(dimension,3)
+ if(!(bbAll[1 + 6 * i] < bb[0]
+ || bbAll[0 + 6 * i] > bb[1]
+ || bbAll[3 + 6 * i] < bb[2]
+ || bbAll[2 + 6 * i] > bb[3]
+ || bbAll[5 + 6 * i] < bb[4]
+ || bbAll[4 + 6 * i] > bb[5]))
+ENDIFMACRO
+ {
+ rankExchange.resize(rankExchange.n + 1);
+ rankExchange[rankExchange.n - 1] = i;
+ }
+ }
+ real[int] D, backupRegion(ThName.nt);
+IFMACRO(dimension,2)
+ func PkVel = [ThSinglePk, ThSinglePk];
+ENDIFMACRO
+IFMACRO(dimension,3)
+ func PkVel = [ThSinglePk, ThSinglePk, ThSinglePk];
+ENDIFMACRO
+ fespace VhVelPrivate(ThName, PkVel);
+ fespace VhKhiPrivate(ThName, ThSinglePk);
+ real[int] buffer(VhVelPrivate.ndof + VhKhiPrivate.ndof);
+ {
+ VhVelPrivate defVel(uVelLocal) = uVel;
+ fespace VhKhiP1(ThName, P1);
+ VhKhiP1 khiP1;
+ khiP1[] = privateDmesh#ThName#khiDef[0];
+ VhKhiPrivate khi;
+ if(khi[].n != khiP1[].n)
+ khi = khiP1;
+ else
+ khi[] = khiP1[];
+ for[i, value : uVelLocal[]] value *= khi[][i / dimension];
+ buffer(0:VhVelPrivate.ndof - 1) = uVelLocal[];
+ buffer(VhVelPrivate.ndof:VhVelPrivate.ndof + VhKhiPrivate.ndof - 1) = khi[];
+ if(khi[].n != uKhi[].n) {
+ khi = uKhi;
+ buffer(VhVelPrivate.ndof:VhVelPrivate.ndof + VhKhiPrivate.ndof - 1) .*= khi[];
+ }
+ else
+ buffer(VhVelPrivate.ndof:VhVelPrivate.ndof + VhKhiPrivate.ndof - 1) .*= uKhi[];
+ }
+ fespace PhPartPrivate(ThName, P0);
+ {
+ PhPartPrivate backup = region;
+ backupRegion = backup[];
+ ThName = change(ThName, fregion = privateDmesh#ThName#khiDef[1][nuTriangle]);
+ }
+ meshN[int] recvTh(rankExchange.n);
+ meshN[int] sendTh(rankExchange.n);
+ real[int][int] exchangeU(rankExchange.n + rankExchange.n);
+ mpiRequest[int] rqSendTh(rankExchange.n);
+ mpiRequest[int] rqSendU(rankExchange.n);
+ mpiRequest[int] rqRecvTh(rankExchange.n);
+ mpiRequest[int] rqRecvU(rankExchange.n);
+ for[i, value : rankExchange]
+ Irecv(processor(value, rqRecvTh[i]), recvTh[i]);
+ for[i, value : rankExchange] {
+ PhPartPrivate part;
+IFMACRO(dimension,2)
+ part = (bbAll[0 + 4 * value] < x
+ && bbAll[1 + 4 * value] > x
+ && bbAll[2 + 4 * value] < y
+ && bbAll[3 + 4 * value] > y) ? 1.0 : 0.0;
+ENDIFMACRO
+IFMACRO(dimension,3)
+ part = (bbAll[0 + 6 * value] < x
+ && bbAll[1 + 6 * value] > x
+ && bbAll[2 + 6 * value] < y
+ && bbAll[3 + 6 * value] > y
+ && bbAll[4 + 6 * value] < z
+ && bbAll[5 + 6 * value] > z) ? 1.0 : 0.0;
+ENDIFMACRO
+ if(part[].linfty > 1.0e-2) {
+ int[int] n2o;
+ sendTh[i] = trunc(ThName, part > 1.0e-2, new2old = n2o);
+ fespace VhRestrictionPrivate(sendTh[i], ThSinglePk);
+ int[int] map;
+ map = restrict(VhRestrictionPrivate, VhKhiPrivate, n2o);
+ exchangeU[rankExchange.n + i].resize(VhRestrictionPrivate.ndof * (dimension + 1));
+ for[j, w : map] {
+ exchangeU[rankExchange.n + i][dimension * j] = buffer[dimension * w];
+ exchangeU[rankExchange.n + i][dimension * j + 1] = buffer[dimension * w + 1];
+IFMACRO(dimension,3)
+ exchangeU[rankExchange.n + i][dimension * j + 2] = buffer[dimension * w + 2];
+ENDIFMACRO
+ exchangeU[rankExchange.n + i][VhRestrictionPrivate.ndof * dimension + j] = buffer[VhKhiPrivate.ndof * dimension + w];
+ }
+ Isend(processor(value, rqSendTh[i]), sendTh[i]);
+ Isend(processor(value, rqSendU[i]), exchangeU[rankExchange.n + i]);
+ }
+ else
+ Isend(processor(value, rqSendTh[i]), sendTh[i]);
+ }
+ meshN gluedExchange;
+ {
+ meshN[int] toGlue(rankExchange.n);
+ int j = 0;
+ for[i, value : rankExchange] {
+ int index = mpiWaitAny(rqRecvTh);
+ if(recvTh[index].nt) {
+ fespace VhRestrictionPrivate(recvTh[index], ThSinglePk);
+ exchangeU[index].resize(VhRestrictionPrivate.ndof * (dimension + 1));
+ Irecv(processor(rankExchange[index], rqRecvU[index]), exchangeU[index]);
+ fespace PhRestrictionPrivate(recvTh[index], P0);
+ PhRestrictionPrivate ind = abs(region - rankExchange[index]) < 1.0e-2 ? 1.0 : 0.0;
+ if(abs(ind[].max - 1.0) < 1.0e-2) {
+ toGlue[j] = trunc(recvTh[index], ind > 1.0e-2);
+ ++j;
+ }
+ }
+ }
+ toGlue.resize(j);
+ gluedExchange = gluemesh(toGlue);
+ }
+ meshN interpolateExchange;
+ fespace VhVelExchangePrivate(gluedExchange, PkVel);
+ fespace VhKhiExchangePrivate(gluedExchange, ThSinglePk);
+ VhVelExchangePrivate defVel(uVelExchange);
+ VhKhiExchangePrivate uKhiExchange;
+ for[i, value : rankExchange] {
+ int index = mpiWaitAny(rqRecvU);
+ if(index != mpiUndefined) {
+ if(recvTh[index].nt) {
+ fespace VhRestrictionPrivate(recvTh[index], ThSinglePk);
+ matrix R = interpolate(VhRestrictionPrivate, VhKhiExchangePrivate);
+ if(R.nnz != R.n) {
+ R.thresholding(1.0e-2);
+ assert(R.nnz == R.n);
+ }
+ for[i, j, value : R] {
+ uVelExchange[][dimension * j] += exchangeU[index][dimension * i];
+ uVelExchange[][dimension * j + 1] += exchangeU[index][dimension * i + 1];
+IFMACRO(dimension,3)
+ uVelExchange[][dimension * j + 2] += exchangeU[index][dimension * i + 2];
+ENDIFMACRO
+ uKhiExchange[][j] += exchangeU[index][dimension * VhRestrictionPrivate.ndof + i];
+ }
+ }
+ }
+ }
+ searchMethod = backupSM;
+ fespace VhPhiExchangePrivate(gluedExchange, P0);
+ fespace VhKhiExchangeP1(gluedExchange, P1);
+ int rank = mpiRank(ThName#Comm);
+ VhPhiExchangePrivate phi = abs(region - rank) < 1.0e-2 ? 1.0 : 0.0;
+ VhKhiExchangeP1 khi;
+ AddLayers(gluedExchange, phi[], safety, khi[]);
+ int[int] n2o;
+ meshN gluedExchangeSafety = trunc(gluedExchange, abs(khi) > 0.1, new2old = n2o);
+ fespace VhVelExchangeSafetyPrivate(gluedExchangeSafety, PkVel);
+ fespace VhKhiExchangeSafetyPrivate(gluedExchangeSafety, ThSinglePk);
+ int[int] map = restrict(VhKhiExchangeSafetyPrivate, VhKhiExchangePrivate, n2o);
+ VhVelExchangeSafetyPrivate defVel(uVelExchangeSafety);
+ VhKhiExchangeSafetyPrivate uKhiExchangeSafety;
+ uKhiExchangeSafety[] = uKhiExchange[](map);
+ for[j, w : map] {
+ uVelExchangeSafety[][dimension * j] = uVelExchange[][dimension * w];
+ uVelExchangeSafety[][dimension * j + 1] = uVelExchange[][dimension * w + 1];
+IFMACRO(dimension,3)
+ uVelExchangeSafety[][dimension * j + 2] = uVelExchange[][dimension * w + 2];
+ENDIFMACRO
+ }
+ uKhiExchangeSafety = convect(defVel(uVelExchangeSafety), dt, uKhiExchangeSafety);
+ uKhi = uKhiExchangeSafety;
+ ThName = change(ThName, fregion = backupRegion[nuTriangle]);
+ mpiWaitAll(rqSendTh);
+ mpiWaitAll(rqSendU);
+}
+if(verbosity > 0) {
+ mpiBarrier(ThName#Comm);
+ if(mpiRank(ThName#Comm) == 0)
+ cout.scientific << " --- distributed solution convected (in " << mpiWtime() - timerConvect << ")" << endl;
+}
+}
+ENDIFMACRO
+// EOM
+
+macro transferBase(ThName, Pk, uA, ThNew, PkNew, uANew, P)
+IFMACRO(privateDmesh#ThName)
+{
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+if(verbosity > 0)
+ mpiBarrier(ThName#Comm);
+real timerTransfer = mpiWtime();
+IFMACRO(!def)
+NewMacro def(i)i EndMacro
+ENDIFMACRO
+if(mpiSize(ThName#Comm) == 1) {
+IFMACRO(!transfer#Q)
+ def(uANew) = def(uA);
+ENDIFMACRO
+IFMACRO(transfer#Q)
+ fespace VhLocalOldPrivate(ThName, Pk);
+ fespace VhLocalNewPrivate(ThNew, PkNew);
+ matrix loc = interpolate(VhLocalNewPrivate, VhLocalOldPrivate);
+ matrix locPetscScalar = loc;
+ constructor(P, uANew, uA, locPetscScalar);
+ENDIFMACRO
+}
+else {
+ int backupSM = searchMethod;
+ searchMethod = 0;
+ fespace VhLocalOldPrivate(ThName, Pk);
+ fespace VhLocalNewPrivate(ThNew, PkNew);
+IFMACRO(!transfer#Q)
+ assert(uA[].n == VhLocalOldPrivate.ndof);
+ assert(uANew[].n == VhLocalNewPrivate.ndof);
+ENDIFMACRO
+IFMACRO(!dimension)
+NewMacro dimension()2 EndMacro
+ENDIFMACRO
+IFMACRO(!meshN)
+NewMacro meshN()mesh EndMacro
+ENDIFMACRO
+IFMACRO(!ThName#NestedIn#ThNew)
+ real[int] bb(4 * dimension);
+ {
+ real[int] tmp(2 * dimension);
+ boundingbox(ThName, tmp);
+ bb(0:2 * dimension - 1) = tmp;
+ boundingbox(ThNew, tmp);
+ bb(2 * dimension:4 * dimension - 1) = tmp;
+ bb(0) -= max(ThName.hmax, ThNew.hmax);
+ bb(1) += max(ThName.hmax, ThNew.hmax);
+ bb(2) -= max(ThName.hmax, ThNew.hmax);
+ bb(3) += max(ThName.hmax, ThNew.hmax);
+ bb(4) -= max(ThName.hmax, ThNew.hmax);
+ bb(5) += max(ThName.hmax, ThNew.hmax);
+ bb(6) -= max(ThName.hmax, ThNew.hmax);
+ bb(7) += max(ThName.hmax, ThNew.hmax);
+IFMACRO(dimension,3)
+ bb(8) -= max(ThName.hmax, ThNew.hmax);
+ bb(9) += max(ThName.hmax, ThNew.hmax);
+ bb(10) -= max(ThName.hmax, ThNew.hmax);
+ bb(11) += max(ThName.hmax, ThNew.hmax);
+ENDIFMACRO
+ }
+ int size = mpiSize(ThName#Comm);
+ real[int] bbAll(4 * dimension * size);
+ mpiAllgather(bb, bbAll, ThName#Comm);
+ int[int] rankSend(0);
+ int[int] rankRecv(0);
+ for(int i = 0; i < size; ++i) {
+IFMACRO(dimension,2)
+ if(!(bbAll[1 + 8 * i] < bb[4]
+ || bbAll[0 + 8 * i] > bb[5]
+ || bbAll[3 + 8 * i] < bb[6]
+ || bbAll[2 + 8 * i] > bb[7]))
+ENDIFMACRO
+IFMACRO(dimension,3)
+ if(!(bbAll[1 + 12 * i] < bb[6]
+ || bbAll[0 + 12 * i] > bb[7]
+ || bbAll[3 + 12 * i] < bb[8]
+ || bbAll[2 + 12 * i] > bb[9]
+ || bbAll[5 + 12 * i] < bb[10]
+ || bbAll[4 + 12 * i] > bb[11]))
+ENDIFMACRO
+ {
+ rankRecv.resize(rankRecv.n + 1);
+ rankRecv[rankRecv.n - 1] = i;
+ }
+IFMACRO(dimension,2)
+ if(!(bbAll[5 + 8 * i] < bb[0]
+ || bbAll[4 + 8 * i] > bb[1]
+ || bbAll[7 + 8 * i] < bb[2]
+ || bbAll[6 + 8 * i] > bb[3]))
+ENDIFMACRO
+IFMACRO(dimension,3)
+ if(!(bbAll[7 + 12 * i] < bb[0]
+ || bbAll[6 + 12 * i] > bb[1]
+ || bbAll[9 + 12 * i] < bb[2]
+ || bbAll[8 + 12 * i] > bb[3]
+ || bbAll[11 + 12 * i] < bb[4]
+ || bbAll[10 + 12 * i] > bb[5]))
+ENDIFMACRO
+ {
+ rankSend.resize(rankSend.n + 1);
+ rankSend[rankSend.n - 1] = i;
+ }
+ }
+ real[int] D, backupRegion(ThName.nt);
+ VhLocalOldPrivate def(scaledU);
+IFMACRO(!transfer#Q)
+ createPartition(ThName, D, Pk)
+ scaledU[] = uA[];
+ENDIFMACRO
+IFMACRO(transfer#Q)
+ GlobalNumbering(uA, scaledU[]);
+ D.resize(scaledU[].n);
+ D = uA.D;
+ENDIFMACRO
+ for[i, value : D] scaledU[][i] *= value;
+ fespace PhPartPrivate(ThName, P0);
+ {
+ PhPartPrivate backup = region;
+ backupRegion = backup[];
+ int[int] newRegion(ThName.nt);
+ int rank = mpiRank(ThName#Comm);
+ for[i, value : privateDmesh#ThName#khiDef[1]] newRegion[i] = abs(value - rank) < 1.0e-2;
+ ThName = change(ThName, fregion = newRegion[nuTriangle]);
+ }
+ meshN[int] recvTh(rankRecv.n);
+ meshN[int] sendTh(rankSend.n);
+ PetscScalar[int][int] exchangeU(rankSend.n + rankRecv.n);
+ mpiRequest[int] rqSendTh(rankSend.n);
+ mpiRequest[int] rqSendU(rankSend.n);
+ mpiRequest[int] rqRecvTh(rankRecv.n);
+ mpiRequest[int] rqRecvU(rankRecv.n);
+ for[i, value : rankRecv]
+ Irecv(processor(value, rqRecvTh[i]), recvTh[i]);
+ for[i, value : rankSend] {
+ PhPartPrivate part;
+IFMACRO(dimension,2)
+ part = (bbAll[4 + 8 * value] < x
+ && bbAll[5 + 8 * value] > x
+ && bbAll[6 + 8 * value] < y
+ && bbAll[7 + 8 * value] > y) ? 1.0 : 0.0;
+ENDIFMACRO
+IFMACRO(dimension,3)
+ part = (bbAll[6 + 12 * value] < x
+ && bbAll[7 + 12 * value] > x
+ && bbAll[8 + 12 * value] < y
+ && bbAll[9 + 12 * value] > y
+ && bbAll[10 + 12 * value] < z
+ && bbAll[11 + 12 * value] > z) ? 1.0 : 0.0;
+ENDIFMACRO
+ if(part[].linfty > 1.0e-2) {
+ int[int] n2o;
+ sendTh[i] = trunc(ThName, part > 1.0e-2, new2old = n2o);
+ fespace VhRestrictionPrivate(sendTh[i], Pk);
+ int[int] map = restrict(VhRestrictionPrivate, VhLocalOldPrivate, n2o);
+ exchangeU[rankRecv.n + i].resize(VhRestrictionPrivate.ndof);
+ exchangeU[rankRecv.n + i] = scaledU[](map);
+ Isend(processor(value, rqSendTh[i]), sendTh[i]);
+ Isend(processor(value, rqSendU[i]), exchangeU[rankRecv.n + i]);
+ }
+ else
+ Isend(processor(value, rqSendTh[i]), sendTh[i]);
+ }
+ meshN gluedExchange;
+ {
+ meshN[int] toGlue(rankRecv.n);
+ int j = 0;
+ for[i, value : rankRecv] {
+ int index = mpiWaitAny(rqRecvTh);
+ if(recvTh[index].nt) {
+ fespace VhRestrictionPrivate(recvTh[index], Pk);
+ exchangeU[index].resize(VhRestrictionPrivate.ndof);
+ Irecv(processor(rankRecv[index], rqRecvU[index]), exchangeU[index]);
+ fespace PhRestrictionPrivate(recvTh[index], P0);
+ PhRestrictionPrivate ind = region;
+ if(abs(ind[].max - 1.0) < 1.0e-2) {
+ toGlue[j] = trunc(recvTh[index], ind > 1.0e-2);
+ ++j;
+ }
+ }
+ }
+ toGlue.resize(j);
+ gluedExchange = gluemesh(toGlue);
+ }
+ meshN interpolateExchange;
+ fespace PhExchangePrivate(gluedExchange, P0);
+ fespace VhExchangePrivate(gluedExchange, Pk);
+ VhExchangePrivate def(uExchange);
+ for[i, value : rankRecv] {
+ int index = mpiWaitAny(rqRecvU);
+ if(index != mpiUndefined) {
+ if(recvTh[index].nt) {
+ fespace PhRestrictionPrivate(recvTh[index], P0);
+ matrix R = interpolate(PhRestrictionPrivate, PhExchangePrivate);
+ if(R.nnz != R.n) {
+ R.thresholding(1.0e-2);
+ assert(R.nnz == R.n);
+ }
+ int[int] I, J;
+ real[int] C;
+ [I, J, C] = R;
+ fespace VhRestrictionPrivate(recvTh[index], Pk);
+ int[int] restriction = restrict(VhRestrictionPrivate, VhExchangePrivate, J);
+ uExchange[](restriction) += exchangeU[index];
+ }
+ }
+ }
+ searchMethod = backupSM;
+IFMACRO(!transfer#Q)
+ def(uANew) = def(uExchange);
+ENDIFMACRO
+IFMACRO(transfer#Q)
+ matrix loc = interpolate(VhLocalNewPrivate, VhExchangePrivate);
+ matrix locPetscScalar = loc;
+ constructor(P, uANew, uA, locPetscScalar, numbering = uExchange[]);
+ENDIFMACRO
+ ThName = change(ThName, fregion = backupRegion[nuTriangle]);
+ mpiWaitAll(rqSendTh);
+ mpiWaitAll(rqSendU);
+ENDIFMACRO
+IFMACRO(ThName#NestedIn#ThNew)
+IFMACRO(!transfer#Q)
+ def(uANew) = def(uA);
+ Mat exchange;
+ createMat(ThNew, exchange, PkNew)
+ PetscScalar[int] tmp;
+ ChangeNumbering(exchange, uANew[], tmp);
+ ChangeNumbering(exchange, uANew[], tmp, inverse = true, exchange = true);
+ENDIFMACRO
+IFMACRO(transfer#Q)
+ matrix loc = interpolate(VhLocalNewPrivate, VhLocalOldPrivate);
+ matrix locPetscScalar = loc;
+ constructor(P, uANew, uA, locPetscScalar);
+ENDIFMACRO
+ENDIFMACRO
+}
+if(verbosity > 0) {
+ mpiBarrier(ThName#Comm);
+ if(mpiRank(ThName#Comm) == 0)
+ cout.scientific << " --- distributed solution transferred (in " << mpiWtime() - timerTransfer << ")" << endl;
+}
+}
+ENDIFMACRO
+IFMACRO(!privateDmesh#ThName)
+assert(0);
+ENDIFMACRO
+// EOM
+
+macro transferMat(ThName, Pk, A, ThNew, PkNew, ANew, P) {
+NewMacro transfer#Q() EndMacro
+transferBase(ThName, Pk, A, ThNew, PkNew, ANew, P)
+}// EOM
+
+macro transfer(ThName, Pk, uPrivate, ThNew, PkNew, uNew) {
+transferBase(ThName, Pk, uPrivate, ThNew, PkNew, uNew, 1)
+}// EOM
+
+macro createParMmgCommunicators(ThName, ThParMmgName, ThN2O, ThCommunicators) {
+IFMACRO(!privateDmesh#ThName)
+assert(0);
+ENDIFMACRO
+ Mat A;
+ createMat(ThName, A, P1);
+ real[int] D(ThName.nt);
+ createPartition(ThName, D, P0);
+ fespace PhPrivate(ThName, P0);
+ PhPrivate d;
+ d[] = D;
+ ThParMmgName = trunc(ThName, abs(d) > 1.0e-2, label = -111111, new2old = ThN2O);
+ fespace VhWithoutOverlapPrivate(ThParMmgName, P1);
+ varf vG(uPrivate, vPrivate) = on(-111111, uPrivate = 1.0);
+ real[int] gamma(ThParMmgName.nv);
+ gamma = vG(0, VhWithoutOverlapPrivate, tgv = -1);
+ fespace VhWithOverlapPrivate(ThName, P1);
+ int[int] restriction = restrict(VhWithoutOverlapPrivate, VhWithOverlapPrivate, ThN2O);
+ ParMmgCommunicators(A, gamma, restriction, ThCommunicators);
+}// EOM
+
+macro gatherDmesh(ThName, comm, ThGatherName) {
+IFMACRO(!privateDmesh#ThName)
+assert(0);
+ENDIFMACRO
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!ThGatherName#Comm)
+NewMacro ThGatherName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!meshN)
+NewMacro meshN()mesh EndMacro
+ENDIFMACRO
+ if(verbosity > 0 && ThName#Comm)
+ mpiBarrier(ThName#Comm);
+ real timerGather = mpiWtime();
+ int size;
+ if(ThGatherName#Comm)
+ size = mpiSize(comm);
+ else
+ size = 0;
+ int reduce;
+ mpiAllReduce(size, reduce, ThName#Comm, mpiSUM);
+ assert(reduce == mpiSize(ThName#Comm));
+ meshN ThNoOverlap;
+ if(mpiSize(ThName#Comm) == 1)
+ ThNoOverlap = ThName;
+ else
+ ThNoOverlap = trunc(ThName, abs(privateDmesh#ThName#khiDef[1][nuTriangle] - mpiRank(ThName#Comm)) < 1.0e-2, label = -111112);
+ if(ThGatherName#Comm) {
+ meshN[int] recvTh(size);
+ mpiRequest[int] rqRecv(size - 1);
+ for(int i = 1; i < size; ++i)
+ Irecv(processor(i, comm, rqRecv[i - 1]), recvTh[i]);
+ recvTh[0] = ThNoOverlap;
+ mpiWaitAll(rqRecv);
+ ThGatherName = gluemesh(recvTh);
+ }
+ else {
+ mpiRequest rqSend;
+ Isend(processor(0, comm, rqSend), ThNoOverlap);
+ mpiWait(rqSend);
+ }
+ if(verbosity > 0 && ThName#Comm) {
+ mpiBarrier(ThName#Comm);
+ if(mpiRank(ThName#Comm) == 0)
+ cout.scientific << " --- distributed mesh gathered (in " << mpiWtime() - timerGather << ")" << endl;
+ }
+}
+reconstructDmesh(ThGatherName)// EOM
+
+macro scatterDmesh(ThName, comm, ThScatterName) {
+IFMACRO(!privateDmesh#ThName)
+assert(0);
+ENDIFMACRO
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!ThScatterName#Comm)
+NewMacro ThScatterName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!meshN)
+NewMacro meshN()mesh EndMacro
+ENDIFMACRO
+ if(verbosity > 0 && ThScatterName#Comm)
+ mpiBarrier(ThScatterName#Comm);
+ real timerScatter = mpiWtime();
+ int size;
+ if(ThName#Comm) {
+ size = mpiSize(comm);
+ }
+ else
+ size = 0;
+ int reduce;
+ mpiAllReduce(size, reduce, ThScatterName#Comm, mpiSUM);
+ assert(reduce == mpiSize(ThScatterName#Comm));
+ if(ThName#Comm) {
+ meshN ThNoOverlap;
+ if(mpiSize(ThName#Comm) == 1 || (privateDmesh#ThName#intersectionDef.n == 0 && privateDmesh#ThName#khiDef[0].n == 0 && privateDmesh#ThName#khiDef[1].n == 0))
+ ThNoOverlap = ThName;
+ else
+ ThNoOverlap = trunc(ThName, abs(privateDmesh#ThName#khiDef[1][nuTriangle] - mpiRank(ThName#Comm)) < 1.0e-2, label = -111112);
+ fespace PhPartPrivate(ThNoOverlap, P0);
+ PhPartPrivate part;
+ partitionerSeq(part[], ThNoOverlap, mpiSize(comm));
+ partitionerPar(part[], ThNoOverlap, mpiCommSelf, mpiSize(comm));
+ meshN[int] sendTh(mpiSize(comm) - 1);
+ mpiRequest[int] rqSend(mpiSize(comm) - 1);
+ for(int i = 1; i < mpiSize(comm); ++i) {
+ sendTh[i - 1] = trunc(ThNoOverlap, abs(part - i) < 1.0e-2, label = -111112);
+ Isend(processor(i, comm, rqSend[i - 1]), sendTh[i - 1]);
+ }
+ ThScatterName = trunc(ThNoOverlap, abs(part) < 1.0e-2, label = -111112);
+ mpiWaitAll(rqSend);
+ }
+ else if(ThScatterName#Comm) {
+ mpiRequest rqRecv;
+ Irecv(processor(0, comm, rqRecv), ThScatterName);
+ mpiWait(rqRecv);
+ }
+ if(verbosity > 0 && ThScatterName#Comm) {
+ mpiBarrier(ThScatterName#Comm);
+ if(mpiRank(ThScatterName#Comm) == 0)
+ cout.scientific << " --- distributed mesh scattered (in " << mpiWtime() - timerScatter << ")" << endl;
+ }
+}
+reconstructDmesh(ThScatterName)// EOM
+
+macro gatherSolution(ThName, comm, ThGatherName, Pk, uPrivate, uNew) {
+IFMACRO(!privateDmesh#ThName)
+assert(0);
+ENDIFMACRO
+IFMACRO(!privateDmesh#ThGatherName)
+assert(0);
+ENDIFMACRO
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!ThGatherName#Comm)
+NewMacro ThGatherName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!meshN)
+NewMacro meshN()mesh EndMacro
+ENDIFMACRO
+IFMACRO(!intN)
+NewMacro intN()int2d EndMacro
+ENDIFMACRO
+ if(verbosity > 0 && ThName#Comm)
+ mpiBarrier(ThName#Comm);
+ real timerGather = mpiWtime();
+IFMACRO(with,PETSc)
+ PetscScalar[int] vPrivate(uPrivate[]);
+ {
+ Mat gather;
+ createMat(ThName, gather, Pk)
+ PetscScalar[int] trash;
+ ChangeNumbering(gather, vPrivate, trash);
+ ChangeNumbering(gather, vPrivate, trash, inverse = true, exchange = false);
+ }
+ENDIFMACRO
+ if(ThGatherName#Comm) {
+ meshN[int] recvTh(mpiSize(comm) - 1);
+ PetscScalar[int][int] recvU(mpiSize(comm) - 1);
+ mpiRequest[int] rqRecvTh(mpiSize(comm) - 1);
+ mpiRequest[int] rqRecvU(mpiSize(comm) - 1);
+ for(int i = 0; i < mpiSize(comm) - 1; ++i)
+ Irecv(processor(i + 1, comm, rqRecvTh[i]), recvTh[i]);
+ for(int i = 0; i < mpiSize(comm) - 1; ++i) {
+ int index = mpiWaitAny(rqRecvTh);
+ fespace VhRecvPrivate(recvTh[index], Pk);
+ recvU[index].resize(VhRecvPrivate.ndof);
+ Irecv(processor(index + 1, comm, rqRecvU[index]), recvU[index]);
+ }
+ fespace VhGlobalGatherPrivate(ThGatherName, Pk);
+IFMACRO(!with)
+ PetscScalar[int] visited(VhGlobalGatherPrivate.ndof);
+ visited = 1.0;
+ENDIFMACRO
+ {
+ fespace VhRestrictionPrivate(ThName, Pk);
+ matrix R = interpolate(VhRestrictionPrivate, VhGlobalGatherPrivate);
+IFMACRO(with,PETSc)
+ uNew[] += R' * vPrivate;
+ENDIFMACRO
+IFMACRO(!with)
+ PetscScalar[int] buffer = R' * uPrivate[];
+ buffer .*= visited;
+ PetscScalar[int] ones(VhRestrictionPrivate.ndof);
+ ones = -1.0;
+ visited += R' * ones;
+ for[j, value : visited] value = max(abs(value), 0.0);
+ uNew[] += buffer;
+ENDIFMACRO
+ }
+ for(int i = 0; i < mpiSize(comm) - 1; ++i) {
+ int index = mpiWaitAny(rqRecvU);
+ fespace VhRestrictionPrivate(recvTh[index], Pk);
+ matrix R = interpolate(VhRestrictionPrivate, VhGlobalGatherPrivate);
+IFMACRO(with,PETSc)
+ uNew[] += R' * recvU[index];
+ENDIFMACRO
+IFMACRO(!with)
+ PetscScalar[int] buffer = R' * recvU[index];
+ buffer .*= visited;
+ PetscScalar[int] ones(VhRestrictionPrivate.ndof);
+ ones = -1.0;
+ visited += R' * ones;
+ for[j, value : visited] value = max(abs(value), 0.0);
+ uNew[] += buffer;
+ENDIFMACRO
+ }
+IFMACRO(with,PETSc)
+ Mat gather;
+ createMat(ThGatherName, gather, Pk)
+ exchange(gather, uNew[], scaled = false);
+ENDIFMACRO
+ }
+ else {
+ mpiRequest[int] rqSend(2);
+ Isend(processor(0, comm, rqSend[0]), ThName);
+ fespace VhLocalGatherPrivate(ThName, Pk);
+ assert(uPrivate[].n == VhLocalGatherPrivate.ndof);
+IFMACRO(with,PETSc)
+ Isend(processor(0, comm, rqSend[1]), vPrivate);
+ENDIFMACRO
+IFMACRO(!with)
+ Isend(processor(0, comm, rqSend[1]), uPrivate[]);
+ENDIFMACRO
+ mpiWaitAll(rqSend);
+ }
+ if(verbosity > 0 && ThName#Comm) {
+ mpiBarrier(ThName#Comm);
+ if(mpiRank(ThName#Comm) == 0)
+ cout.scientific << " --- distributed solution gathered (in " << mpiWtime() - timerGather << ")" << endl;
+ }
+}// EOM
+
+macro scatterSolution(ThName, comm, ThScatterName, Pk, uPrivate, uNew) {
+IFMACRO(!privateDmesh#ThName)
+assert(0);
+ENDIFMACRO
+IFMACRO(!privateDmesh#ThScatterName)
+assert(0);
+ENDIFMACRO
+IFMACRO(!def)
+NewMacro def(i)i EndMacro
+ENDIFMACRO
+IFMACRO(!ThName#Comm)
+NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!ThScatterName#Comm)
+NewMacro ThScatterName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+IFMACRO(!meshN)
+NewMacro meshN()mesh EndMacro
+ENDIFMACRO
+ if(verbosity > 0 && ThScatterName#Comm)
+ mpiBarrier(ThScatterName#Comm);
+ real timerScatter = mpiWtime();
+ if(mpiRank(comm) == 0) {
+ broadcast(processor(0, comm), ThName);
+ broadcast(processor(0, comm), uPrivate[]);
+ def(uNew) = def(uPrivate);
+ }
+ else {
+ meshN ThGlobalScatter;
+ broadcast(processor(0, comm), ThGlobalScatter);
+ fespace VhGlobalScatterPrivate(ThGlobalScatter, Pk);
+ VhGlobalScatterPrivate def(uGlobalScatter);
+ broadcast(processor(0, comm), uGlobalScatter[]);
+ def(uNew) = def(uGlobalScatter);
+ }
+ if(verbosity > 0 && ThScatterName#Comm) {
+ mpiBarrier(ThScatterName#Comm);
+ if(mpiRank(ThScatterName#Comm) == 0)
+ cout.scientific << " --- distributed solution scattered (in " << mpiWtime() - timerScatter << ")" << endl;
+ }
+}// EOM
+
+macro CoherentGlobalMesh(MatT, MatV, ThName, ThGlobal) {
+IFMACRO(!ThName#Comm)
+ NewMacro ThName#Comm()mpiCommWorld EndMacro
+ENDIFMACRO
+ int[int] numberingT;
+ int[int] numberingV;
+ GlobalNumbering(MatT, numberingT);
+ GlobalNumbering(MatV, numberingV);
+ fespace VhLocalPrivateT(ThName, P0);
+ fespace VhGlobalPrivateT(ThGlobal, P0);
+ fespace VhLocalPrivateV(ThName, P1);
+ fespace VhGlobalPrivateV(ThGlobal, P1);
+ PetscScalar[int] numberingScalarT(numberingT.n), globalT, reduceT(ThGlobal.nt);
+ PetscScalar[int] numberingScalarV(numberingV.n), globalV, reduceV(ThGlobal.nv);
+ for[i, value : numberingT] numberingScalarT[i] = value;
+ for[i, value : numberingV] numberingScalarV[i] = value;
+ ChangeNumbering(MatT, numberingScalarT, globalT);
+ ChangeNumbering(MatV, numberingScalarV, globalV);
+ if (ThName.nv) {
+ ChangeNumbering(MatT, numberingScalarT, globalT, inverse = true);
+ ChangeNumbering(MatV, numberingScalarV, globalV, inverse = true);
+IFMACRO(ThName#N2O)
+ int[int] restrictionT = restrict(VhLocalPrivateT, VhGlobalPrivateT, ThName#N2O);
+ int[int] restrictionV = restrict(VhLocalPrivateV, VhGlobalPrivateV, ThName#N2O);
+ENDIFMACRO
+IFMACRO(!ThName#N2O)
+ int[int] restrictionT, restrictionV;
+ {
+ fespace PhGlobalPrivate(ThGlobal, P0);
+ fespace PhLocalPrivate(ThName, P0);
+ matrix R = interpolate(PhLocalPrivate, PhGlobalPrivate);
+ int[int] I, J;
+ real[int] C;
+ [I, J, C] = R;
+ restrictionT = restrict(VhLocalPrivateT, VhGlobalPrivateT, J);
+ restrictionV = restrict(VhLocalPrivateV, VhGlobalPrivateV, J);
+ }
+ENDIFMACRO
+ for[i, value : restrictionT] reduceT[value] = numberingScalarT[i];
+ for[i, value : restrictionV] reduceV[value] = numberingScalarV[i];
+ }
+ globalT.resize(ThGlobal.nt);
+ globalV.resize(ThGlobal.nv);
+ mpiAllReduce(reduceT, globalT, ThName#Comm, mpiSUM);
+ mpiAllReduce(reduceV, globalV, ThName#Comm, mpiSUM);
+ int[int] globalIntT(globalT.n);
+ int[int] globalIntV(globalV.n);
+ for[i, value : globalT] globalIntT[i] = abs(value);
+ for[i, value : globalV] globalIntV[i] = abs(value);
+ ThGlobal = change(ThGlobal, renumt = globalIntT, renumv = globalIntV);
+}// EOM
+
+macro DmeshSave(ThName, name)saveDmesh(ThName, name)// EOM
+macro DmeshLoad(ThName, name)loadDmesh(ThName, name)// EOM
+macro DmeshCreate(ThName)buildDmesh(ThName)// EOM
+macro DmeshReconstruct(ThName)reconstructDmesh(ThName)// EOM
+macro DmeshReconstructWithNeighbors(ThName, neighborsName)reconstructDmeshWithNeighbors(ThName, neighborsName)// EOM
+macro DmeshInitialize(NewName)initializeDmesh(NewName)// EOM
+macro DmeshCopy(OldName, NewName)copyDmesh(OldName, NewName)// EOM
+macro DmeshScatter(ThName, comm, ThScatterName)scatterDmesh(ThName, comm, ThScatterName)// EOM
+macro DmeshGather(ThName, comm, ThGatherName)gatherDmesh(ThName, comm, ThGatherName)// EOM
+macro PartitionCreate(ThName, PartName, PkName)createPartition(ThName, PartName, PkName)// EOM
+macro ParMmgCreateCommunicators(ThName, ThParMmgName, ThN2O, ThCommunicators)createParMmgCommunicators(ThName, ThParMmgName, ThN2O, ThCommunicators)// EOM
+macro VecScatter(ThName, comm, ThScatterName, Pk, uPrivate, uNew)scatterSolution(ThName, comm, ThScatterName, Pk, uPrivate, uNew)// EOM
+macro VecGather(ThName, comm, ThGatherName, Pk, uPrivate, uNew)gatherSolution(ThName, comm, ThGatherName, Pk, uPrivate, uNew)// EOM
+macro VecInterpolate(ThName, Pk, uPrivate, ThNew, PkNew, uNew)transfer(ThName, Pk, uPrivate, ThNew, PkNew, uNew)// EOM
+macro MatCreate(ThName, MatName, PkName)createMat(ThName, MatName, PkName)// EOM
+macro MatInterpolate(ThName, Pk, A, ThNew, PkNew, ANew, P)transferMat(ThName, Pk, A, ThNew, PkNew, ANew, P)// EOM
+ENDIFMACRO
// meditddm.edp
load "medit"
@@ -43576,6 +53724,83 @@ for(int i = 0; i < iMax; ++i) {
int[int] fforder = [1];
savevtk("heat-io-2d.vtu", Th, u, order = fforder, append = i ? true : false);
}
+include "getARGV.idp"
+IFMACRO(with,PETSc)
+load "PETSc"
+ENDIFMACRO
+IFMACRO(!with)
+macro PetscScalar()real//
+ENDIFMACRO
+
+int sizeComm = max(1, min(mpisize, getARGV("-sizeComm", mpisize)));
+int div = mpisize / sizeComm;
+mpiComm commThGather(mpiCommWorld, (mpirank % div == 0 && mpirank / div < sizeComm) ? 0 : mpiUndefined, mpirank / div);
+mpiComm comm(mpiCommWorld, min(mpirank / div, sizeComm - 1), mpirank - div * min(mpirank / div, sizeComm - 1));
+macro ThGatherComm()commThGather//
+func Pk = [P2, P2];
+macro def(u)[u, u#B]//
+macro init(u)[u, u]//
+{
+ include "macro_ddm.idp" // additional DDM functions
+ mesh Th = square(getARGV("-global_2d", 20), getARGV("-global_2d", 20)); // global mesh
+ DmeshCreate(Th);
+ mesh ThGather, ThScatter;
+ DmeshGather(Th, comm, ThGather);
+ plotDmesh(Th, cmm = "Original Dmesh");
+ plotDmesh(ThGather, cmm = "Gathered Dmesh");
+ DmeshScatter(ThGather, comm, ThScatter);
+ plotDmesh(ThScatter, cmm = "Scattered Dmesh");
+ fespace Vh(Th, Pk);
+ fespace VhGather(ThGather, Pk);
+ fespace VhScatter(ThScatter, Pk);
+ Vh def(u);
+ VhGather def(uGather);
+ VhScatter def(uScatter);
+ VhScatter def(uTransfer);
+ def(u) = [cos(2*pi*x)*sin(pi*y), sin(2*pi*y)];
+ plotD(Th, u, cmm = "Original solution");
+ VecGather(Th, comm, ThGather, Pk, u, uGather);
+ plotD(ThGather, uGather, cmm = "Gathered solution");
+ VecScatter(ThGather, comm, ThScatter, Pk, uGather, uScatter);
+ plotD(ThScatter, uScatter, cmm = "Scattered solution");
+ VecInterpolate(Th, Pk, u, ThScatter, Pk, uTransfer);
+ plotD(ThScatter, uTransfer, cmm = "Transferred solution");
+ uTransfer[] -= uScatter[];
+ real max, tmp = uTransfer[].linfty;
+ mpiAllReduce(tmp, max, mpiCommWorld, mpiMAX);
+ assert(max < 1.0e-6);
+}
+{
+ macro dimension()3// EOM // 2D or 3D
+ include "macro_ddm.idp" // additional DDM functions
+ mesh3 Th = cube(getARGV("-global_3d", 10), getARGV("-global_3d", 10), getARGV("-global_3d", 10)); // global mesh
+ DmeshCreate(Th);
+ mesh3 ThGather, ThScatter;
+ DmeshGather(Th, comm, ThGather);
+ plotDmesh(Th, cmm = "Original Dmesh");
+ plotDmesh(ThGather, cmm = "Gathered Dmesh");
+ DmeshScatter(ThGather, comm, ThScatter);
+ plotDmesh(ThScatter, cmm = "Scattered Dmesh");
+ fespace Vh(Th, Pk);
+ fespace VhGather(ThGather, Pk);
+ fespace VhScatter(ThScatter, Pk);
+ Vh def(u);
+ VhGather def(uGather);
+ VhScatter def(uScatter);
+ VhScatter def(uTransfer);
+ def(u) = [cos(2*pi*x)*sin(2*pi*y), sin(2*pi*y)*cos(2*pi*z)];
+ plotD(Th, u, cmm = "Original solution");
+ VecGather(Th, comm, ThGather, Pk, u, uGather);
+ plotD(ThGather, uGather, cmm = "Gathered solution");
+ VecScatter(ThGather, comm, ThScatter, Pk, uGather, uScatter);
+ plotD(ThScatter, uScatter, cmm = "Scattered solution");
+ VecInterpolate(Th, Pk, u, ThScatter, Pk, uTransfer);
+ plotD(ThScatter, uTransfer, cmm = "Transferred solution");
+ uTransfer[] -= uScatter[];
+ real max, tmp = uTransfer[].linfty;
+ mpiAllReduce(tmp, max, mpiCommWorld, mpiMAX);
+ assert(max < 1.0e-6);
+}
load "PETSc"
include "macro_ddm.idp"