# write exodus file with facesets # facesets 3 bottom=1, top=2, sides=3 define INPUT_MESH stack.inp define CMO_IN momesh # READ mesh read / INPUT_MESH / CMO_IN resetpts / itp # PREPARE stack mesh for Exodus # sort based on element itetclr number and median location # Note Exodus expects materials to appear in mesh in order 1 to N # this is also done so numbering for Exodus matches other formats createpts / median sort / CMO_IN / index / ascending / ikey / itetclr xmed ymed zmed reorder / CMO_IN / ikey cmo / DELATT / CMO_IN / xmed cmo / DELATT / CMO_IN / ymed cmo / DELATT / CMO_IN / zmed cmo / DELATT / CMO_IN / ikey # EXTRACT surface with cell and face attributes # to get the outside face to element relationships # this will be used to write faceset files for dump/exo extract / surfmesh / 1 0 0 / mo_surf / CMO_IN / external cmo / printatt / mo_surf / -all- / minmax # default # Set surface elements to direction they face based on normals cmo / addatt / mo_surf / id_side / vint / scalar / nelements cmo / select mo_surf settets / normal cmo / copyatt / mo_surf mo_surf / id_side itetclr cmo / printatt / mo_surf / id_side / minmax dump gmv tmp_fs_normals.gmv mo_surf # make sure to remove all attributes except idelem1 and idface1 cmo / DELATT / mo_surf / itetclr0 cmo / DELATT / mo_surf / idnode0 cmo / DELATT / mo_surf / idelem0 cmo / DELATT / mo_surf / facecol cmo / DELATT / mo_surf / itetclr1 cmo / DELATT / mo_surf / idface0 cmo / DELATT / mo_surf / nlayers cmo / DELATT / mo_surf / nnperlayer cmo / DELATT / mo_surf / neperlayer cmo / DELATT / mo_surf / ikey_utr ######## DEFINE FACESET FILES #################### # this version has 3 sets 1=bottom, 2=top, 3=sides # use stack attribute layertyp to set top and bottom # set all sides to default 3 all cmo / select mo_surf cmo setatt mo_surf/ id_side / 3 pset/ ptop /attribute layertyp/1,0,0/ eq -2 pset/ pbot /attribute layertyp/1,0,0/ eq -1 eltset/ etop / exclusive pset,get,ptop eltset/ ebot / exclusive pset,get,pbot cmo setatt mo_surf/ id_side / eltset,get,etop 2 cmo setatt mo_surf/ id_side / eltset,get,ebot 1 cmo printatt mo_surf/ id_side/ minmax # attribute id_side can add flexibility to colors # when done setting id_side, copy to itetclr cmo/copyatt/ mo_surf mo_surf/ itetclr id_side dump gmv tmp_surf_sides.gmv mo_surf ######## WRITE FACESET FILES #################### define / FILENAME / fs1_bot.faceset define / SS_ID / 1 cmo / copy / mo_tmp / mo_surf cmo / select / mo_tmp eltset / e_keep / id_side / eq / SS_ID eltset / e_delete / not / e_keep rmpoint / element / eltset get e_delete rmpoint / compress cmo / DELATT / mo_surf / layertyp cmo / DELATT / mo_tmp / id_side dump / avs2 / FILENAME / mo_tmp / 0 0 0 2 cmo / delete / mo_tmp define / FILENAME / fs2_top.faceset define / SS_ID / 2 cmo / copy / mo_tmp / mo_surf cmo / select / mo_tmp eltset / e_keep / id_side / eq / SS_ID eltset / e_delete / not / e_keep rmpoint / element / eltset get e_delete rmpoint / compress cmo / DELATT / mo_surf / layertyp cmo / DELATT / mo_tmp / id_side dump / avs2 / FILENAME / mo_tmp / 0 0 0 2 cmo / delete / mo_tmp ## CHECK that top number of faces = bottom = layer define / FILENAME / fs3_sides.faceset define / SS_ID / 2 cmo / copy / mo_tmp / mo_surf cmo / select / mo_tmp eltset / e_keep / id_side / eq / SS_ID eltset / e_delete / not / e_keep rmpoint / element / eltset get e_delete rmpoint / compress cmo / DELATT / mo_surf / layertyp cmo / DELATT / mo_tmp / id_side dump / avs2 / FILENAME / mo_tmp / 0 0 0 2 cmo / delete / mo_tmp # write some informational files and output surfmesh # write the extracted surfmesh with fs colors dump gmv surfmesh_fs3.gmv mo_surf dump avs surfmesh_fs3.inp mo_surf cmo printatt mo_surf -all- minmax cmo delete mo_surf cmo printatt CMO_IN -all- minmax ############################ # WRITE final mesh with multi material and all facesets define OUT_EXO mesh_fs3.exo dump / exo / OUT_EXO / CMO_IN / / / facesets & fs1_bot.faceset fs2_top.faceset fs3_sides.faceset # GMV can display facesets as surfaces dump / gmv / mesh_exo.gmv / CMO_IN finish