00001
00059 #ifndef _APBSROUTINES_H_
00060 #define _APBSROUTINES_H_
00061
00062 #include "apbscfg.h"
00063 #include "apbs/apbs.h"
00064 #include "apbs/nosh.h"
00065 #include "apbs/mgparm.h"
00066 #include "apbs/pbeparm.h"
00067 #include "apbs/femparm.h"
00068 #include "apbs/vparam.h"
00069
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 Vparam* loadParameter(
00100 NOsh *nosh
00102 );
00103
00109 int loadMolecules(
00110 NOsh *nosh,
00111 Vparam *param,
00113 Valist *alist[NOSH_MAXMOL]
00115 );
00116
00123 void killMolecules(NOsh *nosh, Valist *alist[NOSH_MAXMOL]);
00124
00134 int loadDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL],
00135 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]);
00136
00145 void killDielMaps(NOsh *nosh, Vgrid *dielXMap[NOSH_MAXMOL],
00146 Vgrid *dielYMap[NOSH_MAXMOL], Vgrid *dielZMap[NOSH_MAXMOL]);
00147
00155 int loadKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]);
00156
00163 void killKappaMaps(NOsh *nosh, Vgrid *kappa[NOSH_MAXMOL]);
00164
00172 int loadChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]);
00173
00180 void killChargeMaps(NOsh *nosh, Vgrid *charge[NOSH_MAXMOL]);
00181
00187 void printPBEPARM(PBEparm *pbeparm);
00188
00195 void printMGPARM(MGparm *mgparm, double realCenter[3]);
00196
00202 int initMG(
00203 int icalc,
00204 NOsh *nosh,
00205 MGparm *mgparm,
00206 PBEparm *pbeparm,
00207 double realCenter[3],
00208 Vpbe *pbe[NOSH_MAXCALC],
00209 Valist *alist[NOSH_MAXMOL],
00210 Vgrid *dielXMap[NOSH_MAXMOL],
00211 Vgrid *dielYMap[NOSH_MAXMOL],
00212 Vgrid *dielZMap[NOSH_MAXMOL],
00213 Vgrid *kappaMap[NOSH_MAXMOL],
00214 Vgrid *chargeMap[NOSH_MAXMOL],
00215 Vpmgp *pmgp[NOSH_MAXCALC],
00216 Vpmg *pmg[NOSH_MAXCALC]
00217 );
00218
00224 void killMG(
00225 NOsh *nosh,
00226 Vpbe *pbe[NOSH_MAXCALC],
00227 Vpmgp *pmgp[NOSH_MAXCALC],
00228 Vpmg *pmg[NOSH_MAXCALC]
00229 );
00230
00239 int solveMG(NOsh *nosh, Vpmg *pmg, MGparm_CalcType type);
00240
00249 int setPartMG(NOsh *nosh, MGparm *mgparm, Vpmg *pmg);
00250
00264 int energyMG(NOsh* nosh, int icalc, Vpmg *pmg,
00265 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy,
00266 double *dielEnergy);
00267
00272 void killEnergy();
00273
00287 int forceMG(Vmem *mem, NOsh *nosh, PBEparm *pbeparm, MGparm *mgparm,
00288 Vpmg *pmg, int *nforce, AtomForce **atomForce, Valist *alist[NOSH_MAXMOL]);
00289
00298 void killForce(Vmem *mem, NOsh *nosh, int nforce[NOSH_MAXCALC],
00299 AtomForce *atomForce[NOSH_MAXCALC]);
00300
00305 void storeAtomEnergy(
00306 Vpmg *pmg,
00307 int icalc,
00308 double **atomEnergy,
00309 int *nenergy
00310 );
00311
00328 int writedataFlat(NOsh *nosh, Vcom *com, const char *fname,
00329 double totEnergy[NOSH_MAXCALC], double qfEnergy[NOSH_MAXCALC],
00330 double qmEnergy[NOSH_MAXCALC], double dielEnergy[NOSH_MAXCALC],
00331 int nenergy[NOSH_MAXCALC], double *atomEnergy[NOSH_MAXCALC],
00332 int nforce[NOSH_MAXCALC], AtomForce *atomForce[NOSH_MAXCALC]);
00333
00350 int writedataXML(NOsh *nosh, Vcom *com, const char *fname,
00351 double totEnergy[NOSH_MAXCALC], double qfEnergy[NOSH_MAXCALC],
00352 double qmEnergy[NOSH_MAXCALC], double dielEnergy[NOSH_MAXCALC],
00353 int nenergy[NOSH_MAXCALC], double *atomEnergy[NOSH_MAXCALC],
00354 int nforce[NOSH_MAXCALC], AtomForce *atomForce[NOSH_MAXCALC]);
00355
00365 int writedataMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg);
00366
00376 int writematMG(int rank, NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg);
00377
00387 double returnEnergy(Vcom *com, NOsh *nosh, double totEnergy[NOSH_MAXCALC], int iprint);
00388
00394 int printEnergy(
00395 Vcom *com,
00396 NOsh *nosh,
00397 double totEnergy[NOSH_MAXCALC],
00399 int iprint
00400 );
00401
00407 int printElecEnergy(
00408 Vcom *com,
00409 NOsh *nosh,
00410 double totEnergy[NOSH_MAXCALC],
00412 int iprint
00413 );
00414
00420 int printApolEnergy(
00421 NOsh *nosh,
00422 int iprint
00423 );
00424
00430 int printForce(
00431 Vcom *com,
00432 NOsh *nosh,
00433 int nforce[NOSH_MAXCALC],
00434 AtomForce *atomForce[NOSH_MAXCALC],
00435 int i
00436 );
00437
00443 int printElecForce(
00444 Vcom *com,
00445 NOsh *nosh,
00446 int nforce[NOSH_MAXCALC],
00447 AtomForce *atomForce[NOSH_MAXCALC],
00448 int i
00449 );
00450
00456 int printApolForce(
00457 Vcom *com,
00458 NOsh *nosh,
00459 int nforce[NOSH_MAXCALC],
00460 AtomForce *atomForce[NOSH_MAXCALC],
00461 int i
00462 );
00463
00468 void startVio();
00469
00470 #ifdef HAVE_MC_H
00471 #include "apbs/vfetk.h"
00472
00481 void printFEPARM(int icalc, NOsh *nosh, FEMparm *feparm,
00482 Vfetk *fetk[NOSH_MAXCALC]);
00483
00498 int energyFE(NOsh* nosh, int icalc, Vfetk *fetk[NOSH_MAXCALC],
00499 int *nenergy, double *totEnergy, double *qfEnergy, double *qmEnergy,
00500 double *dielEnergy);
00501
00509 Vrc_Codes initFE(
00510 int icalc,
00512 NOsh *nosh,
00513 FEMparm *feparm,
00514 PBEparm *pbeparm,
00515 Vpbe *pbe[NOSH_MAXCALC],
00516 Valist *alist[NOSH_MAXMOL],
00517 Vfetk *fetk[NOSH_MAXCALC],
00518 Gem *gm[NOSH_MAXCALC]
00519 );
00520
00526 void killFE(
00527 NOsh *nosh,
00528 Vpbe *pbe[NOSH_MAXCALC],
00529 Vfetk *fetk[NOSH_MAXCALC],
00530 Gem *gem[NOSH_MAXMOL]
00531 );
00532
00542 int preRefineFE(int i, NOsh *nosh, FEMparm *feparm,
00543 Vfetk *fetk[NOSH_MAXCALC]);
00544
00554 int partFE(int i, NOsh *nosh, FEMparm *feparm,
00555 Vfetk *fetk[NOSH_MAXCALC]);
00556
00567 int solveFE(int i, NOsh *nosh, PBEparm *pbeparm, FEMparm *feparm,
00568 Vfetk *fetk[NOSH_MAXCALC]);
00569
00582 int postRefineFE(int icalc, NOsh *nosh, FEMparm *feparm,
00583 Vfetk *fetk[NOSH_MAXCALC]);
00584
00594 int writedataFE(int rank, NOsh *nosh, PBEparm *pbeparm, Vfetk *fetk);
00595
00601 int energyAPOL(
00602 APOLparm *apolparm,
00603 double sasa,
00604 double sav,
00605 double atomsasa[],
00606 double atomwcaEnergy[],
00607 int numatoms
00608 );
00609
00615 int forceAPOL(
00616 Vacc *acc,
00617 Vmem *mem,
00618 APOLparm *apolparm,
00620 int *nforce,
00622 AtomForce **atomForce,
00624 Valist *alist,
00625 Vclist *clist
00626 );
00627
00633 int initAPOL(
00634 NOsh *nosh,
00635 Vmem *mem,
00636 Vparam *param,
00637 APOLparm *apolparm,
00638 int *nforce,
00639 AtomForce **atomForce,
00640 Valist *alist
00641 );
00642
00648 Vrc_Codes loadMeshes(
00649 NOsh *nosh,
00650 Gem *gm[NOSH_MAXMOL]
00652 );
00653
00658 void killMeshes(
00659 NOsh *nosh,
00660 Gem *alist[NOSH_MAXMOL]
00661 );
00662 #endif
00663
00664 #endif
00665