00001 00059 #ifndef _APBSROUTINES_H_ 00060 #define _APBSROUTINES_H_ 00061 00062 #include "apbs/apbs.h" 00063 #include "apbs/nosh.h" 00064 #include "apbs/mgparm.h" 00065 #include "apbs/pbeparm.h" 00066 #include "apbs/femparm.h" 00067 #include "apbs/vparam.h" 00068 #include "apbs/vgrid.h" 00069 #include "apbs/vacc.h" 00070 00074 #define APBSRC 13 00075 00080 struct AtomForce { 00081 double ibForce[3]; 00082 double qfForce[3]; 00083 double dbForce[3]; 00084 double sasaForce[3]; 00085 double savForce[3]; 00086 double wcaForce[3]; 00087 }; 00088 00092 typedef struct AtomForce AtomForce; 00093 00099 VEXTERNC Vparam* loadParameter( 00100 NOsh *nosh 00102 ); 00103 00109 VEXTERNC int loadMolecules( 00110 NOsh *nosh, 00111 Vparam *param, 00113 Valist *alist[NOSH_MAXMOL] 00115 ); 00116 00123 VEXTERNC void killMolecules(NOsh *nosh, Valist *alist[NOSH_MAXMOL]); 00124 00134 VEXTERNC int loadDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL], 00135 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]); 00136 00145 VEXTERNC void killDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL], 00146 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]); 00147 00155 VEXTERNC int loadKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]); 00156 00163 VEXTERNC void killKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]); 00164 00172 VEXTERNC int loadPotMaps(NOsh *nosh, Vgrid *pot[NOSH_MAXMOL]); 00173 00180 VEXTERNC void killPotMaps(NOsh *nosh, Vgrid *pot[NOSH_MAXMOL]); 00181 00189 VEXTERNC int loadChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]); 00190 00197 VEXTERNC void killChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]); 00198 00204 VEXTERNC void printPBEPARM(PBEparm *pbeparm); 00205 00212 VEXTERNC void printMGPARM(MGparm *mgparm, double realCenter[3]); 00213 00219 VEXTERNC int initMG( 00220 int icalc, 00221 NOsh *nosh, 00222 MGparm *mgparm, 00223 PBEparm *pbeparm, 00224 double realCenter[3], 00225 Vpbe *pbe[NOSH_MAXCALC], 00226 Valist *alist[NOSH_MAXMOL], 00227 Vgrid *dielXMap[NOSH_MAXMOL], 00228 Vgrid *dielYMap[NOSH_MAXMOL], 00229 Vgrid *dielZMap[NOSH_MAXMOL], 00230 Vgrid *kappaMap[NOSH_MAXMOL], 00231 Vgrid *chargeMap[NOSH_MAXMOL], 00232 Vpmgp *pmgp[NOSH_MAXCALC], 00233 Vpmg *pmg[NOSH_MAXCALC], 00234 Vgrid *potMap[NOSH_MAXMOL] 00235 ); 00236 00242 VEXTERNC void killMG( 00243 NOsh *nosh, 00244 Vpbe *pbe[NOSH_MAXCALC], 00245 Vpmgp *pmgp[NOSH_MAXCALC], 00246 Vpmg *pmg[NOSH_MAXCALC] 00247 ); 00248 00257 VEXTERNC int solveMG(NOsh *nosh, Vpmg *pmg, MGparm_CalcType type); 00258 00267 VEXTERNC int setPartMG(NOsh *nosh, MGparm *mgparm, Vpmg *pmg); 00268 00282 VEXTERNC int energyMG(NOsh* nosh, int icalc, Vpmg *pmg, 00283 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy, 00284 double *dielEnergy); 00285 00290 VEXTERNC void killEnergy(); 00291 00305 VEXTERNC int forceMG(Vmem *mem, NOsh *nosh, PBEparm *pbeparm, MGparm *mgparm, 00306 Vpmg *pmg, int *nforce, AtomForce **atomForce, Valist *alist[NOSH_MAXMOL]); 00307 00316 VEXTERNC void killForce(Vmem *mem, NOsh *nosh, int nforce[NOSH_MAXCALC], 00317 AtomForce *atomForce[NOSH_MAXCALC]); 00318 00323 VEXTERNC void storeAtomEnergy( 00324 Vpmg *pmg, 00325 int icalc, 00326 double **atomEnergy, 00327 int *nenergy 00328 ); 00329 00346 VEXTERNC int writedataFlat(NOsh *nosh, Vcom *com, const char *fname, 00347 double totEnergy[NOSH_MAXCALC], double qfEnergy[NOSH_MAXCALC], 00348 double qmEnergy[NOSH_MAXCALC], double dielEnergy[NOSH_MAXCALC], 00349 int nenergy[NOSH_MAXCALC], double *atomEnergy[NOSH_MAXCALC], 00350 int nforce[NOSH_MAXCALC], AtomForce *atomForce[NOSH_MAXCALC]); 00351 00368 VEXTERNC int writedataXML(NOsh *nosh, Vcom *com, const char *fname, 00369 double totEnergy[NOSH_MAXCALC], double qfEnergy[NOSH_MAXCALC], 00370 double qmEnergy[NOSH_MAXCALC], double dielEnergy[NOSH_MAXCALC], 00371 int nenergy[NOSH_MAXCALC], double *atomEnergy[NOSH_MAXCALC], 00372 int nforce[NOSH_MAXCALC], AtomForce *atomForce[NOSH_MAXCALC]); 00373 00383 VEXTERNC int writedataMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg); 00384 00394 VEXTERNC int writematMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg); 00395 00405 VEXTERNC double returnEnergy(Vcom *com, NOsh *nosh, double totEnergy[NOSH_MAXCALC], int iprint); 00406 00412 VEXTERNC int printEnergy( 00413 Vcom *com, 00414 NOsh *nosh, 00415 double totEnergy[NOSH_MAXCALC], 00417 int iprint 00418 ); 00419 00425 VEXTERNC int printElecEnergy( 00426 Vcom *com, 00427 NOsh *nosh, 00428 double totEnergy[NOSH_MAXCALC], 00430 int iprint 00431 ); 00432 00438 VEXTERNC int printApolEnergy( 00439 NOsh *nosh, 00440 int iprint 00441 ); 00442 00448 VEXTERNC int printForce( 00449 Vcom *com, 00450 NOsh *nosh, 00451 int nforce[NOSH_MAXCALC], 00452 AtomForce *atomForce[NOSH_MAXCALC], 00453 int i 00454 ); 00455 00461 VEXTERNC int printElecForce( 00462 Vcom *com, 00463 NOsh *nosh, 00464 int nforce[NOSH_MAXCALC], 00465 AtomForce *atomForce[NOSH_MAXCALC], 00466 int i 00467 ); 00468 00474 VEXTERNC int printApolForce( 00475 Vcom *com, 00476 NOsh *nosh, 00477 int nforce[NOSH_MAXCALC], 00478 AtomForce *atomForce[NOSH_MAXCALC], 00479 int i 00480 ); 00481 00486 VEXTERNC void startVio(); 00487 00493 VEXTERNC int energyAPOL( 00494 APOLparm *apolparm, 00495 double sasa, 00496 double sav, 00497 double atomsasa[], 00498 double atomwcaEnergy[], 00499 int numatoms 00500 ); 00501 00507 VEXTERNC int forceAPOL( 00508 Vacc *acc, 00509 Vmem *mem, 00510 APOLparm *apolparm, 00512 int *nforce, 00514 AtomForce **atomForce, 00516 Valist *alist, 00517 Vclist *clist 00518 ); 00519 00525 VEXTERNC int initAPOL( 00526 NOsh *nosh, 00527 Vmem *mem, 00528 Vparam *param, 00529 APOLparm *apolparm, 00530 int *nforce, 00531 AtomForce **atomForce, 00532 Valist *alist 00533 ); 00534 00535 00536 #ifdef HAVE_MC_H 00537 #include "apbs/vfetk.h" 00538 00547 VEXTERNC void printFEPARM(int icalc, NOsh *nosh, FEMparm *feparm, 00548 Vfetk *fetk[NOSH_MAXCALC]); 00549 00564 VEXTERNC int energyFE(NOsh* nosh, int icalc, Vfetk *fetk[NOSH_MAXCALC], 00565 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy, 00566 double *dielEnergy); 00567 00575 VEXTERNC Vrc_Codes initFE( 00576 int icalc, 00578 NOsh *nosh, 00579 FEMparm *feparm, 00580 PBEparm *pbeparm, 00581 Vpbe *pbe[NOSH_MAXCALC], 00582 Valist *alist[NOSH_MAXMOL], 00583 Vfetk *fetk[NOSH_MAXCALC], 00584 Gem *gm[NOSH_MAXCALC] 00585 ); 00586 00592 VEXTERNC void killFE( 00593 NOsh *nosh, 00594 Vpbe *pbe[NOSH_MAXCALC], 00595 Vfetk *fetk[NOSH_MAXCALC], 00596 Gem *gem[NOSH_MAXMOL] 00597 ); 00598 00608 VEXTERNC int preRefineFE(int i, NOsh *nosh, FEMparm *feparm, 00609 Vfetk *fetk[NOSH_MAXCALC]); 00610 00620 VEXTERNC int partFE(int i, NOsh *nosh, FEMparm *feparm, 00621 Vfetk *fetk[NOSH_MAXCALC]); 00622 00633 VEXTERNC int solveFE(int i, NOsh *nosh, PBEparm *pbeparm, FEMparm *feparm, 00634 Vfetk *fetk[NOSH_MAXCALC]); 00635 00648 VEXTERNC int postRefineFE(int icalc, NOsh *nosh, FEMparm *feparm, 00649 Vfetk *fetk[NOSH_MAXCALC]); 00650 00660 VEXTERNC int writedataFE(int rank, NOsh *nosh, PBEparm *pbeparm, Vfetk *fetk); 00661 00667 VEXTERNC Vrc_Codes loadMeshes( 00668 NOsh *nosh, 00669 Gem *gm[NOSH_MAXMOL] 00671 ); 00672 00677 VEXTERNC void killMeshes( 00678 NOsh *nosh, 00679 Gem *alist[NOSH_MAXMOL] 00680 ); 00681 #endif 00682 00683 #endif