Assigning different young modulus to different parts of a geometry

Hello
I am trying to model a vertical flap with differing thickness in different locations along its length.
Since modeling the transition of thickness can be tricky, I was wondering if I could have a flap with one thickness but split it into say, 3 sections, each with its own young’s modulus. This would be able to mimic the change in thickness at the different sections.
Is this something I can accomplish with CalculiX?

Would appreciate any help

Do you have a sketch of the vertical flap? Doesn’t sound too tricky.

Just divide the geometry into segments (subvolumes), create elsets based on them and assign separate sections with different materials to them.

image
This is what it looks like.

@Calc_em do you maybe have a sample .inp file that mimics this? can I do it with node sets or can it just be elsets?

You need elsets for that. If you don’t want to change the geometry, you can just select some elements manually for elset and then apply separate sections to them. Of course, remeshing may invalidate this so geometry partitions are better in the long run.

Okay great! So once I pick the elsets or even make the volumes, how may I assign the different young moduli?
The only thing I was able to find was setting the material to anisotropic and changing the modulus along an axis.

Create multiple material definitions (*MATERIAL) with different Young moduli and assign them to separate sections (e.g. *SOLID SECTION). Pick a different ELSET for each section.

1 Like

If you put your mind to it, there’s not a lot you cannot do using cgx.
See e.g. the example of the jet engine at http://calculix.de/. Especially the compressor and turbine.
But that approach can be quite time consuming.
If you do it right, you’ll end up with a completely parametric model.

Alternatively, you could use CAD software (e.g. FreeCAD) to model the geometry.
Then export it as a STEP file and use gmsh to mesh it with tet elements (preferably second order). You might have to experiment with the parameters a bit. And if your model has small details, you will get lots of small elements around them. So it pays to “defeature” (=not including small details that are irrelevant to the analysis) the model.

I have an example on my website.

Especially if the flap is made from isotropic materials, this can be a good alternative.

1 Like

I guess you can use for example few sets of 2D elements, each set defining a different section having different thickness & material. Then using *MPC card to link the nodes where they act as a joint making transition from one thickness to another different thickness.

Not sure how complex is your geometry and thickness distribution but another option could be to assign the nodal thickness but to a “flat” strip. That can be done with Excel listing your nodes, sorting them by x y or z as needed and then assigning the nodal thickness with a function that would be like t=t(x) for example.
Once each node has their thickness , then you can project/map them to your real shape coordinates. Mecway has a tool to project nodes into another mesh or basic shapes.
You can elaborate very complex thickness distributions with that idea.


Another option is to perform a previous Thermal analisys to induce a temperature field from one side to the other of the flap.

Just a Stady State with diferent temperatures on each side is enough to get an aproximately linear temperature distribution.

Later, transfer the temperatures obtained to a new Step and then perform your static calculation there with a Young modulus that will be defined as temperature dependent.

*MATERIAL,NAME=EL
*ELASTIC

210000000000,.3,273
110000000000,.3,373

1 Like

If you got the data for the geometry, partitions of the geometry, assigning elsets and material data are not really a problem. It is just a matter of which tools you are using. If you are doing a parameter study doing all by hand will be quite bothersome. I would rather script it. Here is a simple approach with cubit and the calculix component for it.

#!python
import cubit

cubit.cmd("reset")

cubit.cmd("create vertex location -5 0 0")
cubit.cmd("create vertex location -4.6 -1.8 0")
cubit.cmd("create vertex location -3.6 -3.6 0")
cubit.cmd("create vertex location -1.8 -4.6 0")
cubit.cmd("create vertex location 0 -5 0")

cubit.cmd("create vertex location -5.2 0 0")
cubit.cmd("create vertex location -4.9 -2.1 0")
cubit.cmd("create vertex location -3.7 -3.7 0")
cubit.cmd("create vertex location -2.0 -4.8 0")
cubit.cmd("create vertex location 0 -5.1 0")

cubit.cmd("create curve spline location vertex 1 to 5 delete")
cubit.cmd("create curve spline location vertex 6 to 10 delete")

cubit.cmd("create curve vertex 1 6")
cubit.cmd("create curve vertex 5 10")

cubit.cmd("create surface curve all")

n = 15
for i in range(n):
 cubit.cmd(f"webcut body all with plane yplane offset 0 rotate {90/n*(i+1)} about z center 0 0 0")

cubit.cmd("imprint body all")
cubit.cmd("merge body all")
cubit.cmd("surface all size auto factor 7")
cubit.cmd("mesh surface all")

surface_ids = cubit.parse_cubit_list("surface","all")
cs=0 #counter
for sid in surface_ids:
 cs = cs +1
 cubit.cmd(f"block {cs} add surface {sid}")

cubit.cmd("block all element type QUAD8")
cubit.cmd("ccx block all element_type CPS8")

for i in range(n):
 cubit.cmd(f"create material 'mat_{i+1}' property_group 'CalculiX-FEA'")
 cubit.cmd(f"modify material 'mat_{i+1}' scalar_properties 'CCX_ELASTIC_USE_CARD' 1")
 cubit.cmd(f"modify material 'mat_{i+1}' scalar_properties 'CCX_ELASTIC_ISO_USE_CARD' 1")
 cubit.cmd(f"modify material 'mat_{i+1}' matrix_property 'CCX_ELASTIC_ISO_MODULUS_VS_POISSON_VS_TEMPERATURE' {30000 + i*2000} 0.4 0")
 cubit.cmd(f"ccx create section solid block {i+1} material {i+1}")

cubit.cmd("export ccx 'sample.inp' overwrite")

print("finished")
1 Like

Hey @Disla
I am trying to see if I can do this. I first set up a simple heat transfer steady state case with a random thermal conductivity and got the temperature distribution. How do I do the transfer to a new dynamic step which is the intended setup for the simulation?


I used PrePoMax

With Prepomax I don’t think that’s possible now. I know it has transfer displacements from solution but not sure about temperatures.
If you are using shells, first be sure to request *NODE FILE Output 2D.
If not, the node numbering will not match (you will have more nodes due to expansion.

If Prepomax don’t allow that, you could read the nodal temperatures from the solution node output and copy paste into the editor below

*INITIAL CONDITIONS,TYPE=TEMPERATURE
Node1 ,Temperature1
Node2 ,Temperature2
.
.
.
Give it a try. I haven’t try with Prepomax but I think it should not give to much problems.
Be carefull if you have some ref/rot nodes into the model. It could mess the transfer/numbering.
Ask at Prepomax forum, maybe someone has try this before.

In PrePoMax, you could use Defined Field → Temperature → From file to import temperatures from .frd (results file) to mechanical analysis. This is just *TEMPERATURE, FILE=... internally. Unfortunately, CalculiX and PrePoMax don’t support equivalent functionality for initial conditions and they have to be defined manually by specifying values per node.

Prepomax has multistep functionality. Do you think that could be done in two steps without the need of import or FILE?
First step steady thermal and second the desired mechanical analysis using the previous thermal result?

Surprisingly, it seems to be working. Abaqus wouldn’t allow such a step combination but it has separate elements for heat transfer.

:ok_hand:. Nice.
I still do not understand exactly how one translate thickness into equivalent Young modulus but glad it works.

Keep expansion coeficient very low to avoid unexpected thermal efects

EDITED: Just as a side note, last versions of Mecway also allows to set up time and position dependent temperature fields so it should be also possible into ccx.