How to adjust Hypermesh macro in order to work with ABAQUS
Altair Forum User
Altair Employee
I would like to use the Midsurface_Creation_CreateComp.tcl macro in Hypermesh but it only works with the Nastran user profile. I need to use it with ABAQUS! Can anyone please help me? Thank you
0
Answers
-
Try this. It is quite old, but I just checked it and it still works.
1) Load the Abaqus user profile
2) Create a template property card that has the shell_section properties you want
3) Run the macro
A) Select the prop card you made
/emoticons/default_cool.png' alt='B)'> Select the comps you would like to midplane
################################################### Midsurf All was written to midsurface all# solid geometry and organize the data so that # assembly information was intact################################################### Michael Dambach Altair Engineering Inc# Email: dambach@altair.com# October 08 2003##################################################set install_home [ hm_info -appinfo ALTAIR_HOME ]set tol 0.001set tcl_precision 4*templatefileset '$install_home/templates/feoutput/abaqus/standard.3d'*clearmark props 1 *createmarkpanel props 1 'Select template property card'set template_id [ hm_getmark props 1 ]set template_prop [ hm_getcollectorname props $template_id ]set matname [ hm_getentityvalue props '$template_prop' 'material.name' 1 ]#tk_messageBox -message 'matname is $matname'*clearmark comps 1*createmarkpanel comps 1 'Select Components to Midsurface'set complist [ hm_getmark comps 1]set ok 'yes'set bad_comp_names {}*displaycollectorwithfilter components 'none' '' 1 0*displaycollectorwithfilter components 'none' '' 0 1set oldcharacter {.}set newcharacter '_'set compnamelist [] foreach compid $complist { set compname [ hm_getcollectorname comps $compid ] set compfullname [ split $compname $oldcharacter ] set compnewname [] set j 0 foreach i $compfullname { if { $j == 0 } { set compnewname $i } else { set compnewname $compnewname$newcharacter$i } incr j } catch { *renamecollector component $compname $compnewname } lappend compnamelist $compname }foreach compname $compnamelist { set split_compname [ split $compname '' ] if { [ llength $split_compname ] > 28 } { #tk_messageBox -message 'compname $compname is too long' *displaycollectorwithfilter components on $compname 1 0 *displaycollectorwithfilter components on $compname 0 1 lappend bad_comp_names $compname set ok 'no' }}set bad_comps []if { $ok == 'yes' } { foreach compid $complist { set compname [ hm_getcollectorname comps $compid ] *clearmark surfs 1 #*createmark surfaces 1 'all' eval *createmark surfaces 1 'by comp name' $compname set allsurfaces [hm_getmark surfaces 1] #*clearmark surfs 1 #eval *createmark surfs 1 $allsurfaces #*maskmark surfaces 1 set move_error [ catch { *collectorcreateonly components '${compname}_old' '' 7 } ] *currentcollector comps '$compname' #*clearmark mats 1 #*createmark mats 1 '${compname}_old' #catch { *deletemark mats 1 } eval *createmark surfaces 1 $allsurfaces set move_error [ catch { *movemark surfaces 1 ${compname}_old } ] *createmark solids 1 'by comp name' $compname set move_error [ catch { *movemark solids 1 ${compname}_old } ] if { $move_error != 0 } { catch { *collectorcreateonly components 'CompNameTooLong' '' 7 } *currentcollector comps '$compname' *clearmark surfs 1 eval *createmark surfaces 1 $allsurfaces set move_error [ catch { *movemark surfaces 1 'CompNameTooLong' } ] } *normalsoff *clearmark surfaces 1 eval *createmark surfaces 1 $allsurfaces *midsurface_extract_new surfaces 1 -1 0 1 1 0 10 0 10 -2 undefined 0 0 0 *midsurface_remove_edit_bodies *release_temp_fixed_vertices *normalsoff *clearmark surfaces 1 *clearmark surfs 1 *createmark surfaces 1 'by comp name' '$compname' set newsurfs [ hm_getmark surfs 1 ] if { [ llength $newsurfs ] != 0 } { set surfid [ lindex $newsurfs 0 ] *clearmark surfs 1 *createmark surfaces 1 $surfid *linefromsurfedge surfaces 1 *normalsoff *clearmark lines 1 *createmark lines 1 -1 *nodecreateonlines lines 1 3 0 0 *clearmark nodes 1 *createmark nodes 1 -1 *markprojectnormallytosurface nodes 1 $surfid set midsurf_error [ catch { set thick [ hm_getnodalthickness nodes -1 ] } ] if { $midsurf_error != 0 } { set midsurf_error [ catch { set thick [ hm_getnodalthickness nodes -2 ] } ] } set max [ expr { [ llength $newsurfs ] - 1 } ] set surfid [ lindex $newsurfs $max ] *clearmark surfs 1 *createmark surfaces 1 $surfid *linefromsurfedge surfaces 1 *normalsoff *clearmark lines 1 *createmark lines 1 -1 *nodecreateonlines lines 1 3 0 0 *clearmark nodes 1 *createmark nodes 1 -1 *markprojectnormallytosurface nodes 1 $surfid set midsurf_error [ catch { set thick2 [ hm_getnodalthickness nodes -1 ] } ] if { $midsurf_error != 0 } { set midsurf_error [ catch { set thick2 [ hm_getnodalthickness nodes -2 ] } ] } if { [ expr { $thick - $thick2 } ] > $tol } { lappend bad_comps $compname set midsurf_error 1 } #tk_messageBox -message 'compname is $compname' if { $midsurf_error == 0 } { #tk_messageBox -message 'thick is $thick' # ABAQUS Thickness: *collectorcreatesameas properties '${compname}' '$template_prop' '$matname' 3# *collectorcreateonly properties '${compname}_prop' '$template_prop' 3 *clearmark props 1 *createmark props 1 '${compname}' set prop_id [ hm_getmark props 1 ] *attributeupdatedouble properties $prop_id 111 2 1 0 $thick *clearmark comps 1 *createmark comps 1 '$compname' *propertyupdate components 1 '${compname}' *nodecleartempmark } } } if { [ llength $bad_comps ] != 0 } { tk_messageBox -message 'These Component were determined to have inconsistent thickness values.\n\nThey were not assigned a thickness.\n\n$bad_comps' } } else { tk_messageBox -message 'these comp names are too long to use this macro.\n\nPlease rename them (displayed) and try again.'}
Hope that helps.
0