Tested Finite Element codes

Table of Contents

CalculiX

The below section describes how the Cook’s membrane model was created for Calculix solver. As mentioned in the results section, in order to define surface traction a separate app called PrePoMax has to be used. This application converts surface traction definition into the set of nodal loads.

** Material ++++++++++++++++++++++++++++++++++++++++++++++++

*Material, Name=Rubber      # Definition of material
  *Elastic,                 # Elastic properties
    70.0, 0.33              # Young's modulus and Poisson's ratio

** Sections ++++++++++++++++++++++++++++++++++++++++++++++++

*SOLID SECTION, ELSET=Solid_part-1, Material=Rubber   # Assigning material and solid elements
                                                      # to the elements sets in mesh
** Steps +++++++++++++++++++++++++++++++++++++++++++++++++++

*STEP                                                 # Begin of analysis
    *STATIC                                           # Selection of elastic analysis

** Field outputs +++++++++++++++++++++++++++++++++++++++++++

*Node file                    # Extract nodal values
  RF, U
*El file                      # Extract element values
  S, E
*NODE PRINT, NSET=Vertex,     # Print displacement U2 to an external file
  U2

** Boundary conditions +++++++++++++++++++++++++++++++++++++
*Boundary           # Restrain movement in X, Y, Z
BC, 1, 1, 0
BC, 2, 2, 0
BC, 3, 3, 0

*Boundary           # Add symmetry condition
ZSYMM, 3, 3, 0

** Loading condition ++++++++++++++++++++
*Cload              # This is the nodal value converted from distributed force
176, 2, 31.25
194, 2, 62.5
191, 2, 62.5
175, 2, 31.25
193, 2, 62.5
190, 2, 62.5
192, 2, 62.5
189, 2, 62.5
180, 2, 31.25
179, 2, 31.25

** End step ++++++++++++++++++++++++++++++++++++++++++++++++

*End step                      # End on analysis

The simulation input file used in this study can be found on our GitHub!

Code_Aster

This section describes how the model has been set up in Code_Aster solver

mesh = LIRE_MAILLAGE(identifier='0:1',                    # Read mesh
                     FORMAT='IDEAS',
                     UNITE=2)

model = AFFE_MODELE(identifier='1:1',                     # Define analysis type
                    AFFE=_F(MODELISATION=('3D', ),
                            PHENOMENE='MECANIQUE',
                            TOUT='OUI'),
                    MAILLAGE=mesh)

mater = DEFI_MATERIAU(identifier='2:1',                   # Define material model
                      ELAS=_F(E=70.0,
                              NU=0.3333))

materfl = AFFE_MATERIAU(identifier='3:1',                 # Assign material to the mesh
                        AFFE=_F(MATER=(mater, ),
                                TOUT='OUI'),
                        MODELE=model)

mecabc = AFFE_CHAR_MECA(identifier='4:1',                 # Define boundary conditions
                        DDL_IMPO=(_F(DX=0.0,
                                     DY=0.0,
                                     DZ=0.0,
                                     GROUP_MA=('BC', )),
                                  _F(DZ=0.0,
                                     GROUP_NO=('ZSYMM', ))),
                        MODELE=model)

mecach = AFFE_CHAR_MECA(identifier='5:1',                 # Define distributed load in Y direction
                        FORCE_FACE=_F(FY=6.25,
                                      GROUP_MA=('Load', )),
                        MODELE=model)

result = MECA_STATIQUE(identifier='7:1',                  # Define analysis type
                       CHAM_MATER=materfl,
                       EXCIT=(_F(CHARGE=mecabc),
                              _F(CHARGE=mecach)),
                       MODELE=model)

unnamed0 = CALC_CHAMP(identifier='8:1',                   # Define analysis output
                      CONTRAINTE=('SIEF_ELGA', 'SIEF_ELNO'),
                      CRITERES=('SIEQ_ELGA', 'SIEQ_ELNO'),
                      FORCE=('REAC_NODA', ),
                      RESULTAT=result)

table = POST_RELEVE_T(identifier='9:1',                   # Export nodal values to the file
                      ACTION=_F(GROUP_NO=('Vertex', ),
                                INTITULE='DISP',
                                NOM_CHAM='DEPL',
                                OPERATION=('EXTRACTION', ),
                                RESULTANTE=('DY', ),
                                RESULTAT=result))

IMPR_RESU(identifier='10:1',
          RESU=(_F(RESULTAT=unnamed0),
                _F(RESULTAT=result)),
          UNITE=3)

IMPR_TABLE(identifier='11:1',
           TABLE=table,
           UNITE=4)

The simulation input file used in this study can be found on our GitHub!

Elmer

The following section describes how to set up a model in Elmer software

Header
  CHECK KEYWORDS Warn
  Mesh DB "." "Mesh/VeryFine_Quad_Hex"      # Mesh definition
  Include Path ""
  Results Directory "Results/VeryFine_Quad_Hex" # Results directory
End

Simulation
  Max Output Level = 5
  Coordinate System = Cartesian
  Coordinate Mapping(3) = 1 2 3
  Simulation Type = Steady state
  Steady State Max Iterations = 1
  Output Intervals = 1
  Timestepping Method = BDF
  BDF Order = 1
  Solver Input File = case.sif  # solver input file
  Post File = case.vtu   # results file
End

Constants
  Gravity(4) = 0 -1 0 9.82
  Stefan Boltzmann = 5.67e-08
  Permittivity of Vacuum = 8.8542e-12
  Boltzmann Constant = 1.3807e-23
  Unit Charge = 1.602e-19
End

Body 1
  Target Bodies(1) = 1
  Name = "Body 1" 
  Equation = 1 # Assign Linear Elasticity equation 
  Material = 1 # Assign material model
End

Solver 1
  # Small displacement Linear Elasticity solver
  Equation = Linear elasticity
  Calculate Loads = True
  Calculate Stresses = True
  Variable = -dofs 3 Displacement
  Procedure = "StressSolve" "StressSolver"
  Exec Solver = Always
  Stabilize = True
  Bubbles = False
  Lumped Mass Matrix = False
  Optimize Bandwidth = True
  Steady State Convergence Tolerance = 1.0e-5
  Nonlinear System Convergence Tolerance = 1.0e-7
  Nonlinear System Max Iterations = 20
  Nonlinear System Newton After Iterations = 3
  Nonlinear System Newton After Tolerance = 1.0e-3
  Nonlinear System Relaxation Factor = 1
  Linear System Solver = Direct
  Linear System Direct Method = MUMPS
End

Solver 2 
  # Solver used to export displacement data into the .dat file
  Equation = SaveScalars
  Procedure = "SaveData" "SaveScalars"
  Filename = results.dat
  Save Points = 5
  Save Coordinates(1,3) = 48.0 60.0 0.0
End

Equation 1
  Name = "LinearElasticity"
  Calculate Stresses = True
  Active Solvers(1) = 1
End

Material 1
  # Material definition
  Name = "Rubber"
  Youngs modulus = 70.0
  Poisson ratio = 0.33
End

# Boundary conditions:
# - restrain at one end
# - z-symmetry condition at sides
Boundary Condition 1
  Target Boundaries(1) = 1 
  Name = "FIX"
  Displacement 2 = 0
  Displacement 3 = 0
  Displacement 1 = 0
End

Boundary Condition 2
  Target Boundaries(1) = 3 
  Name = "SYMM"
  Displacement 3 = 0
End

Boundary Condition 3
  Target Boundaries(1) = 2 
  Name = "Force"
  Force 2 = 6.25 # Force value distributed over area in Y direction
End

The simulation input file used in this study can be found on our GitHub