7 #ifndef GRIDFORCEGRID_H 8 #define GRIDFORCEGRID_H 41 virtual int get_k0(
void)
const = 0;
42 virtual int get_k1(
void)
const = 0;
43 virtual int get_k2(
void)
const = 0;
100 inline float get_grid(
int i0,
int i1,
int i2)
const {
104 return double(
get_grid(i0, i1, i2));
106 inline void set_grid(
int i0,
int i1,
int i2,
float V) {
114 inline int get_k0(
void)
const {
return k[0]; }
115 inline int get_k1(
void)
const {
return k[1]; }
116 inline int get_k2(
void)
const {
return k[2]; }
133 register int inds[3] = {i0, i1, i2};
135 if (i0 < 0 || i0 >=
k[0] || i1 < 0 || i1 >=
k[1] || i2 < 0 || i2 >=
k[2]) {
137 sprintf(buffer,
"Bad grid index! (%d %d %d)", i0, i1, i2);
141 return inds[0]*
dk[0] + inds[1]*
dk[1] + inds[2]*
dk[2];
146 void compute_a(
float *a,
float *b)
const;
147 virtual void compute_b(
float *b,
int *inds,
Vector gapscale)
const = 0;
148 float compute_V(
float *a,
float *x,
float *y,
float *z)
const;
151 float compute_d3V(
float *a,
float *x,
float *y,
float *z)
const;
300 inline int get_k0(
void)
const {
return k[0]; }
301 inline int get_k1(
void)
const {
return k[1]; }
302 inline int get_k2(
void)
const {
return k[2]; }
306 inline float get_grid(
int i0,
int i1,
int i2,
int i3)
const {
309 inline double get_grid_d(
int i0,
int i1,
int i2,
int i3)
const {
312 inline void set_grid(
int i0,
int i1,
int i2,
int i3,
float V) {
330 inline long int grid_index(
int i0,
int i1,
int i2,
int i3)
const {
332 register int inds[4] = {i0, i1, i2, i3};
333 return inds[0]*
dk[0] + inds[1]*
dk[1] + inds[2]*
dk[2] + inds[3]*
dk[3];
void reinitialize(SimParameters *simParams, MGridforceParams *mgridParams)
Vector get_scale(void) const
void pack(MOStream *msg) const
int get_total_grids(void) const
long int grid_index(int i0, int i1, int i2) const
int get_inds(Position pos, int *inds, Vector &dg, Vector &gapscale) const
GridforceFullBaseGrid(void)
Position get_center(void) const
int compute_VdV(Position pos, float &V, Vector &dV) const
float compute_V(float *a, float *x, float *y, float *z) const
static GridforceGrid * new_grid(int gridnum, char *potfilename, SimParameters *simParams, MGridforceParams *mgridParams)
int get_inds(Position pos, int *inds, Vector &dg) const
Position get_origin(void) const
virtual void compute_b(float *b, int *inds, Vector gapscale) const =0
Position get_center(void) const
Position get_origin(void) const
Vector get_scale(void) const
void initialize(char *potfilename, SimParameters *simParams, MGridforceParams *mgridParams, int border)
long int get_all_gridvals(float **all_gridvals) const
static void pack_grid(GridforceGrid *grid, MOStream *msg)
Vector compute_d2V(float *a, float *x, float *y, float *z) const
virtual Position get_origin(void) const =0
double get_grid_d(int i0, int i1, int i2, int i3) const
float compute_d3V(float *a, float *x, float *y, float *z) const
virtual ~GridforceLiteGrid()
int get_border(void) const
#define NAMD_FILENAME_BUFFER_SIZE
virtual void set_all_gridvals(float *all_gridvals, long int sz)=0
virtual int get_k2(void) const =0
char filename[NAMD_FILENAME_BUFFER_SIZE]
Bool get_checksize(void) const
Bool get_checksize(void) const
Tensor get_inv(void) const
GridforceFullMainGrid * maingrid
void readHeader(SimParameters *simParams, MGridforceParams *mgridParams)
virtual void reinitialize(SimParameters *simParams, MGridforceParams *mgridParams)=0
void initialize(char *potfilename, SimParameters *simParams, MGridforceParams *mgridParams)
int get_total_grids(void) const
void unpack(MIStream *msg)
void compute_b(float *b, int *inds, Vector gapscale) const
void compute_derivative_grids(void)
void set_grid(int i0, int i1, int i2, int i3, float V)
virtual long int get_all_gridvals(float **all_gridvals) const =0
GridforceFullSubGrid ** subgrids
long int grid_index(int i0, int i1, int i2, int i3) const
GridforceFullBaseGrid * parent
bool fits_lattice(const Lattice &lattice)
virtual void pack(MOStream *msg) const
void set_grid(int i0, int i1, int i2, float V)
virtual void pack(MOStream *msg) const =0
void NAMD_bug(const char *err_msg)
void compute_b(float *b, int *inds, Vector gapscale) const
Position get_center(void) const
GridforceFullSubGrid ** subgrids_flat
Tensor get_inv(void) const
GridforceFullMainGrid(int gridnum)
virtual Position get_center(void) const =0
void reinitialize(SimParameters *simParams, MGridforceParams *mgridParams)
virtual ~GridforceFullBaseGrid()
void set_all_gridvals(float *all_gridvals, long int sz)
long int get_all_gridvals(float **all_gridvals) const
float get_grid(int i0, int i1, int i2) const
GridforceFullSubGrid(GridforceFullBaseGrid *parent_in)
virtual void initialize(char *potfilename, SimParameters *simParams, MGridforceParams *mgridParams)=0
void readSubgridHierarchy(FILE *poten, int &totalGrids)
GridforceLiteGrid(int gridnum)
void addToSubgridsFlat(void)
virtual int get_border(void) const =0
virtual Bool get_checksize(void) const =0
virtual void unpack(MIStream *msg)
int compute_VdV(Position pos, float &V, Vector &dV) const
void set_all_gridvals(float *all_gridvals, long int sz)
Vector get_scale(void) const
virtual Vector get_scale(void) const =0
float linear_interpolate(int i0, int i1, int i2, int i3, const float *wts) const
char filename[NAMD_FILENAME_BUFFER_SIZE]
Tensor get_inv(void) const
void initialize(char *potfilename, SimParameters *simParams, MGridforceParams *mgridParams)
static GridforceGrid * unpack_grid(int gridnum, MIStream *msg)
void buildSubgridsFlat(void)
Tensor tensorMult(const Tensor &t1, const Tensor &t2)
virtual int get_k0(void) const =0
Position get_corner(int idx)
virtual int get_k1(void) const =0
Position wrap_position(const Position &pos, const Lattice &lattice)
virtual void unpack(MIStream *msg)=0
virtual Tensor get_e(void) const =0
Vector compute_dV(float *a, float *x, float *y, float *z) const
void pack(MOStream *msg) const
virtual ~GridforceFullMainGrid()
int compute_VdV(Position pos, float &V, Vector &dV) const
Bool get_checksize(void) const
int compute_VdV(Position pos, float &V, Vector &dV) const
GridforceGridType get_grid_type(void)
void compute_wts(float *wts, const Vector &dg) const
static const int default_border
float get_grid(int i0, int i1, int i2, int i3) const
void pack(MOStream *msg) const
Position get_origin(void) const
double get_grid_d(int i0, int i1, int i2) const
void initialize(SimParameters *simParams, MGridforceParams *mgridParams)
int get_border(void) const
void unpack(MIStream *msg)
virtual void set_scale(Vector s)=0
virtual int get_total_grids(void) const =0
void unpack(MIStream *msg)
void compute_a(float *a, float *b) const
virtual Tensor get_inv(void) const =0