00001
00048 #ifndef _APBSROUTINES_H_
00049 #define _APBSROUTINES_H_
00050
00051 #include "apbscfg.h"
00052 #include "apbs/apbs.h"
00053 #include "apbs/nosh.h"
00054 #include "apbs/mgparm.h"
00055 #include "apbs/pbeparm.h"
00056 #include "apbs/femparm.h"
00057
00061 #define APBSRC 13
00062
00066 #define USEHB 1
00067
00072 struct AtomForce {
00073 double ibForce[3];
00074 double qfForce[3];
00075 double dbForce[3];
00076 double npForce[3];
00077 };
00078
00082 typedef struct AtomForce AtomForce;
00083
00091 int loadMolecules(NOsh *nosh, Valist *alist[NOSH_MAXMOL]);
00092
00099 void killMolecules(NOsh *nosh, Valist *alist[NOSH_MAXMOL]);
00100
00110 int loadDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL],
00111 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]);
00112
00121 void killDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL],
00122 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]);
00123
00131 int loadKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]);
00132
00139 void killKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]);
00140
00148 int loadChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]);
00149
00156 void killChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]);
00157
00163 void printPBEPARM(PBEparm *pbeparm);
00164
00171 void printMGPARM(MGparm *mgparm, double realCenter[3]);
00172
00192 int initMG(int icalc, NOsh *nosh, MGparm *mgparm,
00193 PBEparm *pbeparm, double realCenter[3], Vpbe *pbe[NOSH_MAXCALC],
00194 Valist *alist[NOSH_MAXMOL], Vgrid *dielXMap[NOSH_MAXMOL],
00195 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL],
00196 Vgrid *kappaMap[NOSH_MAXMOL], Vgrid *chargeMap[NOSH_MAXMOL],
00197 Vpmgp *pmgp[NOSH_MAXCALC], Vpmg *pmg[NOSH_MAXCALC]);
00198
00207 void killMG(NOsh *nosh, Vpbe *pbe[NOSH_MAXCALC],
00208 Vpmgp *pmgp[NOSH_MAXCALC], Vpmg *pmg[NOSH_MAXCALC]);
00209
00218 int solveMG(NOsh *nosh, Vpmg *pmg, MGparm_CalcType type);
00219
00228 int setPartMG(NOsh *nosh, MGparm *mgparm, Vpmg *pmg);
00229
00243 int energyMG(NOsh* nosh, int icalc, Vpmg *pmg,
00244 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy,
00245 double *dielEnergy);
00246
00257 int npenergyMG(NOsh* nosh, int icalc, Vpmg *pmg, int *nenergy,
00258 double *npEnergy);
00259
00264 void killEnergy();
00265
00279 int forceMG(Vmem *mem, NOsh *nosh, PBEparm *pbeparm, MGparm *mgparm,
00280 Vpmg *pmg, int *nforce, AtomForce **atomForce, Valist *alist[NOSH_MAXMOL]);
00281
00290 void killForce(Vmem *mem, NOsh *nosh, int nforce[NOSH_MAXCALC],
00291 AtomForce *atomForce[NOSH_MAXCALC]);
00292
00302 int writedataMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg);
00303
00313 int writematMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg);
00314
00324 int printEnergy(Vcom *com, NOsh *nosh, double totEnergy[NOSH_MAXCALC],
00325 int i);
00326
00337 int printForce(Vcom *com, NOsh *nosh, int nforce[NOSH_MAXCALC],
00338 AtomForce *atomForce[NOSH_MAXCALC], int i);
00339
00344 void startVio();
00345
00346 #ifdef HAVE_MC_H
00347
00355 void printFEPARM(int icalc, NOsh *nosh, FEMparm *feparm,
00356 Vfetk *fetk[NOSH_MAXCALC]);
00357
00372 int energyFE(NOsh* nosh, int icalc, Vfetk *fetk[NOSH_MAXCALC],
00373 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy,
00374 double *dielEnergy);
00375
00390 int initFE(int icalc, NOsh *nosh, FEMparm *feparm, PBEparm *pbeparm,
00391 Vpbe *pbe[NOSH_MAXCALC], Valist *alist[NOSH_MAXMOL],
00392 Vfetk *fetk[NOSH_MAXCALC]);
00393
00403 int preRefineFE(int i, NOsh *nosh, FEMparm *feparm,
00404 Vfetk *fetk[NOSH_MAXCALC]);
00405
00415 int partFE(int i, NOsh *nosh, FEMparm *feparm,
00416 Vfetk *fetk[NOSH_MAXCALC]);
00417
00428 int solveFE(int i, NOsh *nosh, PBEparm *pbeparm, FEMparm *feparm,
00429 Vfetk *fetk[NOSH_MAXCALC]);
00430
00443 int postRefineFE(int icalc, NOsh *nosh, FEMparm *feparm,
00444 Vfetk *fetk[NOSH_MAXCALC]);
00445
00455 int writedataFE(int rank, NOsh *nosh, PBEparm *pbeparm, Vfetk *fetk);
00456 #endif
00457
00458 #endif
00459