Jump to content


Popular Content

Showing most liked content since 04/01/13 in Posts

  1. 6 likes
    Hi all. i made some hypermesh macros in form of "toolbar" if you feel it interesting, please send me your mcid
  2. 6 likes
    Hi, It's fairly direct. hwi OpenStack hwi GetSessionHandle session1 session1 GetProjectHandle project1 project1 GetPageHandle page1 1 page1 GetWindowHandle win1 1 win1 GetClientHandle anim anim GetModelHandle my_model [anim GetActiveModel] my_model GetQueryCtrlHandle my_query set set_id [my_model AddSelectionSet component] my_model GetSelectionSetHandle comp_set $set_id # Select all Components comp_set Add "All" my_query SetSelectionSet $set_id # ask for ids and component name my_query SetQuery "component.id component.name" my_query WriteData D:/out.csv # clean up my_model RemoveSelectionSet $set_id hwi CloseStack
  3. 6 likes
    The equation of motion for a static analysis is as below: [K] {X} = {F} ------------------------------------------ (1) [K] --> Global Stiffness Matrix {X} --> Unknown Displacement {F} ---> External Force Applied. For the body to be in static equilibrium, the net force acting at every node must be zero. Therefore, the basic statement of static equilibrium is that the internal forces, I, and the external forces, F, must balance each other: [K] {X} is nothing but internal force 'I' Equation (1) now becomes, ==> I = F or I - F = 0 -----------------------------------(2) In Dynamic Analysis, the imbalance between the external and internal forces results in an acceleration: F - I = M a. F --> External Forces I ---> Internal Force M*a --> Inertial Forces (mass times acceleration) In linear static analysis the stiffness matrix is constant and shall not change/update throughout the analysis. There are many check need to be performed once you have linear static results for well conditioned problems. The equation (1) is decomposed one time to find the unknown displacement. [K] {X} ={F} After decomposition, a singularity may lead to an incorrect solution. In static analysis to obtain {X} (displacements). Using these displacements, One can calculate a “residual” loading vector as follows: [K] {X} -{F} =δ F This residual vector should theoretically be null (equation 2) but may not be null due to numeric roundoff. In Nonlinear static analysis, The stiffness matrix changes in each and every iteration since the stiffness matrix is dependent on the external load. The external load in Nonlinear static analysis is applied in increments and time here has no physical meaning. Time is just a convenient way to apply full load in nonlinear static analysis. In Optistruct the incremental load is controlled by 'NINC' field in the NLPARM card for NLSTAT load steps, this is a fixed load increment method. If you add the PARAM,EXPERTNL,YES to the deck, the time increment method becomes automatic in which case, the increment (load) is increased or cut back based on the convergence rate. NLGEOM loadstep has automatic time step by default. In NLGEOM loadstep the RAMP load curve can be defined using TABLED1 card and then refer this in NLOAD1 card. In nonlinear static analysis, OptiStruct uses the Newton-Raphson method to obtain solutions for nonlinear problems to maintain the residuals close to zero (equation 2) In a nonlinear analysis the solution usually cannot be calculated by solving a single system of equations, as would be done in a linear problem. Instead, the solution is found by applying the specified loads gradually and incrementally working toward the final solution. Therefore, OptiStruct breaks the simulation into a number of load increments (NINC) and finds the approximate equilibrium configuration at the end of each load increment. It is important that you clearly understand the difference between an analysis step (NLSTAT / NLGEOM), a load increment (NINC of NLPARM card), and an iteration (MAXITER of NLPARM card) The load history for a simulation consists of one or more steps. Within a step you will have many no of increments (NINC), within increment there can be many no. of iteration (MAXITER). OptiStruct checks the equilibrium equation ( equation 2) for each and every iteration. If the solution from an iteration is not converged, OptiStruct performs another iteration to try to bring the internal and external forces into balance. An increment is part of a step. An iteration is an attempt at finding an equilibrium solution in an increment when solving with an implicit method. If the model is not in equilibrium at the end of the iteration, OptiStruct tries another iteration. With every iteration the solution OptiStruct obtains should be closer to equilibrium; sometimes OptiStruct may need many iterations to obtain an equilibrium solution. When an equilibrium solution has been obtained, the increment is complete.
  4. 6 likes
    Dear All, You can refer to attached document which contains Tutorials ( Model Files + Process PDF ) for 1. Hyper Mesh for FE Modelling 2. OptiStruct as solver for a. Analysis b. Optimization 3. Radioss as solver for NL Analysis Students can solve these tutorials & can ask their query on the forum itself. AOC_2017_Practise Models.zip
  5. 5 likes
    Hi techs! I've created a Ball & Beam model on MotionView to explore a co-simulation with Activate. Many of you may have seen this on undergraduate/master class studying on frequency or even on time domain. I've decided to do something different, creating the model on a multibody environment. The control is a simple PD, where I've calculated using analytical method (Kp +Kd.s) with a specified overshoot and settling time. You could explore changing its values... I'd like to thank @Livio Mariano for suggesting me his own low-pass filter in a way to filter the input displacement signal (without it I was having a problem to converge). I've created a short video to show you how it works, and the files are attached. Enjoy! João. Ball_&_beam.zip
  6. 5 likes
    Hello everybody This is a script to project nodes on elems: < a simple script so i do not make package index & installer, you have to source it or invoke menu File>Run>Tcl/Tk Script ProjectNodesToElems.tcl I made a new function for Hypermesh to export entity by right-click on model browser MenuExportDeck.zip Open Hypermesh, from menu File>Run>Tcl/Tk Script , browse to Installer.tcl in folder MenuExportDeck to install it in hmcustom.tcl Related post: I made a new function for Hypermesh to copy mesh among sessions hmcp.zip <updated for HM2017> + <update installer.tcl to install in any folder> Please announce me if any error. - "Extract here" package hmcp.zip, copy the folder "hmcp" to anywhere you want to store. - Open hypermesh and run Installer.tcl file by enter menu File>Run >Tcl/Tk Script - start Hypermesh, it should shows an icon and provide some information like below: - You can copy elements selected in any current panel: - Once again, this topic is to introduce extensions for Hypermesh. I let updated version of hmdnd (drag and drop function) here tkdnd2.6.zip <updated installer.tcl so you can install it to any folder, just open hypermesh and File>Run>Tcl/tk script to run installer.tcl> related post: - And a package to help making your own toolbars:tbopts.zip <update installer.tcl so you can install it to any folder> related post
  7. 4 likes
    Hello community, I want to share some code that will help you to use a gamepad/joystick in compose. I created an OML-class that represents the controller. I will provide you with more informations, documents and updates soon. To make the code work, you need to install the XInput-Python interface: https://pypi.org/project/XInput-Python/ In the topic below, there are instructions how to install python modules in compose: regards Nils vrjoystick.zip
  8. 4 likes
    Hi, You can do that using the below code: foreach str_compName [hm_entitylist comps name] { set str_newCompName [string tolower $str_compName]; if {$str_compName != $str_newCompName} { if {[catch {*renamecollector components "$str_compName" "$str_newCompName"}]} { puts "Multiple components with name $str_compName exists " } } }
  9. 4 likes
    OptiStruct can only accept one SPC and one LOAD component in a subcase, by default. In other words, multiple load collectors with e.g. different SPC's can't be referenced in the load step panel. There are two ways to apply multiple constraints and loads in a subcase. 1. Put multiple loads in one load collector, and include that one load collector in the subcase. The same method can be used in the case of multiple constraints. 2. Create load collectors for each and every load and constraint set. When you want to apply multiple loads in a subcase, a new load collector needs to be created with the LOAD card (=CardImage=Load). Then, individual load collectors can be combined using the LOAD card. The LOAD card also enables you to associate an independent weighting factor to an individual load collector. In the case of applying multiple constraints, create a new load collector with the SPCADD card (=CardImage), and follow the same procedure as in the multiple load case. Once the combined load collectors are created, they can be applied in a subcase.
  10. 4 likes
  11. 4 likes
    You can find a lot of hm template example to summary data in folder ../altair/.../templates/summary those can summary cog, moi,... of comps or other entities if we loop through big data and use hm_getentity... to access data, use expr to calculate, or * commands, it is very slow but looping by template, it is very fast. example i have to check face-face angle of solid elems, tcl can do: foreach elemid $elemlist3d { set angle [p_calculateFaceFaceAngle $elemid] if {$angle>$criteria} {lappend failedlist $elemid} } => it's slow with plenty of solid elems now using template: set TplString { *elements(204,,,) //calculate angle... ... *if([#angle>#criteria]) *markfailed() *endif() *output() } #write it to a text file set fpt [open demo.tpl w] puts $fpt $TplString close $fpt #call template processor *usercheck demo.tpl demo.out 0 => so hm will loop through elems and calculate angle (very fast), tcl just calls template processor
  12. 4 likes
    Hi, it is simpler if you write a *.tcl file because tcl commands are not used directly in macro file, example file <Move2dElemsToComp.tcl> : proc ::p_Move2dElemsToComp {{CompName ^2D}} { if {![hm_entityinfo exist comps $CompName -byname]} { *collectorcreateonly comps $CompName "" 11 } *createmark elems 1 "by config" tria3 quad4 tria6 quad8 if {[hm_marklength elems 1]} {*movemark elems 1 $CompName} } ::p_Move2dElemsToComp Now your macro will be: *beginmacro("Move2D") *evaltclscript("C:\Users\demo\Documents\Move2dElemsToComp.tcl",0) *endmacro
  13. 3 likes
    Hello everyone, Regarding some Shock's analysis demands, I've decided to facilitate and automate (using Activate) the task to obtain the expected Shock Response Spectrum curve as below: This model will be very useful for those who are intending to do some Shock's analysis, even a linear approximation using the amplification factor on a certain frequency, as a Response Spectrum covering all the frequency domain. Basically the inputs are the Half-sine and System properties: Sine: Magnitude, period, phase. System: Mass, damping, stiffness. After set them, you'll just have to click 'Run' and then 'Execute'. Besides the traditional plots (Acceleration (G) vs. Frequency (Hz)) you will already have the 'TABLED1.fem' to be used on OptiStruct, as can be seen in this video. Thanks for @robertavarela, @RoKet and @Adriano Koga for some tips regarding the modeling. Hope this be very useful for you all! Please, let me know if you have any question about this model (attached). João. Srs_curve_model.zip
  14. 3 likes
    Hi everyone, i'd like to share a script slightly modified, based on the very famous 99lines topology optimization script from Ole Sigmund group (http://www.topopt.mek.dtu.dk/). It brings a topology optimization problem, for miminize compliance, while keeping a limited volume fraction of material. It is a bi-supported beam example. This runs fine in Compose 2019..3+ I believe. Just load the .oml file, and run the script. Then for execution type a few parameters while calling the 'top' function. top(20,10,0.5,3.0,1.5) top(numb elems in x, numb elems y, volume fraction, penalization , minimum radius filter) 99lines_modified.oml
  15. 3 likes
    Hello all, I wanted to share with you a tool to digitize plots in images using OML and Python. The aim is to convert plots that are introduced in text books like Analysis and Design of Flight Vehicle Structures (Bruhn, 1973): Such plots are commonly used in industries like Aerospace to calculate constants and other parameters that assess Margins of Safety of components and systems. Finally, we can do a polynomial curve fitting to use these curves and compute these constants without the need to look at the plots everytime they must be applied. The steps of the attached scripts are: 1) Give the axes bounds, degree of polynomial curve fitting and image whose plot will be digitized 2) Hit Start in the OML script (it will automatically call the Python script) 3) Give a first click with the mouse button to start selecting the corners of the plot 4) Select the corners 5) Give another click to select the points 6) Select as many points as you want 7) Double click with any key to finish the selection 8) Plot is generated and polynomial coefficients are computed and printed Regards, Roberta PlotDigitizer.oml ginput_plot.py
  16. 3 likes
    Did you know that there are dozens of interesting examples accessible online for multi-body / motion simulation using Altair software?! See https://altairhyperworks.com/motionsolve-models/ These examples have been designed to help raise your awareness for the kinds of simulations that are possible with Altair's multi-body motion simulation tools. There are currently 17 examples for MotionView+MotionSolve and 29 examples for Inspire Motion -- with dozens more examples scheduled to be added quite soon. The goal is to continually add more and more over time. So consider bookmarking that page and check back often! Each example comprises two pieces: (1) a movie clip that plays automatically in your browser + (2) a downloadable zip file which typically contains: One or more movie (.mp4) files. Pre-built model files for the complete, mechanized multi-body system. Results files. A presentation (.pptx) file describing the model and how to use it. Enjoy!
  17. 3 likes
    あまり気付きにくいかも知れませんが、各投稿の右下には、(Likeボタン)があります。 質問内容や回答内容が「いいね」と感じたり、「役に立った」という場合には、ぜひ(Likeボタン)を押して下さい。 Likeボタンのクリックにより、投稿者の「評判(Reputation)」がアップします。
  18. 3 likes
    Hi all I made drag and drop feature for Hm https://www.youtube.com/watch?v=ZEjagCOMg0I Hoping new versions will have such feature download here:
  19. 3 likes
    First createmark by card image, Then filter them by option Example *createmark sets 1 "by card image name" Part *createmark sets 2 "equal to value" \$LSD_TitleOpt 1 *markintersection sets 1 sets 2 puts [hm_getmark sets 1]
  20. 3 likes
    Hi, Deleting those files usually helps, Or you can write a .bat files like below: "C:/Program Files/Altair/2017.3/hm/bin/win64/hmopengl.exe" -nouserprofiledialog -uOptiStruct Search HyperMesh Startup Options in Altair Connect or in Help doc for more info.
  21. 3 likes
    I remember there is a relevant command but can't find it. Example to get mid side nodes of quad8: *createmark elems 1 "by config" quad8 set NodeList [hm_getvalue elems mark=1 datanames=nodes] set MidNodes [join [regsub -all {\{[0-9]+ [0-9]+ [0-9]+ [0-9]+ } $NodeList \{]]
  22. 3 likes
    Hi Roche, You can try the below commands to Set you need: set setHandle [$modelHandle GetSelectionSetHandle setH1 "Set $id"] set nameSet [setH1 GetLabel] # Can also be: set setHandle [$modelHandle GetSelectionSetHandle setH2 "User_Set $id"] set nameSet [setH2 GetLabel] # User_Set or Set are called pool can be found through GetPoolList # Refer documentation for more info.
  23. 3 likes
    Don't do that, Use hm_latestentityid to return created set id It could not be max id if includes are there (from version 13)
  24. 3 likes
    @JFormiga14 the sliding contact is the key for correlation IMHO. Sliding contact might not work using linear static analysis. In linear static analysis, the contact status does not change, does not slide and the contact stiffness is constant throughout. I tried with non-linear quasistatic (NLSTAT) and got slightly larger Y displacement (0.21 vs 0.19). Ensaio_Olhais_edit.h3d
  25. 3 likes
    Check the below. *nodecleartempmark; *createmark loads 1 "by config" temperature; *findmark loads 1 1 1 nodes 0 2; set lst_TemperatureNodes [hm_getmark nodes 2]; eval *createmark nodes 1 $lst_TemperatureNodes; *createmark nodes 1 "reverse"; *nodemarkaddtempmark 1;
  26. 3 likes
    Hi @Bachelor22 add default value after the string set youngs_modulus [hm_getfloat "Youngs Modulus (Steel)=" "Enter Youngs Modulus:" 210000]
  27. 3 likes
    Hi If you don't find an "hm_" command to get these vertices: *features_advanced (as vipin suggestion) *createmark elems 1 "by comp name" ^feature set NodeList [join [hm_getvalue elems mark=1 dataname=nodes]] array set Count {} set Vertices {} foreach NodeId $NodeList { if {[incr Count($NodeId)]>2} {lappend Vertices $NodeId} } puts $Vertices Before version 13 we don't have command "hm_getvalue", so looping through each element by tcl and get its nodes is quite long. at that time, to query such data i had to use an hm template to fasten script.
  28. 3 likes
    Just another way to handle this.... *createmarkpanel nodes 1 "Select nodes to which the attached elements have to be determined" eval "*createmark elems 1 \"by nodes\" [hm_getmark nodes 1]" eval "*createmark nodes 2 \"by elems\" [hm_getmark elems 1]" *marknotintersection nodes 1 nodes 2 eval "*createmark elems 2 \"by nodes\" [hm_getmark nodes 1]" *markdifference elems 1 elems 2 set attached_elem_list [hm_getmark elems 1]
  29. 3 likes
    Below cmd could work: *createmark comps 1 "contains value" name apples* 1 puts [hm_getmark comps 1]
  30. 3 likes
    Hi Vipin You can use "by block" option in *createmark. Here is sample code. set blockname [::hwat::utils::GetUniqueName block "Dummy"]; *createsimpleblock $blockname 11 -100000 -100000 0.5 100000 100000 100000; *createmark surfs 1 "by block name" $blockname; *numbersmark surfaces 1 1; *createmark blocks 1 "by name only" $blockname; *deletemark blocks 1; Thanks, Imoto
  31. 3 likes
    Hello Everyone Firstly thanks a lot Livil for all the help. Really grateful for it. Secondly, here is the file which Livil wrote, in case any one needs it in future. merged.tcl
  32. 3 likes
    work with only 1/4 Split surface of 2nd by 1st Make 2D mesh on 1st solid (yellow) => Make 3D tet mesh for 1st solid On interface, make 2D mesh on 2nd solid => Equivalence of nodes. Make the rest of 2D mesh of 2nd solid & equivalent of nodes: Finally fill 3D tet for 2nd solid and get the final result: Here's HM model: peca.hm HTH,
  33. 3 likes
    Below resources will help you get started with tcl/tk programming. https://www.tutorialspoint.com/tcl-tk/ https://www.packtpub.com/networking-and-servers/tcltk-85-programming-cookbook https://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html
  34. 3 likes
    Hello @mustaphos, @JIF beat me to it...! Of course, this is the "more correct" way to learn how to do scripting and automation. The shortcut way to get started with scripting (in CADFEKO) is to use "Macro recording". You'll see in the status bar (in the bottom of the application) a button with a puzzle piece and a red circle. If you press this, then CADFEKO will record every action you take that changes the model. In other words, if you start recording and create / modify / delete a variable, then a script will be recorded that shows you how to do precisely that one bit of scripting. It's cheating but I won't tell anyone.
  35. 3 likes
    Attached PPT contains the tests to be done to verify the Creo configuration in SimLab. SimLab_Creo_Configuration_Test.pptx
  36. 3 likes
    Yes, there is not direct but simple way It is like this *createmarkpanel elems 1 "Select elements:" hm_blockerrormessages 1 catch {*findloops elems 1 0} hm_blockerrormessages 0 if {[hm_entityinfo exist comps ^loops]} { #if you use hm14 or newers: *createmark elems 1 "by comp name" ^loops set FreeEdgeLoops [hm_findconnectedpatches elems 1] #if you use hm13 or olders: upgrade => version14 #just joke! try isolate only component ^loops, and gather its elems "by attached" }
  37. 3 likes
    Two control cards are needed to run modal simulation in LS-Dyna: *CONTROL_IMPLICIT_GENERAL with IMFLAG=1 (tells Dyna it's an implicit simulation); and *CONTROL_IMPLICIT_EIGENVALUE with NEIG set to the number of modes you want extracted.
  38. 3 likes
    PFA screenshot from Practical finite element analysis book.
  39. 3 likes
    The settings file information is only a message, there is no need to do anything. The rest of the messages and errors are because HyperStudy cannot resolve many of the paths and dependencies on the server machine. Hand editing the xml is error prone and not recommended. On your local machine, please create an archive (File->Export Archive). This will create an *hstx archive file. This is an all-in-package, similar to a zip file. This package contains all the file dependencies internally and will automatically expand into proper paths on a different machine. The archive system is the proper way to maintain portability across machines. The archive file can be directly submitted to the hstbatch executable, please see the options in the help. Also, there is an error about the spreadsheet report, which requires excel to be installed. I'd guess that it is not installed on the server machine, so you should deactivate that report type.
  40. 3 likes
    Yes surface is not a named hypermesh entity. If you tagged the surf in catia. Maybe the tag will be imported into hm as metadata. Try searching it by: set md [hm_metadata findall] puts [join [lsearch -all -inline -glob $md "surfs $surfID *"] \n]
  41. 3 likes
  42. 3 likes
  43. 3 likes
    Please try to do this process and add your systems and add your data from data sets MotionView>Models>Assembly Wizard>Front end of Vehicle. Select your assembly and try to create your model
  44. 3 likes
  45. 3 likes
    Hi, in algebra math, with a given square matrix A, and a vector V not equal zero if you found a value "e" satisfy: A.V = e.V => then "e" call eigen value. a matrix may have some "e" values math meaning of "e" is essence of matrix A, if A has one eigen value equal 0 => rank of A is down and its determination is 0 (not invertible) also, vector V is a special vector, that do not change direction when transformed by matrix A, called eigen vector In normal mode, below problem is solved: M.x'' + K.x = 0 or M.x'' = -K.x x'' proportional to x, mean: M.e.x = -K.x or K.(1/M).x = -e.x K.(1/M) is matrix A, so "-e" is eigenvalue of A x = V.sin(wt+phi) => x'' = -w².x so "e" is w² w is called eigen frequency, but not eigen value of matrix A K.(1/M)
  46. 3 likes
    Hi, You seem to define bush parameters for 3 directions but do not provide coordinate system to specify them Update CID card in CBUSH
  47. 3 likes
    I agree, I would calculate with shell elements. However, I have tested this myself. I created a simple model of a cantilever beam and compared different solid meshes with the max output von Mises stress result. Via hand calculations (baseline): Stress = 600 MPa 1x HEX8 element through thickness: Stress = 565 MPa 2x HEX8 element through thickness: Stress = 604 MPa 1x TET4 element through thickness: Stress = 154 MPa 2x TET4 element through thickness: Stress = 387 MPa 1x TET10 element through thickness: Stress = 623 MPa The results are a bit iffy because the max stress is located near the constraints (I should've done this using a 3-point bending model...) You can clearly see here that TET4 elements are bad at calculating stresses through the thickness due to bending. However the TET10 element (with midside nodes) is a lot better. Still, for best results calculating stresses through the thickness I would be using HEX elements (where possible) for thick components and QUAD elements for thin shell components.
  48. 3 likes
    Hi, this captures may help you figure out vertex angle: these are vertex angles: when automeshing, I set feature angle to 90D while vertex angle kept 30D, you can see inside features were neglected but outside free edges not changed, because vertex angles>30D make vertices (yellow nodes) become anchor nodes
  49. 3 likes
    Hi I had exactly same questions when i was in university and no teacher told me answer, unfortunately my fe textboooks just say that brick has 3 dofs/node, shell 6dofs/node,... but do not explain then i have to imagine (actually similar to when i was processing of mechanical parts): - when I lathe a shaft (ROD), i have to position one end fully in a clamper (like a tube), so ROD need 6 dofs/node to be fully constrained - when I punch a sheet (SHELL), i have to position one corner with 5 dofs and one other corner 1 dof (in-plane rotation), so SHELL has 5 dofs/node, remain in-plane rotation dof is constrained by adjacent node, so you never let 2 shell elements connect together by only 1 node (cannot transfer moment). But some solvers may provide particular SHELL has fully 6dofs/node, like CQUADR in nastran/optistruct - when I mill a block (BRICK), i have to position 3 faces so it cannot move in 3 directions, after position 3 faces then it cannot rotation around 3 axles also because each plane (face) constrained rotation dofs. so BRICK have 3 translation-dofs/node and it is enough to transfer moment put more dofs in to a fully position part (element) will make it over-constrained (too stiff) and be careful when connect 1d to 2d, 2d to 3d or 1d to 3d, you have to take into account all dofs have to be constrained
  50. 3 likes
    please locate your working directory by right click on hm icon > properties > start in field In this location delete the hmsettings.tcl, hmmenu.set and command.cmf. also hwsettings.xml
  • Create New...