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