cmo/create/cube1/tet/ * * Define surfaces * surface/outbox/reflect/box/-64.0,-64.0,-64.0/64.0,64.0,0.0/ surface/fltbot/intrface/plane/0.0,0.0,-8.0/4.0,0.0,-8.0/4.0,4.0,-8.0/ surface/inbox/intrface/box/-8.0,-4.0,-8.0/8.0,4.0,0.0/ surface/f12/intrface/plane/0.0,0.0,-4.0/0.0,-4.0,-4.0/-4.0,-4.0,-8.0/ * * Define regions bounded by surfaces * region/b1/le inbox and le f12/ region/b2/le inbox and ge f12/ region/b3a/ge inbox and le outbox and le f12 and ge fltbot/ region/b3b/ge inbox and le outbox and ge f12 and ge fltbot/ region/b4/ge inbox and le outbox and le fltbot/ * * Define materials bounded by surfaces * mregion/mb1/lt inbox and lt f12/ mregion/mb2/lt inbox and gt f12/ mregion/mb3a/gt inbox and le outbox and lt f12 and gt fltbot/ mregion/mb3b/gt inbox and le outbox and gt f12 and gt fltbot/ mregion/mb4/gt inbox and le outbox and lt fltbot/ * * Create points at a resolution of 0.5 km. * createpts/xyz/65,65,33/-16.0,-16.0,-16.0/16.0,16.0,0.0/1,1,1/ * * Create points at a resolution of 1.0 km. * createpts/xyz/49,49,25/-24.0,-24.0,-24.0/24.0,24.0,0.0/1,1,1/ * * Create points at a resolution of 2.0 km. * createpts/xyz/33,33,17/-32.0,-32.0,-32.0/32.0,32.0,0.0/1,1,1/ * * Create points at a resolution of 4.0 km. * createpts/xyz/33,33,17/-64.0,-64.0,-64.0/64.0,64.0,0.0/1,1,1/ * * Remove duplicate points * filter/1,0,0/ rmpoint/compress * * Set fields based on region and material * setpts * * Connect points into Delaunay tet mesh, without connecting across * material interfaces, and adding points if needed to resolve * interfaces. * connect/check_interface * * Set element type to tet. * settets * * Reset parent points and remove duplicate points on interfaces. * resetpts/parent rmpoint/compress * * Define external boundaries in terms of coordinates. * pset/front/geom/xyz/1,0,0/-64.05,-64.05,-64.05/64.05,-63.95,0.05/0,0,0/ pset/back/geom/xyz/1,0,0/-64.05,63.95,-64.05/64.05,64.05,0.05/0,0,0/ pset/left/geom/xyz/1,0,0/-64.05,-64.05,-64.05/-63.95,64.05,0.05/0,0,0/ pset/right/geom/xyz/1,0,0/63.95,-64.05,-64.05/64.05,64.05,0.05/0,0,0/ pset/bot/geom/xyz/1,0,0/-64.05,-64.05,-64.05/64.05,64.05,-63.95/0,0,0/ pset/top/geom/xyz/1,0,0/-64.05,-64.05,-0.05/64.05,64.05,0.05/0,0,0/ * * Add nodal attribute to define which external surface a node lies on. * cmo/addatt/cube1/bounds/vint/scalar/nnodes/ cmo/setatt/cube1/bounds/1 0 0/0 cmo/setatt/cube1/bounds/pset get front/1 cmo/setatt/cube1/bounds/pset get back/2 cmo/setatt/cube1/bounds/pset get left/3 cmo/setatt/cube1/bounds/pset get right/4 cmo/setatt/cube1/bounds/pset get bot/5 cmo/setatt/cube1/bounds/pset get top/6 * * Define elements within each region. * eltset/elb1/region/b1/ eltset/elb2/region/b2/ eltset/elb3a/region/b3a/ eltset/elb3b/region/b3b/ eltset/elb4/region/b4/ * * Define point sets as the intersection of element sets. * pset/pb1/eltset/elb1/ pset/pb2/eltset/elb2/ pset/pb3a/eltset/elb3a/ pset/pb3b/eltset/elb3b/ pset/pfb1b2/inter/pb1/pb2/ pset/pfb1b3a/inter/pb1/pb3a/ pset/pfb2b3b/inter/pb2/pb3b/ * * Add nodal fault attribute to determine which fault a node lies on. * Note that the last one listed has the highest priority. * cmo/addatt/cube1/if_faultn/vint/scalar/nnodes/ cmo/setatt/cube1/if_faultn/1 0 0/0 cmo/setatt/cube1/if_faultn/pset get pfb2b3b/3 cmo/setatt/cube1/if_faultn/pset get pfb1b3a/2 cmo/setatt/cube1/if_faultn/pset get pfb1b2/1 * * Elements attached to pfb1b2 are any with nodes in pfb1b2, etc. * eltset/feb1b2/inclusive/pset/get/pfb1b2/ eltset/feb1b3a/inclusive/pset/get/pfb1b3a/ eltset/feb2b3b/inclusive/pset/get/pfb2b3b/ * * For boundary b1b2, positive elements are on block b1. eltset/feb1b2pos/inter/feb1b2 elb1/ eltset/feb1b2neg/inter/feb1b2 elb2/ * For boundary b1b3a, positive elements are on block b3. eltset/feb1b3apos/inter/feb1b3a elb3a/ eltset/feb1b3aneg/inter/feb1b3a elb1/ * For boundary b2b3b, positive elements are on block b3. eltset/feb2b3bpos/inter/feb2b3b elb3b/ eltset/feb2b3bneg/inter/feb2b3b elb2/ * * Add element attribute to determine fault number (if any) an element is * attached to. This attribute also specifies whether an element lies on * the positive or negative side of the fault. * Note that the last one listed has the highest priority. * cmo/addatt/cube1/if_faulte/vint/scalar/nelements/ cmo/setatt/cube1/if_faulte/1 0 0/0 cmo/setatt/cube1/if_faulte/eltset get feb2b3bpos/3 cmo/setatt/cube1/if_faulte/eltset get feb2b3bneg/-3 cmo/setatt/cube1/if_faulte/eltset get feb1b3apos/2 cmo/setatt/cube1/if_faulte/eltset get feb1b3aneg/-2 cmo/setatt/cube1/if_faulte/eltset get feb1b2pos/1 cmo/setatt/cube1/if_faulte/eltset get feb1b2neg/-1 * * Create node sets for fault normals * Note that I am cheating since normals are constant on each plane. * pset/pfbot/geom/xyz/1,0,0/-8.05,-4.05,-8.05/8.05,-3.95,0.05/ pset/pftop/geom/xyz/1,0,0/-8.05,3.95,-8.05/8.05,4.05,0.05/ pset/pfleft/geom/xyz/1,0,0/-8.05,-4.05,-8.05/-7.95,4.05,0.05/ pset/pfright/geom/xyz/1,0,0/7.95,-4.05,-8.05/8.05,4.05,0.05/ pset/pfb1b3ab/inter/pfb1b3a/pfbot/ pset/pfb2b3bb/inter/pfb2b3b/pfbot/ pset/pfb1b3at/inter/pfb1b3a/pftop/ pset/pfb2b3bt/inter/pfb2b3b/pftop/ pset/pfb1b3al/inter/pfb1b3a/pfleft/ pset/pfb2b3br/inter/pfb2b3b/pfright/ * * Add attributes for normal components * cmo/addatt/cube1/xnorm/vdouble/scalar/nnodes/ cmo/setatt/cube1/xnorm/1 0 0/0.0 cmo/addatt/cube1/ynorm/vdouble/scalar/nnodes/ cmo/setatt/cube1/ynorm/1 0 0/0.0 cmo/addatt/cube1/znorm/vdouble/scalar/nnodes/ cmo/setatt/cube1/znorm/1 0 0/0.0 * Normal for pfb1b2 points toward b1 cmo/setatt/cube1/xnorm/pset get pfb1b2/-0.70710678118654 cmo/setatt/cube1/znorm/pset get pfb1b2/0.70710678118654 * Normals for pfb1b3xx and pfb2b3xx point toward b3 cmo/setatt/cube1/ynorm/pset get pfb1b3ab/-1.0 cmo/setatt/cube1/ynorm/pset get pfb2b3bb/-1.0 cmo/setatt/cube1/ynorm/pset get pfb1b3at/1.0 cmo/setatt/cube1/ynorm/pset get pfb2b3bt/1.0 cmo/setatt/cube1/xnorm/pset get pfb1b3al/-1.0 cmo/setatt/cube1/xnorm/pset get pfb2b3br/1.0 * * Dump results to different file formats * dump/gmv/dipblock4.gmv/cube1/ascii dump/avs/dipblock4.inp/cube1/ dump/lagrit/dipblock4.lagrit quality finish