Welcome to EdelweissFE

EdelweissFE is a light-weight, platform-independent, parallel finite element framework. By default, it makes use of the Marmot library for finite element and constitutive model formulations.

EdelweissFE aims to be…

  • … a development and learning environment for constitutive models and finite elements,

  • … an easy to use tool for coupled problems,

  • … a learning platform for learning the finite element method,

  • … a very flexible tool for implementing and employing special techniques (e.g., the indirect displacement control technique), which are often more difficult and time consuming to implement in mature, MPI-parallelized codes,

  • … an efficient tool for nonlinear simulations up to medium sized problems (~ \(10^5\) degrees of freedom).

EdelweissFE does not want to …

  • … compete with more mature (MPI-parallelized) codes such as MOOSE, which are also compatible with the Marmot library, but less suitable as development environments. Usually, EdelweissFE is used for developing and debugging constitutive models until they meet the requirements for production runs on HPC system using more mature frameworks.

_images/borehole.png

Execute a simulation

Run a simulation simply by calling

python edelweiss.py inputfile.inp

Example input file

File: examples/CantileverBeam/test3D.inp
*material, name=LinearElastic, id=linearelastic
**Isotropic material
**E    nu -> elasticity module and poisson's ratio
1.8e4, 0.22

** make job
*job, name=c3d8job, domain=3d
** choose solver
*solver, solver=NIST, name=theSolver

*modelGenerator, generator=boxGen, name=gen
** set number of elements for directions: 400, 4, 4
nX      =400
nY      =4
nZ      =4
** create model: length 500mm, with section of 5mm x 5mm
lX      =500
lY      =5
lZ      =5
** use provider: displacementelement
elProvider =displacementelement
** use hexahedron element with 8 nodes and normal integration
elType  =Hexa8

*section, name=section1, material=linearelastic, type=solid
** assign linear elastic section to all elements
all

** displacement output for all elements
*fieldOutput
create=perNode, elSet=all, field=displacement, result=U, name=displacement

** create output data to open with paraview
*output, type=ensight, name=test
create=perNode, fieldOutput=displacement
configuration, overwrite=yes

*output, type=monitor

** set step size between 1 and 1e-9, 1000 iterations, 25 max iterations and step length 1
*step, solver=theSolver, maxInc=1e0, minInc=1e-9, maxNumInc=1000, maxIter=25, stepLength=1
options, category=NISTSolver, extrapolation=off
** fix one side (fixed support)
dirichlet, name=Left,  nSet=gen_left, field=displacement, 1=0.0, 2=0.0, 3=.0
** set load in z to 0.012N for all the points on right back
nodeforces, name=cloadTop, nSet=gen_rightBack, components='0, 0, .012', field=displacement

More example files can be found in the testfiles folder!

Indices and tables