62VPRIVATE
int NOsh_parseREAD(
66VPRIVATE
int NOsh_parsePRINT(
70VPRIVATE
int NOsh_parseELEC(
75VPRIVATE
int NOsh_parseAPOLAR(
80VEXTERNC
int NOsh_parseFEM(
86VEXTERNC
int NOsh_parseMG(
92VEXTERNC
int NOsh_parseBEM(
98VEXTERNC
int NOsh_parseGEOFLOW(
104VEXTERNC
int NOsh_parsePBAM(
110VEXTERNC
int NOsh_parsePBSAM(
116VEXTERNC
int NOsh_parseAPOL(
122VPRIVATE
int NOsh_setupCalcMG(
128VPRIVATE
int NOsh_setupCalcMGAUTO(
133VPRIVATE
int NOsh_setupCalcMGMANUAL(
138VPRIVATE
int NOsh_setupCalcMGPARA(
143VPRIVATE
int NOsh_setupCalcFEM(
148VPRIVATE
int NOsh_setupCalcFEMANUAL(
153VPRIVATE
int NOsh_setupCalcBEM(
158VPRIVATE
int NOsh_setupCalcGEOFLOW(
163VPRIVATE
int NOsh_setupCalcPBAM(
168VPRIVATE
int NOsh_setupCalcPBSAM(
173VPRIVATE
int NOsh_setupCalcBEMMANUAL(
178VPRIVATE
int NOsh_setupCalcGEOFLOWMANUAL(
183VPRIVATE
int NOsh_setupCalcPBAMAUTO(
188VPRIVATE
int NOsh_setupCalcPBSAMAUTO(
193VPRIVATE
int NOsh_setupCalcAPOL(
198#if !defined(VINLINE_NOSH)
201 VASSERT(thee != VNULL);
202 VASSERT(imol < thee->nmol);
206 VASSERT(thee != VNULL);
207 VASSERT(imol < thee->nmol);
211 VASSERT(thee != VNULL);
212 VASSERT(imol < thee->nmol);
216 VASSERT(thee != VNULL);
217 VASSERT(imol < thee->nmol);
221 VASSERT(thee != VNULL);
222 VASSERT(imol < thee->nmol);
226 VASSERT(thee != VNULL);
227 VASSERT(imol < thee->nmol);
231 VASSERT(thee != VNULL);
232 VASSERT(imol < thee->nmol);
236 VASSERT(thee != VNULL);
237 VASSERT(icalc < thee->ncalc);
238 return thee->
calc[icalc];
241 VASSERT(thee != VNULL);
242 VASSERT(i < thee->ndiel);
246 VASSERT(thee != VNULL);
247 VASSERT(i < thee->nkappa);
251 VASSERT(thee != VNULL);
252 VASSERT(i < thee->npot);
256 VASSERT(thee != VNULL);
257 VASSERT(i < thee->ncharge);
265 VASSERT(thee != VNULL);
266 VASSERT(iprint < thee->nprint);
271 VASSERT(thee != VNULL);
272 VASSERT(iprint < thee->nprint);
277 VASSERT(thee != VNULL);
278 VASSERT(icalc < thee->ncalc);
283 VASSERT(thee != VNULL);
284 VASSERT(icalc < thee->ncalc);
289 VASSERT(thee != VNULL);
290 VASSERT(ielec < thee->nelec + 1);
295 VASSERT(thee != VNULL);
296 VASSERT(iprint < thee->nprint);
297 VASSERT(iarg < thee->printnarg[iprint]);
298 return thee->
printop[iprint][iarg];
302 VASSERT(thee != VNULL);
303 VASSERT(iprint < thee->nprint);
304 VASSERT(iarg < thee->printnarg[iprint]);
312 thee = (
NOsh*)Vmem_malloc(VNULL, 1,
sizeof(
NOsh) );
313 VASSERT( thee != VNULL);
323 if (thee == VNULL)
return 0;
340 thee->
calc[i] = VNULL;
341 thee->
elec[i] = VNULL;
342 thee->
apol[i] = VNULL;
345 thee->
alist[i] = VNULL;
355 if ((*thee) != VNULL) {
357 Vmem_free(VNULL, 1,
sizeof(
NOsh), (
void **)thee);
414 Vnm_print(2,
"NOsh_calc_ctor: unknown calculation type (%d)!\n",
429 if (calc == VNULL)
return;
456 Vnm_print(2,
"NOsh_calc_ctor: unknown calculation type (%d)!\n",
462 Vmem_free(VNULL, 1,
sizeof(
NOsh_calc), (
void **)thee);
472 VASSERT(thee != VNULL);
473 VASSERT(source != VNULL);
475 if (source->
mgparm != VNULL)
506 sock = Vio_ctor(
"FILE",
"ASC", VNULL, filename,
"r");
520 char tok[VMAX_BUFSIZE];
523 Vnm_print(2,
"NOsh_parseInput: Got NULL thee!\n");
528 Vnm_print(2,
"NOsh_parseInput: Got pointer to NULL socket!\n");
529 Vnm_print(2,
"NOsh_parseInput: The specified input file was not found!\n");
534 Vnm_print(2,
"NOsh_parseInput: Already parsed an input file!\n");
538 if (Vio_accept(sock, 0) < 0) {
539 Vnm_print(2,
"NOsh_parseInput: Problem reading from socket!\n");
548 Vnm_print(0,
"NOsh_parseInput: Starting file parsing...\n");
549 while (Vio_scanf(sock,
"%s", tok) == 1) {
566 Vnm_print(0,
"NOsh: Parsing READ section\n");
567 if (!NOsh_parseREAD(thee, sock))
return 0;
568 Vnm_print(0,
"NOsh: Done parsing READ section \
569(nmol=%d, ndiel=%d, nkappa=%d, ncharge=%d, npot=%d)\n", thee->
nmol, thee->
ndiel,
572 Vnm_print(0,
"NOsh: Parsing PRINT section\n");
573 if (!NOsh_parsePRINT(thee, sock))
return 0;
574 Vnm_print(0,
"NOsh: Done parsing PRINT section\n");
576 Vnm_print(0,
"NOsh: Parsing ELEC section\n");
577 if (!NOsh_parseELEC(thee, sock))
return 0;
578 Vnm_print(0,
"NOsh: Done parsing ELEC section (nelec = %d)\n",
581 Vnm_print(0,
"NOsh: Parsing APOLAR section\n");
582 if (!NOsh_parseAPOLAR(thee, sock))
return 0;
583 Vnm_print(0,
"NOsh: Done parsing APOLAR section (nelec = %d)\n",
586 Vnm_print(0,
"NOsh: Done parsing file (got QUIT)\n");
589 Vnm_print(2,
"NOsh_parseInput: Ignoring undefined keyword %s!\n", tok);
598VPRIVATE
int NOsh_parseREAD_MOL(
NOsh *thee, Vio *sock) {
600 char tok[VMAX_BUFSIZE], str[VMAX_BUFSIZE]=
"", strnew[VMAX_BUFSIZE]=
"";
603 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
606 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
609 while (tok[strlen(tok)-1] !=
'"') {
612 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
615 strncpy(strnew, str+1, strlen(str)-2);
618 Vnm_print(0,
"NOsh: Storing molecule %d path %s\n",
621 strncpy(thee->
molpath[thee->
nmol], tok, VMAX_ARGLEN);
625 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
628 while (tok[strlen(tok)-1] !=
'"') {
631 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
634 strncpy(strnew, str+1, strlen(str)-2);
637 Vnm_print(0,
"NOsh: Storing molecule %d path %s\n",
640 strncpy(thee->
molpath[thee->
nmol], tok, VMAX_ARGLEN);
644 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
647 while (tok[strlen(tok)-1] !=
'"') {
650 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
653 strncpy(strnew, str+1, strlen(str)-2);
656 Vnm_print(0,
"NOsh: Storing molecule %d path %s\n",
659 strncpy(thee->
molpath[thee->
nmol], tok, VMAX_ARGLEN);
662 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined mol format \
670 Vnm_print(2,
"NOsh_parseREAD_MOL: Ran out of tokens while parsing READ section!\n");
675VPRIVATE
int NOsh_parseREAD_PARM(
NOsh *thee, Vio *sock) {
677 char tok[VMAX_BUFSIZE], str[VMAX_BUFSIZE]=
"", strnew[VMAX_BUFSIZE]=
"";
680 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
683 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
686 while (tok[strlen(tok)-1] !=
'"') {
689 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
692 strncpy(strnew, str+1, strlen(str)-2);
696 Vnm_print(2,
"NOsh: Hey! You already specified a parameterfile (%s)!\n", thee->
parmpath);
697 Vnm_print(2,
"NOsh: I'm going to ignore this one (%s)!\n", tok);
701 strncpy(thee->
parmpath, tok, VMAX_ARGLEN);
705 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
708 while (tok[strlen(tok)-1] !=
'"') {
711 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
714 strncpy(strnew, str+1, strlen(str)-2);
718 Vnm_print(2,
"NOsh: Hey! You already specified a parameterfile (%s)!\n", thee->
parmpath);
719 Vnm_print(2,
"NOsh: I'm going to ignore this one (%s)!\n", tok);
723 strncpy(thee->
parmpath, tok, VMAX_ARGLEN);
727 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined parm format \
734 Vnm_print(2,
"NOsh_parseREAD_PARM: Ran out of tokens while parsing READ section!\n");
739VPRIVATE
int NOsh_parseREAD_DIEL(
NOsh *thee, Vio *sock) {
741 char tok[VMAX_BUFSIZE], str[VMAX_BUFSIZE]=
"", strnew[VMAX_BUFSIZE]=
"";
744 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
753 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined format \
758 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
761 while (tok[strlen(tok)-1] !=
'"') {
764 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
767 strncpy(strnew, str+1, strlen(str)-2);
770 Vnm_print(0,
"NOsh: Storing x-shifted dielectric map %d path \
771 %s\n", thee->
ndiel, tok);
773 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
774 Vnm_print(0,
"NOsh: Storing y-shifted dielectric map %d path \
775 %s\n", thee->
ndiel, tok);
777 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
778 Vnm_print(0,
"NOsh: Storing z-shifted dielectric map %d path \
779 %s\n", thee->
ndiel, tok);
787 Vnm_print(2,
"NOsh_parseREAD_DIEL: Ran out of tokens while parsing READ \
793VPRIVATE
int NOsh_parseREAD_KAPPA(
NOsh *thee, Vio *sock) {
795 char tok[VMAX_BUFSIZE], str[VMAX_BUFSIZE]=
"", strnew[VMAX_BUFSIZE]=
"";
798 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
807 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined format \
812 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
815 while (tok[strlen(tok)-1] !=
'"') {
818 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
821 strncpy(strnew, str+1, strlen(str)-2);
824 Vnm_print(0,
"NOsh: Storing kappa map %d path %s\n",
833 Vnm_print(2,
"NOsh_parseREAD: Ran out of tokens while parsing READ \
839VPRIVATE
int NOsh_parseREAD_POTENTIAL(
NOsh *thee, Vio *sock) {
841 char tok[VMAX_BUFSIZE], str[VMAX_BUFSIZE]=
"", strnew[VMAX_BUFSIZE]=
"";
844 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
852 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined format \
857 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
860 while (tok[strlen(tok)-1] !=
'"') {
863 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
866 strncpy(strnew, str+1, strlen(str)-2);
869 Vnm_print(0,
"NOsh: Storing potential map %d path %s\n",
872 strncpy(thee->
potpath[thee->
npot], tok, VMAX_ARGLEN);
878 Vnm_print(2,
"NOsh_parseREAD: Ran out of tokens while parsing READ \
884VPRIVATE
int NOsh_parseREAD_CHARGE(
NOsh *thee, Vio *sock) {
886 char tok[VMAX_BUFSIZE], str[VMAX_BUFSIZE]=
"", strnew[VMAX_BUFSIZE]=
"";
889 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
898 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined format \
903 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
906 while (tok[strlen(tok)-1] !=
'"') {
909 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
912 strncpy(strnew, str+1, strlen(str)-2);
915 Vnm_print(0,
"NOsh: Storing charge map %d path %s\n",
924 Vnm_print(2,
"NOsh_parseREAD: Ran out of tokens while parsing READ \
930VPRIVATE
int NOsh_parseREAD_MESH(
NOsh *thee, Vio *sock) {
932 char tok[VMAX_BUFSIZE], str[VMAX_BUFSIZE]=
"", strnew[VMAX_BUFSIZE]=
"";
935 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
938 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
941 while (tok[strlen(tok)-1] !=
'"') {
944 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
947 strncpy(strnew, str+1, strlen(str)-2);
950 Vnm_print(0,
"NOsh: Storing mesh %d path %s\n",
956 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined mesh format \
963 Vnm_print(2,
"NOsh_parseREAD: Ran out of tokens while parsing READ \
970VPRIVATE
int NOsh_parseREAD(
NOsh *thee, Vio *sock) {
972 char tok[VMAX_BUFSIZE];
975 Vnm_print(2,
"NOsh_parseREAD: Got NULL thee!\n");
980 Vnm_print(2,
"NOsh_parseREAD: Got pointer to NULL socket!\n");
985 Vnm_print(2,
"NOsh_parseREAD: Already parsed an input file!\n");
990 while (Vio_scanf(sock,
"%s", tok) == 1) {
992 Vnm_print(0,
"NOsh: Done parsing READ section\n");
995 NOsh_parseREAD_MOL(thee, sock);
997 NOsh_parseREAD_PARM(thee,sock);
999 NOsh_parseREAD_DIEL(thee,sock);
1001 NOsh_parseREAD_KAPPA(thee,sock);
1003 NOsh_parseREAD_POTENTIAL(thee,sock);
1005 NOsh_parseREAD_CHARGE(thee,sock);
1007 NOsh_parseREAD_MESH(thee,sock);
1009 Vnm_print(2,
"NOsh_parseREAD: Ignoring undefined keyword %s!\n",
1015 Vnm_print(2,
"NOsh_parseREAD: Ran out of tokens while parsing READ \
1021VPRIVATE
int NOsh_parsePRINT(
NOsh *thee, Vio *sock) {
1023 char tok[VMAX_BUFSIZE];
1024 char name[VMAX_BUFSIZE];
1025 int ti, idx, expect, ielec, iapol;
1027 if (thee == VNULL) {
1028 Vnm_print(2,
"NOsh_parsePRINT: Got NULL thee!\n");
1032 if (sock == VNULL) {
1033 Vnm_print(2,
"NOsh_parsePRINT: Got pointer to NULL socket!\n");
1038 Vnm_print(2,
"NOsh_parsePRINT: Already parsed an input file!\n");
1044 Vnm_print(2,
"NOsh_parsePRINT: Exceeded max number (%d) of PRINT \
1052 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
1072 Vnm_print(2,
"NOsh_parsePRINT: Undefined keyword %s while parsing \
1073PRINT section!\n", tok);
1080 while (Vio_scanf(sock,
"%s", tok) == 1) {
1087 Vnm_print(0,
"NOsh: Done parsing PRINT section\n");
1090 Vnm_print(2,
"NOsh_parsePRINT: Got premature END to PRINT!\n");
1096 if ((sscanf(tok,
"%d", &ti) == 1) &&
1102 Vnm_print(2,
"NOsh_parsePRINT: Syntax error in PRINT \
1103section while reading %s!\n", tok);
1113 Vnm_print(2,
"NOsh_parsePRINT: Exceeded max number \
1114(%d) of arguments for PRINT section!\n",
1119 Vnm_print(2,
"NOsh_parsePRINT: Syntax error in PRINT \
1120section while reading %s!\n", tok);
1130 Vnm_print(2,
"NOsh_parseREAD: Exceeded max number \
1131(%d) of arguments for PRINT section!\n",
1136 Vnm_print(2,
"NOsh_parsePRINT: Syntax error in PRINT \
1137section while reading %s!\n", tok);
1141 }
else if (sscanf(tok,
"%s", name) == 1) {
1143 for (ielec=0; ielec<thee->
nelec; ielec++) {
1150 for (iapol=0; iapol<thee->
napol; iapol++) {
1158 Vnm_print(2,
"No ELEC or APOL statement has been named %s!\n",
1163 Vnm_print(2,
"NOsh_parsePRINT: Syntax error in PRINT \
1164section while reading %s!\n", tok);
1169 Vnm_print(2,
"NOsh_parsePRINT: Undefined keyword %s while \
1170parsing PRINT section!\n", tok);
1181 Vnm_print(2,
"NOsh_parsePRINT: Ran out of tokens while parsing PRINT \
1187VPRIVATE
int NOsh_parseELEC(
NOsh *thee, Vio *sock) {
1191 char tok[VMAX_BUFSIZE];
1193 if (thee == VNULL) {
1194 Vnm_print(2,
"NOsh_parseELEC: Got NULL thee!\n");
1198 if (sock == VNULL) {
1199 Vnm_print(2,
"NOsh_parseELEC: Got pointer to NULL socket!\n");
1204 Vnm_print(2,
"NOsh_parseELEC: Already parsed an input file!\n");
1211 Vnm_print(2,
"NOsh: Too many electrostatics calculations in this \
1213 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
1219 if (Vio_scanf(sock,
"%s", tok) == 1) {
1221 Vio_scanf(sock,
"%s", tok);
1223 if (Vio_scanf(sock,
"%s", tok) != 1) {
1224 Vnm_print(2,
"NOsh_parseELEC: Ran out of tokens while reading \
1234 return NOsh_parseMG(thee, sock, calc);
1240 return NOsh_parseMG(thee, sock, calc);
1246 return NOsh_parseMG(thee, sock, calc);
1252 return NOsh_parseMG(thee, sock, calc);
1258 return NOsh_parseFEM(thee, sock, calc);
1264 return NOsh_parseBEM(thee, sock, calc);
1270 return NOsh_parseBEM(thee, sock, calc);
1276 return NOsh_parseBEM(thee, sock, calc);
1278 Vnm_print(2,
"Geoflow currently does not support geoflow-manual please use geoflow instead!\n");
1281 Vnm_print(2,
"Geoflow currently does not support geoflow-none please use geoflow instead!\n");
1288 return NOsh_parseGEOFLOW(thee, sock, calc);
1294 return NOsh_parsePBAM(thee, sock, calc);
1300 return NOsh_parsePBSAM(thee, sock, calc);
1302 Vnm_print(2,
"NOsh_parseELEC: The method (\"mg\",\"fem\", \"bem\", \"geoflow\" \"pbam\", \"pbsam\") or \
1303\"name\" must be the first keyword in the ELEC section\n");
1308 Vnm_print(2,
"NOsh_parseELEC: Ran out of tokens while reading ELEC section!\n");
1313VPRIVATE
int NOsh_parseAPOLAR(
NOsh *thee, Vio *sock) {
1317 char tok[VMAX_BUFSIZE];
1319 if (thee == VNULL) {
1320 Vnm_print(2,
"NOsh_parseAPOLAR: Got NULL thee!\n");
1324 if (sock == VNULL) {
1325 Vnm_print(2,
"NOsh_parseAPOLAR: Got pointer to NULL socket!\n");
1330 Vnm_print(2,
"NOsh_parseAPOLAR: Already parsed an input file!\n");
1337 Vnm_print(2,
"NOsh: Too many non-polar calculations in this \
1339 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
1345 if (Vio_scanf(sock,
"%s", tok) == 1) {
1347 Vio_scanf(sock,
"%s", tok);
1354 return NOsh_parseAPOL(thee, sock, calc);
1383 VASSERT(thee != VNULL);
1384 for (imol=0; imol<thee->
nmol; imol++) {
1385 thee->
alist[imol] = alist[imol];
1389 for (ielec=0; ielec<(thee->
nelec); ielec++) {
1391 elec = thee->
elec[ielec];
1396 Vnm_print(2,
"NOsh_setupElecCalc: Calculation of forces disabled because surface \
1406 VASSERT(mgparm != VNULL);
1408 VASSERT(mgparm->
centmol >= 0);
1411 VASSERT(mymol != VNULL);
1412 for (i=0; i<3; i++) {
1420 VASSERT(mymol != VNULL);
1421 for (i=0; i<3; i++) {
1429 VASSERT(mymol != VNULL);
1430 for (i=0; i<3; i++) {
1434 NOsh_setupCalcMG(thee, elec);
1437 NOsh_setupCalcFEM(thee, elec);
1440 NOsh_setupCalcPBAM(thee, elec);
1443 NOsh_setupCalcPBSAM(thee, elec);
1446 NOsh_setupCalcBEM(thee, elec);
1449 NOsh_setupCalcGEOFLOW(thee, elec);
1452 Vnm_print(2,
"NOsh_setupCalc: Invalid calculation type (%d)!\n",
1461 Vnm_print(0,
"NOsh_setupCalc: Mapping ELEC statement %d (%d) to \
1462calculation %d (%d)\n", ielec, ielec+1, thee->
elec2calc[ielec],
1477 VASSERT(thee != VNULL);
1478 for (imol=0; imol<thee->
nmol; imol++) {
1479 thee->
alist[imol] = alist[imol];
1482 for (iapol=0; iapol<(thee->
napol); iapol++) {
1484 calc = thee->
apol[iapol];
1489 NOsh_setupCalcAPOL(thee, calc);
1493 Vnm_print(2,
"NOsh_setupCalc: Invalid calculation type (%d)!\n", calc->
calctype);
1500 Vnm_print(0,
"NOsh_setupCalc: Mapping APOL statement %d (%d) to calculation %d (%d)\n", iapol, iapol+1, thee->
apol2calc[iapol], thee->
apol2calc[iapol]+1);
1510VPUBLIC
int NOsh_parseMG(
1516 char tok[VMAX_BUFSIZE];
1522 if (thee == VNULL) {
1523 Vnm_print(2,
"NOsh: Got NULL thee!\n");
1526 if (sock == VNULL) {
1527 Vnm_print(2,
"NOsh: Got pointer to NULL socket!\n");
1530 if (elec == VNULL) {
1531 Vnm_print(2,
"NOsh: Got pointer to NULL elec object!\n");
1535 if (mgparm == VNULL) {
1536 Vnm_print(2,
"NOsh: Got pointer to NULL mgparm object!\n");
1540 if (pbeparm == VNULL) {
1541 Vnm_print(2,
"NOsh: Got pointer to NULL pbeparm object!\n");
1545 Vnm_print(0,
"NOsh_parseMG: Parsing parameters for MG calculation\n");
1558 while (Vio_scanf(sock,
"%s", tok) == 1) {
1560 Vnm_print(0,
"NOsh_parseMG: Parsing %s...\n", tok);
1573 Vnm_print(0,
"NOsh_parseMG: parsePBE error!\n");
1575 }
else if (rc == 0) {
1579 Vnm_print(0,
"NOsh_parseMG: parseMG error!\n");
1581 }
else if (rc == 0) {
1583 Vnm_print(2,
"NOsh: Unrecognized keyword: %s\n", tok);
1591 if (rc == -1)
return 0;
1592 if (rc == 0)
return 0;
1596 Vnm_print(2,
"NOsh: MG parameters not set correctly!\n");
1603VPRIVATE
int NOsh_setupCalcMG(
1610 VASSERT(thee != VNULL);
1611 VASSERT(calc != VNULL);
1613 VASSERT(mgparm != VNULL);
1618 switch (mgparm->
type) {
1620 return NOsh_setupCalcMGMANUAL(thee, calc);
1622 return NOsh_setupCalcMGMANUAL(thee, calc);
1624 return NOsh_setupCalcMGAUTO(thee, calc);
1626 return NOsh_setupCalcMGPARA(thee, calc);
1628 Vnm_print(2,
"NOsh_setupCalcMG: undefined MG calculation type (%d)!\n",
1638VPRIVATE
int NOsh_setupCalcBEM(
1645 VASSERT(thee != VNULL);
1646 VASSERT(calc != VNULL);
1648 VASSERT(bemparm != VNULL);
1653 switch (bemparm->
type) {
1655 return NOsh_setupCalcBEMMANUAL(thee, calc);
1657 Vnm_print(2,
"NOsh_setupCalcBEM: undefined BEM calculation type (%d)!\n",
1666VPRIVATE
int NOsh_setupCalcGEOFLOW(
NOsh *thee,
NOsh_calc *calc) {
1670 VASSERT(thee != VNULL);
1671 VASSERT(calc != VNULL);
1673 VASSERT(parm != VNULL);
1679 return NOsh_setupCalcGEOFLOWMANUAL(thee, calc);
1681 Vnm_print(2,
"NOsh_setupCalcGEOFLOW: undefined GEOFLOW calculation type (%d)!\n", parm->
type);
1686VPRIVATE
int NOsh_setupCalcPBAM(
NOsh *thee,
NOsh_calc *calc){
1690 VASSERT(thee!=VNULL);
1691 VASSERT(calc!=VNULL);
1693 VASSERT(parm!=VNULL);
1696 return NOsh_setupCalcPBAMAUTO(thee, calc);
1698 Vnm_print(2,
"NOsh_setupCalcPBAM: undefined PBAM calculation type (%d)!\n", parm->
type);
1704VPRIVATE
int NOsh_setupCalcPBSAM(
NOsh *thee,
NOsh_calc *calc){
1708 VASSERT(thee!=VNULL);
1709 VASSERT(calc!=VNULL);
1711 VASSERT(parm!=VNULL);
1714 return NOsh_setupCalcPBSAMAUTO(thee, calc);
1716 Vnm_print(2,
"NOsh_setupCalcPBSAM: undefined PBSAM calculation type (%d)!\n", parm->
type);
1722VPRIVATE
int NOsh_setupCalcFEM(
1727 VASSERT(thee != VNULL);
1728 VASSERT(calc != VNULL);
1729 VASSERT(calc->
femparm != VNULL);
1735 return NOsh_setupCalcFEMANUAL(thee, calc);
1737 Vnm_print(2,
"NOsh_parseFEM: unknown calculation type (%d)!\n",
1747VPRIVATE
int NOsh_setupCalcMGMANUAL(
1756 if (thee == VNULL) {
1757 Vnm_print(2,
"NOsh_setupCalcMGMANUAL: Got NULL thee!\n");
1760 if (elec == VNULL) {
1761 Vnm_print(2,
"NOsh_setupCalcMGMANUAL: Got NULL calc!\n");
1765 if (mgparm == VNULL) {
1766 Vnm_print(2,
"NOsh_setupCalcMGMANUAL: Got NULL mgparm -- was this calculation \
1771 if (pbeparm == VNULL) {
1772 Vnm_print(2,
"NOsh_setupCalcMGMANUAL: Got NULL pbeparm -- was this calculation \
1780 mgparm->
grid[0] = mgparm->
glen[0]/((double)(mgparm->
dime[0]-1));
1781 mgparm->
grid[1] = mgparm->
glen[1]/((double)(mgparm->
dime[1]-1));
1782 mgparm->
grid[2] = mgparm->
glen[2]/((double)(mgparm->
dime[2]-1));
1786 mgparm->
glen[0] = mgparm->
grid[0]*((double)(mgparm->
dime[0]-1));
1787 mgparm->
glen[1] = mgparm->
grid[1]*((double)(mgparm->
dime[1]-1));
1788 mgparm->
glen[2] = mgparm->
grid[2]*((double)(mgparm->
dime[2]-1));
1795 Vnm_print(2,
"NOsh: Too many calculations in this run!\n");
1796 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
1815VPUBLIC
int NOsh_setupCalcMGAUTO(
1822 double fgrid[3], cgrid[3];
1823 double d[3], minf[3], maxf[3], minc[3], maxc[3];
1824 double redfrac, redrat[3], td;
1825 int ifocus, nfocus, tnfocus[3];
1837 if (thee == VNULL) {
1838 Vnm_print(2,
"NOsh_setupCalcMGAUTO: Got NULL thee!\n");
1841 if (elec == VNULL) {
1842 Vnm_print(2,
"NOsh_setupCalcMGAUTO: Got NULL elec!\n");
1845 if (elec->
mgparm == VNULL) {
1846 Vnm_print(2,
"NOsh_setupCalcMGAUTO: Got NULL mgparm!\n");
1850 Vnm_print(2,
"NOsh_setupCalcMGAUTO: Got NULL pbeparm!\n");
1854 Vnm_print(0,
"NOsh_setupCalcMGAUTO(%s, %d): coarse grid center = %g %g %g\n",
1859 Vnm_print(0,
"NOsh_setupCalcMGAUTO(%s, %d): fine grid center = %g %g %g\n",
1866 for (j=0; j<3; j++) {
1871 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): Coarse grid spacing = %g, %g, %g\n",
1872 __FILE__, __LINE__, cgrid[0], cgrid[1], cgrid[2]);
1873 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): Fine grid spacing = %g, %g, %g\n",
1874 __FILE__, __LINE__, fgrid[0], fgrid[1], fgrid[2]);
1875 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): Displacement between fine and \
1876coarse grids = %g, %g, %g\n", __FILE__, __LINE__, d[0], d[1], d[2]);
1880 for (j=0; j<3; j++) {
1881 if (fgrid[j]/cgrid[j] <
VREDFRAC) {
1882 redfrac = fgrid[j]/cgrid[j];
1884 tnfocus[j] = (int)ceil(td) + 1;
1885 }
else tnfocus[j] = 2;
1887 nfocus = VMAX2(VMAX2(tnfocus[0], tnfocus[1]), tnfocus[2]);
1891 for (j=0; j<3; j++) {
1892 redrat[j] = VPOW((fgrid[j]/cgrid[j]), 1.0/((
double)nfocus-1.0));
1894 Vnm_print(0,
"NOsh: %d levels of focusing with %g, %g, %g reductions\n",
1895 nfocus, redrat[0], redrat[1], redrat[2]);
1900 Vnm_print(2,
"NOsh: Require more calculations than max (%d)!\n",
1905 for (ifocus=0; ifocus<nfocus; ifocus++) {
1908 icalc = thee->
ncalc;
1913 calcf = thee->
calc[icalc];
1916 calcc = thee->
calc[icalc-1];
1926 for (j=0; j<3; j++) {
1931 for (j=0; j<3; j++) {
1943 for (j=0; j<3; j++) {
1946 }
else if (ifocus == (nfocus-1)) {
1949 for (j=0; j<3; j++) {
1958 for (j=0; j<3; j++) {
1969 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): starting mesh \
1970repositioning.\n", __FILE__, __LINE__);
1971 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): coarse mesh center = \
1972%g %g %g\n", __FILE__, __LINE__,
1976 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): coarse mesh upper corner = \
1977%g %g %g\n", __FILE__, __LINE__,
1981 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): coarse mesh lower corner = \
1982%g %g %g\n", __FILE__, __LINE__,
1986 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): initial fine mesh upper corner = \
1987%g %g %g\n", __FILE__, __LINE__,
1991 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): initial fine mesh lower corner = \
1992%g %g %g\n", __FILE__, __LINE__,
1996 for (j=0; j<3; j++) {
2003 d[j] = minc[j] - minf[j];
2004 if (d[j] >= VSMALL) {
2005 if (ifocus == (nfocus-1)) {
2006 Vnm_print(2,
"NOsh_setupCalcMGAUTO: Error! Finest \
2007mesh has fallen off the coarser meshes!\n");
2008 Vnm_print(2,
"NOsh_setupCalcMGAUTO: difference in min %d-\
2009direction = %g\n", j, d[j]);
2010 Vnm_print(2,
"NOsh_setupCalcMGAUTO: min fine = %g %g %g\n",
2011 minf[0], minf[1], minf[2]);
2012 Vnm_print(2,
"NOsh_setupCalcMGAUTO: min coarse = %g %g %g\n",
2013 minc[0], minc[1], minc[2]);
2016 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): ifocus = %d, \
2017fixing mesh min violation (%g in %d-direction).\n", __FILE__, __LINE__, ifocus,
2028 d[j] = maxf[j] - maxc[j];
2029 if (d[j] >= VSMALL) {
2030 if (ifocus == (nfocus-1)) {
2031 Vnm_print(2,
"NOsh_setupCalcMGAUTO: Error! Finest \
2032mesh has fallen off the coarser meshes!\n");
2033 Vnm_print(2,
"NOsh_setupCalcMGAUTO: difference in %d-\
2034direction = %g\n", j, d[j]);
2040 Vnm_print(2,
"NOsh_setupCalcMGAUTO: Error! Both \
2041ends of the finer mesh do not fit in the bigger mesh!\n");
2044 Vnm_print(0,
"NOsh_setupCalcMGAUTO(%s, %d): ifocus = %d, \
2045fixing mesh max violation (%g in %d-direction).\n", __FILE__, __LINE__, ifocus,
2052 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): final fine mesh upper corner = \
2053%g %g %g\n", __FILE__, __LINE__,
2057 Vnm_print(0,
"NOsh_setupCalcMGAUTO (%s, %d): final fine mesh lower corner = \
2058%g %g %g\n", __FILE__, __LINE__,
2073 Vnm_print(0,
"NOsh_setupMGAUTO: Resetting boundary flags\n");
2075 for (j=0; j<3; j++) {
2090VPUBLIC
int NOsh_setupCalcMGPARA(
2100 double hx, hy, hzed;
2101 double xofrac, yofrac, zofrac;
2102 int rank, size, npx, npy, npz, nproc, ip, jp, kp;
2103 int xeffGlob, yeffGlob, zeffGlob, xDisj, yDisj, zDisj;
2104 int xigminDisj, xigmaxDisj, yigminDisj, yigmaxDisj, zigminDisj, zigmaxDisj;
2105 int xigminOlap, xigmaxOlap, yigminOlap, yigmaxOlap, zigminOlap, zigmaxOlap;
2106 int xOlapReg, yOlapReg, zOlapReg;
2107 double xlenDisj, ylenDisj, zlenDisj;
2108 double xcentDisj, ycentDisj, zcentDisj;
2109 double xcentOlap, ycentOlap, zcentOlap;
2110 double xlenOlap, ylenOlap, zlenOlap;
2111 double xminOlap, xmaxOlap, yminOlap, ymaxOlap, zminOlap, zmaxOlap;
2112 double xminDisj, xmaxDisj, yminDisj, ymaxDisj, zminDisj, zmaxDisj;
2113 double xcent, ycent, zcent;
2116 VASSERT(thee != VNULL);
2117 VASSERT(elec != VNULL);
2119 VASSERT(mgparm != VNULL);
2122 ofrac = mgparm->
ofrac;
2123 npx = mgparm->
pdime[0];
2124 npy = mgparm->
pdime[1];
2125 npz = mgparm->
pdime[2];
2126 nproc = npx*npy*npz;
2134 Vnm_tprint(2,
"NOsh_setupCalcMGPARA: Oops! You're trying to perform \
2135an 'mg-para' (parallel) calculation\n");
2136 Vnm_tprint(2,
"NOsh_setupCalcMGPARA: with a version of APBS that wasn't \
2137compiled with MPI!\n");
2138 Vnm_tprint(2,
"NOsh_setupCalcMGPARA: Perhaps you meant to use the \
2140 Vnm_tprint(2,
"NOsh_setupCalcMGPARA: Bailing out!\n");
2148 Vnm_print(0,
"NOsh_setupCalcMGPARA: Hello from processor %d of %d\n", rank,
2153 if (rank > (nproc-1)) {
2154 Vnm_print(2,
"NOsh_setupMGPARA: There are more processors available than\
2155the %d you requested.\n", nproc);
2156 Vnm_print(2,
"NOsh_setupMGPARA: Eliminating processor %d\n", rank);
2164 Vnm_print(2,
"NOsh_setupMGPARA: There are too few processors (%d) to \
2165satisfy requirements (%d)\n", size, nproc);
2169 Vnm_print(0,
"NOsh_setupMGPARA: Hello (again) from processor %d of %d\n",
2174 rank = mgparm->
async;
2181 if (rank > (nproc-1)) {
2182 Vnm_print(2,
"NOsh_setupMGPARA: The processor id you requested (%d) \
2183is not within the range of processors available (0-%d)\n", rank, (nproc-1));
2189 kp = (int)floor(rank/(npx*npy));
2190 jp = (int)floor((rank-kp*npx*npy)/npx);
2191 ip = rank - kp*npx*npy - jp*npx;
2192 Vnm_print(0,
"NOsh_setupMGPARA: Hello world from PE (%d, %d, %d)\n",
2196 if (npx == 1) xofrac = 0.0;
2197 else xofrac = ofrac;
2198 if (npy == 1) yofrac = 0.0;
2199 else yofrac = ofrac;
2200 if (npz == 1) zofrac = 0.0;
2201 else zofrac = ofrac;
2204 xDisj = (int)
VFLOOR(mgparm->
dime[0]/(1 + 2*xofrac) + 0.5);
2205 xeffGlob = npx*xDisj;
2206 hx = mgparm->
fglen[0]/(double)(xeffGlob-1);
2207 yDisj = (int)
VFLOOR(mgparm->
dime[1]/(1 + 2*yofrac) + 0.5);
2208 yeffGlob = npy*yDisj;
2209 hy = mgparm->
fglen[1]/(double)(yeffGlob-1);
2210 zDisj = (int)
VFLOOR(mgparm->
dime[2]/(1 + 2*zofrac) + 0.5);
2211 zeffGlob = npz*zDisj;
2212 hzed = mgparm->
fglen[2]/(double)(zeffGlob-1);
2213 Vnm_print(0,
"NOsh_setupMGPARA: Global Grid size = (%d, %d, %d)\n",
2214 xeffGlob, yeffGlob, zeffGlob);
2215 Vnm_print(0,
"NOsh_setupMGPARA: Global Grid Spacing = (%.3f, %.3f, %.3f)\n",
2217 Vnm_print(0,
"NOsh_setupMGPARA: Processor Grid Size = (%d, %d, %d)\n",
2218 xDisj, yDisj, zDisj);
2221 xigminDisj = ip*xDisj;
2222 xigmaxDisj = xigminDisj + xDisj - 1;
2223 yigminDisj = jp*yDisj;
2224 yigmaxDisj = yigminDisj + yDisj - 1;
2225 zigminDisj = kp*zDisj;
2226 zigmaxDisj = zigminDisj + zDisj - 1;
2227 Vnm_print(0,
"NOsh_setupMGPARA: Min Grid Points for this proc. (%d, %d, %d)\n",
2228 xigminDisj, yigminDisj, zigminDisj);
2229 Vnm_print(0,
"NOsh_setupMGPARA: Max Grid Points for this proc. (%d, %d, %d)\n",
2230 xigmaxDisj, yigmaxDisj, zigmaxDisj);
2234 xminDisj = VMAX2(hx*(xigminDisj-0.5), 0.0);
2235 xmaxDisj = VMIN2(hx*(xigmaxDisj+0.5), mgparm->
fglen[0]);
2236 xlenDisj = xmaxDisj - xminDisj;
2237 yminDisj = VMAX2(hy*(yigminDisj-0.5), 0.0);
2238 ymaxDisj = VMIN2(hy*(yigmaxDisj+0.5), mgparm->
fglen[1]);
2239 ylenDisj = ymaxDisj - yminDisj;
2240 zminDisj = VMAX2(hzed*(zigminDisj-0.5), 0.0);
2241 zmaxDisj = VMIN2(hzed*(zigmaxDisj+0.5), mgparm->
fglen[2]);
2242 zlenDisj = zmaxDisj - zminDisj;
2244 xcent = 0.5*mgparm->
fglen[0];
2245 ycent = 0.5*mgparm->
fglen[1];
2246 zcent = 0.5*mgparm->
fglen[2];
2248 xcentDisj = xminDisj + 0.5*xlenDisj - xcent;
2249 ycentDisj = yminDisj + 0.5*ylenDisj - ycent;
2250 zcentDisj = zminDisj + 0.5*zlenDisj - zcent;
2251 if (VABS(xcentDisj) < VSMALL) xcentDisj = 0.0;
2252 if (VABS(ycentDisj) < VSMALL) ycentDisj = 0.0;
2253 if (VABS(zcentDisj) < VSMALL) zcentDisj = 0.0;
2255 Vnm_print(0,
"NOsh_setupMGPARA: Disj part length = (%g, %g, %g)\n",
2256 xlenDisj, ylenDisj, zlenDisj);
2257 Vnm_print(0,
"NOsh_setupMGPARA: Disj part center displacement = (%g, %g, %g)\n",
2258 xcentDisj, ycentDisj, zcentDisj);
2264 if (npx != 1) xOlapReg = (int)
VFLOOR(xofrac*mgparm->
fglen[0]/npx/hx + 0.5) + 1;
2265 if (npy != 1) yOlapReg = (int)
VFLOOR(yofrac*mgparm->
fglen[1]/npy/hy + 0.5) + 1;
2266 if (npz != 1) zOlapReg = (int)
VFLOOR(zofrac*mgparm->
fglen[2]/npz/hzed + 0.5) + 1;
2268 Vnm_print(0,
"NOsh_setupMGPARA: No. of Grid Points in Overlap (%d, %d, %d)\n",
2269 xOlapReg, yOlapReg, zOlapReg);
2271 if (ip == 0) xigminOlap = 0;
2272 else if (ip == (npx - 1)) xigminOlap = xeffGlob - mgparm->
dime[0];
2273 else xigminOlap = xigminDisj - xOlapReg;
2274 xigmaxOlap = xigminOlap + mgparm->
dime[0] - 1;
2276 if (jp == 0) yigminOlap = 0;
2277 else if (jp == (npy - 1)) yigminOlap = yeffGlob - mgparm->
dime[1];
2278 else yigminOlap = yigminDisj - yOlapReg;
2279 yigmaxOlap = yigminOlap + mgparm->
dime[1] - 1;
2281 if (kp == 0) zigminOlap = 0;
2282 else if (kp == (npz - 1)) zigminOlap = zeffGlob - mgparm->
dime[2];
2283 else zigminOlap = zigminDisj - zOlapReg;
2284 zigmaxOlap = zigminOlap + mgparm->
dime[2] - 1;
2286 Vnm_print(0,
"NOsh_setupMGPARA: Min Grid Points with Overlap (%d, %d, %d)\n",
2287 xigminOlap, yigminOlap, zigminOlap);
2288 Vnm_print(0,
"NOsh_setupMGPARA: Max Grid Points with Overlap (%d, %d, %d)\n",
2289 xigmaxOlap, yigmaxOlap, zigmaxOlap);
2291 xminOlap = hx * xigminOlap;
2292 xmaxOlap = hx * xigmaxOlap;
2293 yminOlap = hy * yigminOlap;
2294 ymaxOlap = hy * yigmaxOlap;
2295 zminOlap = hzed * zigminOlap;
2296 zmaxOlap = hzed * zigmaxOlap;
2298 xlenOlap = xmaxOlap - xminOlap;
2299 ylenOlap = ymaxOlap - yminOlap;
2300 zlenOlap = zmaxOlap - zminOlap;
2302 xcentOlap = (xminOlap + 0.5*xlenOlap) - xcent;
2303 ycentOlap = (yminOlap + 0.5*ylenOlap) - ycent;
2304 zcentOlap = (zminOlap + 0.5*zlenOlap) - zcent;
2305 if (VABS(xcentOlap) < VSMALL) xcentOlap = 0.0;
2306 if (VABS(ycentOlap) < VSMALL) ycentOlap = 0.0;
2307 if (VABS(zcentOlap) < VSMALL) zcentOlap = 0.0;
2309 Vnm_print(0,
"NOsh_setupMGPARA: Olap part length = (%g, %g, %g)\n",
2310 xlenOlap, ylenOlap, zlenOlap);
2311 Vnm_print(0,
"NOsh_setupMGPARA: Olap part center displacement = (%g, %g, %g)\n",
2312 xcentOlap, ycentOlap, zcentOlap);
2332 Vnm_print(0,
"NOsh_setupMGPARA: partDisjOwnSide[LEFT] = %d\n",
2334 Vnm_print(0,
"NOsh_setupMGPARA: partDisjOwnSide[RIGHT] = %d\n",
2336 Vnm_print(0,
"NOsh_setupMGPARA: partDisjOwnSide[FRONT] = %d\n",
2338 Vnm_print(0,
"NOsh_setupMGPARA: partDisjOwnSide[BACK] = %d\n",
2340 Vnm_print(0,
"NOsh_setupMGPARA: partDisjOwnSide[UP] = %d\n",
2342 Vnm_print(0,
"NOsh_setupMGPARA: partDisjOwnSide[DOWN] = %d\n",
2346 mgparm->
fglen[0] = xlenOlap;
2347 mgparm->
fglen[1] = ylenOlap;
2348 mgparm->
fglen[2] = zlenOlap;
2355 mgparm->
fcenter[0] += xcentOlap;
2356 mgparm->
fcenter[1] += ycentOlap;
2357 mgparm->
fcenter[2] += zcentOlap;
2359 Vnm_print(0,
"NOsh_setupCalcMGPARA (%s, %d): Set up *relative* partition \
2360centers...\n", __FILE__, __LINE__);
2361 Vnm_print(0,
"NOsh_setupCalcMGPARA (%s, %d): Absolute centers will be set \
2362in NOsh_setupMGAUTO\n", __FILE__, __LINE__);
2363 Vnm_print(0,
"NOsh_setupCalcMGPARA (%s, %d): partDisjCenter = %g %g %g\n",
2368 Vnm_print(0,
"NOsh_setupCalcMGPARA (%s, %d): ccenter = %g %g %g\n",
2373 Vnm_print(0,
"NOsh_setupCalcMGPARA (%s, %d): fcenter = %g %g %g\n",
2381 return NOsh_setupCalcMGAUTO(thee, elec);
2385VPUBLIC
int NOsh_parseFEM(
2391 char tok[VMAX_BUFSIZE];
2398 if (thee == VNULL) {
2399 Vnm_print(2,
"NOsh_parseFEM: Got NULL thee!\n");
2402 if (sock == VNULL) {
2403 Vnm_print(2,
"NOsh_parseFEM: Got pointer to NULL socket!\n");
2406 if (elec == VNULL) {
2407 Vnm_print(2,
"NOsh_parseFEM: Got pointer to NULL elec object!\n");
2411 if (feparm == VNULL) {
2412 Vnm_print(2,
"NOsh_parseFEM: Got pointer to NULL feparm object!\n");
2416 if (feparm == VNULL) {
2417 Vnm_print(2,
"NOsh_parseFEM: Got pointer to NULL pbeparm object!\n");
2421 Vnm_print(0,
"NOsh_parseFEM: Parsing parameters for FEM calculation\n");
2425 while (Vio_scanf(sock,
"%s", tok) == 1) {
2427 Vnm_print(0,
"NOsh_parseFEM: Parsing %s...\n", tok);
2440 Vnm_print(0,
"NOsh_parseFEM: parsePBE error!\n");
2442 }
else if (rc == 0) {
2446 Vnm_print(0,
"NOsh_parseFEM: parseMG error!\n");
2448 }
else if (vrc == VRC_WARNING) {
2450 Vnm_print(2,
"NOsh: Unrecognized keyword: %s\n", tok);
2458 if (rc == -1)
return 0;
2459 if (rc == 0)
return 0;
2463 Vnm_print(2,
"NOsh: FEM parameters not set correctly!\n");
2471VPRIVATE
int NOsh_setupCalcFEMANUAL(
2480 VASSERT(thee != VNULL);
2481 VASSERT(elec != VNULL);
2483 VASSERT(feparm != VNULL);
2492 Vnm_print(2,
"NOsh: Too many calculations in this run!\n");
2493 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
2508VPUBLIC
int NOsh_parseAPOL(
2514 char tok[VMAX_BUFSIZE];
2519 if (thee == VNULL) {
2520 Vnm_print(2,
"NOsh_parseAPOL: Got NULL thee!\n");
2523 if (sock == VNULL) {
2524 Vnm_print(2,
"NOsh_parseAPOL: Got pointer to NULL socket!\n");
2527 if (elec == VNULL) {
2528 Vnm_print(2,
"NOsh_parseAPOL: Got pointer to NULL elec object!\n");
2532 if (apolparm == VNULL) {
2533 Vnm_print(2,
"NOsh_parseAPOL: Got pointer to NULL apolparm object!\n");
2537 Vnm_print(0,
"NOsh_parseAPOL: Parsing parameters for APOL calculation\n");
2541 while (Vio_scanf(sock,
"%s", tok) == 1) {
2543 Vnm_print(0,
"NOsh_parseAPOL: Parsing %s...\n", tok);
2555 Vnm_print(0,
"NOsh_parseFEM: parseMG error!\n");
2557 }
else if (rc == 0) {
2559 Vnm_print(2,
"NOsh: Unrecognized keyword: %s\n", tok);
2567 if (rc == -1)
return 0;
2568 if (rc == 0)
return 0;
2572 Vnm_print(2,
"NOsh: APOL parameters not set correctly!\n");
2581VPRIVATE
int NOsh_setupCalcAPOL(
2588 VASSERT(thee != VNULL);
2589 VASSERT(apol != VNULL);
2596 Vnm_print(2,
"NOsh: Too many calculations in this run!\n");
2597 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
2612VPRIVATE
int NOsh_setupCalcBEMMANUAL(
2621 if (thee == VNULL) {
2622 Vnm_print(2,
"NOsh_setupCalcBEMMANUAL: Got NULL thee!\n");
2625 if (elec == VNULL) {
2626 Vnm_print(2,
"NOsh_setupCalcBEMMANUAL: Got NULL calc!\n");
2630 if (bemparm == VNULL) {
2631 Vnm_print(2,
"NOsh_setupCalcBEMMANUAL: Got NULL bemparm -- was this calculation \
2636 if (pbeparm == VNULL) {
2637 Vnm_print(2,
"NOsh_setupCalcBEMMANUAL: Got NULL pbeparm -- was this calculation \
2651 if (bemparm->
setmac == 0) {
2659 Vnm_print(2,
"NOsh: Too many calculations in this run!\n");
2660 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
2677VPRIVATE
int NOsh_setupCalcGEOFLOWMANUAL(
2687 if (thee == VNULL) {
2688 Vnm_print(2,
"NOsh_setupCalcGEOFLOWMANUAL: Got NULL thee!\n");
2691 if (elec == VNULL) {
2692 Vnm_print(2,
"NOsh_setupCalcGEOFLOWMANUAL: Got NULL calc!\n");
2696 if (parm == VNULL) {
2697 Vnm_print(2,
"NOsh_setupCalcGEOFLOWMANUAL: Got NULL geoflowparm -- was this calculation \
2702 if (parm == VNULL) {
2703 Vnm_print(2,
"NOsh_setupCalcGEOFLOWMANUAL: Got NULL apolparm -- was this calculation \
2708 if (pbeparm == VNULL) {
2709 Vnm_print(2,
"NOsh_setupCalcGEOFLOWMANUAL: Got NULL pbeparm -- was this calculation \
2718 Vnm_print(2,
"NOsh: Too many calculations in this run!\n");
2719 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
2735VPRIVATE
int NOsh_setupCalcPBAMAUTO(
2744 if (thee == VNULL) {
2745 Vnm_print(2,
"NOsh_setupCalcPBAMAUTO: Got NULL thee!\n");
2748 if (elec == VNULL) {
2749 Vnm_print(2,
"NOsh_setupCalcPBAMAUTO: Got NULL calc!\n");
2753 if (parm == VNULL) {
2754 Vnm_print(2,
"NOsh_setupCalcPBAMAUTO: Got NULL pbamparm -- was this calculation \
2759 if (pbeparm == VNULL) {
2760 Vnm_print(2,
"NOsh_setupCalcPBAMAUTO: Got NULL pbeparm -- was this calculation \
2769 Vnm_print(2,
"NOsh: Too many calculations in this run!\n");
2770 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
2786VPRIVATE
int NOsh_setupCalcPBSAMAUTO(
2796 if (thee == VNULL) {
2797 Vnm_print(2,
"NOsh_setupCalcPBSAMAUTO: Got NULL thee!\n");
2800 if (elec == VNULL) {
2801 Vnm_print(2,
"NOsh_setupCalcPBSAMAUTO: Got NULL calc!\n");
2805 if (parm == VNULL) {
2806 Vnm_print(2,
"NOsh_setupCalcPBSAMAUTO: Got NULL pbamparm -- was this calculation \
2811 if (samparm == VNULL) {
2812 Vnm_print(2,
"NOsh_setupCalcPBSAMAUTO: Got NULL pbsamparm -- was this calculation \
2817 if (pbeparm == VNULL) {
2818 Vnm_print(2,
"NOsh_setupCalcPBAMAUTO: Got NULL pbeparm -- was this calculation \
2827 Vnm_print(2,
"NOsh: Too many calculations in this run!\n");
2828 Vnm_print(2,
"NOsh: Current max is %d; ignoring this calculation\n",
2845VPUBLIC
int NOsh_parseBEM(
2851 char tok[VMAX_BUFSIZE];
2857 if (thee == VNULL) {
2858 Vnm_print(2,
"NOsh: Got NULL thee!\n");
2861 if (sock == VNULL) {
2862 Vnm_print(2,
"NOsh: Got pointer to NULL socket!\n");
2865 if (elec == VNULL) {
2866 Vnm_print(2,
"NOsh: Got pointer to NULL elec object!\n");
2870 if (bemparm == VNULL) {
2871 Vnm_print(2,
"NOsh: Got pointer to NULL bemparm object!\n");
2875 if (pbeparm == VNULL) {
2876 Vnm_print(2,
"NOsh: Got pointer to NULL pbeparm object!\n");
2880 Vnm_print(0,
"NOsh_parseBEM: Parsing parameters for BEM calculation\n");
2885 while (Vio_scanf(sock,
"%s", tok) == 1) {
2887 Vnm_print(0,
"NOsh_parseBEM: Parsing %s...\n", tok);
2900 Vnm_print(0,
"NOsh_parseBEM: parsePBE error!\n");
2902 }
else if (rc == 0) {
2906 Vnm_print(0,
"NOsh_parseBEM: parseBEM error!\n");
2908 }
else if (rc == 0) {
2910 Vnm_print(2,
"NOsh: Unrecognized keyword: %s\n", tok);
2922 if (rc == -1)
return 0;
2923 if (rc == 0)
return 0;
2927 Vnm_print(2,
"NOsh: BEM parameters not set correctly!\n");
2934VPUBLIC
int NOsh_parseGEOFLOW(
2940 char tok[VMAX_BUFSIZE];
2947 if (thee == VNULL) {
2948 Vnm_print(2,
"NOsh: Got NULL thee!\n");
2951 if (sock == VNULL) {
2952 Vnm_print(2,
"NOsh: Got pointer to NULL socket!\n");
2955 if (elec == VNULL) {
2956 Vnm_print(2,
"NOsh: Got pointer to NULL elec object!\n");
2960 if (parm == VNULL) {
2961 Vnm_print(2,
"NOsh: Got pointer to NULL geoflowparm object!\n");
2965 if (parm == VNULL) {
2966 Vnm_print(2,
"NOsh: Got pointer to NULL apolparm object!\n");
2970 if (pbeparm == VNULL) {
2971 Vnm_print(2,
"NOsh: Got pointer to NULL pbeparm object!\n");
2975 Vnm_print(0,
"NOsh_parseGEOFLOW: Parsing parameters for GEOFLOW calculation\n");
2980 while (Vio_scanf(sock,
"%s", tok) == 1) {
2982 Vnm_print(0,
"NOsh_parseGEOFLOW: Parsing %s...\n", tok);
2994 Vnm_print(2,
"parseGEOFLOW: WARNING! ion not implemented for geometric flow!\n");
3000 Vnm_print(0,
"NOsh_parseGEOFLOW: parsePBE error!\n");
3002 }
else if (rc == 0) {
3006 Vnm_print(0,
"NOsh_parseAPOL: parseAPOL error!\n");
3008 }
else if (rc == 0) {
3011 Vnm_print(0,
"NOsh_parseGEOFLOW: parseGEOFLOW error!\n");
3013 }
else if (rc == 0) {
3015 Vnm_print(2,
"NOsh: Unrecognized keyword: %s\n", tok);
3029 if (rc == -1)
return 0;
3030 if (rc == 0)
return 0;
3034 Vnm_print(2,
"NOsh: GEOFLOW parameters not set correctly!\n");
3039 Vnm_print(2,
"NOsh_parseGEOFLOW: Geoflow currently only supports mdh boundary conditions!\n");
3040 Vnm_print(2,
"NOsh_parseGEOFLOW: please change bcfl keyword.\n");
3048VPUBLIC
int NOsh_parsePBAM(
3054 char tok[VMAX_BUFSIZE];
3060 if (thee == VNULL) {
3061 Vnm_print(2,
"NOsh: Got NULL thee!\n");
3064 if (sock == VNULL) {
3065 Vnm_print(2,
"NOsh: Got pointer to NULL socket!\n");
3068 if (elec == VNULL) {
3069 Vnm_print(2,
"NOsh: Got pointer to NULL elec object!\n");
3073 if (parm == VNULL) {
3074 Vnm_print(2,
"NOsh: Got pointer to NULL pbam object!\n");
3078 if (pbeparm == VNULL) {
3079 Vnm_print(2,
"NOsh: Got pointer to NULL pbeparm object!\n");
3082 Vnm_print(0,
"NOsh_parsePBAM: Parsing parameters for PBAM calculation\n");
3086 while (Vio_scanf(sock,
"%s", tok) == 1) {
3088 Vnm_print(0,
"NOsh_parsePBAM: Parsing %s...\n", tok);
3099 Vnm_print(2,
"parsePBAM: WARNING! PBAM only uses the conc parameter of ion!\n");
3105 Vnm_print(0,
"NOsh_parsePBAM: parsePBE error!\n");
3107 }
else if (rc == 0) {
3110 Vnm_print(0,
"NOsh_parsePBAM: parsePBAM error!\n");
3112 }
else if (rc == 0) {
3114 Vnm_print(2,
"NOsh: Unrecognized keyword: %s\n", tok);
3133 parm->salt = pbeparm->
ionc[pbeparm->
nion-1];
3140 parm->setdxname = 1;
3143 Vnm_print(2,
"NOsh: PBAM only prints in dx format!\n");
3148 if (pbeparm->pbam_3dmapflag == 1) {
3149 strcpy(parm->map3dname, pbeparm->pbam_3dmapstem);
3155 if (rc == -1)
return 0;
3156 if (rc == 0)
return 0;
3160 Vnm_print(2,
"NOsh: PBAM parameters not set correctly!\n");
3166VPUBLIC
int NOsh_parsePBSAM(
3172 char tok[VMAX_BUFSIZE];
3179 if (thee == VNULL) {
3180 Vnm_print(2,
"NOsh: Got NULL thee!\n");
3183 if (sock == VNULL) {
3184 Vnm_print(2,
"NOsh: Got pointer to NULL socket!\n");
3187 if (elec == VNULL) {
3188 Vnm_print(2,
"NOsh: Got pointer to NULL elec object!\n");
3192 if (parm == VNULL) {
3193 Vnm_print(2,
"NOsh: Got pointer to NULL pbam object!\n");
3197 if (samparm == VNULL) {
3198 Vnm_print(2,
"NOsh: Got pointer to NULL pbsam object!\n");
3202 if (pbeparm == VNULL) {
3203 Vnm_print(2,
"NOsh: Got pointer to NULL pbeparm object!\n");
3206 Vnm_print(0,
"NOsh_parsePBSAM: Parsing parameters for PBSAM calculation\n");
3210 while (Vio_scanf(sock,
"%s", tok) == 1) {
3212 Vnm_print(0,
"NOsh_parsePBSAM: Parsing %s...\n", tok);
3224 Vnm_print(2,
"parsePBSAM: WARNING! PBAM only uses the conc parameter of ion!\n");
3230 Vnm_print(0,
"NOsh_parsePBSAM: parsePBE error!\n");
3232 }
else if (rc == 0) {
3235 Vnm_print(0,
"NOsh_parsePBSAM: parsePBAM error!\n");
3237 }
else if ( rc == 0 ) {
3240 Vnm_print(0,
"NOsh_parsePBSAM: parsePBSAM error!\n");
3242 }
else if (rc == 0) {
3244 Vnm_print(2,
"NOsh: Unrecognized keyword: %s\n", tok);
3262 parm->salt = pbeparm->
ionc[pbeparm->
nion-1];
3269 parm->setdxname = 1;
3272 Vnm_print(2,
"NOsh: PBSAM only prints in dx format!\n");
3279 if (rc == -1)
return 0;
3280 if (rc == 0)
return 0;
3286 Vnm_print(2,
"NOsh: PBSAM parameters not set correctly!\n");
VPUBLIC void BEMparm_copy(BEMparm *thee, BEMparm *parm)
Copy object info into thee.
VPUBLIC void APOLparm_dtor(APOLparm **thee)
Object destructor.
VPUBLIC APOLparm * APOLparm_ctor()
Construct APOLparm.
VPUBLIC void APOLparm_copy(APOLparm *thee, APOLparm *source)
Copy target object into thee.
VPUBLIC Vrc_Codes APOLparm_check(APOLparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC Vrc_Codes BEMparm_parseToken(BEMparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
VPUBLIC BEMparm * BEMparm_ctor(BEMparm_CalcType type)
Construct BEMparm object.
VPUBLIC Vrc_Codes BEMparm_check(BEMparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC void BEMparm_dtor(BEMparm **thee)
Object destructor.
VPUBLIC void FEMparm_copy(FEMparm *thee, FEMparm *source)
Copy target object into thee.
VPUBLIC FEMparm * FEMparm_ctor(FEMparm_CalcType type)
Construct FEMparm.
VPUBLIC int FEMparm_check(FEMparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC void FEMparm_dtor(FEMparm **thee)
Object destructor.
VPUBLIC GEOFLOWparm * GEOFLOWparm_ctor(GEOFLOWparm_CalcType type)
Construct GEOFLOWparm object.
VPUBLIC Vrc_Codes GEOFLOWparm_parseToken(GEOFLOWparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
VPUBLIC void GEOFLOWparm_dtor(GEOFLOWparm **thee)
Object destructor.
VPUBLIC void GEOFLOWparm_copy(GEOFLOWparm *thee, GEOFLOWparm *parm)
copy GEOFLOWparm object int thee.
VPUBLIC Vrc_Codes GEOFLOWparm_check(GEOFLOWparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC void MGparm_dtor(MGparm **thee)
Object destructor.
VPUBLIC void MGparm_copy(MGparm *thee, MGparm *parm)
Copy MGparm object into thee.
VPUBLIC Vrc_Codes APOLparm_parseToken(APOLparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
VPUBLIC Vrc_Codes MGparm_check(MGparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC Vrc_Codes FEMparm_parseToken(FEMparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
VPUBLIC MGparm * MGparm_ctor(MGparm_CalcType type)
Construct MGparm object.
VPUBLIC Vrc_Codes MGparm_parseToken(MGparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
VPUBLIC char * NOsh_getDielZpath(NOsh *thee, int imol)
Returns path to specified z-shifted dielectric map.
#define NOSH_MAXCALC
Maximum number of calculations in a run.
enum eNOsh_MolFormat NOsh_MolFormat
Declare NOsh_MolFormat type.
VPUBLIC void NOsh_dtor(NOsh **thee)
Object destructor.
#define NOSH_MAXMOL
Maximum number of molecules in a run.
VPUBLIC int NOsh_calc_copy(NOsh_calc *thee, NOsh_calc *source)
Copy NOsh_calc object into thee.
VPUBLIC NOsh_calc * NOsh_getCalc(NOsh *thee, int icalc)
Returns specified calculation object.
VPUBLIC void NOsh_dtor2(NOsh *thee)
FORTRAN stub for object destructor.
#define NOSH_MAXPRINT
Maximum number of PRINT statements in a run.
VPUBLIC int NOsh_elec2calc(NOsh *thee, int icalc)
Return the name of an elec statement.
VPUBLIC char * NOsh_getPotpath(NOsh *thee, int imol)
Returns path to specified potential map.
VPUBLIC int NOsh_setupElecCalc(NOsh *thee, Valist *alist[NOSH_MAXMOL])
Setup the series of electrostatics calculations.
VPUBLIC int NOsh_printOp(NOsh *thee, int iprint, int iarg)
Return integer ID for specified operation (.
VPUBLIC char * NOsh_getDielXpath(NOsh *thee, int imol)
Returns path to specified x-shifted dielectric map.
VPUBLIC int NOsh_parseInput(NOsh *thee, Vio *sock)
Parse an input file from a socket.
VPUBLIC int NOsh_parseInputFile(NOsh *thee, char *filename)
Parse an input file only from a file.
VPUBLIC char * NOsh_getDielYpath(NOsh *thee, int imol)
Returns path to specified y-shifted dielectric map.
VPUBLIC void NOsh_calc_dtor(NOsh_calc **thee)
Object destructor.
VPUBLIC char * NOsh_elecname(NOsh *thee, int ielec)
Return an integer mapping of an ELEC statement to a calculation ID (.
VPUBLIC int NOsh_getChargefmt(NOsh *thee, int i)
Returns format of specified charge map.
VPUBLIC int NOsh_getKappafmt(NOsh *thee, int i)
Returns format of specified kappa map.
VPUBLIC int NOsh_getDielfmt(NOsh *thee, int i)
Returns format of specified dielectric map.
VPUBLIC NOsh_PrintType NOsh_printWhat(NOsh *thee, int iprint)
Return an integer ID of the observable to print (.
VPUBLIC int NOsh_apol2calc(NOsh *thee, int icalc)
Return the name of an apol statement.
#define NOSH_MAXPOP
Maximum number of operations in a PRINT statement.
VPUBLIC int NOsh_getPotfmt(NOsh *thee, int i)
Returns format of specified potential map.
enum eNOsh_PrintType NOsh_PrintType
Declare NOsh_PrintType type.
VPUBLIC char * NOsh_getKappapath(NOsh *thee, int imol)
Returns path to specified kappa map.
VPUBLIC int NOsh_printCalc(NOsh *thee, int iprint, int iarg)
Return calculation ID for specified PRINT statement (.
VPUBLIC NOsh * NOsh_ctor(int rank, int size)
Construct NOsh.
VPUBLIC NOsh_calc * NOsh_calc_ctor(NOsh_CalcType calctype)
Construct NOsh_calc.
VPUBLIC char * NOsh_getMolpath(NOsh *thee, int imol)
Returns path to specified molecule.
VPUBLIC int NOsh_ctor2(NOsh *thee, int rank, int size)
FORTRAN stub to construct NOsh.
VPUBLIC int NOsh_printNarg(NOsh *thee, int iprint)
Return number of arguments to PRINT statement (.
enum eNOsh_CalcType NOsh_CalcType
Declare NOsh_CalcType type.
VPUBLIC char * NOsh_getChargepath(NOsh *thee, int imol)
Returns path to specified charge distribution map.
VPUBLIC int NOsh_setupApolCalc(NOsh *thee, Valist *alist[NOSH_MAXMOL])
Setup the series of non-polar calculations.
enum eNOsh_ParmFormat NOsh_ParmFormat
Declare NOsh_ParmFormat type.
VPUBLIC void PBAMparm_copy(PBAMparm *thee, PBAMparm *parm)
copy PBAMparm object int thee.
VPUBLIC void PBAMparm_dtor(PBAMparm **thee)
Object destructor.
VPUBLIC Vrc_Codes PBAMparm_check(PBAMparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC PBAMparm * PBAMparm_ctor(PBAMparm_CalcType type)
Construct PBAMparm object.
#define CHR_MAXLEN
Number of things that can be written out in a single calculation.
VPUBLIC Vrc_Codes PBAMparm_parseToken(PBAMparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
VPUBLIC void PBEparm_copy(PBEparm *thee, PBEparm *parm)
Copy PBEparm object into thee.
VPUBLIC void PBEparm_dtor(PBEparm **thee)
Object destructor.
VPUBLIC int PBEparm_check(PBEparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC PBEparm * PBEparm_ctor()
Construct PBEparm object.
VPUBLIC int PBEparm_parseToken(PBEparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse a keyword from an input file.
VPUBLIC void PBSAMparm_copy(PBSAMparm *thee, PBSAMparm *parm)
copy PBSAMparm object int thee.
VPUBLIC void PBSAMparm_dtor(PBSAMparm **thee)
Object destructor.
VPUBLIC Vrc_Codes PBSAMparm_check(PBSAMparm *thee)
Consistency check for parameter values stored in object.
VPUBLIC PBSAMparm * PBSAMparm_ctor(PBSAMparm_CalcType type)
Construct PBSAMparm object.
VPUBLIC Vrc_Codes PBSAMparm_parseToken(PBSAMparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
#define VAPBS_UP
Face definition for a volume.
enum eVdata_Format Vdata_Format
Declaration of the Vdata_Format type as the Vdata_Format enum.
#define VAPBS_FRONT
Face definition for a volume.
#define VEMBED(rctag)
Allows embedding of RCS ID tags in object files.
#define VAPBS_DOWN
Face definition for a volume.
#define VAPBS_LEFT
Face definition for a volume.
#define VAPBS_RIGHT
Face definition for a volume.
#define VREDFRAC
Maximum reduction of grid spacing during a focusing calculation.
#define VFLOOR(value)
Wrapped floor to fix floating point issues in the Intel compiler.
#define VAPBS_BACK
Face definition for a volume.
VPRIVATE char * MCcommChars
Comment characters for socket reads.
VPRIVATE char * MCwhiteChars
Whitespace characters for socket reads.
VPUBLIC int Vstring_isdigit(const char *tok)
A modified sscanf that examines the complete string.
VPUBLIC int Vstring_strcasecmp(const char *s1, const char *s2)
Case-insensitive string comparison (BSD standard)
Contains declarations for class NOsh.
Parameter structure for APOL-specific variables from input files.
Parameter structure for BEM-specific variables from input files.
Parameter structure for FEM-specific variables from input files.
Parameter structure for GEOFLOW-specific variables from input files.
GEOFLOWparm_CalcType type
Parameter structure for MG-specific variables from input files.
Calculation class for use when parsing fixed format input files.
GEOFLOWparm * geoflowparm
Class for parsing fixed format input files.
char apolname[NOSH_MAXCALC][VMAX_ARGLEN]
char chargepath[NOSH_MAXMOL][VMAX_ARGLEN]
Valist * alist[NOSH_MAXMOL]
char elecname[NOSH_MAXCALC][VMAX_ARGLEN]
char dielZpath[NOSH_MAXMOL][VMAX_ARGLEN]
NOsh_calc * elec[NOSH_MAXCALC]
Vdata_Format meshfmt[NOSH_MAXMOL]
NOsh_calc * apol[NOSH_MAXCALC]
char kappapath[NOSH_MAXMOL][VMAX_ARGLEN]
char dielXpath[NOSH_MAXMOL][VMAX_ARGLEN]
int printnarg[NOSH_MAXPRINT]
NOsh_calc * calc[NOSH_MAXCALC]
char meshpath[NOSH_MAXMOL][VMAX_ARGLEN]
char potpath[NOSH_MAXMOL][VMAX_ARGLEN]
Vdata_Format potfmt[NOSH_MAXMOL]
int printcalc[NOSH_MAXPRINT][NOSH_MAXPOP]
char molpath[NOSH_MAXMOL][VMAX_ARGLEN]
Vdata_Format kappafmt[NOSH_MAXMOL]
NOsh_MolFormat molfmt[NOSH_MAXMOL]
char parmpath[VMAX_ARGLEN]
int apol2calc[NOSH_MAXCALC]
Vdata_Format chargefmt[NOSH_MAXMOL]
NOsh_PrintType printwhat[NOSH_MAXPRINT]
int elec2calc[NOSH_MAXCALC]
Vdata_Format dielfmt[NOSH_MAXMOL]
char dielYpath[NOSH_MAXMOL][VMAX_ARGLEN]
int printop[NOSH_MAXPRINT][NOSH_MAXPOP]
Parameter structure for PBAM-specific variables from input files.
Parameter structure for PBE variables from input files.
Vdata_Format writefmt[PBEPARM_MAXWRITE]
char writestem[PBEPARM_MAXWRITE][VMAX_ARGLEN]
PBEparm_calcForce calcforce
Parameter structure for PBSAM-specific variables from input files.
Container class for list of atom objects.