compas-dev / compas_fea

COMPAS interface to common Finite Element Analysis software.
https://compas.dev/compas_fea
MIT License
35 stars 16 forks source link

Modelling of a frame #124

Closed Beberger closed 2 years ago

Beberger commented 2 years ago

Hello everyone,

For my master's thesis i am implementing some new features for compas FEA. For the verification i need to model a frame-structure consiting of two walls and a deck over it. The properties of the walls and the deck are not the same.

grafik

Running this file with compas FEA the deck's displacements seems only to be restrained by the wall's corners and not continiously.

grafik

Is there a way to model this correctly?

Best regards! Ben

franaudo commented 2 years ago

Hello! - Could you please share the script you wrote to generate this frame? and also the rhino file. thx!

Beberger commented 2 years ago

Hi thank you for the answer. I drew it directly in rhino, then I ran the following script:

from compas_fea.cad import rhino
from compas_fea.structure import ElasticIsotropic
from compas_fea.structure import ElementProperties as Properties
from compas_fea.structure import GeneralDisplacement
from compas_fea.structure import GeneralStep
from compas_fea.structure import GravityLoad
from compas_fea.structure import PointLoad
from compas_fea.structure import PinnedDisplacement
from compas_fea.structure import RollerDisplacementX
from compas_fea.structure import RollerDisplacementY
from compas_fea.structure import RollerDisplacementXY
from compas_fea.structure import ShellSection
from compas_fea.structure import Structure

import sandwichmodel_main as SMM

# Author(s): Andrew Liew (github.com/andrewliew), Benjamin Berger (github.com/Beberger)

#Allgemein
thickness_wall = 200 #mm
thickness_deck = 500 #mm
name = 'Rahmen'
path = 'C:/Temp/'
# Structure

mdl = Structure(name=name, path=path)

# Elements

rhino.add_nodes_elements_from_layers(mdl, mesh_type='ShellElement', layers=['elset_deck','elset_wall_left','elset_wall_right'])
mdl.elements[250].axes.update({'ex': [0, 0, 1], 'ey': [0, -1, 0], 'ez': [1, 0, 0]})

mdl.elements[1].axes.update({'ex': [1, 0, 0], 'ey': [0, -1, 0], 'ez': [0, 0, -1]})
mdl.elements[300].axes.update({'ex': [0, 0, -1], 'ey': [0, -1, 0], 'ez': [-1, 0, 0]})
# Sets

rhino.add_sets_from_layers(mdl, layers=['nset_pinned'])

# Materials

mdl.add(ElasticIsotropic(name='mat_elastic', E=33700, v=0.2, p=2500/10**9)) #E[N/mm2], p[kg/mm3] 

# Sections

mdl.add(ShellSection(name='sec_deck', t=thickness_deck))#[mm]
mdl.add(ShellSection(name='sec_wall_left', t=thickness_wall))#[mm]
mdl.add(ShellSection(name='sec_wall_right', t=thickness_wall))#[mm]

# Properties

mdl.add(Properties(name='ep_deck', material='mat_elastic', section='sec_deck', elset='elset_deck'))
mdl.add(Properties(name='ep_wall_left', material='mat_elastic', section='sec_wall_left', elset='elset_wall_left'))
mdl.add(Properties(name='ep_wall_right', material='mat_elastic', section='sec_wall_right', elset='elset_wall_right'))

# Displacements

mdl.add([
    PinnedDisplacement(name='disp_pinned', nodes='nset_pinned')
])

# Loads

mdl.add(GravityLoad(name='load_gravity', elements=['elset_deck','elset_wall_left','elset_wall_right']))
#mdl.add(PointLoad(name='load_point', nodes='nset_middle', y=0, z=-60000, x = 0))

# Steps

mdl.add([
    GeneralStep(name='step_bc', displacements=['disp_pinned'], nlgeom=False),
    GeneralStep(name='step_load', loads=['load_gravity'], nlgeom=False)
    ])

mdl.steps_order = ['step_bc','step_load']

# Summary

mdl.summary()

# Run

mdl.analyse_and_extract(software='abaqus', fields=['u','sf','sm'])

rhino.plot_data(mdl, step='step_load', field='sm1')
rhino.plot_data(mdl, step='step_load', field='sm2')
rhino.plot_data(mdl, step='step_load', field='sm3')
rhino.plot_data(mdl, step='step_load', field='sf4')
rhino.plot_data(mdl, step='step_load', field='sf5')
rhino.plot_data(mdl, step='step_load', field='sf1')
rhino.plot_data(mdl, step='step_load', field='sf2')
rhino.plot_data(mdl, step='step_load', field='sf3')
rhino.plot_data(mdl, step='step_load', field='um')
franaudo commented 2 years ago

I works with me...

image

this is the rhino file (rename it to .3dm) fea_issue_124

you need to make sure that these points are the same:

image
Beberger commented 2 years ago

Thank you very much for the model it works perfectly at my place aswell. Is there a special command/way to bring those points togheter? I tried to do that at my model and it didn't work...

franaudo commented 2 years ago

One thing you can do is to weld the meshes in Rhino. I think you can set the tolerance or something like that and it should move the points together.

In general, you can avoid this problem if you discretize the elements using the same min length: check this example to see how to discretize a rhino object using compas_fea .

I will close this issue now, but feel free to reopen it or to open a new one if you encounter a problem with the discretization.

Ciao, F