00001
00071 #ifndef _APBSROUTINES_H_
00072 #define _APBSROUTINES_H_
00073
00074 #include "apbscfg.h"
00075 #include "apbs/apbs.h"
00076 #include "apbs/nosh.h"
00077 #include "apbs/mgparm.h"
00078 #include "apbs/pbeparm.h"
00079 #include "apbs/femparm.h"
00080 #include "apbs/vparam.h"
00081
00082
00086 #define APBSRC 13
00087
00092 struct AtomForce {
00093 double ibForce[3];
00094 double qfForce[3];
00095 double dbForce[3];
00096 double sasaForce[3];
00097 double savForce[3];
00098 double wcaForce[3];
00099 };
00100
00104 typedef struct AtomForce AtomForce;
00105
00111 Vparam* loadParameter(
00112 NOsh *nosh
00114 );
00115
00121 int loadMolecules(
00122 NOsh *nosh,
00123 Vparam *param,
00125 Valist *alist[NOSH_MAXMOL]
00127 );
00128
00135 void killMolecules(NOsh *nosh, Valist *alist[NOSH_MAXMOL]);
00136
00146 int loadDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL],
00147 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]);
00148
00157 void killDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL],
00158 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]);
00159
00167 int loadKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]);
00168
00175 void killKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]);
00176
00184 int loadChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]);
00185
00192 void killChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]);
00193
00199 void printPBEPARM(PBEparm *pbeparm);
00200
00207 void printMGPARM(MGparm *mgparm, double realCenter[3]);
00208
00214 int initMG(
00215 int icalc,
00216 NOsh *nosh,
00217 MGparm *mgparm,
00218 PBEparm *pbeparm,
00219 double realCenter[3],
00220 Vpbe *pbe[NOSH_MAXCALC],
00221 Valist *alist[NOSH_MAXMOL],
00222 Vgrid *dielXMap[NOSH_MAXMOL],
00223 Vgrid *dielYMap[NOSH_MAXMOL],
00224 Vgrid *dielZMap[NOSH_MAXMOL],
00225 Vgrid *kappaMap[NOSH_MAXMOL],
00226 Vgrid *chargeMap[NOSH_MAXMOL],
00227 Vpmgp *pmgp[NOSH_MAXCALC],
00228 Vpmg *pmg[NOSH_MAXCALC]
00229 );
00230
00239 void killMG(NOsh *nosh, Vpbe *pbe[NOSH_MAXCALC],
00240 Vpmgp *pmgp[NOSH_MAXCALC], Vpmg *pmg[NOSH_MAXCALC]);
00241
00250 int solveMG(NOsh *nosh, Vpmg *pmg, MGparm_CalcType type);
00251
00260 int setPartMG(NOsh *nosh, MGparm *mgparm, Vpmg *pmg);
00261
00275 int energyMG(NOsh* nosh, int icalc, Vpmg *pmg,
00276 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy,
00277 double *dielEnergy);
00278
00283 void killEnergy();
00284
00298 int forceMG(Vmem *mem, NOsh *nosh, PBEparm *pbeparm, MGparm *mgparm,
00299 Vpmg *pmg, int *nforce, AtomForce **atomForce, Valist *alist[NOSH_MAXMOL]);
00300
00309 void killForce(Vmem *mem, NOsh *nosh, int nforce[NOSH_MAXCALC],
00310 AtomForce *atomForce[NOSH_MAXCALC]);
00311
00316 void storeAtomEnergy(
00317 Vpmg *pmg,
00318 int icalc,
00319 double **atomEnergy,
00320 int *nenergy
00321 );
00322
00339 int writedataFlat(NOsh *nosh, Vcom *com, const char *fname,
00340 double totEnergy[NOSH_MAXCALC], double qfEnergy[NOSH_MAXCALC],
00341 double qmEnergy[NOSH_MAXCALC], double dielEnergy[NOSH_MAXCALC],
00342 int nenergy[NOSH_MAXCALC], double *atomEnergy[NOSH_MAXCALC],
00343 int nforce[NOSH_MAXCALC], AtomForce *atomForce[NOSH_MAXCALC]);
00344
00361 int writedataXML(NOsh *nosh, Vcom *com, const char *fname,
00362 double totEnergy[NOSH_MAXCALC], double qfEnergy[NOSH_MAXCALC],
00363 double qmEnergy[NOSH_MAXCALC], double dielEnergy[NOSH_MAXCALC],
00364 int nenergy[NOSH_MAXCALC], double *atomEnergy[NOSH_MAXCALC],
00365 int nforce[NOSH_MAXCALC], AtomForce *atomForce[NOSH_MAXCALC]);
00366
00376 int writedataMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg);
00377
00387 int writematMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg);
00388
00398 double returnEnergy(Vcom *com, NOsh *nosh, double totEnergy[NOSH_MAXCALC], int iprint);
00399
00405 int printEnergy(
00406 Vcom *com,
00407 NOsh *nosh,
00408 double totEnergy[NOSH_MAXCALC],
00410 int iprint
00411 );
00412
00418 int printElecEnergy(
00419 Vcom *com,
00420 NOsh *nosh,
00421 double totEnergy[NOSH_MAXCALC],
00423 int iprint
00424 );
00425
00431 int printApolEnergy(
00432 NOsh *nosh,
00433 int iprint
00434 );
00435
00441 int printForce(
00442 Vcom *com,
00443 NOsh *nosh,
00444 int nforce[NOSH_MAXCALC],
00445 AtomForce *atomForce[NOSH_MAXCALC],
00446 int i
00447 );
00448
00454 int printElecForce(
00455 Vcom *com,
00456 NOsh *nosh,
00457 int nforce[NOSH_MAXCALC],
00458 AtomForce *atomForce[NOSH_MAXCALC],
00459 int i
00460 );
00461
00467 int printApolForce(
00468 Vcom *com,
00469 NOsh *nosh,
00470 int nforce[NOSH_MAXCALC],
00471 AtomForce *atomForce[NOSH_MAXCALC],
00472 int i
00473 );
00474
00479 void startVio();
00480
00481 #ifdef HAVE_MC_H
00482
00490 void printFEPARM(int icalc, NOsh *nosh, FEMparm *feparm,
00491 Vfetk *fetk[NOSH_MAXCALC]);
00492
00507 int energyFE(NOsh* nosh, int icalc, Vfetk *fetk[NOSH_MAXCALC],
00508 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy,
00509 double *dielEnergy);
00510
00525 int initFE(int icalc, NOsh *nosh, FEMparm *feparm, PBEparm *pbeparm,
00526 Vpbe *pbe[NOSH_MAXCALC], Valist *alist[NOSH_MAXMOL],
00527 Vfetk *fetk[NOSH_MAXCALC]);
00528
00538 int preRefineFE(int i, NOsh *nosh, FEMparm *feparm,
00539 Vfetk *fetk[NOSH_MAXCALC]);
00540
00550 int partFE(int i, NOsh *nosh, FEMparm *feparm,
00551 Vfetk *fetk[NOSH_MAXCALC]);
00552
00563 int solveFE(int i, NOsh *nosh, PBEparm *pbeparm, FEMparm *feparm,
00564 Vfetk *fetk[NOSH_MAXCALC]);
00565
00578 int postRefineFE(int icalc, NOsh *nosh, FEMparm *feparm,
00579 Vfetk *fetk[NOSH_MAXCALC]);
00580
00590 int writedataFE(int rank, NOsh *nosh, PBEparm *pbeparm, Vfetk *fetk);
00591
00597 int energyAPOL(
00598 APOLparm *apolparm,
00599 double sasa,
00600 double sav
00601 );
00602
00608 int forceAPOL(
00609 Vacc *acc,
00610 Vmem *mem,
00611 APOLparm *apolparm,
00613 int *nforce,
00615 AtomForce **atomForce,
00617 Valist *alist,
00618 Vclist *clist
00619 );
00620
00626 int initAPOL(
00627 NOsh *nosh,
00628 Vmem *mem,
00629 Vparam *param,
00630 APOLparm *apolparm,
00631 int *nforce,
00632 AtomForce **atomForce,
00633 Valist *alist
00634 );
00635
00636 #endif
00637
00638 #endif
00639