Reuse mass integrand across detector radii

This commit is contained in:
2026-04-13 11:55:41 +08:00
parent 3a58273501
commit 4b10519876
3 changed files with 226 additions and 206 deletions

View File

@@ -7114,13 +7114,17 @@ void bssn_class::AnalysisStuff(int lev, double dT_lev)
for (int pl = 2; pl < maxl + 1; pl++) for (int pl = 2; pl < maxl + 1; pl++)
for (int pm = -pl; pm < pl + 1; pm++) for (int pm = -pl; pm < pl + 1; pm++)
NN++; NN++;
RP = new double[NN]; RP = new double[NN];
IP = new double[NN]; IP = new double[NN];
RoutMAP = new double[7]; RoutMAP = new double[7];
double Rex = maxrex; double Rex = maxrex;
for (int i = 0; i < decn; i++) bool patch_mass_prepared = false;
{ #ifdef WithShell
#ifdef Point_Psi4 bool shell_mass_prepared = false;
#endif
for (int i = 0; i < decn; i++)
{
#ifdef Point_Psi4
Waveshell->surf_Wave(Rex, GH, SH, Waveshell->surf_Wave(Rex, GH, SH,
phi, trK, phi, trK,
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
@@ -7139,69 +7143,76 @@ void bssn_class::AnalysisStuff(int lev, double dT_lev)
Rxx, Rxy, Rxz, Ryy, Ryz, Rzz, Rxx, Rxy, Rxz, Ryy, Ryz, Rzz,
2, maxl, NN, RP, IP, ErrorMonitor); 2, maxl, NN, RP, IP, ErrorMonitor);
#ifdef WithShell #ifdef WithShell
if (lev > 0 || Rex < GH->bbox[0][0][3]) if (lev > 0 || Rex < GH->bbox[0][0][3])
{ {
Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0, Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0,
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0, Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables
RoutMAP, ErrorMonitor); RoutMAP, ErrorMonitor, !patch_mass_prepared);
} patch_mass_prepared = true;
else }
{ else
Waveshell->surf_MassPAng(Rex, lev, SH, phi0, trK0, {
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, Waveshell->surf_MassPAng(Rex, lev, SH, phi0, trK0,
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0, gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
RoutMAP, ErrorMonitor); Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables
} RoutMAP, ErrorMonitor, !shell_mass_prepared);
#else shell_mass_prepared = true;
Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0, }
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, #else
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0, Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
RoutMAP, ErrorMonitor); Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
#endif Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables
#else RoutMAP, ErrorMonitor, !patch_mass_prepared);
// misc::tillherecheck(GH->Commlev[lev],GH->start_rank[lev],"before surface integral"); patch_mass_prepared = true;
#ifdef WithShell #endif
if (lev > 0 || Rex < GH->bbox[0][0][3]) #else
// misc::tillherecheck(GH->Commlev[lev],GH->start_rank[lev],"before surface integral");
#ifdef WithShell
if (lev > 0 || Rex < GH->bbox[0][0][3])
{ {
Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor); Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor);
Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0, Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0,
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0, Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables
RoutMAP, ErrorMonitor); RoutMAP, ErrorMonitor, !patch_mass_prepared);
} patch_mass_prepared = true;
else }
{ else
Waveshell->surf_Wave(Rex, lev, SH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor); {
Waveshell->surf_MassPAng(Rex, lev, SH, phi0, trK0, Waveshell->surf_Wave(Rex, lev, SH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor);
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, Waveshell->surf_MassPAng(Rex, lev, SH, phi0, trK0,
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0, gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
RoutMAP, ErrorMonitor); Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables
} RoutMAP, ErrorMonitor, !shell_mass_prepared);
#else shell_mass_prepared = true;
#if (PSTR == 0) }
Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor); #else
Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0, #if (PSTR == 0)
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor);
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0, Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0,
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
RoutMAP, ErrorMonitor); Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
#elif (PSTR == 1 || PSTR == 2) Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables
Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor, GH->Commlev[lev]); RoutMAP, ErrorMonitor, !patch_mass_prepared);
// misc::tillherecheck(GH->Commlev[lev],GH->start_rank[lev],"after surf_Wave"); patch_mass_prepared = true;
Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0, #elif (PSTR == 1 || PSTR == 2)
gxx0, gxy0, gxz0, gyy0, gyz0, gzz0, Waveshell->surf_Wave(Rex, lev, GH, Rpsi4, Ipsi4, 2, maxl, NN, RP, IP, ErrorMonitor, GH->Commlev[lev]);
Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0, // misc::tillherecheck(GH->Commlev[lev],GH->start_rank[lev],"after surf_Wave");
Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables Waveshell->surf_MassPAng(Rex, lev, GH, phi0, trK0,
RoutMAP, ErrorMonitor, GH->Commlev[lev]); gxx0, gxy0, gxz0, gyy0, gyz0, gzz0,
#endif Axx0, Axy0, Axz0, Ayy0, Ayz0, Azz0,
#endif Gmx0, Gmy0, Gmz0, Sfx1, Sfy1, Sfz1, // here we can not touch rhs variables, but 1 variables
// misc::tillherecheck(GH->Commlev[lev],GH->start_rank[lev],"end surface integral"); RoutMAP, ErrorMonitor, GH->Commlev[lev], !patch_mass_prepared);
patch_mass_prepared = true;
#endif
#endif
// misc::tillherecheck(GH->Commlev[lev],GH->start_rank[lev],"end surface integral");
#endif #endif
if (i == 0) if (i == 0)
{ {

View File

@@ -2314,44 +2314,47 @@ void surface_integral::surf_Wave(double rex, int lev, NullShellPatch *GH, var *R
//| ADM mass, linear momentum and angular momentum //| ADM mass, linear momentum and angular momentum
//| //|
//|---------------------------------------------------- //|----------------------------------------------------
void surface_integral::surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK, void surface_integral::surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK,
var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz, var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz, var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i
double *Rout, monitor *Monitor) double *Rout, monitor *Monitor, bool refresh_mass_fields)
{ {
if (myrank == 0 && GH->grids[lev] != 1) if (myrank == 0 && GH->grids[lev] != 1)
if (Monitor && Monitor->outfile) if (Monitor && Monitor->outfile)
Monitor->outfile << "WARNING: surface integral on multipatches" << endl; Monitor->outfile << "WARNING: surface integral on multipatches" << endl;
else else
cout << "WARNING: surface integral on multipatches" << endl; cout << "WARNING: surface integral on multipatches" << endl;
double mass, px, py, pz, sx, sy, sz; double mass, px, py, pz, sx, sy, sz;
MyList<Patch> *Pp = GH->PatL[lev]; if (refresh_mass_fields)
while (Pp) {
{ MyList<Patch> *Pp = GH->PatL[lev];
MyList<Block> *BP = Pp->data->blb; while (Pp)
while (BP) {
{ MyList<Block> *BP = Pp->data->blb;
Block *cg = BP->data; while (BP)
if (myrank == cg->rank) {
{ Block *cg = BP->data;
f_admmass_bssn(cg->shape, cg->X[0], cg->X[1], cg->X[2], if (myrank == cg->rank)
cg->fgfs[chi->sgfn], cg->fgfs[trK->sgfn], {
cg->fgfs[gxx->sgfn], cg->fgfs[gxy->sgfn], cg->fgfs[gxz->sgfn], cg->fgfs[gyy->sgfn], cg->fgfs[gyz->sgfn], cg->fgfs[gzz->sgfn], f_admmass_bssn(cg->shape, cg->X[0], cg->X[1], cg->X[2],
cg->fgfs[Axx->sgfn], cg->fgfs[Axy->sgfn], cg->fgfs[Axz->sgfn], cg->fgfs[Ayy->sgfn], cg->fgfs[Ayz->sgfn], cg->fgfs[Azz->sgfn], cg->fgfs[chi->sgfn], cg->fgfs[trK->sgfn],
cg->fgfs[Gmx->sgfn], cg->fgfs[Gmy->sgfn], cg->fgfs[Gmz->sgfn], cg->fgfs[gxx->sgfn], cg->fgfs[gxy->sgfn], cg->fgfs[gxz->sgfn], cg->fgfs[gyy->sgfn], cg->fgfs[gyz->sgfn], cg->fgfs[gzz->sgfn],
cg->fgfs[Sfx_rhs->sgfn], cg->fgfs[Sfy_rhs->sgfn], cg->fgfs[Sfz_rhs->sgfn], cg->fgfs[Axx->sgfn], cg->fgfs[Axy->sgfn], cg->fgfs[Axz->sgfn], cg->fgfs[Ayy->sgfn], cg->fgfs[Ayz->sgfn], cg->fgfs[Azz->sgfn],
Symmetry); cg->fgfs[Gmx->sgfn], cg->fgfs[Gmy->sgfn], cg->fgfs[Gmz->sgfn],
} cg->fgfs[Sfx_rhs->sgfn], cg->fgfs[Sfy_rhs->sgfn], cg->fgfs[Sfz_rhs->sgfn],
if (BP == Pp->data->ble) Symmetry);
break; }
BP = BP->next; if (BP == Pp->data->ble)
} break;
Pp = Pp->next; BP = BP->next;
} }
Pp = Pp->next;
}
}
const int InList = 17; const int InList = 17;
@@ -2576,46 +2579,49 @@ void surface_integral::surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var
delete[] shellf; delete[] shellf;
DG_List->clearList(); DG_List->clearList();
} }
void surface_integral::surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK, void surface_integral::surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK,
var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz, var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz, var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i
double *Rout, monitor *Monitor, MPI_Comm Comm_here) double *Rout, monitor *Monitor, MPI_Comm Comm_here, bool refresh_mass_fields)
{ {
int lmyrank; int lmyrank;
MPI_Comm_rank(Comm_here, &lmyrank); MPI_Comm_rank(Comm_here, &lmyrank);
if (lmyrank == 0 && GH->grids[lev] != 1) if (lmyrank == 0 && GH->grids[lev] != 1)
if (Monitor && Monitor->outfile) if (Monitor && Monitor->outfile)
Monitor->outfile << "WARNING: surface integral on multipatches" << endl; Monitor->outfile << "WARNING: surface integral on multipatches" << endl;
else else
cout << "WARNING: surface integral on multipatches" << endl; cout << "WARNING: surface integral on multipatches" << endl;
double mass, px, py, pz, sx, sy, sz; double mass, px, py, pz, sx, sy, sz;
MyList<Patch> *Pp = GH->PatL[lev]; if (refresh_mass_fields)
while (Pp) {
{ MyList<Patch> *Pp = GH->PatL[lev];
MyList<Block> *BP = Pp->data->blb; while (Pp)
while (BP) {
{ MyList<Block> *BP = Pp->data->blb;
Block *cg = BP->data; while (BP)
if (myrank == cg->rank) {
{ Block *cg = BP->data;
f_admmass_bssn(cg->shape, cg->X[0], cg->X[1], cg->X[2], if (myrank == cg->rank)
cg->fgfs[chi->sgfn], cg->fgfs[trK->sgfn], {
cg->fgfs[gxx->sgfn], cg->fgfs[gxy->sgfn], cg->fgfs[gxz->sgfn], cg->fgfs[gyy->sgfn], cg->fgfs[gyz->sgfn], cg->fgfs[gzz->sgfn], f_admmass_bssn(cg->shape, cg->X[0], cg->X[1], cg->X[2],
cg->fgfs[Axx->sgfn], cg->fgfs[Axy->sgfn], cg->fgfs[Axz->sgfn], cg->fgfs[Ayy->sgfn], cg->fgfs[Ayz->sgfn], cg->fgfs[Azz->sgfn], cg->fgfs[chi->sgfn], cg->fgfs[trK->sgfn],
cg->fgfs[Gmx->sgfn], cg->fgfs[Gmy->sgfn], cg->fgfs[Gmz->sgfn], cg->fgfs[gxx->sgfn], cg->fgfs[gxy->sgfn], cg->fgfs[gxz->sgfn], cg->fgfs[gyy->sgfn], cg->fgfs[gyz->sgfn], cg->fgfs[gzz->sgfn],
cg->fgfs[Sfx_rhs->sgfn], cg->fgfs[Sfy_rhs->sgfn], cg->fgfs[Sfz_rhs->sgfn], cg->fgfs[Axx->sgfn], cg->fgfs[Axy->sgfn], cg->fgfs[Axz->sgfn], cg->fgfs[Ayy->sgfn], cg->fgfs[Ayz->sgfn], cg->fgfs[Azz->sgfn],
Symmetry); cg->fgfs[Gmx->sgfn], cg->fgfs[Gmy->sgfn], cg->fgfs[Gmz->sgfn],
} cg->fgfs[Sfx_rhs->sgfn], cg->fgfs[Sfy_rhs->sgfn], cg->fgfs[Sfz_rhs->sgfn],
if (BP == Pp->data->ble) Symmetry);
break; }
BP = BP->next; if (BP == Pp->data->ble)
} break;
Pp = Pp->next; BP = BP->next;
} }
Pp = Pp->next;
}
}
const int InList = 17; const int InList = 17;
@@ -2848,15 +2854,15 @@ void surface_integral::surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var
//|---------------------------------------------------------------- //|----------------------------------------------------------------
// for shell patch // for shell patch
//|---------------------------------------------------------------- //|----------------------------------------------------------------
void surface_integral::surf_MassPAng(double rex, int lev, ShellPatch *GH, var *chi, var *trK, void surface_integral::surf_MassPAng(double rex, int lev, ShellPatch *GH, var *chi, var *trK,
var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz, var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz, var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i
double *Rout, monitor *Monitor) double *Rout, monitor *Monitor, bool refresh_mass_fields)
{ {
if (lev != 0) if (lev != 0)
{ {
if (myrank == 0) if (myrank == 0)
{ {
if (Monitor && Monitor->outfile) if (Monitor && Monitor->outfile)
@@ -2866,43 +2872,46 @@ void surface_integral::surf_MassPAng(double rex, int lev, ShellPatch *GH, var *c
} }
return; return;
} }
double mass, px, py, pz, sx, sy, sz; double mass, px, py, pz, sx, sy, sz;
MyList<ss_patch> *Pp = GH->PatL; if (refresh_mass_fields)
while (Pp) {
{ MyList<ss_patch> *Pp = GH->PatL;
MyList<Block> *BL = Pp->data->blb; while (Pp)
int fngfs = Pp->data->fngfs; {
while (BL) MyList<Block> *BL = Pp->data->blb;
{ int fngfs = Pp->data->fngfs;
Block *cg = BL->data; while (BL)
if (myrank == cg->rank) {
{ Block *cg = BL->data;
f_admmass_bssn_ss(cg->shape, cg->X[0], cg->X[1], cg->X[2], if (myrank == cg->rank)
cg->fgfs[fngfs + ShellPatch::gx], cg->fgfs[fngfs + ShellPatch::gy], cg->fgfs[fngfs + ShellPatch::gz], {
cg->fgfs[fngfs + ShellPatch::drhodx], cg->fgfs[fngfs + ShellPatch::drhody], cg->fgfs[fngfs + ShellPatch::drhodz], f_admmass_bssn_ss(cg->shape, cg->X[0], cg->X[1], cg->X[2],
cg->fgfs[fngfs + ShellPatch::dsigmadx], cg->fgfs[fngfs + ShellPatch::dsigmady], cg->fgfs[fngfs + ShellPatch::dsigmadz], cg->fgfs[fngfs + ShellPatch::gx], cg->fgfs[fngfs + ShellPatch::gy], cg->fgfs[fngfs + ShellPatch::gz],
cg->fgfs[fngfs + ShellPatch::dRdx], cg->fgfs[fngfs + ShellPatch::dRdy], cg->fgfs[fngfs + ShellPatch::dRdz], cg->fgfs[fngfs + ShellPatch::drhodx], cg->fgfs[fngfs + ShellPatch::drhody], cg->fgfs[fngfs + ShellPatch::drhodz],
cg->fgfs[fngfs + ShellPatch::drhodxx], cg->fgfs[fngfs + ShellPatch::drhodxy], cg->fgfs[fngfs + ShellPatch::drhodxz], cg->fgfs[fngfs + ShellPatch::dsigmadx], cg->fgfs[fngfs + ShellPatch::dsigmady], cg->fgfs[fngfs + ShellPatch::dsigmadz],
cg->fgfs[fngfs + ShellPatch::drhodyy], cg->fgfs[fngfs + ShellPatch::drhodyz], cg->fgfs[fngfs + ShellPatch::drhodzz], cg->fgfs[fngfs + ShellPatch::dRdx], cg->fgfs[fngfs + ShellPatch::dRdy], cg->fgfs[fngfs + ShellPatch::dRdz],
cg->fgfs[fngfs + ShellPatch::dsigmadxx], cg->fgfs[fngfs + ShellPatch::dsigmadxy], cg->fgfs[fngfs + ShellPatch::dsigmadxz], cg->fgfs[fngfs + ShellPatch::drhodxx], cg->fgfs[fngfs + ShellPatch::drhodxy], cg->fgfs[fngfs + ShellPatch::drhodxz],
cg->fgfs[fngfs + ShellPatch::dsigmadyy], cg->fgfs[fngfs + ShellPatch::dsigmadyz], cg->fgfs[fngfs + ShellPatch::dsigmadzz], cg->fgfs[fngfs + ShellPatch::drhodyy], cg->fgfs[fngfs + ShellPatch::drhodyz], cg->fgfs[fngfs + ShellPatch::drhodzz],
cg->fgfs[fngfs + ShellPatch::dRdxx], cg->fgfs[fngfs + ShellPatch::dRdxy], cg->fgfs[fngfs + ShellPatch::dRdxz], cg->fgfs[fngfs + ShellPatch::dsigmadxx], cg->fgfs[fngfs + ShellPatch::dsigmadxy], cg->fgfs[fngfs + ShellPatch::dsigmadxz],
cg->fgfs[fngfs + ShellPatch::dRdyy], cg->fgfs[fngfs + ShellPatch::dRdyz], cg->fgfs[fngfs + ShellPatch::dRdzz], cg->fgfs[fngfs + ShellPatch::dsigmadyy], cg->fgfs[fngfs + ShellPatch::dsigmadyz], cg->fgfs[fngfs + ShellPatch::dsigmadzz],
cg->fgfs[chi->sgfn], cg->fgfs[trK->sgfn], cg->fgfs[fngfs + ShellPatch::dRdxx], cg->fgfs[fngfs + ShellPatch::dRdxy], cg->fgfs[fngfs + ShellPatch::dRdxz],
cg->fgfs[gxx->sgfn], cg->fgfs[gxy->sgfn], cg->fgfs[gxz->sgfn], cg->fgfs[gyy->sgfn], cg->fgfs[gyz->sgfn], cg->fgfs[gzz->sgfn], cg->fgfs[fngfs + ShellPatch::dRdyy], cg->fgfs[fngfs + ShellPatch::dRdyz], cg->fgfs[fngfs + ShellPatch::dRdzz],
cg->fgfs[Axx->sgfn], cg->fgfs[Axy->sgfn], cg->fgfs[Axz->sgfn], cg->fgfs[Ayy->sgfn], cg->fgfs[Ayz->sgfn], cg->fgfs[Azz->sgfn], cg->fgfs[chi->sgfn], cg->fgfs[trK->sgfn],
cg->fgfs[Gmx->sgfn], cg->fgfs[Gmy->sgfn], cg->fgfs[Gmz->sgfn], cg->fgfs[gxx->sgfn], cg->fgfs[gxy->sgfn], cg->fgfs[gxz->sgfn], cg->fgfs[gyy->sgfn], cg->fgfs[gyz->sgfn], cg->fgfs[gzz->sgfn],
cg->fgfs[Sfx_rhs->sgfn], cg->fgfs[Sfy_rhs->sgfn], cg->fgfs[Sfz_rhs->sgfn], cg->fgfs[Axx->sgfn], cg->fgfs[Axy->sgfn], cg->fgfs[Axz->sgfn], cg->fgfs[Ayy->sgfn], cg->fgfs[Ayz->sgfn], cg->fgfs[Azz->sgfn],
Symmetry, Pp->data->sst); cg->fgfs[Gmx->sgfn], cg->fgfs[Gmy->sgfn], cg->fgfs[Gmz->sgfn],
} cg->fgfs[Sfx_rhs->sgfn], cg->fgfs[Sfy_rhs->sgfn], cg->fgfs[Sfz_rhs->sgfn],
if (BL == Pp->data->ble) Symmetry, Pp->data->sst);
break; }
BL = BL->next; if (BL == Pp->data->ble)
} break;
Pp = Pp->next; BL = BL->next;
} }
Pp = Pp->next;
}
}
const int InList = 17; const int InList = 17;

View File

@@ -77,18 +77,18 @@ public:
double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &,
double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &, double &,
double &, double &)); // NN is the length of RP and IP double &, double &)); // NN is the length of RP and IP
void surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK, void surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK,
var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz, var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz, var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs,
double *Rout, monitor *Monitor); double *Rout, monitor *Monitor, bool refresh_mass_fields = true);
void surf_MassPAng(double rex, int lev, ShellPatch *GH, var *chi, var *trK, void surf_MassPAng(double rex, int lev, ShellPatch *GH, var *chi, var *trK,
var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz, var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz, var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs,
double *Rout, monitor *Monitor); double *Rout, monitor *Monitor, bool refresh_mass_fields = true);
void surf_Wave(double rex, cgh *GH, ShellPatch *SH, void surf_Wave(double rex, cgh *GH, ShellPatch *SH,
var *chi, var *trK, var *chi, var *trK,
var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
@@ -110,12 +110,12 @@ public:
bool SR_Interp_Points(MyList<var> *VarList, cgh *GH, ShellPatch *SH, bool SR_Interp_Points(MyList<var> *VarList, cgh *GH, ShellPatch *SH,
int NN, double **XX, double *Shellf); int NN, double **XX, double *Shellf);
void surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK, void surf_MassPAng(double rex, int lev, cgh *GH, var *chi, var *trK,
var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz, var *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz, var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i
double *Rout, monitor *Monitor, MPI_Comm Comm_here); double *Rout, monitor *Monitor, MPI_Comm Comm_here, bool refresh_mass_fields = true);
void surf_Wave(double rex, int lev, cgh *GH, var *Rpsi4, var *Ipsi4, void surf_Wave(double rex, int lev, cgh *GH, var *Rpsi4, var *Ipsi4,
int spinw, int maxl, int NN, double *RP, double *IP, int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor, MPI_Comm Comm_here); monitor *Monitor, MPI_Comm Comm_here);