JuliaFEM / AbaqusReader.jl

AbaqusReader.jl is a parse for ABAQUS FEM models. It's capable of parsing the geometry accurately, including surface sets, node sets, and other relevant geometrical data used in FEM calculations. Other option is to parse whole model, including boundary conditions, material data and load steps.
https://juliafem.github.io/AbaqusReader.jl/latest
MIT License
37 stars 22 forks source link

Need support for area in solid section #36

Open jtveiten opened 6 years ago

jtveiten commented 6 years ago

keyword *solid section isn't parsed correctly if used for t2d2 elements when given area of truss in line below keyword

The input snippet is:

*MATERIAL,NAME=ALUM
*ELASTIC
1E7,.3
*SOLID SECTION,ELSET=EAll,MATERIAL=ALUM
.0625

When parsed, it doesn't fail when you read the model, but no area is defined

If the input is like this:

*SOLID SECTION,MATERIAL=ALUM, ELSET=EALL
.0625, 
*MATERIAL,NAME=ALUM
*ELASTIC
1E7, 
*DENSITY
7.5E-4, 

the parsing of the model will fail.

Without being too well versed in the code, it may look like the solid section needs to be closed in the second case and support that nu isn't given in the material definition.

Here is the full input file tried

**
**   Structure: truss, two elements
**   Test objective: T3D2 elements.
**
*NODE,NSET=Nall
1, 0, 0
2, 5, 5
3, 0, 10
*ELEMENT,TYPE=T2D2,ELSET=EAll
1,1,2
2,2,3
*BOUNDARY
1,1,2
3,1,2
*MATERIAL,NAME=ALUM
*ELASTIC
1E7,.3
*SOLID SECTION,ELSET=EAll,MATERIAL=ALUM
.0625
*STEP
*STATIC
*CLOAD
2,1,1.
*EL PRINT,ELSET=Eall,FREQUENCY=100
S
*NODE FILE,OUTPUT=3D
U
*EL FILE
S
*END STEP
ahojukka5 commented 6 years ago

Basically, there are two implementations of how to read ABAQUS input files. The first one is just reading the mesh, looks that it is triggering for *NODE, *ELEMENT, *NSET, *SURFACE, and writing data to dictionary where it later on goes to Mesh struct:

mutable struct Mesh
    nodes :: Dict{Int, Vector{Float64}}
    node_sets :: Dict{Symbol, Set{Int}}
    elements :: Dict{Int, Vector{Int}}
    element_types :: Dict{Int, Symbol}
    element_codes :: Dict{Int, Symbol}
    element_sets :: Dict{Symbol, Set{Int}}
    surface_sets :: Dict{Symbol, Vector{Tuple{Int, Symbol}}}
    surface_types :: Dict{Symbol, Symbol}
end

In this first implementation, things are kept simple and only topological information is parsed from the file. The other implementation is parsing the whole file and fetching additional information from the model. It looks that in that implementation, sort of parsing the *SOLID SECTION is done in some level, but it looks that this is going to be a huge work of parsing all of the data from the input file correctly.

The Model struct is following:

mutable struct Model
    path :: String
    name :: String
    mesh :: Mesh
    materials :: Dict{Symbol, AbstractMaterial}
    properties :: Vector{AbstractProperty}
    boundary_conditions :: Vector{AbstractBoundaryCondition}
    steps :: Vector{AbstractStep}
end

Here, solid section is parsed to properties field.