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