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.
Example input file
*node
** Our nodes
** ID coordinates
0, 0, 0, 0
1, 0.100, 0, 0
2, 0.100, 0.100, 0
3, 0, 0.100, 0
4, 0, 0, 0.100
5, 0.100, 0, 0.100
6, 0.100, 0.100, 0.100
7, 0, 0.100, 0.100
*element, type=C3D8, provider=marmot
** We create a single hex8 element
** ID node IDs
1, 0,1,2,3,4,5,6,7
*nSet, nSet=left
0,1,4,5
*nSet, nSet=bottomleft
1
*nSet, nSet=bottomback
0
*elSet, elSet=theOnlyElement
1
*material, name=LinearElastic, id=myMaterial
**Isotropic
**E | nu |
1.8e4, 0.22
*section, name=section1, material=myMaterial, type=solid
** element set 'all' is automatically created
** we could also use the set 'theOnlyElement'
all
*surface, type=element, name=surfaceRight
** Elset, faceID
all, 4
*job, name=mySingleElementJob, domain=3d
*solver, solver=NIST, name=theSolver
*step, solver=theSolver, maxInc=1e0, minInc=1e0, maxNumInc=100, maxIter=25, stepLength=1
** The first step: set the BCs
dirichlet, name=1, nSet=left, field=displacement, 2=0
dirichlet, name=2, nSet=bottomback, field=displacement, 1=0,3=0
dirichlet, name=3, nSet=bottomleft, field=displacement, 3=0
*step, solver=theSolver, maxInc=1e0, minInc=1e0, maxNumInc=10, maxIter=25, stepLength=1
** The second step: apply the load
distributedload, name=dload, surface=surfaceRight, type=pressure, magnitude=0.15, f(t)='t**2'
*fieldOutput
** The results we are interested in
create=perElement, name=strain, elSet=all, result=strain, quadraturePoint=0:8, f(x)='np.mean(x,axis=1)'
create=perElement, name=stress, elSet=all, result=stress, quadraturePoint=0:8, f(x)='np.mean(x,axis=1)'
create=perNode, name=RF_left, nSet=left, field=displacement, result=P, f(x)='np.sum(x[:,1])'
create=perNode, name=displacement, elSet=theOnlyElement, field=displacement, result=U
*output, type=ensight, name=myEnsightOutput
** For visualization in Paraview etc.
create=perNode, fieldOutput=displacement
create=perElement, fieldOutput=stress
create=perElement, fieldOutput=strain
configuration, overwrite=yes
*output, type=monitor, name=myMonitor
** Directly print to the terminal
fieldOutput=RF_left
More example files can be found in the testfiles
folder!