Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by MattM

  1. I ran the following bdf: SOL 101 CEND DISPLACEMENT = ALL ELFORCE = ALL GPFORCE = ALL SPCFORCES = ALL $ SUBCASE 1 LABEL= Lift SPC = 1 DEFORM = 2 ANALYSIS = STATIC BEGIN BULK PARAM,POST,-1 GRID 1 0.0 0.0 0.0 GRID 2 345.656 0.0 -15.423 GRID 3 287.795 0.0 -36.262 RBE2 2 2 12346 3 CROD 1 1 1 3 $ PROD 1 1314.159315707.96 MAT1 172000.0 0.3 $ $ SPC 1 1 12346 0.0 SPC 1 2 12346 0.0 DEFORM 2 1 109.71 $ ENDDATA This gives the following displacements from the .f06: POINT ID. TYPE T1 T2 T3 R1 R2 R3 1 G 0.0 0.0 0.0 0.0 0.0 0.0 2 G 0.0 0.0 0.0 0.0 -3.931020E+00 0.0 3 G 8.191853E+01 0.0 -2.274528E+02 0.0 0.0 0.0 Note that the length of the RBE2 is [(345.656 - 287.795)^2 + (36.262-15.423)^2]^0.5 = 61.499 Therefore, the equation of the line that Node 3 can move is x^2 + y^2 = 61.499^2 relative to the origin of the circle which is Node 2. In the reference system where Node 2 is the origin, the original position of Node 3 is 57.861, 0.0, -20.839. Double checking it lies on the circle: (57.681^2+20.839^2)^0.5 = 61.499 When we calculate the new position of Node 3, we get 57.861+81.19853 = 133.06 and -20.839 - 227.4528 = -248.292. Obviously we can already see that the model has not behaved as expected since the X and Z positions shouldn't be able to be more than +/- 61.499. I have also tried the model with forces applied instead of DEFORM cards for similar results. Just to prove with the equation of the circle: (133.06^2 + 227.839^2)^0.5 = 263.85 (i.e. not 61.499). When you say it's OK, do you mean the model ran? Because my model runs, but the results are incorrect based on the structure I am trying to model.
  2. It depends on the model and the part. For example we don't use solid elements in GFEMs of whole aircraft models in the aerospace industry.
  3. Hey, I noticed this problem after I posted - but it still doesn't work. For example, the deflections of Node 3 are never on the circle produced by the radius of the RBE2 element - I've tried with DEFORM cards, Forces applied along the CROD element on Node 3, non-linear analyses, modal analyses... I'm not sure if I am missing something stupid or if there is a nuance with the maths within the NASTRAN code.
  4. I generally model Nomex honeycomb in the same way, and would make this MAT8 card for that core: MAT8 1 1.0 1.0 0.3 1.0 41.0 20.0 3.2-11 1.0 1.0 1.0 1.0 0.35 EDIT: You can put the real strengths in if you like, but generally I just use 1MPa since I don't check the failure of the core within my FEM analysis. I use 1.0 for E11 and E22 since the honeycomb doesn't carry load in these directions - the skins do.
  5. Hi, I'm trying to model a revolute joint as part of a 1D element actuator mechanism in NASTRAN. I have created the simple model in MotionView and it works, however I need to understand how to model this correctly and that the kinematics work for a static analysis when I introduce the rest of the structure and stops into the system. My problem is that my RBE2 is elongating - I need it to stay the same length so that the actuator deforms correctly. Can someone check my .bdf input and see if I've made any errors with the DOFs or missed something simple? It is really very simple - only 4 GRIDS! For reference, I've attached the MotionView output of how the elements should displace. Thanks in advanced, Matt SOL 101 CEND VECTOR(PLOT,SORT1,REAL)=ALL DISPLACEMENT = ALL ELFORCE = ALL GPFORCE = ALL SPCFORCES = ALL $ SUBCASE 1 LABEL= Lift SPC = 1 DEFORM = 2 ANALYSIS = STATIC BEGIN BULK PARAM,POST,-1 GRID 1 0.0 0.0 0.0 GRID 2 345.656 0.0 -15.423 GRID 3 287.795 0.0 -36.262 GRID 4 287.795 0.0 -36.262 RBE2 2 2 123456 4 RJOINT 3 4 3 12346 CROD 1 1 1 4 $ PROD 1 1314.159315707.96 MAT1 172000.0 0.3 $ $ SPC 1 1 12346 0.0 SPC 1 2 12346 0.0 DEFORM 2 1 109.71 $ ENDDATA Actuator Test.h3d
  6. I wrote this the other day to be able to click on the part and see what component it is (It is useful for checking part numbers of bits after importing a big assembly for example) #Select the component *createmarkpanel comps 1 "Select component:" #Get name of component set name [hm_getmark comps 1] *clearmarkall 1 set comp_name [hm_getentityvalue comps $name name 1 -byid]; tk_messageBox -message "Name of Component: $comp_name"
  7. Optistruct is similar (if not the same) as Nastran for creating cards for material non-linearity. For material non-linearity in Nastran you'll need a MATS1 card which will reference a TABLES1 card. In the TABLES1 card you input your points for a stress strain curve. The first point after 0,0 must equal the yield stress you've defined in the MATS1 card. Both these cards are easily created from within the Hypermesh program.
  8. To code it the way you've suggested you can use the *findmark command
  9. Hi Rizzo, You can do this using foreach: *createmark components 1 "displayed" *createmarkpanel nodes 1 "node1" set node1 [hm_getmark nodes 1] *clearmark nodes 1 *createmarkpanel nodes 1 "node2" set node2 [hm_getmark nodes 1] *clearmark nodes 1 foreach {tot x y z} [hm_getdistance nodes $node1 $node2 0] { *createvector 1 $x $y $z *translatemark components 1 1 $tot } Regards, Matt
  10. Can't you just duplicate the system, translate it and then reassign the nodes to the new system?
  11. I can't tell exactly what your problem is from the image, but if you want to extend a surface, I believe it has to have no mesh associated with it. Are the gaps present because it's a different part or the same part? If it's the same part, you should make sure that your surfaces are correct before meshing and intersect them so that the surface edge lines are all yellow / green where surfaces meet. (Red indicates a free edge). If it's a different part then there should be a gap. You can attach the parts by creating fasteners with CBARs, CBUSHs, RBEs etc or define contact
  12. Hi carnut118, First of all PSHELL, PSOLID etc are property cards that you apply to elements. I.e, you associate shell elements such as CQUAD4, TRIA3 with PSHELL cards to give material properties. It really depends on your problem to the best way of modelling something. In order to make the best suggestion we'd need to understands loading, constraints and if they are stand alone models or part of a large assembly. From looking at the images you've attached, I would personally mesh both models using shell elements and assign PSHELL cards as they are thin structures with no complex geometry. Let us know if you have anymore questions Matt
  13. 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.
  14. Hi Merula, You can get the ID's of attached elements using the *findmark command. Here's a little test script I wrote as an example: # Create element set for test run *createmarkpanel elems 1 "Select Elements" set elemsOriginal [ hm_getmark elems 1 ]; *clearmark elems 1 # Find attached elements hm_createmark elems 1 "by id" "$elemsOriginal" *findmark elements 1 1 1 elements 0 2 set elemsAttached [ hm_getmark elems 2 ]; *clearmark elems 1 *clearmark elems 2 puts "The attached elements are $elemsAttached"
  15. Ah thanks, I thought listvar and textvariable were doing the same thing. One final thing.. how do I make the window close after the user presses OK? Edit: Actually I will use tkmessageBox -type okcancel. What I want is that if the user presses OK it will accept the variables and also close the main window where it asks for inputs. If the user presses cancel then it will close the tkmessageBox and revert back to the main window asking for the inputs. I guess I need something else in the applyFunctrion procedure in order to close the main dialouge box when OK is pressed? hwt::CreateWindow mytoplevel \ -windowtitle "Input Fastener Properties" \ -noGeometrySaving \ -cancelButton Cancel \ -acceptButton OK \ -acceptFunc applyFunction \ -defaultButton Accept \ -minsize 470 100 \ -post; proc applyFunction args {tk_messageBox -message "Fastener Diameter Chosen: $::valueToPrint \ Fastener Type Chosen: $::fastType" -type okcancel}
  16. Thanks tinh, this works. I'm having trouble with the listvar. In the tk message box I want to report what the user has chosen (at the moment, this is really just a debugging thing for me to see if it works). It works OK with the text variable 'valueToPrint', but if I use 'dropDownList' then it shows both choices and not the one that the user has chosen. If I use 'fromPopDown' as the code above, it gives error reading as there's no such variable.. Also, somewhat unrelated... but how can you make your text appear on a new line in a tk message box? I thought this is what '\' does, but apparently not. I.e. I want the tk message box in the code above to looking like: Fastener Diameter Chosen: Fastener Type Chosen:
  17. I've looked into your suggestions and I feel like the tk table is the best way. I've just started trying to construct a table, and I'm getting some errors: namely, frame1 already exists in parent. Not sure where I have gone wrong... #User Input hwt::CreateWindow mytoplevel \ -windowtitle "Input Fastener Properties" \ -noGeometrySaving \ -cancelButton Cancel \ -acceptButton OK \ -acceptFunc applyFunction \ -defaultButton Accept \ -minsize 470 100 \ -post; proc applyFunction args {tk_messageBox -message "Fastener Diameter Chosen: $::valueToPrint \ Fastener Type Chosen: $::fromPopDown"} set recess [::hwt::WindowRecess mytoplevel]; set section2 [label $recess.section2 \ -text "Please Input Fastener Properties" \ -justify left \ -anchor nw \ -font [hwt::AppFont]]; pack $section2 -side top -anchor nw -pady 5; hwt::AddPadding $recess -side top -height [hwt::DluHeight 4]; set frame1 [frame $recess.frame1]; pack $frame1 -side top -anchor nw; hwt::AddPadding $frame1 -side left -width [hwt::DluWidth 4]; set EntryWidget [ AddEntry $recess.frame1 \ -textvariable valueToPrint \ -label "Diamater:" \ -labelWidth 40 \ -entryWidth 20 \ -anchor nw\ -validate real\ -text 5 \ -withoutPacking]; pack $EntryWidget -side top -anchor nw -pady 5; AddPadding $frame1 -side top -hegiht [hwt::DluHeight 4]; set frame2 [frame $recess.frame2]; pack $frame2 -side top -anchor nw; AddPadding $frame2 -side top -height [hwt::DluHeight 4]; variable dropDownList; set dropDownList [list Bolt Rivet ]; set entry2 [ AddEntry $recess.frame2 \ -label "Select Fastener Type:" -labelWidth 40 \ -text "Bolt"\ -entryWidth 20 \ -listVar fromPopDown noTyping dropDownList \ -state normal ]; pack $entry2 -side top -anchor nw; AddPadding $recess.frame2 width 22 -side left;
  18. Thanks tinh, But what if the values aren't related to each other? For example, I'm thinking about creating a utility to create PBUSH cards based off Huth formula. For this you need to input information such as the type of fastener (e.g. Bolt, Rivet), if the bolt is countersunk or protruding, type of Material (or input Young's Modulus and Shear modulus of bolt material), Diameter of Fastener. It would be great if I could create a custom panel or input tk table with these options.
  19. Hi, Is it possible to create one panel for the user to define variables or sets? Alternatively, instead of a panel - is it possible to create a pop-up window with a table that requires input for each variable before you can continue? At the moment I am using this kind of code for the user to input values: set value 1 [hm_getint "value 1" "value 1"] set value 2 [hm_getint "value 2" "value 2"] However this gets very tedious after having to go through 5+ panels clicking proceed each time Thanks
  20. Still struggling with trying to use geometry to select the nodes that are on fixed points but not on lines. Any insight on to why this code doesn't work? I get the error that no nodes are selected. hm_createmark nodes 1 "by lines" "displayed" set ndsline [hm_getmark nodes 1] *retainmarkselections 0 hm_createmark nodes 1 "by points" "displayed" hm_markremove nodes 1 $ndsline # renumber bolt node IDs *renumbersolverid nodes 1 10190000 1 0 0 0 0 0 EDIT: I actually figured it out myself. If anyone's interested in the code I used, I've pasted it below. There's probably a more efficient way to achieve the same result but it works! *createmark lines 1 "displayed" set dlines [hm_getmark lines 1] *clearmark lines 1 hm_createmark points 2 "by lines" $dlines *createmark points 1 "displayed" *markdifference points 1 points 2 set bolts [hm_getmark points 1] hm_createmark nodes 1 "by points" $bolts *renumbersolverid nodes 1 10190000 1 0 0 0 0 0
  21. Thanks Kevin, This is exactly the sort of thing I was after. I'll see if I can edit it further to try and renumber my bolt nodes as well. Wish me luck!
  22. I have written this, but it doesn't work. Not sure what I've done wrong. hm_createmark nodes 1 "by lines" "displayed" set ndsline [hm_getmark nodes 1] hm_createmark nodes 1 "by points" "displayed" eval hm_markremove nodes 1 $ndsline # renumber bolt node IDs *renumbersolverid nodes 1 10190000 1 0 0 0 0 0
  23. Hi, I'll preface this by saying I'm an absolute beginner in tcl, so sorry if my questions are pretty basic. I am trying to write a script that will loop through each of my components are renumber the elements and node IDs in line with a certain numbering system. I have managed to figure out the renumbering code via the command.cmf file but I'm having trouble being able to replicate the commands that I've used to select the bolt nodes which will have different IDs. For example: *retainmarkselections 1 *createmark components 1 "Part# Back Tophat" *displaycollectorsallbymark 1 "isolateonly" 1 1 *createmark groups 2 *displaycollectorsbymark groups 2 "isolate" 1 1 *retainmarkselections 0 *settopologydisplaytype 1 *createmark elements 1 "displayed" *renumbersolverid elements 1 10100000 1 0 0 0 0 0 *createmark nodes 1 "displayed" *renumbersolverid nodes 1 10100000 1 0 0 0 0 0 *createmark nodes 1 10100318 10100326 10100503 10100520 10101252 10101253 *renumbersolverid nodes 1 10190000 1 0 0 0 0 0 *retainmarkselections 1 The line *createmark nodes 1 10100318 10100326 10100503 10100520 etc is actually selected by going Geom > Points > Select by displayed > Select by geoms > lines > displayed > subtract from selection > save and then is retrieved in the renumber nodes panel by select nodes by geom > points > retrive. This works because all nodes that will be used in bolted connections are fixed points and are not on lines in the geometry. Is there any way to replicate this selection process in the .tcl script? Ultimately I want to loop through each component by isolating them, each time changing the numbering i.e. 1st component starts on 1010000, 2nd component 1020000 etc or use the built-in hypermesh component ID to number the elements and nodes. Also, could someone please point me in the direction of some basic tutorials that involve looping in tcl? Many thanks, Matt
  • Create New...