Files
AMSS-NCKU/AMSS_NCKU_source/surface_integral.h
2026-01-13 15:01:15 +08:00

124 lines
5.3 KiB
C++

//$Id: surface_integral.h,v 1.9 2013/08/20 11:49:05 zjcao Exp $
#ifndef SURFACE_INTEGRAL_H
#define SURFACE_INTEGRAL_H
#ifdef newc
#include <iostream>
#include <iomanip>
#include <fstream>
#include <strstream>
#include <cmath>
using namespace std;
#else
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <strstream>
#include <math.h>
#endif
#include "cgh.h"
#include "ShellPatch.h"
#include "NullShellPatch.h"
#include "NullShellPatch2.h"
#include "var.h"
#include "monitor.h"
class surface_integral
{
private:
int Symmetry, factor;
int N_theta, N_phi; // Number of points in Theta & Phi directions
double dphi, dcostheta;
double *arcostheta, *wtcostheta;
int n_tot; // size of arrays
double *nx_g, *ny_g, *nz_g; // global list of unit normals
int myrank, cpusize;
public:
surface_integral(int iSymmetry);
~surface_integral();
void surf_Wave(double rex, int lev, cgh *GH, var *Rpsi4, var *Ipsi4,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor); // NN is the length of RP and IP
// this routine can only deal with the symmetry of Psi4
void surf_Wave(double rex, int lev, ShellPatch *GH, var *Rpsi4, var *Ipsi4,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor);
void surf_Wave(double rex, int lev, NullShellPatch *GH, var *Rpsi4, var *Ipsi4,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor);
void surf_Wave(double rex, int lev, NullShellPatch2 *GH, var *Rpsi4, var *Ipsi4,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor);
void surf_Wave(double rex, int lev, ShellPatch *GH,
var *Ex, var *Ey, var *Ez, var *Bx, var *By, var *Bz,
var *chi, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor); // NN is the length of RP and IP
void surf_Wave(double rex, int lev, cgh *GH,
var *Ex, var *Ey, var *Ez, var *Bx, var *By, var *Bz,
var *chi, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor,
void (*funcs)(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
void surf_Wave(double rex, int lev, ShellPatch *GH,
var *Ex, var *Ey, var *Ez, var *Bx, var *By, var *Bz,
var *chi, var *gxx, var *gxy, var *gxz, var *gyy, var *gyz, var *gzz,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor,
void (*funcs)(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
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 *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs,
double *Rout, monitor *Monitor);
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 *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs,
double *Rout, monitor *Monitor);
void surf_Wave(double rex, cgh *GH, ShellPatch *SH,
var *chi, var *trK,
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 *chix, var *chiy, var *chiz,
var *trKx, var *trKy, var *trKz,
var *Axxx, var *Axxy, var *Axxz,
var *Axyx, var *Axyy, var *Axyz,
var *Axzx, var *Axzy, var *Axzz,
var *Ayyx, var *Ayyy, var *Ayyz,
var *Ayzx, var *Ayzy, var *Ayzz,
var *Azzx, var *Azzy, var *Azzz,
var *Gamxxx, var *Gamxxy, var *Gamxxz, var *Gamxyy, var *Gamxyz, var *Gamxzz,
var *Gamyxx, var *Gamyxy, var *Gamyxz, var *Gamyyy, var *Gamyyz, var *Gamyzz,
var *Gamzxx, var *Gamzxy, var *Gamzxz, var *Gamzyy, var *Gamzyz, var *Gamzzz,
var *Rxx, var *Rxy, var *Rxz, var *Ryy, var *Ryz, var *Rzz,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor);
bool SR_Interp_Points(MyList<var> *VarList, cgh *GH, ShellPatch *SH,
int NN, double **XX, double *Shellf);
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 *Axx, var *Axy, var *Axz, var *Ayy, var *Ayz, var *Azz,
var *Gmx, var *Gmy, var *Gmz,
var *Sfx_rhs, var *Sfy_rhs, var *Sfz_rhs, // temparay memory for mass^i
double *Rout, monitor *Monitor, MPI_Comm Comm_here);
void surf_Wave(double rex, int lev, cgh *GH, var *Rpsi4, var *Ipsi4,
int spinw, int maxl, int NN, double *RP, double *IP,
monitor *Monitor, MPI_Comm Comm_here);
};
#endif /* SURFACE_INTEGRAL_H */