****************************** * * Carl W. Gable * gable@lanl.gov * LaGriT Control File * http://lagrit.lanl.gov * http://meshing.lanl.gov * ****************************** * * Build tet meshes * and insert a fault plane. * * Carl Gable * gable@lanl.gov * * Build background mesh * infile build_background_mesh.mlgi * * Build a plane to stick inside the box * infile build_plane.mlgi * * Make the fault into a volume mesh. * * extrude the triangles 200m normal to the surface. * extrude / cmo_prism1 / cmo_tri1 / const / 200. / volume * * Flip the normal vector to the triangulation so that when we * extrude in the other direction, the element volumes are still positive. * geniee / cmo_tri1 / 2dnormal / -1 extrude / cmo_prism2 / cmo_tri1 / const / 200. / volume * * Add the two prism meshes together. * addmesh / append / cmo_prism3 / cmo_prism1 / cmo_prism2 cmo / select / cmo_prism3 * * Remove duplicate points where the two were joined. * filter / 1 0 0 rmpoint / compress * * Reset the face connectivity (jtet array) * geniee resetpts / itp * * Convert the prisms to tets * hextotet / / cmo_flt_tet / cmo_prism3 dump / gmv / fault01_volume.gmv / cmo_flt_tet * * Clean up and get the volume tet mesh into cmo_tri1 * cmo / delete / cmo_tri1 cmo / delete / cmo_prism1 cmo / delete / cmo_prism2 cmo / delete / cmo_prism3 cmo / delete / cmo_flt_tet read / gmv / fault01_volume.gmv / cmo_tri1 * * Find where the tet mesh is close to the fault plane. * compute / distance_field / CMO_NAME / cmo_tri1 / dfield * dump / gmv / dfield.gmv / CMO_NAME cmo / select / CMO_NAME pset / prefine / attribute / dfield / 1 0 0 / 3000. / lt eltset / erefine / inclusive / pset get prefine refine / eltset / eltset get erefine rmpoint / compress eltset / erefine / delete pset / prefine / delete dump / gmv / refine1.gmv / CMO_NAME cmo / DELATT / CMO_NAME / dfield compute / distance_field / CMO_NAME / cmo_tri1 / dfield pset / prefine / attribute / dfield / 1 0 0 / 1000. / lt eltset / erefine / inclusive / pset get prefine refine / eltset / eltset get erefine rmpoint / compress dump / gmv / refine2.gmv / CMO_NAME intersect_elements / CMO_NAME / cmo_tri1 / in_flt eltset / e_in_flt / in_flt / gt / 0 rmpoint / element / eltset get e_in_flt rmpoint / compress * * Intersect can leave behind some nodes that are very very close * to the fault plane. Use an alternative method to delete the * nodes close to the plane. * read / gmv / fault01_ref1.gmv / cmo_tmp refine2d refine2d cmo / select / cmo_tmp cmo / DELATT / CMO_NAME / dfield compute / distance_field / CMO_NAME / cmo_tmp / dfield cmo / delete / cmo_tmp cmo / status / brief cmo / select / CMO_NAME pset / pdel / attribute / dfield / 1 0 0 / 275. / lt eltset / edel / inclusive / pset get pdel rmpoint / element / eltset get edel rmpoint / compress eltset / edel / delete dump / gmv / rmpoint.gmv / CMO_NAME * * Now put the two point distributions together and connect to form tets. * cmo / create / cmo_tet2 / / / tet copypts / cmo_tet2 / CMO_NAME copypts / cmo_tet2 / cmo_tri1 cmo / setatt / CMO_NAME / imt / 1 0 0 / 1 cmo / setatt / CMO_NAME / itp / 1 0 0 / 0 connect / noadd rmpoint / compress dump / gmv / connect.gmv / cmo_tet2 cmo / DELATT / CMO_NAME / dfield compute / distance_field / cmo_tet2 / cmo_tri1 / dfield dump / gmv / tets_w_fault.gmv / cmo_tet2 * * Identify elements ABOVE and BELOW the fault plane. * The algorithm tests the position of element centroids relative * to the regions defined below. * cmo / delete / cmo_tri1 read / gmv / fault01_ref1.gmv / cmo_tri1 surface / s_flt1 / reflect / sheet / cmo_tri1 cmo / select / cmo_tet2 region / r_above / ge s_flt1 region / r_below / lt s_flt1 eltset / e_below / region / r_below cmo / addatt / cmo_tet2 / id_block / vint / scalar / nelements cmo / setatt / cmo_tet2 / id_block / 1 0 0 / 1 cmo / setatt / cmo_tet2 / id_block / eltset get e_below / 2 quality / aspect / y dump / gmv / tets_id_flt.gmv / cmo_tet2 finish