Solver for Mystran

About the development of the FEM module/workbench.

Moderator: bernd

User avatar
bernd
Veteran
Posts: 12849
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: hfcMYSTRAN - a test case

Post by bernd »

aerospaceweeb wrote: Sun Jul 18, 2021 8:42 pm
bernd wrote: Sun Jul 18, 2021 8:34 pm ATM I only need to understand the plate one. It is the one I have started with. https://github.com/SteveDoyle2/pyNastra ... dels/plate

- the grid is no problem. I already understood this one.
- thickness is 0.3 mm
- material: Poisons Ratio is 0.3, Young's Modulus is 70'000'000.0 ??? which leads to the question Which unit has the file
- lengths is in mm, how about force and young's modulus?

- For the load ... there is "load", "force" and "pload" ... I have not read these yet ...
- IMHO it is not an edge load because the end points are moving more. I assume it is the same node load on each mesh node on the edge, thus the outer nodes moves more. OK I need to read the card docu ...

bernd
Nastran, Steve, and I are all American, so the units you'll see in our bdfs is usually inches and pounds, except for modal solutions, then american units REALLY start to get annoying.
Damn ... Than not 10 mm by 10 mm and 0.3 mm thick. But 10 inches by 10 inches and 0.3 inches thick ...
User avatar
bernd
Veteran
Posts: 12849
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: hfcMYSTRAN - a test case

Post by bernd »

johnwang wrote: Sun Jul 18, 2021 8:44 pm
bernd wrote: Sun Jul 18, 2021 5:37 pm I am investigating Mystran and pyNastran ...
You can call pyNastran within FreeCAD.
When I started, I played with pyNastran to read case file. A few models from it which I read are posted in this thread.But the bdf is a little different from Nastran95's inp and Mystran's dat. Instead of learning pyNastran, I started to write my own for hfcMystran and hfcNastran.
Only recently, I began to play with writing case file. I haven't tested pyNastran's writing functions. I am using Fortran. The Hinge. dat and Bridge. dat are two examples.Direct coding, no CAD. But I have an OpenGL program which I can read a case file and show the model. I will add simple sketch tools to connect these two.
sounds interesting.


I like to do it as simple as possible and to reuse as much as possible. Thus I would like to use pyNastran. From what I have seen so far it is great.
User avatar
bernd
Veteran
Posts: 12849
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Solver for Mystran

Post by bernd »

https://github.com/SteveDoyle2/pyNastra ... te.bdf#L60

Code: Select all

MAT1     1      7.+7            .3
google says 7E7 pounds/square inch = 482'633.0 MPa What is this plate made from???
User avatar
johnwang
Veteran
Posts: 1345
Joined: Sun Jan 27, 2019 12:41 am

Re: Solver for Mystran

Post by johnwang »

I think pyNastran has better support for inp and dat now.
In my impression, it is not really a pre program. You still need CAD and meshing. FreeCad needs works in 2d and 3d shell.
hfc series CAE workbenches for FreeCAD (hfcNastran95, hfcMystran, hfcFrame3DD, hfcSU2 and more)
aerospaceweeb
Posts: 118
Joined: Fri Apr 09, 2021 3:26 am

Re: Solver for Mystran

Post by aerospaceweeb »

bernd wrote: Sun Jul 18, 2021 9:03 pm https://github.com/SteveDoyle2/pyNastra ... te.bdf#L60

Code: Select all

MAT1     1      7.+7            .3
google says 7E7 pounds/square inch = 482'633.0 MPa What is this plate made from???
Imagination-inium

Or maybe tungsten idk
User avatar
bernd
Veteran
Posts: 12849
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Solver for Mystran

Post by bernd »

some informations about the plate example ...

- link to orgiginal file
https://github.com/SteveDoyle2/pyNastra ... /plate.bdf

- parse it with pyNastran to have something to compare with

Code: Select all

from pyNastran.bdf.bdf import BDF
model = BDF()
model.read_bdf("plate.bdf")
model.write_bdf("plate_pyNastran_frombdf.bdf")


- create the same model with pyNastran

Code: Select all

from pyNastran.bdf.bdf import BDF
from pyNastran.bdf.bdf import CaseControlDeck
model = BDF()


# executive control
model.sol = 101


# params
model.add_param(key="POST", values=-1)
model.add_param(key="PRTMAXIM", values="YES")


# materials
E = 7.e7
G = None
nu = 0.3
mat = model.add_mat1(1, E, G, nu)


# nodes
model.add_grid(1, [0., 0., 0.])
model.add_grid(2, [2., 0., 0.])
model.add_grid(3, [4., 0., 0.])
model.add_grid(4, [6., 0., 0.])
model.add_grid(5, [8., 0., 0.])
model.add_grid(6, [10., 0., 0.])
model.add_grid(7, [0., 2., 0.])
model.add_grid(8, [2., 2., 0.])
model.add_grid(9, [4., 2., 0.])
model.add_grid(10, [6., 2., 0.])
model.add_grid(11, [8., 2., 0.])
model.add_grid(12, [10., 2., 0.])
model.add_grid(13, [0., 4., 0.])
model.add_grid(14, [2., 4., 0.])
model.add_grid(15, [4., 4., 0.])
model.add_grid(16, [6., 4., 0.])
model.add_grid(17, [8., 4., 0.])
model.add_grid(18, [10., 4., 0.])
model.add_grid(19, [0., 6., 0.])
model.add_grid(20, [2., 6., 0.])
model.add_grid(21, [4., 6., 0.])
model.add_grid(22, [6., 6., 0.])
model.add_grid(23, [8., 6., 0.])
model.add_grid(24, [10., 6., 0.])
model.add_grid(25, [0., 8., 0.])
model.add_grid(26, [2., 8., 0.])
model.add_grid(27, [4., 8., 0.])
model.add_grid(28, [6., 8., 0.])
model.add_grid(29, [8., 8., 0.])
model.add_grid(30, [10., 8., 0.])
model.add_grid(31, [0., 10., 0.])
model.add_grid(32, [2., 10., 0.])
model.add_grid(33, [4., 10., 0.])
model.add_grid(34, [6., 10., 0.])
model.add_grid(35, [8., 10., 0.])
model.add_grid(36, [10., 10., 0.])


# elements
model.add_cquad4(1, 1, [1, 2, 8, 7])
model.add_cquad4(2, 1, [2, 3, 9, 8])
model.add_cquad4(3, 1, [3, 4, 10, 9])
model.add_cquad4(4, 1, [4, 5, 11, 10])
model.add_cquad4(5, 1, [5, 6, 12, 11])
model.add_cquad4(6, 1, [7, 8, 14, 13])
model.add_cquad4(7, 1, [8, 9, 15, 14])
model.add_cquad4(8, 1, [9, 10, 16, 15])
model.add_cquad4(9, 1, [10, 11, 17, 16])
model.add_cquad4(10, 1, [11, 12, 18, 17])
model.add_cquad4(11, 1, [13, 14, 20, 19])
model.add_cquad4(12, 1, [14, 15, 21, 20])
model.add_cquad4(13, 1, [15, 16, 22, 21])
model.add_cquad4(14, 1, [16, 17, 23, 22])
model.add_cquad4(15, 1, [17, 18, 24, 23])
model.add_cquad4(16, 1, [19, 20, 26, 25])
model.add_cquad4(17, 1, [20, 21, 27, 26])
model.add_cquad4(18, 1, [21, 22, 28, 27])
model.add_cquad4(19, 1, [22, 23, 29, 28])
model.add_cquad4(20, 1, [23, 24, 30, 29])
model.add_cquad4(21, 1, [25, 26, 32, 31])
model.add_cquad4(22, 1, [26, 27, 33, 32])
model.add_cquad4(23, 1, [27, 28, 34, 33])
model.add_cquad4(24, 1, [28, 29, 35, 34])
model.add_cquad4(25, 1, [29, 30, 36, 35])


# properties
model.add_pshell(1, mid1=1, t=0.3, mid2=1, mid3=1)

# load cards
model.add_load(sid=2, scale=1.0, scale_factors=1.0, load_ids=1)
model.add_load(sid=3, scale=1.0, scale_factors=1.0, load_ids=10)
model.add_load(sid=4, scale=1.0, scale_factors=5.0, load_ids=10)
model.add_load(sid=5, scale=7.0, scale_factors=1.0, load_ids=10)
model.add_load(sid=6, scale=7.0, scale_factors=5.0, load_ids=10)
model.add_load(sid=7, scale=1.0, scale_factors=[1.0, 1.0], load_ids=[1, 11])


# force card (node load)
model.add_force(sid=1, node=6, mag=100, xyz=(1.0, 0.0, 0.0))
model.add_force(sid=1, node=12, mag=100, xyz=(1.0, 0.0, 0.0))
model.add_force(sid=1, node=18, mag=100, xyz=(1.0, 0.0, 0.0))
model.add_force(sid=1, node=24, mag=100, xyz=(1.0, 0.0, 0.0))
model.add_force(sid=1, node=30, mag=100, xyz=(1.0, 0.0, 0.0))
model.add_force(sid=1, node=36, mag=100, xyz=(1.0, 0.0, 0.0))


# pload4 card (element pressure on quad4)
pl_ele_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
model.add_pload4(sid=10, eids=pl_ele_ids, pressures=[3.0, 3.0, 3.0, 3.0], cid=None)
model.add_pload4(sid=11, eids=[1], pressures=[3.0, 3.0, 3.0, 3.0], cid=None)


# card spcadd
model.add_spcadd(conid=2, sets=[1],)


# fixed
fixed_nodes = [1, 7, 13, 19, 25, 31]
model.add_spc1(conid=1, components="123456", nodes=fixed_nodes)


# case control
cc = CaseControlDeck([
    "ECHO = NONE",
    "TITLE = pyNastran plate example for Mystran",
    "SUBCASE 1",
    "  SUBTITLE = Default",
    "  LOAD = 2",
    "  SPC = 2",
    "  SPCFORCES(SORT1,REAL) = ALL",
    "  STRESS(SORT1,REAL,VONMISES,BILIN) = ALL",
    "  DISPLACEMENT(SORT1,REAL) = ALL",
])
model.case_control_deck = cc
# model.validate()  # creates an error


model.write_bdf("plate_pyNastran_Bernd.bdf", enddata=True)

User avatar
bernd
Veteran
Posts: 12849
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Solver for Mystran

Post by bernd »

for reference the files ...

plate.bdf.txt
(4.8 KiB) Downloaded 37 times


plate_pyNastran_frombdf.bdf.txt
(5.44 KiB) Downloaded 37 times


plate_pyNastran_Bernd.bdf.txt
(4.67 KiB) Downloaded 34 times
User avatar
bernd
Veteran
Posts: 12849
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Solver for Mystran

Post by bernd »

If I run the bdfs in Mystran I get the following deformation ...

But how about the pload4 cards? They are some pressure. Where is the deformation from them? Since I can not view the results in any other software I do not know it it is the result reader or if the pload4 are not analysed. May be I do not really understand what the pload cards should do in this example. Anyone does know what the pload4 cards should do in this example?

screen.png
screen.png (290.29 KiB) Viewed 1546 times
User avatar
johnwang
Veteran
Posts: 1345
Joined: Sun Jan 27, 2019 12:41 am

Re: Solver for Mystran

Post by johnwang »

Direct Download Link - For End Users (Compiled Windows EXE, Documentation, Test Runs, Other Files)

https://www.mystran.com/forums/showthread.php?tid=39

PLOAD4 is specifying Pressure value at up to 4 grid locations.

You can define many loads(pressure or force), but only those SID number is equal to that specified in the Case Control Deck (LOAD = SID) will take effect. You can build more load cases with different LOAD = SID. For example:
Load subcase 1, you set LOAD = 100, calculate response under all loads with SID=100 .
Load subcase 2, you set LOAD = 200, calculate response under all loads with SID=200 .
hfc series CAE workbenches for FreeCAD (hfcNastran95, hfcMystran, hfcFrame3DD, hfcSU2 and more)
User avatar
bernd
Veteran
Posts: 12849
Joined: Sun Sep 08, 2013 8:07 pm
Location: Zürich, Switzerland
Contact:

Re: Solver for Mystran

Post by bernd »

johnwang wrote: Mon Jul 19, 2021 11:23 am ... You can define many loads(pressure or force), but only those SID number is equal to that specified in the Case Control Deck (LOAD = SID) will take effect. You can build more load cases with different LOAD = SID. ...
I missed this one ... That makes totally sense ...

Still I am not able to get any deformation from the pload entries in that plate file. But nevermind ATM I am only interested in the force entries and they work very well.
Post Reply