VPRIVATE Vrc_Codes BEMparm_parseTREE_ORDER(BEMparm *thee, Vio *sock) { char tok[VMAX_BUFSIZE]; int ti; VJMPERR1(Vio_scanf(sock, "%s", tok) == 1); if (sscanf(tok, "%d", &ti) == 0) { Vnm_print(2, "NOsh: Read non-integer (%s) while parsing TREE_ORDER \ keyword!\n", tok); return VRC_WARNING; } else if (ti <= 0) {
/* * *************************************************************************** * Routine: vioutl * * Purpose: Vio state utility. * * Author: Michael Holst * *************************************************************************** */ VPUBLIC int vioutl(int *socknum, char mode[1]) { Vio *sock = &theVio[*socknum]; char pmode[VMAX_ARGLEN]; VASSERT( (0 <= *socknum) && (*socknum < MAXVIO) ); pmode[0] = mode[0]; pmode[1] = '\0'; if ( !strcmp(pmode,"o") ) { if ( sock->rwkey == VIO_R ) { /* BLOCKING READ (blocking accept) */ VJMPERR1( 0 <= Vio_accept(sock,0) ); } else if ( sock->rwkey == VIO_W ) { /* BLOCKING WRITE (blocking connect) */ VJMPERR1( 0 <= Vio_connect(sock,0) ); } else { VJMPERR1(0); } return 0; } else if (!strcmp(pmode,"c")) { if ( sock->rwkey == VIO_R ) { Vio_acceptFree(sock); } else if ( sock->rwkey == VIO_W ) { Vio_connectFree(sock); } else { VJMPERR1(0); } return 0; } else { VJMPERR1(0); } VERROR1: return 1; }
VPRIVATE Vrc_Codes FEMparm_parseDOMAINLENGTH(FEMparm *thee, Vio *sock) { int i; double tf; char tok[VMAX_BUFSIZE]; for (i=0; i<3; i++) { VJMPERR1(Vio_scanf(sock, "%s", tok) == 1); if (sscanf(tok, "%lf", &tf) == 0) { Vnm_print(2, "parseFE: Read non-double (%s) while parsing \ DOMAINLENGTH keyword!\n", tok); return VRC_FAILURE; } thee->glen[i] = tf; }
/* * *************************************************************************** * Routine: vioctr * * Purpose: Construct the Vio object. * * Author: Michael Holst * *************************************************************************** */ VPUBLIC int vioctr(char type[4], char frmt[3], char *host, int *lenh, char *file, int *lenf, char mode[1]) { int i, socknum; char phost[VMAX_ARGLEN], pfile[VMAX_ARGLEN], ptype[VMAX_ARGLEN]; char pfrmt[VMAX_ARGLEN], pmode[VMAX_ARGLEN]; Vio *sock; #if 0 Vio sockSize; fprintf(stderr,"vioctr: Vio structure size is exactly <%d> bytes.\n", sizeof(sockSize) ); #endif for (i=0; i<4; i++) ptype[i] = type[i]; ptype[4] = '\0'; for (i=0; i<3; i++) pfrmt[i] = frmt[i]; pfrmt[3] = '\0'; for (i=0; i<*lenh; i++) phost[i] = host[i]; phost[*lenh] = '\0'; for (i=0; i<*lenf; i++) pfile[i] = file[i]; pfile[*lenf] = '\0'; pmode[0] = mode[0]; pmode[1] = '\0'; VASSERT( (0 <= stackPtr) && (stackPtr < MAXVIO) ); socknum = stackPtr; stackPtr = stack[socknum]; sock = &theVio[socknum]; VJMPERR1(0 != Vio_ctor2(sock, ptype, pfrmt, phost, pfile, pmode)); return socknum; VERROR1: return -1; }
/* * *************************************************************************** * Routine: Gem_formChk * * Purpose: Check the self-consistency of the geometry datastructures. * * Notes: key==0 --> check: min (just vertices and simplices) * key==1 --> check: min + simplex ring * key==2 --> check: min + simplex ring + edge ring * key==3 --> check: min + simplex ring + edge ring + conform * * Author: Michael Holst * *************************************************************************** */ VPUBLIC void Gem_formChk(Gem *thee, int key) { int i, j, k; int l, m, bndVert, bndFace; int edgeOrderProb, conformCount, fType[4]; double svol; VV *vx, *v[4]; SS *sm, *sm0, *sm1, *sm2; EE *eg; /* input check and some i/o */ VASSERT( (key >= 0) && (key <= 3) ); /* go through all vertices and check for consistency */ Vnm_tstart(80, "form check"); Vnm_print(0,"Gem_formChk: Topology check on: " "<%d> SS, <%d> EE, <%d> VV:\n", Gem_numSS(thee), Gem_numEE(thee), Gem_numVV(thee)); Vnm_print(0,"Gem_formChk: ..VV..\n"); bndVert = 0; for (i=0; i<Gem_numVV(thee); i++) { vx = Gem_VV(thee,i); if ( (i>0) && (i % VPRTKEY) == 0 ) Vnm_print(0,"[CV:%d]",i); VJMPERR1( !Vnm_sigInt() ); /* check basic data */ if ((int)VV_id(vx)!=i) Vnm_print(2,"Gem_formChk: VV_id BAD vtx <%d>\n", i); if (key == 0) { if (VV_firstSS(vx) != VNULL) Vnm_print(2,"Gem_formChk: firstS BAD vtx <%d>\n",i); if (VV_firstEE(vx) != VNULL) Vnm_print(2,"Gem_formChk: firstE BAD vtx <%d>\n",i); } else if (key == 1) { if (VV_firstSS(vx) == VNULL) Vnm_print(2,"Gem_formChk: firstS BAD vtx <%d>\n",i); if (VV_firstEE(vx) != VNULL) Vnm_print(2,"Gem_formChk: firstE BAD vtx <%d>\n",i); } else if ((key == 2) || (key == 3)) { if (VV_firstSS(vx) == VNULL) Vnm_print(2,"Gem_formChk: firstS BAD vtx <%d>\n",i); if ((VV_firstEE(vx) == VNULL) && (Gem_numEE(thee) > 0)) Vnm_print(2,"Gem_formChk: firstE BAD vtx <%d>\n",i); } else { VASSERT(0); } /* boundary data */ if ( VBOUNDARY( VV_type(vx) ) ) bndVert++; } if (bndVert != Gem_numBV(thee)) Vnm_print(2,"Gem_formChk: bndVert BAD\n"); /* go through all edges and check for consistency */ if (key >= 2) { Vnm_print(0,"Gem_formChk: ..EE..\n"); edgeOrderProb = 0; for (i=0; i<Gem_numEE(thee); i++) { eg = Gem_EE(thee,i); if ( (i>0) && (i % VPRTKEY) == 0 ) Vnm_print(0,"[CE:%d]",i); VJMPERR1( !Vnm_sigInt() ); /* check basic data */ /* (edge re-orderings ok; may not be error) */ if ((int)EE_id(eg) != i) edgeOrderProb = 1; if ( EE_vertex(eg,0) == VNULL ) Vnm_print(2,"Gem_formChk: vertex0 BAD edge <%d>\n",i); if ( EE_vertex(eg,1) == VNULL ) Vnm_print(2,"Gem_formChk: vertex1 BAD edge <%d>\n",i); /* check edge ring consistencies */ if ( ! VV_edgeInRing(EE_vertex(eg,0), eg) ) Vnm_print(2,"Gem_formChk: edgeInRing0 BAD edge <%d>\n",i); if ( ! VV_edgeInRing(EE_vertex(eg,1), eg) ) Vnm_print(2,"Gem_formChk: edgeInRing1 BAD edge <%d>\n",i); /* check midpoint data; should be VNULL */ if ( EE_midPoint(eg) != VNULL ) Vnm_print(2,"Gem_formChk: midPoint BAD edge <%d>\n",i); } if (edgeOrderProb) Vnm_print(0,"Gem_formChk: WARNING noncons edge order..)\n"); } /* go through all simplices and check for consistency */ Vnm_print(0,"Gem_formChk: ..SS..\n"); bndFace = 0; for (i=0; i<Gem_numSS(thee); i++) { sm = Gem_SS(thee,i); if ( (i>0) && (i % VPRTKEY) == 0 ) Vnm_print(0,"[CS:%d]",i); VJMPERR1( !Vnm_sigInt() ); if ( (int)SS_id(sm) != i ) Vnm_print(2,"Gem_formChk: SS_id BAD sim <%d>\n",i); /* check for well-ordering of vertices through positive volume */ svol = Gem_simplexVolume(thee,sm); if (svol <= VSMALL) Vnm_print(2,"Gem_formChk: Degenerate sim <%d> has volume <%g>\n", i, svol); /* another check for well-ordering of vertices via positive volume */ if ( !Gem_orient(thee,sm) ) Vnm_print(2,"Gem_formChk: sim <%d> is badly ordered\n", i); /* no simplices should be marked for refinement/unrefinement */ if ( SS_refineKey(sm,0) != 0 ) Vnm_print(2,"Gem_formChk: SS_refineKey BAD sim <%d>\n",i); if ( SS_refineKey(sm,1) != 0 ) Vnm_print(2,"Gem_formChk: SS_refineKey BAD sim <%d>\n",i); /* get simplex face info */ for (j=0; j<4; j++) fType[j] = SS_faceType(sm,j); /* check vertex data and simplex ring structure */ for (j=0; j<Gem_dimVV(thee); j++) { v[j] = SS_vertex(sm,j); if ( v[j] == VNULL ) Vnm_print(2,"Gem_formChk: v[%d] BAD sim <%d>\n",j,i); if (key >= 1) { if ( ! VV_simplexInRing( v[j], sm ) ) Vnm_print(2,"Gem_formChk: sInR BAD sim <%d>\n",i); } } /* check simplex ring, boundary faces count, vertex type */ for (j=0; j<Gem_dimVV(thee); j++) { /* boundary vertex check */ if ( VBOUNDARY(fType[j]) ) { bndFace++; for (k=1; k<Gem_dimVV(thee); k++) { l=(j+k) % Gem_dimVV(thee); if ( VINTERIOR( VV_type(SS_vertex(sm,l)) ) ) Vnm_print(2,"Gem_formChk: Dv[%d] BAD sim <%d>\n", l,i); } } /* face check with all nabors; verify we are conforming */ if (key >= 3) { k=(j+1) % Gem_dimVV(thee); l=(k+1) % Gem_dimVV(thee); m=(l+1) % Gem_dimVV(thee); conformCount = 0; for (sm0=VV_firstSS(v[k]); sm0!=VNULL;sm0=SS_link(sm0,v[k])) { for (sm1=VV_firstSS(v[l]);sm1!=VNULL;sm1=SS_link(sm1,v[l])){ if (Gem_dim(thee) == 2) { if ((sm0!=sm) && (sm0==sm1)) conformCount++; } else { for (sm2=VV_firstSS(v[m]); sm2!=VNULL; sm2=SS_link(sm2,v[m])) { if ((sm0!=sm) && (sm0==sm1) && (sm0==sm2)) { conformCount++; } } } } } if ( VBOUNDARY(fType[j]) ) { if ( conformCount != 0 ) { Vnm_print(2,"Gem_formChk: conform BAD sim <%d>",i); Vnm_print(2,"..face <%d> should NOT have a nabor\n",j); } } else { if ( conformCount < 1 ) { Vnm_print(2,"Gem_formChk: conform BAD sim <%d>",i); Vnm_print(2,"..face <%d> should have a nabor\n",j); } if ( conformCount > 1 ) { Vnm_print(2,"Gem_formChk: conform BAD sim <%d>",i); Vnm_print(2,"..face <%d> has more than one nabor\n",j); } } } } } if ( bndFace != Gem_numBF(thee) ) Vnm_print(2,"Gem_formChk: numBF count BAD\n"); Vnm_print(0,"Gem_formChk: ..done.\n"); /* return with no errors */ Vnm_tstop(80, "form check"); return; VERROR1: Vnm_print(0,"Gem_formChk: ..done. [Early termination was forced]\n"); Vnm_tstop(80, "form check"); return; }