Introduction to Solid Mechanics with OpenFOAM Basic Training

185 downloads 428732 Views 5MB Size Report
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





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 ! ! ! !