Leaderboard
Popular Content
Showing most liked content since 04/01/13 in all areas

6 likes
hm toolbars
ravinder muppidi and 5 others liked a post in a topic by tinh
Hi all. i made some hypermesh macros in form of "toolbar" if you feel it interesting, please send me your mcid 
6 likesHi, 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

6 likesThe 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 NewtonRaphson 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.

6 likesDear 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 likes
Ball & Beam System
stmaster and 4 others liked a post in a topic by João Marabisa
Hi techs! I've created a Ball & Beam model on MotionView to explore a cosimulation 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 lowpass 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 
5 likes
Update Hypermesh Extensions
llyle and 4 others liked a post in a topic by tinh
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 rightclick 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 
4 likesHello everyone, I would like to share with the community a script that allows the user to test different parameters of a filter to see if the filtered signal is good or not. From line 3 to 16 you can edit the parameters to change both the signal and the filter behaviour. After the script finishes it is possible to check the original and the filtered signal, as wall as the FFTs. Highlighted in yellow are the frequencies of the signal and the plots obtained: PS: It's also possible to use filtfilt instead of filter to keep the signal phase butterworth.oml

4 likesHello community, I want to share some code that will help you to use a gamepad/joystick in compose. I created an OMLclass 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 XInputPython interface: https://pypi.org/project/XInputPython/ In the topic below, there are instructions how to install python modules in compose: regards Nils vrjoystick.zip

4 likesHi, 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 " } } }

4 likesOptiStruct 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.

4 likes

4 likes
Python
Pandurang and 3 others liked a post in a topic by tinh
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 faceface 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 
4 likesHi, 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

3 likes

3 likesHello 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 Halfsine 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

3 likesHello all, As you already know, OML (Open Matrix Language) has a syntax compatible with other matrixbased languages, such as Octave. This compatibility leverages both the reuse of legacy data and syntax knowledge of these other softwares. It means that it’s possible to have a nondisruptive adoption of Compose and it can coexist with existing Math tools. Please find attached a video explaining the main differences that you may encounter when trying to use your past scripts in Compose and how to overcome them. Regards, Roberta LegacyData_AltairCompose.mp4

3 likesDid you know that there are dozens of interesting examples accessible online for multibody / motion simulation using Altair software?! See https://altairhyperworks.com/motionsolvemodels/ These examples have been designed to help raise your awareness for the kinds of simulations that are possible with Altair's multibody 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. Prebuilt model files for the complete, mechanized multibody system. Results files. A presentation (.pptx) file describing the model and how to use it. Enjoy!

3 likes
Likeボタンについて
TranManhTung and 2 others liked a post in a topic by Imoto
あまり気付きにくいかも知れませんが、各投稿の右下には、（Likeボタン）があります。 質問内容や回答内容が「いいね」と感じたり、「役に立った」という場合には、ぜひ（Likeボタン）を押して下さい。 Likeボタンのクリックにより、投稿者の「評判(Reputation)」がアップします。 
3 likes

3 likes
Predefined userprofile
Pandurang and 2 others liked a post in a topic by llyle
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. 
3 likes

3 likes
Get midside node
Pandurang and 2 others liked a post in a topic by tinh
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 {\{[09]+ [09]+ [09]+ [09]+ } $NodeList \{]] 
3 likesHi 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.

3 likesDon't do that, Use hm_latestentityid to return created set id It could not be max id if includes are there (from version 13)

3 likes

3 likes
Setting a Default Value
llyle and 2 others liked a post in a topic by vipin
Hi @Bachelor22 add default value after the string set youngs_modulus [hm_getfloat "Youngs Modulus (Steel)=" "Enter Youngs Modulus:" 210000] 
3 likesJust 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]

3 likes

3 likesYou can use hm_getelemcheckelems command. Example: hm_createmark elems 1 "by config" 104; set fail [hm_getelemcheckelems 1 2 length below 1.0]; hm_createmark elems 1 $fail; *deletemark elems 1; Thanks, Imoto

3 likes
Splitting CAD file
llyle and 2 others liked a post in a topic by Imoto
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 
3 likes

3 likes
TCL script
Rahul R and 2 others liked a post in a topic by Novak
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 
3 likes
2D Mesh  Multibodies
tinh and 2 others liked a post in a topic by Q.NguyenDai
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, 
3 likes
TCL Scripting
Rahul R and 2 others liked a post in a topic by llyle
Below resources will help you get started with tcl/tk programming. https://www.tutorialspoint.com/tcltk/ https://www.packtpub.com/networkingandservers/tcltk85programmingcookbook https://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html 
3 likes
LUA Scripting with FEKO
hans.kalaran and 2 others liked a post in a topic by andries
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. 
3 likes

3 likesFree eBook: Design the Inspire Way – A Practical Introduction to solidThinking Inspire click on the title here This book is a very lightweight introduction into the exciting world of the “Simulation Driven Design Process”. It is meant to give pupils, undergraduate students and maybe even designers new to Computer Aided Engineering CAE a “taste”, a first idea on how simulation, especially conceptual design (simulation) works. The tool of choice used in this book is solidThinking Inspire®. Inspire enables design engineers, product designers, and architects unfamiliar with numeric simulation, to make optimal use of the material by placing it only where needed to meet structural requirements. Become Inspired ...

3 likesThe 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 NewtonRaphson 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.

3 likes
Ls dyna Modal
Sandeep P and 2 others liked a post in a topic by KevinEldridge
Two control cards are needed to run modal simulation in LSDyna: *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. 
3 likes
What is ptype and htype mesh?
tinh and 2 others liked a post in a topic by Rahul R
PFA screenshot from Practical finite element analysis book. 
3 likesThe 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 allinpackage, 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.

3 likesYes 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]

3 likes

3 likes
Templates for SAE SUPRA
Dhaval and 2 others liked a post in a topic by Deep
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 
3 likesScreenshot of my script:

3 likesHi, 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)

3 likes
Error using Cbush
xrek and 2 others liked a post in a topic by tinh
Hi, You seem to define bush parameters for 3 directions but do not provide coordinate system to specify them Update CID card in CBUSH 
3 likes
How to creat 2D element from nodes
Mrt and 2 others liked a post in a topic by MattM
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 3point 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. 
3 likesHi 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 (inplane rotation), so SHELL has 5 dofs/node, remain inplane 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 translationdofs/node and it is enough to transfer moment put more dofs in to a fully position part (element) will make it overconstrained (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

3 likes