APBS  1.5
vpmg.h
Go to the documentation of this file.
1 
80 #ifndef _VPMG_H_
81 #define _VPMG_H_
82 
83 #include "apbscfg.h"
84 
85 #include "maloc/maloc.h"
86 
87 #include "generic/vhal.h"
88 #include "generic/vacc.h"
89 #include "generic/vcap.h"
90 #include "generic/vpbe.h"
91 #include "generic/mgparm.h"
92 #include "generic/pbeparm.h"
93 #include "generic/vmatrix.h"
94 #include "pmgc/mgdrvd.h"
95 #include "pmgc/newdrvd.h"
96 #include "pmgc/mgsubd.h"
97 #include "pmgc/mikpckd.h"
98 #include "pmgc/matvecd.h"
99 #include "mg/vpmgp.h"
100 #include "mg/vgrid.h"
101 
105 #define VPMGMAXPART 2000
106 
116 struct sVpmg {
117 
118  Vmem *vmem;
122 #ifdef BURY_FORTRAN
123  Vpde *pde;
124  Vmgdriver *mgdriver;
125 #endif
126 
127  double *epsx;
128  double *epsy;
129  double *epsz;
130  double *kappa;
131  double *pot;
132  double *charge;
134  int *iparm;
135  double *rparm;
136  int *iwork;
137  double *rwork;
138  double *a1cf;
140  double *a2cf;
142  double *a3cf;
144  double *ccf;
145  double *fcf;
146  double *tcf;
147  double *u;
148  double *xf;
149  double *yf;
150  double *zf;
151  double *gxcf;
152  double *gycf;
153  double *gzcf;
154  double *pvec;
155  double extDiEnergy;
157  double extQmEnergy;
159  double extQfEnergy;
161  double extNpEnergy;
164  double splineWin;
168  int filled;
182  int usePotMap;
189 };
190 
195 typedef struct sVpmg Vpmg;
196 
197 /* /////////////////////////////////////////////////////////////////////////
200 #if !defined(VINLINE_VPMG)
201 
208  VEXTERNC unsigned long int Vpmg_memChk(
209  Vpmg *thee /**< Object for memory check */
210  );
211 
212 #else /* if defined(VINLINE_VPMG) */
213 
214 # define Vpmg_memChk(thee) (Vmem_bytes((thee)->vmem))
215 
216 #endif /* if !defined(VINLINE_VPMG) */
217 
218 /* /////////////////////////////////////////////////////////////////////////
221 
226 VEXTERNC Vpmg* Vpmg_ctor(
227  Vpmgp *parms, /**< PMG parameter object */
228  Vpbe *pbe,
229  int focusFlag,
230  Vpmg *pmgOLD,
231  MGparm *mgparm,
232  PBEparm_calcEnergy energyFlag
233  );
234 
242 VEXTERNC int Vpmg_ctor2(
243  Vpmg *thee,
244  Vpmgp *parms,
245  Vpbe *pbe,
246  int focusFlag,
247  Vpmg *pmgOLD,
249  MGparm *mgparm,
251  PBEparm_calcEnergy energyFlag
254  );
255 
260 VEXTERNC void Vpmg_dtor(
261  Vpmg **thee
263  );
264 
269 VEXTERNC void Vpmg_dtor2(
270  Vpmg *thee
271  );
272 
281 VEXTERNC int Vpmg_fillco(
282  Vpmg *thee,
284  double splineWin,
287  int useDielXMap,
288  Vgrid *dielXMap,
289  int useDielYMap,
290  Vgrid *dielYMap,
291  int useDielZMap,
292  Vgrid *dielZMap,
293  int useKappaMap,
294  Vgrid *kappaMap,
295  int usePotMap,
296  Vgrid *potMap,
297  int useChargeMap,
298  Vgrid *chargeMap
299  );
300 
306 VEXTERNC int Vpmg_solve(
307  Vpmg *thee
308  );
309 
321 VEXTERNC int Vpmg_solveLaplace(
322  Vpmg *thee
323  );
324 
334 VEXTERNC double Vpmg_energy(
335  Vpmg *thee,
336  int extFlag
340  );
341 
359 VEXTERNC double Vpmg_qfEnergy(
360  Vpmg *thee,
361  int extFlag
365  );
366 
386 VEXTERNC double Vpmg_qfAtomEnergy(
387  Vpmg *thee,
388  Vatom *atom
389  );
390 
415 VEXTERNC double Vpmg_qmEnergy(
416  Vpmg *thee,
417  int extFlag
421  );
422 
423 
442 VEXTERNC double Vpmg_dielEnergy(
443  Vpmg *thee,
444  int extFlag
448  );
449 
450 
467 VEXTERNC double Vpmg_dielGradNorm(
468  Vpmg *thee
469  );
470 
482 VEXTERNC int Vpmg_force(
483  Vpmg *thee,
484  double *force,
486  int atomID,
487  Vsurf_Meth srfm,
488  Vchrg_Meth chgm
489  );
490 
502 VEXTERNC int Vpmg_qfForce(
503  Vpmg *thee,
504  double *force,
506  int atomID,
507  Vchrg_Meth chgm
508  );
509 
521 VEXTERNC int Vpmg_dbForce(
522  Vpmg *thee,
523  double *dbForce,
525  int atomID,
526  Vsurf_Meth srfm
527  );
528 
540 VEXTERNC int Vpmg_ibForce(
541  Vpmg *thee,
542  double *force,
544  int atomID,
545  Vsurf_Meth srfm
546  );
547 
553 VEXTERNC void Vpmg_setPart(
554  Vpmg *thee,
555  double lowerCorner[3],
556  double upperCorner[3],
557  int bflags[6]
561  );
562 
567 VEXTERNC void Vpmg_unsetPart(
568  Vpmg *thee
569  );
570 
576 VEXTERNC int Vpmg_fillArray(
577  Vpmg *thee,
578  double *vec,
580  Vdata_Type type,
581  double parm,
582  Vhal_PBEType pbetype,
583  PBEparm * pbeparm
584  );
585 
591 VPUBLIC void Vpmg_fieldSpline4(
592  Vpmg *thee,
593  int atomID,
594  double field[3]
595  );
596 
604 VEXTERNC double Vpmg_qfPermanentMultipoleEnergy(
605  Vpmg *thee,
606  int atomID
607  );
608 
614 VEXTERNC void Vpmg_qfPermanentMultipoleForce(
615  Vpmg *thee,
616  int atomID,
617  double force[3],
618  double torque[3]
619  );
620 
625 VEXTERNC void Vpmg_ibPermanentMultipoleForce(
626  Vpmg *thee,
627  int atomID,
628  double force[3]
629  );
630 
635 VEXTERNC void Vpmg_dbPermanentMultipoleForce(
636  Vpmg *thee,
637  int atomID,
638  double force[3]
639  );
640 
647 VEXTERNC void Vpmg_qfDirectPolForce(
648  Vpmg *thee,
649  Vgrid *perm,
650  Vgrid *induced,
651  int atomID,
652  double force[3],
653  double torque[3]
654  );
655 
664 VEXTERNC void Vpmg_qfNLDirectPolForce(
665  Vpmg *thee,
666  Vgrid *perm,
667  Vgrid *nlInduced,
668  int atomID,
669  double force[3],
670  double torque[3]
671  );
672 
680 VEXTERNC void Vpmg_ibDirectPolForce(
681  Vpmg *thee,
682  Vgrid *perm,
683  Vgrid *induced,
684  int atomID,
685  double force[3]
686  );
687 
696 VEXTERNC void Vpmg_ibNLDirectPolForce(
697  Vpmg *thee,
698  Vgrid *perm,
699  Vgrid *nlInduced,
700  int atomID,
701  double force[3]
702  );
703 
711 VEXTERNC void Vpmg_dbDirectPolForce(
712  Vpmg *thee,
713  Vgrid *perm,
714  Vgrid *induced,
715  int atomID,
716  double force[3]
717  );
718 
727 VEXTERNC void Vpmg_dbNLDirectPolForce(
728  Vpmg *thee,
729  Vgrid *perm,
730  Vgrid *nlInduced,
731  int atomID,
732  double force[3]
733  );
734 
741 VEXTERNC void Vpmg_qfMutualPolForce(
742  Vpmg *thee,
743  Vgrid *induced,
744  Vgrid *nlInduced,
745  int atomID,
746  double force[3]
747  );
748 
756 VEXTERNC void Vpmg_ibMutualPolForce(
757  Vpmg *thee,
758  Vgrid *induced,
759  Vgrid *nlInduced,
760  int atomID,
761  double force[3]
762  );
763 
771 VEXTERNC void Vpmg_dbMutualPolForce(
772  Vpmg *thee,
773  Vgrid *induced,
774  Vgrid *nlInduced,
775  int atomID,
776  double force[3]
777  );
778 
785 VEXTERNC void Vpmg_printColComp(
786  Vpmg *thee,
787  char path[72],
788  char title[72],
789  char mxtype[3],
797  int flag
801  );
802 
803 
804 
811 VPRIVATE void bcolcomp(
812  int *iparm,
813  double *rparm,
814  int *iwork,
815  double *rwork,
816  double *values,
817  int *rowind,
818  int *colptr,
819  int *flag
824  );
825 
826 
827 
834 VPRIVATE void bcolcomp2(
835  int *iparm,
836  double *rparm,
837  int *nx,
838  int *ny,
839  int *nz,
840  int *iz,
841  int *ipc,
842  double *rpc,
843  double *ac,
844  double *cc,
845  double *values,
846  int *rowind,
847  int *colptr,
848  int *flag
853  );
854 
855 
856 
863 VPRIVATE void bcolcomp3(
864  int *nx,
865  int *ny,
866  int *nz,
867  int *ipc,
868  double *rpc,
869  double *ac,
870  double *cc,
871  double *values,
872  int *rowind,
873  int *colptr,
874  int *flag
875  );
876 
877 
878 
885 VPRIVATE void bcolcomp4(
886  int *nx,
887  int *ny,
888  int *nz,
889  int *ipc,
890  double *rpc,
891  double *oC,
892  double *cc,
893  double *oE,
894  double *oN,
895  double *uC,
896  double *values,
897  int *rowind,
898  int *colptr,
899  int *flag
900  );
901 
902 
903 
910 VPRIVATE void pcolcomp(
911  int *nrow,
912  int *ncol,
913  int *nnzero,
914  double *values,
915  int *rowind,
916  int *colptr,
917  char *path,
918  char *title,
919  char *mxtype
920  );
921 
922 
923 
924 /* ///////////////////////////////////////////////////////////////////////////
925 // Internal routines
927 
933 VPRIVATE double bspline2(
934  double x /** Position */
935  );
936 
942 VPRIVATE double dbspline2(
943  double x
944  );
945 
951 VPRIVATE double VFCHI4(
952  int i,
953  double f
954  );
955 
961 VPRIVATE double bspline4(
962  double x
963  );
964 
970 VPRIVATE double dbspline4(
971  double x
972  );
973 
979 VPRIVATE double d2bspline4(
980  double x
981  );
982 
988 VPRIVATE double d3bspline4(
989  double x
990  );
991 
998 VPRIVATE double Vpmg_polarizEnergy(
999  Vpmg *thee,
1000  int extFlag
1002  );
1009 VPRIVATE double Vpmg_qfEnergyPoint(
1010  Vpmg *thee,
1011  int extFlag
1013  );
1014 
1020 VPRIVATE double Vpmg_qfEnergyVolume(
1021  Vpmg *thee,
1022  int extFlag
1024  );
1025 
1031 VPRIVATE void Vpmg_splineSelect(
1032  int srfm,
1034  Vacc *acc,
1035  double *gpos,
1036  double win,
1037  double infrad,
1038  Vatom *atom,
1039  double *force
1040  );
1041 
1047 VPRIVATE void focusFillBound(
1048  Vpmg *thee,
1049  Vpmg *pmg
1050  );
1051 
1058 VPRIVATE void bcfl1(
1059  double size,
1060  double *apos,
1061  double charge,
1062  double xkappa,
1063  double pre1,
1064  double *gxcf,
1065  double *gycf,
1066  double *gzcf,
1067  double *xf,
1068  double *yf,
1069  double *zf,
1070  int nx,
1071  int ny,
1072  int nz
1073  );
1074 
1080 VPRIVATE void bcfl2(
1081  double size,
1082  double *apos,
1083  double charge,
1084  double *dipole,
1085  double *quad,
1086  double xkappa,
1087  double eps_p,
1088  double eps_w,
1089  double T,
1090  double *gxcf,
1091  double *gycf,
1092  double *gzcf,
1093  double *xf,
1094  double *yf,
1095  double *zf,
1096  int nx,
1097  int ny,
1098  int nz
1099  );
1100 
1109 VPRIVATE void multipolebc(
1110  double r,
1111  double kappa,
1112  double eps_p,
1113  double eps_w,
1114  double rad,
1115  double tsr[3]
1116  );
1117 
1126 VPRIVATE double bcfl1sp(
1127  double size,
1128  double *apos,
1129  double charge,
1130  double xkappa,
1131  double pre1,
1132  double *pos
1133  );
1134 
1139 VPRIVATE void bcCalc(
1140  Vpmg *thee
1141  );
1142 
1147 VPRIVATE void fillcoCoef(
1148  Vpmg *thee
1149  );
1150 
1155 VPRIVATE void fillcoCoefMap(
1156  Vpmg *thee
1157  );
1158 
1164 VPRIVATE void fillcoCoefMol(
1165  Vpmg *thee
1166  );
1167 
1173 VPRIVATE void fillcoCoefMolIon(
1174  Vpmg *thee
1175  );
1176 
1182 VPRIVATE void fillcoCoefMolDiel(
1183  Vpmg *thee
1184  );
1185 
1191 VPRIVATE void fillcoCoefMolDielNoSmooth(
1192  Vpmg *thee
1193  );
1194 
1208 VPRIVATE void fillcoCoefMolDielSmooth(
1209  Vpmg *thee
1210  );
1211 
1217 VPRIVATE void fillcoCoefSpline(
1218  Vpmg *thee
1219  );
1220 
1226 VPRIVATE void fillcoCoefSpline3(
1227  Vpmg *thee
1228  );
1229 
1235 VPRIVATE void fillcoCoefSpline4(
1236  Vpmg *thee
1237  );
1238 
1244 VPRIVATE Vrc_Codes fillcoCharge(
1245  Vpmg *thee
1246  );
1247 
1253 VPRIVATE Vrc_Codes fillcoChargeMap(
1254  Vpmg *thee
1255  );
1256 
1261 VPRIVATE void fillcoChargeSpline1(
1262  Vpmg *thee
1263  );
1264 
1269 VPRIVATE void fillcoChargeSpline2(
1270  Vpmg *thee
1271  );
1272 
1277 VPRIVATE void fillcoPermanentMultipole(
1278  Vpmg *thee
1279  );
1280 
1285 VPRIVATE void fillcoInducedDipole(
1286  Vpmg *thee
1287  );
1288 
1294 VPRIVATE void fillcoNLInducedDipole(
1295  Vpmg *thee
1296  );
1297 
1304 VPRIVATE void extEnergy(
1305  Vpmg *thee,
1306  Vpmg *pmgOLD,
1307  PBEparm_calcEnergy extFlag,
1308  double partMin[3],
1309  double partMax[3],
1310  int bflags[6]
1311  );
1312 
1317 VPRIVATE void qfForceSpline1(
1318  Vpmg *thee,
1319  double *force,
1320  int atomID
1321  );
1322 
1327 VPRIVATE void qfForceSpline2(
1328  Vpmg *thee,
1329  double *force,
1330  int atomID
1331  );
1332 
1337 VPRIVATE void qfForceSpline4(
1338  Vpmg *thee,
1339  double *force,
1340  int atomID
1341  );
1342 
1343 
1351 VPRIVATE void zlapSolve(
1352  Vpmg *thee,
1353  double **solution,
1354  double **source,
1355  double **work1
1356  );
1357 
1364 VPRIVATE void markSphere(
1365  double rtot,
1366  double *tpos,
1367  int nx,
1368  int ny,
1369  int nz,
1370  double hx,
1371  double hy,
1372  double hzed,
1373  double xmin,
1374  double ymin,
1375  double zmin,
1376  double *array,
1377  double markVal
1378  );
1379 
1384 VPRIVATE double Vpmg_qmEnergySMPBE(Vpmg *thee, int extFlag);
1385 VPRIVATE double Vpmg_qmEnergyNONLIN(Vpmg *thee, int extFlag);
1386 
1387 
1388 
1389 // Additional macros and definitions. May not be needed
1390 
1391 // Added by Vincent Chu 9/13/06 for SMPB
1392 #define VCUB(x) ((x)*(x)*(x))
1393 #define VLOG(x) (log(x))
1394 
1395 #define IJK(i,j,k) (((k)*(nx)*(ny))+((j)*(nx))+(i))
1396 #define IJKx(j,k,i) (((i)*(ny)*(nz))+((k)*(ny))+(j))
1397 #define IJKy(i,k,j) (((j)*(nx)*(nz))+((k)*(nx))+(i))
1398 #define IJKz(i,j,k) (((k)*(nx)*(ny))+((j)*(nx))+(i))
1399 #define VFCHI(iint,iflt) (1.5+((double)(iint)-(iflt)))
1400 
1401 
1402 #endif /* ifndef _VPMG_H_ */
1403 
enum eVchrg_Src Vchrg_Src
Declaration of the Vchrg_Src type as the Vchrg_Meth enum.
Definition: vhal.h:262
VPRIVATE void fillcoCoefSpline(Vpmg *thee)
Fill operator coefficient arrays from a spline-based surface calculation.
Definition: vpmg.c:5022
double * epsz
Definition: vpmg.h:129
VEXTERNC double Vpmg_qmEnergy(Vpmg *thee, int extFlag)
Get the "mobile charge" contribution to the electrostatic energy.
Definition: vpmg.c:1386
double * xf
Definition: vpmg.h:148
VEXTERNC void Vpmg_unsetPart(Vpmg *thee)
Remove partition restrictions.
Definition: vpmg.c:872
VEXTERNC double Vpmg_qfEnergy(Vpmg *thee, int extFlag)
Get the "fixed charge" contribution to the electrostatic energy.
Definition: vpmg.c:1687
VPRIVATE void Vpmg_splineSelect(int srfm, Vacc *acc, double *gpos, double win, double infrad, Vatom *atom, double *force)
Selects a spline based surface method from either VSM_SPLINE, VSM_SPLINE5 or VSM_SPLINE7.
Definition: vpmg.c:1893
Vmem * vmem
Definition: vpmg.h:118
VPRIVATE void fillcoCoefMolDielSmooth(Vpmg *thee)
Fill differential operator coefficient arrays from a molecular surface calculation with smoothing.
Definition: vpmg.c:4891
VEXTERNC void Vpmg_qfDirectPolForce(Vpmg *thee, Vgrid *perm, Vgrid *induced, int atomID, double force[3], double torque[3])
q-Phi direct polarization force between permanent multipoles and induced dipoles, which are induced b...
double * kappa
Definition: vpmg.h:130
enum eVsurf_Meth Vsurf_Meth
Declaration of the Vsurf_Meth type as the Vsurf_Meth enum.
Definition: vhal.h:133
double * gxcf
Definition: vpmg.h:151
VPRIVATE void bcolcomp2(int *iparm, double *rparm, int *nx, int *ny, int *nz, int *iz, int *ipc, double *rpc, double *ac, double *cc, double *values, int *rowind, int *colptr, int *flag)
Build a column-compressed matrix in Harwell-Boeing format.
Definition: vpmg.c:10795
double * epsx
Definition: vpmg.h:127
int useDielZMap
Definition: vpmg.h:176
VPRIVATE void fillcoChargeSpline1(Vpmg *thee)
Fill source term charge array from linear interpolation.
Definition: vpmg.c:5391
Contains public data members for Vpbe class/module.
Definition: vpbe.h:84
Oracle for solvent- and ion-accessibility around a biomolecule.
Definition: vacc.h:108
VPRIVATE void fillcoCoefMolIon(Vpmg *thee)
Fill ion (nonlinear) operator coefficient array from a molecular surface calculation.
Definition: vpmg.c:4628
VEXTERNC void Vpmg_ibMutualPolForce(Vpmg *thee, Vgrid *induced, Vgrid *nlInduced, int atomID, double force[3])
Ionic boundary mutual polarization force for induced dipoles based on 5th order B-Splines....
VPRIVATE void fillcoCoefSpline3(Vpmg *thee)
Fill operator coefficient arrays from a 5th order polynomial based surface calculation.
Definition: vpmg.c:10430
double extQmEnergy
Definition: vpmg.h:157
Contains declarations for class Vacc.
VPRIVATE void markSphere(double rtot, double *tpos, int nx, int ny, int nz, double hx, double hy, double hzed, double xmin, double ymin, double zmin, double *array, double markVal)
Mark the grid points inside a sphere with a particular value. This marks by resetting the the grid po...
Definition: vpmg.c:6849
VPRIVATE void fillcoCoefMolDielNoSmooth(Vpmg *thee)
Fill differential operator coefficient arrays from a molecular surface calculation without smoothing.
Definition: vpmg.c:4737
VPRIVATE void qfForceSpline1(Vpmg *thee, double *force, int atomID)
Charge-field force due to a linear spline charge function.
Definition: vpmg.c:6311
Electrostatic potential oracle for Cartesian mesh data.
Definition: vgrid.h:81
VPRIVATE double dbspline4(double x)
Evaluate a 5th Order B-Spline derivative (4th order polynomial)
Definition: vpmg.c:7170
VPRIVATE void fillcoCoefMolDiel(Vpmg *thee)
Fill differential operator coefficient arrays from a molecular surface calculation.
Definition: vpmg.c:4726
double splineWin
Definition: vpmg.h:164
int useChargeMap
Definition: vpmg.h:186
VEXTERNC void Vpmg_dbMutualPolForce(Vpmg *thee, Vgrid *induced, Vgrid *nlInduced, int atomID, double force[3])
Dielectric boundary mutual polarization force for induced dipoles based on 5th order B-Splines....
double extNpEnergy
Definition: vpmg.h:161
Contains public data members for Vpmg class/module.
Definition: vpmg.h:116
double * u
Definition: vpmg.h:147
VEXTERNC void Vpmg_setPart(Vpmg *thee, double lowerCorner[3], double upperCorner[3], int bflags[6])
Set partition information which restricts the calculation of observables to a (rectangular) subset of...
Definition: vpmg.c:627
Vpmgp * pmgp
Definition: vpmg.h:119
double * pot
Definition: vpmg.h:131
VPRIVATE void bcolcomp(int *iparm, double *rparm, int *iwork, double *rwork, double *values, int *rowind, int *colptr, int *flag)
Build a column-compressed matrix in Harwell-Boeing format.
Definition: vpmg.c:10741
VPRIVATE Vrc_Codes fillcoChargeMap(Vpmg *thee)
Fill source term charge array from a pre-calculated map.
Definition: vpmg.c:5343
VPRIVATE double d3bspline4(double x)
Evaluate the 3rd derivative of a 5th Order B-Spline.
Definition: vpmg.c:7229
VPRIVATE void multipolebc(double r, double kappa, double eps_p, double eps_w, double rad, double tsr[3])
This routine serves bcfl2. It returns (in tsr) the contraction independent portion of the Debye-Hucke...
Definition: vpmg.c:3487
Contains declarations for class Vpbe.
VEXTERNC int Vpmg_dbForce(Vpmg *thee, double *dbForce, int atomID, Vsurf_Meth srfm)
Calculate the dielectric boundary forces on the specified atom in units of k_B T/AA.
Definition: vpmg.c:6010
Contains declarations for class Vcap.
double * a1cf
Definition: vpmg.h:138
Contains declarations for class Vpmgp.
VPRIVATE void bcCalc(Vpmg *thee)
Fill boundary condition arrays.
Definition: vpmg.c:4382
Contains declarations for class MGparm.
Vgrid * dielYMap
Definition: vpmg.h:175
VEXTERNC void Vpmg_ibPermanentMultipoleForce(Vpmg *thee, int atomID, double force[3])
Compute the ionic boundary force for permanent multipoles.
VPRIVATE void fillcoChargeSpline2(Vpmg *thee)
Fill source term charge array from cubic spline interpolation.
Definition: vpmg.c:5528
VEXTERNC double Vpmg_dielGradNorm(Vpmg *thee)
Get the integral of the gradient of the dielectric function.
Definition: vpmg.c:1342
VEXTERNC void Vpmg_ibNLDirectPolForce(Vpmg *thee, Vgrid *perm, Vgrid *nlInduced, int atomID, double force[3])
Ionic boundary direct polarization force between permanent multipoles and non-local induced dipoles b...
double extDiEnergy
Definition: vpmg.h:155
Vgrid * dielZMap
Definition: vpmg.h:178
VEXTERNC double Vpmg_qfAtomEnergy(Vpmg *thee, Vatom *atom)
Get the per-atom "fixed charge" contribution to the electrostatic energy.
Definition: vpmg.c:1791
VEXTERNC void Vpmg_dtor2(Vpmg *thee)
FORTRAN stub object destructor.
Definition: vpmg.c:571
Potential oracle for Cartesian mesh data.
VEXTERNC void Vpmg_dtor(Vpmg **thee)
Object destructor.
Definition: vpmg.c:561
VPRIVATE double dbspline2(double x)
Evaluate a cubic B-spline derivative.
Definition: vpmg.c:5512
enum eVhal_PBEType Vhal_PBEType
Declaration of the Vhal_PBEType type as the Vhal_PBEType enum.
Definition: vhal.h:151
VEXTERNC int Vpmg_force(Vpmg *thee, double *force, int atomID, Vsurf_Meth srfm, Vchrg_Meth chgm)
Calculate the total force on the specified atom in units of k_B T/AA.
Definition: vpmg.c:5822
VPRIVATE double d2bspline4(double x)
Evaluate the 2nd derivative of a 5th Order B-Spline.
Definition: vpmg.c:7202
VPRIVATE double Vpmg_qfEnergyVolume(Vpmg *thee, int extFlag)
Calculates charge-potential energy as integral over a volume.
Definition: vpmg.c:1861
VPRIVATE double Vpmg_qfEnergyPoint(Vpmg *thee, int extFlag)
Calculates charge-potential energy using summation over delta function positions (i....
Definition: vpmg.c:1704
double * rparm
Definition: vpmg.h:135
VPRIVATE void qfForceSpline4(Vpmg *thee, double *force, int atomID)
Charge-field force due to a quintic spline charge function.
Definition: vpmg.c:6561
Vgrid * chargeMap
Definition: vpmg.h:188
double * yf
Definition: vpmg.h:149
VEXTERNC void Vpmg_qfPermanentMultipoleForce(Vpmg *thee, int atomID, double force[3], double torque[3])
Computes the q-Phi Force for permanent multipoles based on 5th order B-splines.
int * iwork
Definition: vpmg.h:136
VEXTERNC void Vpmg_dbPermanentMultipoleForce(Vpmg *thee, int atomID, double force[3])
Compute the dielectric boundary force for permanent multipoles.
VEXTERNC int Vpmg_fillArray(Vpmg *thee, double *vec, Vdata_Type type, double parm, Vhal_PBEType pbetype, PBEparm *pbeparm)
Fill the specified array with accessibility values.
Definition: vpmg.c:892
VPRIVATE void fillcoCoef(Vpmg *thee)
Top-level driver to fill all operator coefficient arrays.
Definition: vpmg.c:5247
double * rwork
Definition: vpmg.h:137
double * gzcf
Definition: vpmg.h:153
Vgrid * dielXMap
Definition: vpmg.h:172
double * fcf
Definition: vpmg.h:145
VPRIVATE void bcolcomp4(int *nx, int *ny, int *nz, int *ipc, double *rpc, double *oC, double *cc, double *oE, double *oN, double *uC, double *values, int *rowind, int *colptr, int *flag)
Build a column-compressed matrix in Harwell-Boeing format.
Definition: vpmg.c:10858
double * gycf
Definition: vpmg.h:152
double * charge
Definition: vpmg.h:132
double * ccf
Definition: vpmg.h:144
VEXTERNC int Vpmg_solveLaplace(Vpmg *thee)
Solve Poisson's equation with a homogeneous Laplacian operator using the solvent dielectric constant....
Definition: vpmg.c:7042
int * iparm
Definition: vpmg.h:134
VEXTERNC double Vpmg_dielEnergy(Vpmg *thee, int extFlag)
Get the "polarization" contribution to the electrostatic energy.
Definition: vpmg.c:1279
int useKappaMap
Definition: vpmg.h:179
enum ePBEparm_calcEnergy PBEparm_calcEnergy
Define ePBEparm_calcEnergy enumeration as PBEparm_calcEnergy.
Definition: pbeparm.h:91
Contains public data members for Vpmgp class/module.
Definition: vpmgp.h:80
VEXTERNC void Vpmg_dbDirectPolForce(Vpmg *thee, Vgrid *perm, Vgrid *induced, int atomID, double force[3])
Dielectric boundary direct polarization force between permanent multipoles and induced dipoles,...
double * zf
Definition: vpmg.h:150
VEXTERNC void Vpmg_ibDirectPolForce(Vpmg *thee, Vgrid *perm, Vgrid *induced, int atomID, double force[3])
Ionic boundary direct polarization force between permanent multipoles and induced dipoles,...
int filled
Definition: vpmg.h:168
Contains generic macro definitions for APBS.
VEXTERNC void Vpmg_qfMutualPolForce(Vpmg *thee, Vgrid *induced, Vgrid *nlInduced, int atomID, double force[3])
Mutual polarization force for induced dipoles based on 5th order B-Splines. This force arises due to ...
double extQfEnergy
Definition: vpmg.h:159
Contains declarations for class PBEparm.
VPRIVATE void qfForceSpline2(Vpmg *thee, double *force, int atomID)
Charge-field force due to a cubic spline charge function.
Definition: vpmg.c:6448
VPRIVATE void bcolcomp3(int *nx, int *ny, int *nz, int *ipc, double *rpc, double *ac, double *cc, double *values, int *rowind, int *colptr, int *flag)
Build a column-compressed matrix in Harwell-Boeing format.
Definition: vpmg.c:10831
Parameter structure for PBE variables from input files.
Definition: pbeparm.h:117
VPRIVATE void fillcoCoefSpline4(Vpmg *thee)
Fill operator coefficient arrays from a 7th order polynomial based surface calculation.
Definition: vpmg.c:9939
VEXTERNC int Vpmg_fillco(Vpmg *thee, Vsurf_Meth surfMeth, double splineWin, Vchrg_Meth chargeMeth, int useDielXMap, Vgrid *dielXMap, int useDielYMap, Vgrid *dielYMap, int useDielZMap, Vgrid *dielZMap, int useKappaMap, Vgrid *kappaMap, int usePotMap, Vgrid *potMap, int useChargeMap, Vgrid *chargeMap)
Fill the coefficient arrays prior to solving the equation.
Definition: vpmg.c:5655
VPRIVATE void fillcoNLInducedDipole(Vpmg *thee)
Fill source term charge array for non-local induced dipoles.
VPRIVATE Vrc_Codes fillcoCharge(Vpmg *thee)
Top-level driver to fill source term charge array.
Definition: vpmg.c:5287
Parameter structure for MG-specific variables from input files.
Definition: mgparm.h:114
VPRIVATE void bcfl1(double size, double *apos, double charge, double xkappa, double pre1, double *gxcf, double *gycf, double *gzcf, double *xf, double *yf, double *zf, int nx, int ny, int nz)
Increment all boundary points by pre1*(charge/d)*(exp(-xkappa*(d-size))/(1+xkappa*size) to add the ef...
Definition: vpmg.c:2564
int useDielXMap
Definition: vpmg.h:170
Vsurf_Meth surfMeth
Definition: vpmg.h:163
VEXTERNC double Vpmg_qfPermanentMultipoleEnergy(Vpmg *thee, int atomID)
Computes the permanent multipole electrostatic hydration energy (the polarization component of the hy...
enum eVdata_Type Vdata_Type
Declaration of the Vdata_Type type as the Vdata_Type enum.
Definition: vhal.h:302
Contains public data members for Vatom class/module.
Definition: vatom.h:84
VPRIVATE void zlapSolve(Vpmg *thee, double **solution, double **source, double **work1)
Calculate the solution to Poisson's equation with a simple Laplacian operator and zero-valued Dirichl...
Definition: vpmg.c:6898
Vgrid * potMap
Definition: vpmg.h:184
double * epsy
Definition: vpmg.h:128
VEXTERNC int Vpmg_ibForce(Vpmg *thee, double *force, int atomID, Vsurf_Meth srfm)
Calculate the osmotic pressure on the specified atom in units of k_B T/AA.
Definition: vpmg.c:5845
double * a3cf
Definition: vpmg.h:142
VPRIVATE double bspline4(double x)
Evaluate a 5th Order B-Spline (4th order polynomial)
Definition: vpmg.c:7136
double * tcf
Definition: vpmg.h:146
Vpbe * pbe
Definition: vpmg.h:120
VPRIVATE void fillcoCoefMap(Vpmg *thee)
Fill operator coefficient arrays from pre-calculated maps.
Definition: vpmg.c:4489
VEXTERNC int Vpmg_qfForce(Vpmg *thee, double *force, int atomID, Vchrg_Meth chgm)
Calculate the "charge-field" force on the specified atom in units of k_B T/AA.
Definition: vpmg.c:6267
VPRIVATE void pcolcomp(int *nrow, int *ncol, int *nnzero, double *values, int *rowind, int *colptr, char *path, char *title, char *mxtype)
Print a column-compressed matrix in Harwell-Boeing format.
Definition: vpmg.c:11023
VPRIVATE void fillcoCoefMol(Vpmg *thee)
Fill operator coefficient arrays from a molecular surface calculation.
Definition: vpmg.c:4612
VPRIVATE double Vpmg_qmEnergySMPBE(Vpmg *thee, int extFlag)
Vpmg_qmEnergy for SMPBE.
Definition: vpmg.c:1490
VEXTERNC int Vpmg_ctor2(Vpmg *thee, Vpmgp *parms, Vpbe *pbe, int focusFlag, Vpmg *pmgOLD, MGparm *mgparm, PBEparm_calcEnergy energyFlag)
FORTRAN stub constructor for the Vpmg class (uses previously-allocated memory)
Definition: vpmg.c:153
VPUBLIC void Vpmg_fieldSpline4(Vpmg *thee, int atomID, double field[3])
Computes the field at an atomic center using a stencil based on the first derivative of a 5th order B...
VEXTERNC void Vpmg_dbNLDirectPolForce(Vpmg *thee, Vgrid *perm, Vgrid *nlInduced, int atomID, double force[3])
Dielectric bounday direct polarization force between permanent multipoles and non-local induced dipol...
VEXTERNC void Vpmg_printColComp(Vpmg *thee, char path[72], char title[72], char mxtype[3], int flag)
Print out a column-compressed sparse matrix in Harwell-Boeing format.
Definition: vpmg.c:87
VPRIVATE void fillcoPermanentMultipole(Vpmg *thee)
Fill source term charge array for the use of permanent multipoles.
Definition: vpmg.c:7240
VEXTERNC int Vpmg_solve(Vpmg *thee)
Solve the PBE using PMG.
Definition: vpmg.c:401
VEXTERNC double Vpmg_energy(Vpmg *thee, int extFlag)
Get the total electrostatic energy.
Definition: vpmg.c:1248
Vgrid * kappaMap
Definition: vpmg.h:181
Vchrg_Src chargeSrc
Definition: vpmg.h:166
VEXTERNC void Vpmg_qfNLDirectPolForce(Vpmg *thee, Vgrid *perm, Vgrid *nlInduced, int atomID, double force[3], double torque[3])
q-Phi direct polarization force between permanent multipoles and non-local induced dipoles based on 5...
enum eVchrg_Meth Vchrg_Meth
Declaration of the Vchrg_Meth type as the Vchrg_Meth enum.
Definition: vhal.h:244
Vchrg_Meth chargeMeth
Definition: vpmg.h:165
Contains inclusions for matrix data wrappers.
int useDielYMap
Definition: vpmg.h:173
VPRIVATE void fillcoInducedDipole(Vpmg *thee)
Fill source term charge array for use of induced dipoles.
double * a2cf
Definition: vpmg.h:140
VPRIVATE double Vpmg_polarizEnergy(Vpmg *thee, int extFlag)
Determines energy from polarizeable charge and interaction with fixed charges according to Rocchia et...
Definition: vpmg.c:1148
VPRIVATE double VFCHI4(int i, double f)
Return 2.5 plus difference of i - f.
Definition: vpmg.c:7132
double * pvec
Definition: vpmg.h:154
int usePotMap
Definition: vpmg.h:182