61#if !defined(VINLINE_MGPARM)
71 VASSERT( thee != VNULL);
115 if ((*thee) != VNULL) {
117 Vmem_free(VNULL, 1,
sizeof(
BEMparm), (
void **)thee);
127 int i, tdime[3], ti, tnlev[3], nlev;
131 Vnm_print(0,
"BEMparm_check: checking BEMparm object of type %d.\n",
136 Vnm_print(2,
"BEMparm_check: not filled!\n");
143 Vnm_print(2,
"BEMparm_check: type not set");
149 Vnm_print(2,
"BEMparm_check: treecode order is less than 1");
153 Vnm_print(2,
"BEMparm_check: treecode leaf size is less than 1");
156 if (thee->
mac > 1 || thee->
mac <= 0) {
157 Vnm_print(2,
"BEMparm_check: MAC criterion fails");
161 if (thee->
mesh > 2 || thee->
mesh < 0) {
162 Vnm_print(2,
"BEMparm_check: mesh must be 0 (msms) or 1 and 2 (NanoShaper)");
167 Vnm_print(2,
"BEMparm_check: outdata must be 0, 1 (vtk), or 2 (not specified)");
178 VASSERT(thee != VNULL);
179 VASSERT(parm != VNULL);
210VPRIVATE Vrc_Codes BEMparm_parseTREE_ORDER(
BEMparm *thee, Vio *sock) {
212 char tok[VMAX_BUFSIZE];
215 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
216 if (sscanf(tok,
"%d", &ti) == 0) {
217 Vnm_print(2,
"NOsh: Read non-integer (%s) while parsing TREE_ORDER \
220 }
else if (ti <= 0) {
221 Vnm_print(2,
"parseBEM: tree_order must be greater than 0!\n");
228 Vnm_print(2,
"parseBEM: ran out of tokens!\n");
233VPRIVATE Vrc_Codes BEMparm_parseTREE_N0(
BEMparm *thee, Vio *sock) {
235 char tok[VMAX_BUFSIZE];
238 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
239 if (sscanf(tok,
"%d", &ti) == 0) {
240 Vnm_print(2,
"NOsh: Read non-integer (%s) while parsing TREE_N0 \
243 }
else if (ti <= 0) {
244 Vnm_print(2,
"parseBEM: tree_n0 must be greater than 0!\n");
251 Vnm_print(2,
"parseBEM: ran out of tokens!\n");
256VPRIVATE Vrc_Codes BEMparm_parseMAC(
BEMparm *thee, Vio *sock) {
258 char tok[VMAX_BUFSIZE];
261 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
262 if (sscanf(tok,
"%lf", &tf) == 0) {
263 Vnm_print(2,
"NOsh: Read non-float (%s) while parsing mac \
266 }
else if (tf <= 0.0 || tf > 1.0) {
267 Vnm_print(2,
"parseBEM: mac must be between 0 and 1!\n");
269 }
else thee->
mac = tf;
274 Vnm_print(2,
"parseBEM: ran out of tokens!\n");
279VPRIVATE Vrc_Codes BEMparm_parseMESH(
BEMparm *thee, Vio *sock) {
281 char tok[VMAX_BUFSIZE];
283 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
284 if(strcmp(tok,
"msms") == 0){
287 else if(strcmp(tok,
"ses") == 0){
290 else if(strcmp(tok,
"skin") == 0){
294 Vnm_print(2,
"parseBEM: mesh option %s is not recognized! It must be one of msms, \
295 ses, or skin.\n", tok);
303 Vnm_print(2,
"parseBEM: ran out of tokens!\n");
308VPRIVATE Vrc_Codes BEMparm_parseOUTDATA(
BEMparm *thee, Vio *sock) {
310 char tok[VMAX_BUFSIZE];
313 VJMPERR1(Vio_scanf(sock,
"%s", tok) == 1);
314 if (sscanf(tok,
"%d", &ti) == 0) {
315 Vnm_print(2,
"NOsh: Read non-integer (%s) while parsing OUTDATA \
318 }
else if (ti < 0 || ti > 2) {
319 Vnm_print(2,
"parseBEM: outdata must be 0, 1 (vtk), \
320 or 2 (unspecified)!\n");
327 Vnm_print(2,
"parseBEM: ran out of tokens!\n");
336 Vnm_print(2,
"parseBEM: got NULL thee!\n");
340 Vnm_print(2,
"parseBEM: got NULL socket!\n");
344 Vnm_print(0,
"BEMparm_parseToken: trying %s...\n", tok);
348 return BEMparm_parseTREE_ORDER(thee, sock);
350 return BEMparm_parseTREE_N0(thee, sock);
352 return BEMparm_parseMAC(thee, sock);
354 return BEMparm_parseMESH(thee, sock);
356 return BEMparm_parseOUTDATA(thee, sock);
358 Vnm_print(2,
"parseBEM: Unrecognized keyword (%s)!\n", tok);
VPUBLIC void BEMparm_copy(BEMparm *thee, BEMparm *parm)
Copy object info into thee.
VPUBLIC Vrc_Codes BEMparm_parseToken(BEMparm *thee, char tok[VMAX_BUFSIZE], Vio *sock)
Parse an MG keyword from an input file.
VPUBLIC void BEMparm_dtor2(BEMparm *thee)
FORTRAN stub for object destructor.
enum eBEMparm_CalcType BEMparm_CalcType
Declare BEMparm_CalcType type.
VPUBLIC Vrc_Codes BEMparm_ctor2(BEMparm *thee, BEMparm_CalcType type)
FORTRAN stub to construct BEMparm object.
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.
#define VEMBED(rctag)
Allows embedding of RCS ID tags in object files.
VPUBLIC int Vstring_strcasecmp(const char *s1, const char *s2)
Case-insensitive string comparison (BSD standard)
Parameter structure for BEM-specific variables from input files.