School of Mechanical & Materials Engineering. University College Dublin ... Automotive/Solid Mechanics Session: P. Cardiff, âPerformance of. Lagrangian finite ...
Introduction to Solid Mechanics with OpenFOAM Basic Training Philip Cardiff
26th to 30th June 2016
11th OpenFOAM Workshop Vila Flor Cultural Centre Guimarães, Portugal
Introduction to Solid Mechanics with OpenFOAM Basic Training Philip Cardiff
School of Mechanical & Materials Engineering University College Dublin ! ! ! !
You may also be interested in… Wednesday 5.40 PM - 6.00 PM, Room S2 Automotive/Solid Mechanics Session: P. Cardiff, “Performance of Lagrangian finite volume approaches for linear and nonlinear solid mechanics analyses” Some latest developments will be presented, in particular a block coupled approach for linear elasticity and a segregated approach for large strain elasto-plasticity
Training Outline My first OpenFOAM solid mechanics tutorial: plateHole running, post-processing, theory, boundary conditions, fvSolution, fvSchemes, material properties
More advanced boundary conditions frictional contact, time-varying, cracks
More advanced material models multi-materials, plasticity, orthotropic elasticity, viscoelasticity, thermo-elastic
More advanced mathematical models nonlinear geometry: total/updated Lagrangian
Training Outline My first OpenFOAM solid mechanics tutorial: plateHole running, post-processing, theory, boundary conditions, fvSolution, fvSchemes, material properties
More advanced boundary conditions frictional contact, time-varying, cracks
More advanced material models multi-materials, plasticity, orthotropic elasticity, viscoelasticity, thermo-elastic
More advanced mathematical models nonlinear geometry: total/updated Lagrangian
Training Outline My first OpenFOAM solid mechanics tutorial: plateHole running, post-processing, theory, boundary conditions, fvSolution, fvSchemes, material properties
More advanced boundary conditions frictional contact, time-varying, cracks
More advanced material models multi-materials, plasticity, orthotropic elasticity, viscoelasticity, thermo-elastic
More advanced mathematical models nonlinear geometry: total/updated Lagrangian
Training Outline My first OpenFOAM solid mechanics tutorial: plateHole running, post-processing, theory, boundary conditions, fvSolution, fvSchemes, material properties
More advanced boundary conditions frictional contact, time-varying, cracks
More advanced material models multi-materials, plasticity, orthotropic elasticity, viscoelasticity, thermo-elastic
More advanced mathematical models nonlinear geometry: total/updated Lagrangian
Training Outline My first OpenFOAM solid mechanics tutorial: plateHole running, post-processing, theory, boundary conditions, fvSolution, fvSchemes, material properties
More advanced boundary conditions frictional contact, time-varying, cracks
More advanced material models multi-materials, plasticity, orthotropic elasticity, viscoelasticity, thermo-elastic
More advanced mathematical models nonlinear geometry: total/updated Lagrangian
Finite Volume Solid Mechanics... ...you mean Finite Element, right?!
eislab.gatech.edu/other/Humor/finite-elephant.html
Finite Volume Solid Mechanics Finite Element method is not the only way! Finite Volume method can be applied to solids too; it has slowly been gaining momentum since early 90’s. Elegantly simple and strongly conservative.
http://eislab.gatech.edu/other/Humor/finite-elephant.html
http://greatwhitefrost.net/kenmraz/ken/index.html
My First OpenFOAM Solid Mechanics Tutorial: plateHole
Requirements
elasticSolidFoam
Library $> wmake libso $FOAM_SRC/solidModels
Solver $> wmake $FOAM_SRC/solidMechanics/elasticSolidFoam
Tutorial Copy case to your run directory $> cp -r $FOAM_TUTORIALS/solidMechanics/elasticSolidFoam/ plateHole $FOAM_RUN/ $> cd $FOAM_RUN/plateHole
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Have a look in ParaView
T
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Have a look at the log file
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Create time Create mesh for time = 0 Reading field U Patch hole Traction boundary field: U Selecting rheology model linearElastic Creating constitutive model Force-displacement for patch right will be written to forceDisp.dat Selecting divSigmaExp calculation method surface Starting time loop Time: 1
Predicting U, gradU and snGradU based on V,gradV and snGradV Time 1, Corrector 0, Solving for U using DICPCG, res = 1, rel res = 1, aitken = 0.1, inner iters = 58 Time 1, Solving for U, Initial residual = 1, Final residual = 9.63863e-07, Relative residual = 6.60008e-06, No outer iterations 73 ExecutionTime = 0.73 s ClockTime = 1 s Max epsilonEq = 1.10798e-07 Max sigmaEq = 25568.8 Found patch right, writing y force and displacement to file ExecutionTime = 0.84 s
End
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/plateHole Create the mesh $> blockMesh Run the solver $> elasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Have a look in ParaView
28.2 kPa
σxx
-0.5 kPa
My First OpenFOAM Solid Mechanics Tutorial: plateHole Theory
My First OpenFOAM Solid Mechanics Tutorial: plateHole Theory
Theory
elasticSolidFoam
Strong Form of Governing Equation
@ @t
Z
Momentum
displacement NOT velocity!
@u ⇢ d⌦ = ⌦ @t
Z
⌦
r·
d⌦ +
Z
⌦
⇢f b d⌦
cell-centred Finite Volume Method directly discretises strong form
Weak Form of Governing Equation
@ @t
Z ✓ ⌦
@u ⇢ @t
◆
· w d⌦ =
Z
⌦
Momentum
· rw d⌦ +
Z
⇢f b · w d⌦ ⌦ Z + t·w d t
Weak Form of Governing Equation
@ @t
Z ✓ ⌦
@u ⇢ @t
◆
Momentum
weighting function
· w d⌦ =
Z
⌦
· rw d⌦ +
Finite Element Method uses weak form … setting the weighting function to unity in each cell/element returns the Finite Volume Method!
Z
⇢f b · w d⌦ ⌦ Z + t·w d t
Development of the Mathematical Model Isotropic Hooke’s law assuming small strains
1 T ✏= ru + ru 2
= 2µ✏ + tr(✏)I
T
= µru + µru + tr(u)I
Development of the Mathematical Model
Insert constitutive relation into governing equation @u ⇢ d⌦ = ⌦ @t
Z
⌦
⇥
⇤
r · µru + µruT + tr(ru)I d⌦ +
Z
⌦
⇢f b d⌦
{
@ @t
Z
@ @t
Z
@u ⇢ d⌦ = ⌦ @t
Z
µr2 u d⌦ + ⌦
Z
⌦
⇥
⇤
r · µruT + tr(ru)I d⌦ +
Z
⌦
⇢f b d⌦
laplacian term implicitly approximated using compact molecule @ @t
Z
@u ⇢ d⌦ = ⌦ @t
Z
µr2 u d⌦ + ⌦
Z
⌦
⇥
⇤
r · µruT + tr(ru)I d⌦ +
Z
⌦
⇢f b d⌦
Segregated approach: Laplacian term implicitly approximated using compact molecule @ @t
Z
@u ⇢ d⌦ = ⌦ @t Z
Z
µr2 u d⌦ + ⌦
2
(2µ + )r u d⌦ ⌦
Z
Z
⌦
⇥
r · µruT + tr(ru)I d⌦ +
2
(µ + )r u d⌦ ⌦
⇤
Z
⌦
⇢f b d⌦
better convergence with over-relaxed approach
See also: block-coupled solution algorithm
to be released
@2u T ⇢ 2 = r · (µru) + r · µ(ru) + r · ( tr(ru)I) + ⇢f b @t fvm::laplacian
fvm::laplacianTranspose
fvm::laplacianTrace
See article (almost) in press *fingers crossed*:
P. Cardiff, Z. Tukovic, H. Jasak, and A. Ivankovic, “A block-coupled finite volume methodology for linear elasticity and unstructured meshes,” Computers and structures, 2016, revision under review.
@2u ⇢ =(2µ + )r2 u @t ⇥ T + r · µru + tr(u)I
(µ + )ru
do fvVectorMatrix UEqn ( rho*fvm::d2dt2(U) == fvm::laplacian(2*mu + lambda, U) + fvc::div ( mu*gradU.T() + lambda*(I*tr(gradU) - (mu + lambda)*gradU ); ); UEqn.solve(); gradU = fvc::grad(U); while explicit terms not converged
⇤
My First OpenFOAM Solid Mechanics Tutorial: plateHole Boundary Conditions
My First OpenFOAM Solid Mechanics Tutorial: plateHole Boundary Conditions
Boundary Conditions
elasticSolidFoam
Three main types of BC for solids: traction, displacement, and symmetryPlane patch1 { type traction pressure } patch2 { type value } patch3 { type patchType }
solidTraction; uniform (0 0 0); uniform -1e4;
fixedDisplacement; uniform ( 0 0 0 );
solidSymmetry; symmetryPlane;
Boundary Conditions
elasticSolidFoam
Three main types of BC for solids: traction, displacement, and symmetryPlane patch1 { type traction pressure } patch2 { type value } patch3 { type patchType }
solidTraction; uniform (0 0 0); uniform -1e4;
fixedDisplacement; uniform ( 0 0 0 );
solidSymmetry; symmetryPlane;
Tb = traction - n*pressure
Boundary Conditions
elasticSolidFoam
Three main types of BC for solids: traction, displacement, and symmetryPlane patch1 { type traction pressure } patch2 { type value } patch3 { type patchType }
solidTraction; uniform (0 0 0); uniform -1e4;
fixedDisplacement; uniform ( 0 0 0 );
solidSymmetry; symmetryPlane;
Boundary Conditions
elasticSolidFoam
Three main types of BC for solids: traction, displacement, and symmetryPlane patch1 { type traction pressure } patch2 { type value } patch3 { type patchType }
solidTraction; uniform (0 0 0); uniform -1e4;
fixedDisplacement; uniform ( 0 0 0 );
solidSymmetry; symmetryPlane;
Boundary non-orthogonal correction is important
Boundary Conditions
elasticSolidFoam
Other BCs in plateHole case:
patch4 { type }
patch5 { type }
analyticalPlateHoleTraction;
solidTractionFree;
Change boundary conditions and see the effects...
My First OpenFOAM Solid Mechanics Tutorial: plateHole fvSchemes
My First OpenFOAM Solid Mechanics Tutorial: plateHole fvSchemes
fvSchemes d2dt2Schemes { default } ddtSchemes { default } gradSchemes { default }
elasticSolidFoam dictates whether case is transient or steady-state Euler; // or backward or steadyState
only used for displacement predictor Euler;
extendedLeastSquares 0; // or Gauss linear
Let’s look at gradScheme selection...
extendedLeastSquares 0
Gauss linear
fvSchemes d2dt2Schemes { default } ddtSchemes { default } gradSchemes { default }
elasticSolidFoam dictates whether case is transient or steady-state Euler; // or backward or steadyState
only used for displacement predictor Euler;
extendedLeastSquares 0; // or Gauss linear
Lets look at transient effects...
Transient effects Boundary Conditions right { type fileName outOfBounds nonLinear value }
timeVaryingSolidTraction; "$FOAM_CASE/timeVsTrac"; clamp; off; uniform ( 0 0 0 );
Create time series file: timeVsTrac ( ( ( ( ( )
0 5e-5 5.001e-5 1
( ( ( (
1e4 1e4 0 0 0 0
0 0 0 0
0 0 ) )
) ) ) ) ) )
controlDict endTime
1e-3;
deltaT
1e-6;
fvSchemes divSchemes { default div(sigma) }
elasticSolidFoam none; Gauss linear; // or Gauss skewCorrected linear;
laplacianSchemes { default none; laplacian(DU,U) Gauss linear corrected; } snGradSchemes { snGrad(U) }
corrected;
interpolationSchemes { default linear; }
My First OpenFOAM Solid Mechanics Tutorial: plateHole fvSolution
My First OpenFOAM Solid Mechanics Tutorial: plateHole fvSolution
fvSolution
elasticSolidFoam
Linear Solver: DICPCG is typically best; but GAMG can be faster depending on the case solvers { U { solver preconditioner tolerance relTol } }
PCG; DIC; 1e-09; 0.1;
solvers { U { solver tolerance relTol minIter maxIter smoother cacheAgglomeration nCellsInCoarsestLevel agglomerator mergeLevels } }
GAMG; 1e-09; 0.1; 0; 1000; GaussSeidel; true; 20; faceAreaPair; 1;
fvSolution solidMechanics { nCorrectors U infoFrequency divSigmaExp aitkenRelaxation
elasticSolidFoam
10000; 1e-6;
maximum number of outer iterations per time-step solution tolerance (linear solver tolerance should be less than this)
10; surface; yes;
frequency of output to log of outer iterations discretisation method for explicit sigma terms Aitken under-relaxation can improve convergence
}
relaxationFactors { Under-relaxation may be required for bad meshes, or multi-materials U 0.9; Less than 0.1 will be typically be prohibitively slow }
My First OpenFOAM Solid Mechanics Tutorial: plateHole Material Properties
My First OpenFOAM Solid Mechanics Tutorial: plateHole Material Properties
Material Properties
elasticSolidFoam
File: plateHole/constant/rheologyProperties
planeStress rheology { type rho E nu }
no;
no for 2-D plane strain and 3-D yes for 2-D plane stress linearElastic; rho [1 -3 0 0 0 0 0] 7854; E [1 -1 -2 0 0 0 0] 69e+9; nu [0 0 0 0 0 0 0] 0.33;
More Advanced Boundary Conditions
More Advanced Boundary Conditions right { type fileName outOfBounds nonLinear value }
Time varying displacement
timeVaryingSolidTraction; "$FOAM_CASE/timeVsTrac"; clamp; off; uniform ( 0 0 0 );
right { type fileName outOfBounds value }
Time varying traction
timeVaryingFixedDisplacement; "$FOAM_CASE/timeVsDisp"; clamp; uniform ( 0 0 0 );
More Advanced Boundary Conditions
right { type value }
fixedDisplacementZeroShear; uniform ( 0 0 0 );
Fixed normal displacement with zero shear traction
More Advanced Boundary Conditions patch1 { type solidContact; ... ... frictionContactModel standardPenalty; standardPenaltyFrictionModelDict { ... frictionLaw coulomb; frictionLawDict { frictionCoeff 0.1; } } ... }
try a tutorial...
Requirements
elasticSolidFoam
Tutorial $FOAM_TUTORIALS/solidMechanics/elasticSolidFoam/slidingFrictionBall Copy case to your run directory $> cp -r $FOAM_TUTORIALS/solidMechanics/elasticSolidFoam/slidingFrictionBall $FOAM_RUN/ cd $FOAM_RUN/slidingFrictionBall
Run the solver using run script $> ./Allrun
Frictional Contact Boundaries
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity
Requirements
elasticPlasticSolidFoam
Library $FOAM_SRC/solidModels $> wmake libso $FOAM_SRC/solidModels
Solver $FOAM_SRC/solidMechanics/elasticPlasticSolidFoam $> wmake $FOAM_SRC/solidMechanics/elasticPlasticSolidFoam
Tutorial $FOAM_TUTORIALS/solidMechanics/elasticPlasticSolidFoam/timeVaryingPlateHole Copy case to your run directory $> cp -r $FOAM_TUTORIALS/solidMechanics/elasticPlasticSolidFoam/timeVaryingPlateHole $FOAM_RUN/ $> cd $FOAM_RUN/timeVaryingPlateHole
Running the solver
elasticPlasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/timeVaryingPlateHole Create the mesh $> blockMesh Run the solver $> elasticPlasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticPlasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/timeVaryingPlateHole Create the mesh $> blockMesh Run the solver $> elasticPlasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticPlasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/timeVaryingPlateHole Create the mesh $> blockMesh Run the solver $> elasticPlasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticPlasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/timeVaryingPlateHole Create the mesh $> blockMesh Run the solver $> elasticPlasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticPlasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/timeVaryingPlateHole Create the mesh $> blockMesh Run the solver $> elasticPlasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Running the solver
elasticPlasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/timeVaryingPlateHole Create the mesh $> blockMesh Run the solver $> elasticPlasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Let’s see the log
Log from final time-step Time: 5 Time Time Time Time Time Time Time Time Time
5, 5, 5, 5, 5, 5, 5, 5, 5,
Corr Corr Corr Corr Corr Corr Corr Corr Corr
0, res = 100, res 200, res 300, res 400, res 500, res 600, res 700, res 800, res
2.76788e-07, rel res = 1.21532e-06, plastic res = 0.0251974, aitken = 0.1, inner iters = 3 = 0.00139936, rel res = 0.00206215, plastic res = 0.00220692, aitken = 2.09208, inner iters = 5 = 9.41332e-05, rel res = 0.000187605, plastic res = 0.000563846, aitken = 6.64734e-07, inner iters = 17 = 3.34461e-05, rel res = 6.92202e-05, plastic res = 0.000209832, aitken = 1.08075e-60, inner iters = 16 = 1.3035e-05, rel res = 3.25966e-05, plastic res = 8.59146e-05, aitken = 5.34648e-109, inner iters = 16 = 5.55703e-06, rel res = 1.70281e-05, plastic res = 3.70052e-05, aitken = 7.52841e-158, inner iters = 16 = 2.56807e-06, rel res = 8.88541e-06, plastic res = 1.65148e-05, aitken = -2.52339e-211, inner iters = 17 = 1.23765e-06, rel res = 4.00051e-06, plastic res = 7.45244e-06, aitken = -7.65226e-218, inner iters = 13 = 6.12697e-07, rel res = 1.83854e-06, plastic res = 3.36711e-06, aitken = 2.43004e-238, inner iters = 10
Time 5, Solving for DU, Initial residual = 2.76788e-07, Final residual = 3.63435e-07, Final rel residual = 8.19085e-07, No outer iterations 893 Updating the yield stress 0 cells have been updated 1175 cells are actively yielding Max DEpsilonPEq is 0.00106818 Max epsilonEq = 0.00261443 Max epsilonPEq = 0.00218483 Max sigmaEq = 1e+08 Max sigmaHyd = 8.62496e+07 Writing disp-force to file for patch right Writing strain-stress to file for patch right ExecutionTime = 13.58 s ClockTime = 14 s
Running the solver
elasticPlasticSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/timeVaryingPlateHole Create the mesh $> blockMesh Run the solver $> elasticPlasticSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Have a look in ParaView
beta field designating regions of plasticity
Theory
elasticPlasticSolidFoam
Mises/J2 plasticity, Prandtl-Reuss flow rule, radial return algorithm s ✏˙p = ✏˙ = ✏˙e + ✏˙p ˙ = 2µ✏˙e + tr(✏˙e )I ||s|| Rate/incremental form of linear momentum @2 u 2 ⇢ =(2µ + )r u @t ⇥ + r · µr uT + tr( u)I r · 2µ ✏p
(µ + )r u
plastic correction term
⇤
Implementation
elasticPlasticSolidFoam
do solve ( rho*fvm::ddt(DU) == fvm::laplacian(2*mu + lambda, DU) + fvc::div ( mu*gradDU.T() + lambda*tr(gradDU)*I - (mu + lambda)*gradDU - DEpsilonP ) ); update gradDU update DEpsilonP // plastic strain increment while !converged
to be released
See also: hyper-elasto-plastic procedure ⇣
2
@ u ⇢ 2 =r· j ·f @t where:
h
e ¯ = J µ dev(b )
T
⌘
2 J 2
+ ⇢f b 1 I
i
Calculated from Mises-Huber-Levy J2 plasticity
See other article almost in press *fingers crossed*:
P. Cardiff, Z. Tukovic, P. De Jaeger, M. Clancy and A. Ivankovic, “A Lagrangian cell-centred finite volume method for metal forming simulation,” International journal for numerical methods in engineering, 2016, revision under review.
plasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
orthotropic elasticity
Requirements
elasticOrthoSolidFoam
Library $FOAM_SRC/solidModels $> wmake libso $FOAM_SRC/solidModels
Solver $FOAM_SRC/solidMechanics/elasticOrthoSolidFoam $> wmake $FOAM_SRC/solidMechanics/elasticOrthoSolidFoam
Tutorial $FOAM_TUTORIALS/solidMechanics/elasticOrthoSolidFoam/orthoBlock Copy case to your run directory $> cp -r $FOAM_TUTORIALS/solidMechanics/elasticOrthoSolidFoam/orthoBlock $FOAM_RUN/ $> cd $FOAM_RUN/orthoBlock
Material Properties elasticOrthoSolidFoam rheology { type rho Ex Ey Ez nuxy nuyz nuzx Gxy Gyz Gzx }
orthotropicLinearElastic; rho [1 -3 0 0 0 0 0] 7854; Ex [1 -1 -2 0 0 0 0] 50e+9; Ey [1 -1 -2 0 0 0 0] 10e+9; Ez [1 -1 -2 0 0 0 0] 50e+9; nuxy [0 0 0 0 0 0 0] 0.3; nuyz [0 0 0 0 0 0 0] 0.06; nuzx [0 0 0 0 0 0 0] 0.3; Gxy [1 -1 -2 0 0 0 0] 5e9; Gyz [1 -1 -2 0 0 0 0] 5e9; Gzx [1 -1 -2 0 0 0 0] 19.230769231e9;
useful for composite materials or arterial walls
Material Directions elasticOrthoSolidFoam FoamFile { version 2.0; format ascii; class volTensorField; location "0"; object materialDirections; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions
[0 0 0 0 0 0 0];
internalField
uniform ( 1 0 0 0 1 0 0 0 1 );
boundaryField { ... }
local x-direction local y-direction local z-direction
Running the solver
elasticOrthoSolidFoam
Make sure you are in the case directory $> cd $FOAM_RUN/orthoBlock Create the mesh $> blockMesh Run the solver $> elasticOrthoSolidFoam View results $> paraFoam or $> paraFoam -nativeReader
Try create an orthotropic plateHole model...
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
elasticThermalSolidFoam
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity viscoElasticSolidFoam
orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
elasticSolidFoam/bimaterialPlate
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture elasticAcpSolidFoam
visco-elasticity
orthotropic elasticity
Arbitrary Crack Propagation (ACP)
plasticity thermo-elasticity
multi-material
More Advanced Material Models fracture visco-elasticity orthotropic elasticity
More Advanced Mathematical Models
More Advanced Mathematical Models geometric nonlinearity: large rotations and/or strains undeformed
engineering stress & strain
deformed
s
F
✏s =
l
L L
2nd Piola-Kirchhoff stress & Green strain
F
FL S= A l
l
L
F = A
✏=
l2
L2 2L
true (Cauchy) stress & strain
A
a
F = a
l ✏ = ln L
More Advanced Mathematical Models Two general methods to deal with geometric nonlinearity: Total Lagrangian
elasticNonLinTLSolidFoam
Updated Lagrangian
elasticNonLinULSolidFoam
Choice between the two approaches typically depends on the constitutive model Try tutorial cases...
Summary & Future Outlook
Summary Finite Element is not the only way: Finite Volume works for solid mechanics too Considerable solid mechanics capabilities in OpenFOAM Case setup & running: theory, boundary conditions, fvSchemes, fvSolution, material models, geometric nonlinearity
Future Outlook Further solid mechanics capabilities to be added soon, including, but not limited to: block-coupled solver If you really can’t wait, please contact me: I am always open to new poro-elastic-plastic solver collaborations! hyper-elastic-plastic solver improvements and bug fixes code clean, consistent style, rewrite to allow easy extension (different laws)
• • • • •
Provisionally to be called solids4Foam
26th to 30th June 2016
11th OpenFOAM Workshop Vila Flor Cultural Centre Guimarães, Portugal
Introduction to Solid Mechanics with OpenFOAM Basic Training Philip Cardiff
School of Mechanical & Materials Engineering University College Dublin ! ! ! !