implementation of solid body stress analysis in...

45
Introduction stressedFoam in OpenFOAM-1.6-ext A couple of new implementations Closure Implementation of solid body stress analysis in OpenFOAM Tian Tang Technical University of Denmark October 29, 2012 1 / 40

Upload: phamduong

Post on 17-Mar-2018

249 views

Category:

Documents


7 download

TRANSCRIPT

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Implementation of solid body stress analysisin OpenFOAM

Tian Tang

Technical University of Denmark

October 29, 2012

IntroductionSystem Modeling

Simulation Results & AnalysisConclusion

1 / 31

1 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Outline

1 Introduction

2 stressedFoam in OpenFOAM-1.6-ext

3 A couple of new implementations

4 Closure

2 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

PhD projectMotivation

Outline

1 Introduction

2 stressedFoam in OpenFOAM-1.6-ext

3 A couple of new implementations

4 Closure

3 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

PhD projectMotivation

My PhD project

Figure: An illustration of soil-wave-structure interaction (DTU BYG 2012)

4 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

PhD projectMotivation

Why stress analysis in OpenFOAM?

Multi-field interactionsFluid field:

wave/currentSolid fields:

SeabedStructure

Numerical toolsfinite volume method (FVM)finite element method (FEM)

Make a decisionSimulate solid stress analysis in OpenFOAM, a FVM library.

5 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

PhD projectMotivation

Why stress analysis in OpenFOAM?

Multi-field interactionsFluid field:

wave/currentSolid fields:

SeabedStructure

Numerical toolsfinite volume method (FVM)finite element method (FEM)

Make a decisionSimulate solid stress analysis in OpenFOAM, a FVM library.

5 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

Outline

1 Introduction

2 stressedFoam in OpenFOAM-1.6-ext

3 A couple of new implementations

4 Closure

6 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 1. theoretical background

Governing equations

Momentum balance∂2(ρu)∂t2 −∇ · σ = 0 (1)

Constitutive relation (linear elasticity)σ = 2µε + λtr(ε)I (2)

Stain-displacement relationε =

12[∇u + (∇u)T ] (3)

Combine Eq. (1-3):

∂2(ρu)∂t2 −∇ · [µ∇u + µ(∇u)T + λItr(∇u)︸ ︷︷ ︸

inter-component coupling

] = 0

7 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 1. theoretical background

Governing equations

Momentum balance∂2(ρu)∂t2 −∇ · σ = 0 (1)

Constitutive relation (linear elasticity)σ = 2µε + λtr(ε)I (2)

Stain-displacement relationε =

12[∇u + (∇u)T ] (3)

Combine Eq. (1-3):

∂2(ρu)∂t2 −∇ · [µ∇u + µ(∇u)T + λItr(∇u)︸ ︷︷ ︸

inter-component coupling

] = 0

7 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 1. theoretical background

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

x-direction:∂2(ρux )

∂t2 − µ(∂2ux

∂x2 +∂2ux

∂y2 +∂2ux

∂z2

)− (µ + λ)

(∂2ux

∂x2 +∂2uy

∂x∂y+∂2uz

∂x∂z

)= 0

y-direction:∂2(ρuy )

∂t2 − µ(∂2uy

∂x2 +∂2uy

∂y2 +∂2uy

∂z2

)− (µ + λ)

(∂2uy

∂y2 +∂2ux

∂y∂x+∂2uz

∂y∂z

)= 0

z-direction:∂2(ρuz )

∂t2 − µ(∂2uz

∂x2 +∂2uz

∂y2 +∂2uz

∂z2

)− (µ + λ)

(∂2uz

∂z2 +∂2ux

∂z∂x+∂2uy

∂z∂y

)= 0

8 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File systemstressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

9 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File systemstressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

9 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File systemstressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

10 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File systemstressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

11 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File systemstressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

12 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File systemstressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

13 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File system

stressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

ε =12 [∇u + (∇u)T ],σ = 2µε+ λtr(ε)I

14 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File system

stressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

A traction force boundary

15 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam: 2. File system

stressedFoam

stressedFoam.C

readMechanicalProperties.H

createFields.H

readStressedFoamControls.H

calculateStress.H

tractionDisplacement

Make

files

options

Compilation

16 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

createFields.H file

Info<< "Reading displacement field U\n" << endl;volVectorField U(

IOobject(

"U",runTime.timeName(),mesh,IOobject::MUST_READ,IOobject::AUTO_WRITE

),mesh

);

17 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

readMechanicalProperties.H file

Info<< "Reading mechanical properties\n" << endl;

IOdictionary mechanicalProperties(

IOobject(

"mechanicalProperties",runTime.constant(),mesh,IOobject::MUST_READ,IOobject::NO_WRITE

));

dimensionedScalar rho(mechanicalProperties.lookup("rho"));dimensionedScalar rhoE(mechanicalProperties.lookup("E"));dimensionedScalar nu(mechanicalProperties.lookup("nu"));

Info<< "Normalising E : E/rho\n" << endl;dimensionedScalar E = rhoE/rho;

Info<< "Calculating Lame’s coefficients\n" << endl;

dimensionedScalar mu = E/(2.0*(1.0 + nu));dimensionedScalar lambda = nu*E/((1.0 + nu)*(1.0 - 2.0*nu));

...

18 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

readStressedFoamControls.H file

const dictionary& stressControl = mesh.solutionDict().subDict("stressedFoam");

int nCorr(readInt(stressControl.lookup("nCorrectors")));scalar convergenceTolerance(readScalar(stressControl.lookup("U")));

19 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

stressedFoam.C file

do{

volTensorField gradU = fvc::grad(U);fvVectorMatrix UEqn(

fvm::d2dt2(U)==

fvm::laplacian(2*mu + lambda, U, "laplacian(DU,U)")

+ fvc::div(

mu*gradU.T() + lambda*(I*tr(gradU)) - (mu + lambda)*gradU,"div(sigma)"

));

initialResidual = UEqn.solve().initialResidual();

} while (initialResidual > convergenceTolerance && ++iCorr < nCorr);

∂2(ρu)∂t2 −∇ ·

[µ∇u + µ(∇u)T + λItr(∇u)

]= 0

→∂2(ρu)∂t2︸ ︷︷ ︸

implicit

= ∇ · [(2µ + λ)∇u]︸ ︷︷ ︸implicit

+∇ · [µ(∇u)T + λItr(∇u)− (µ + λ)∇u]︸ ︷︷ ︸explicit

20 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

calculateStress.H file

if (runTime.outputTime()){

volTensorField gradU = fvc::grad(U);

volSymmTensorField sigma =rho*(2.0*mu*symm(gradU) + lambda*I*tr(gradU));

volScalarField sigmaEq(

IOobject(

"sigmaEq",runTime.timeName(),mesh,IOobject::NO_READ,IOobject::AUTO_WRITE

),sqrt((3.0/2.0)*magSqr(dev(sigma)))

);

...

ε =12[∇u + (∇u)T ],σ = 2µε + λtr(ε)I

21 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

A tractionDisplacement boundaryGiven a traction force on the boundary, what’s the displacement?

T = σ · n = [(2µ + λ)∇u︸ ︷︷ ︸implicit

+µ(∇u)T + λItr(∇u)− (µ + λ)∇u︸ ︷︷ ︸explicit

] · n

→ (∇u) · n =T− [µ(∇u)T + λItr(∇u)− (µ + λ)∇u] · n

2µ + λ

Key codes in tractionDisplacementFvPatchVectorField.C file:

void tractionDisplacementFvPatchVectorField::updateCoeffs(){

... //here some less important codes are ignored

vectorField n = patch().nf();

const fvPatchField<tensor>& gradU =patch().lookupPatchField<volTensorField, tensor>("grad(U)");

gradient() =(

(traction_ - pressure_*n)/rho.value()- (n & (mu.value()*gradU.T() - (mu + lambda).value()*gradU))- n*tr(gradU)*lambda.value()

)/(2.0*mu + lambda).value();

fixedGradientFvPatchVectorField::updateCoeffs();}

22 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

A tractionDisplacement boundaryGiven a traction force on the boundary, what’s the displacement?

T = σ · n = [(2µ + λ)∇u︸ ︷︷ ︸implicit

+µ(∇u)T + λItr(∇u)− (µ + λ)∇u︸ ︷︷ ︸explicit

] · n

→ (∇u) · n =T− [µ(∇u)T + λItr(∇u)− (µ + λ)∇u] · n

2µ + λ

Key codes in tractionDisplacementFvPatchVectorField.C file:

void tractionDisplacementFvPatchVectorField::updateCoeffs(){

... //here some less important codes are ignored

vectorField n = patch().nf();

const fvPatchField<tensor>& gradU =patch().lookupPatchField<volTensorField, tensor>("grad(U)");

gradient() =(

(traction_ - pressure_*n)/rho.value()- (n & (mu.value()*gradU.T() - (mu + lambda).value()*gradU))- n*tr(gradU)*lambda.value()

)/(2.0*mu + lambda).value();

fixedGradientFvPatchVectorField::updateCoeffs();}

22 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Theory of itA walk through stressedFoamtractionDisplacement boundaryrun the plateHole case

Run a plateHole casecp -r $FOAM_TUTORIALS/stressAnalysis/stressedFoam/plateHole $FOAM_RUNcd $FOAM_RUN/plateHoleblockMeshstressedFoamtouch output.foamparaview output.foam

Figure: The equivalent stress field in the plateσEq =

√32 s : s, s = deviatoric stress

23 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

Outline

1 Introduction

2 stressedFoam in OpenFOAM-1.6-ext

3 A couple of new implementations

4 Closure

24 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

The new implementations

plasticStressedFoam

→ Material non-linearity (perfect plasticity)poroPlasticStressedFoam

→ Porous media (soil)coupledPoroFoam

→ Block matrix solver (implicit solutions for coupled system)

25 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 1. Theory

Mathmetical model for a perfect plastic solid body:

∇ · [(2µ + λ)∇(du)]︸ ︷︷ ︸implicit

=

inter−component coupling︷ ︸︸ ︷−∇ ·

{µ[∇(du)]T + λItr [∇(du)]− (µ + λ)∇(du)

}+

plastic terms︷ ︸︸ ︷∇ ·[

2µ(dεp) + λItr(

dεp)]︸ ︷︷ ︸

explicit

The working solution variable is du, instead of uTwo extra variables: dεp and σ

One more material property: a yield stress parameterExplicit plastic terms in the governing equationAn algorithm for updating dεp and σ

26 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 1. Theory

Mathmetical model for a perfect plastic solid body:

∇ · [(2µ + λ)∇(du)]︸ ︷︷ ︸implicit

=

inter−component coupling︷ ︸︸ ︷−∇ ·

{µ[∇(du)]T + λItr [∇(du)]− (µ + λ)∇(du)

}+

plastic terms︷ ︸︸ ︷∇ ·[

2µ(dεp) + λItr(

dεp)]︸ ︷︷ ︸

explicit

The working solution variable is du, instead of uTwo extra variables: dεp and σ

One more material property: a yield stress parameterExplicit plastic terms in the governing equationAn algorithm for updating dεp and σ

26 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 2. Implementation

Basic set-upcopy stressedFoam, rename it, modify Make/files

cp -r $FOAM_APP/solvers/stressAnalysis/stressedFoam .mv stressedFoam plasticStressedFoamcd plasticStressedFoammv stressedFoam.C plasticStressedFoam.Csed -i ’s/stressedFoam/plasticStressedFoam/g’ Make/filessed -i ’s/FOAM_APPBIN/FOAM_USER_APPBIN/g’ Make/fileswcleanwmake

27 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 2. ImplementationModify the createFields.H file:

Info<< "Reading incremental displacement field dU\n" << endl;volVectorField dU(

IOobject(

"dU",runTime.timeName(),mesh,IOobject::MUST_READ,IOobject::AUTO_WRITE

),mesh

);Info<< "Reading incremental plastic strain field deps_p\n" << endl;volTensorField deps_p(

IOobject(

"deps_p",runTime.timeName(),mesh,IOobject::NO_READ,IOobject::AUTO_WRITE

),mesh,dimensionedTensor("deps_p", dimless, tensor::zero)

);

28 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 2. ImplementationModify the readMechanicalProperties.H file:

dimensionedScalar ky(mechanicalProperties.lookup("ky"));

Modify the main plasticStressedFoam.C file:do{

volTensorField graddU = fvc::grad(dU);

fvVectorMatrix dUEqn(

fvm::laplacian(2*mu + lambda, dU, "laplacian(DdU,dU)")==- fvc::div

(mu*graddU.T() + lambda*(I*tr(graddU)) - (mu + lambda)*graddU,"div(sigmaExp)"

)+ fvc::div

(2*mu*deps_p + lambda*I*tr(deps_p),"div(sigmaP)"

));initialResidual = dUEqn.solve().initialResidual();

} while (initialResidual > convergenceTolerance && ++iCorr < nCorr);

U += dU;

29 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 2. ImplementationModify the calculateStress.H file:

volTensorField graddU = fvc::grad(dU);

volSymmTensorField sigma_old = sigma;

//Get the trial updated stresssigma += 2.0*mu*symm(graddU) + lambda*I*tr(graddU);

//Check the yield conditionvolScalarField sqrtJ2 = sqrt((1.0/2.0)*magSqr(dev(sigma)));

volScalarField fac = sqrtJ2/k;

forAll(fac, celli){

if (fac[celli] > 1.0) //Plasticity occurs{

sigma[celli] = 1.0/3.0*I*tr(sigma[celli]) + dev(sigma[celli])/fac[celli];symmTensor dsigma = sigma[celli] - sigma_old[celli];tensor deps_e = 1.0/3.0*I*tr(dsigma)/(3.0*lambda+2.0*mu).value()

+ dev(dsigma)/(2.0*mu.value());tensor deps = 1.0/2.0*(graddU[celli] + graddU[celli].T());deps_p[celli] = deps - deps_e;

}else // only elasticity{

deps_p[celli] = tensor::zero;}

30 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 3. plasticPlateHole casecd plasticPlateHoleblockMeshplasticStressedFoam

(a) (b)

(c) (d)Figure: the development of plastic zones, represented by mag(deps p).

the test condition is dT = 103Pa, k = 103Pa31 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

poroPlasticStressedFoam: 1. Theory

Math model for soil saturated with water:kγ∇2p =

nK ′

∂p∂t

+∂

∂t(∇ · u)

∇ ·

µ∇(du) + µ[∇(du)]T + λItr [∇(du)]−[

2µ(dεp) + λItr(

dεp)]︸ ︷︷ ︸

plasticity

= ∇(dp)

One more working solution variable p, coupled equation setMomentum equation in incremental form, pore flow equation in total form

32 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

2. The main poroPlasticStressedFoam.C file

do{

fvScalarMatrix pEqn(

fvm::ddt(p) == fvm::laplacian(Dp1, p, "laplacian(Dp1,p)")-fvc::div(fvc::ddt(Dp2, U), "div(ddt(U))")

);pResidual = pEqn.solve().initialResidual();volScalarField dp = p - p_old;

volTensorField graddU = fvc::grad(dU);fvVectorMatrix dUEqn(

fvm::laplacian(2*mu + lambda, dU, "laplacian(DdU,dU)")==- fvc::div

(mu*graddU.T() + lambda*(I*tr(graddU)) - (mu + lambda)*graddU, "div(sigmaExp)"

)+ fvc::div

( 2.0*mu*deps_p + lambda*I*tr(deps_p), "div(sigmaP) )+ fvc::grad(dp)

);dUResidual = dUEqn.solve().initialResidual();U = U_old + dU;

} while ((pResidual > pTolerance || dUResidual > dUTolerance)&& ++iCorr < nCorr);

33 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

plasticStressedFoam: 3. myPoroCase

Compress a cubic soil sample with constant rate of displacement,top drainage only:

(a) (b)

(c)Figure: Illustration of gradually accumulated pore pressure calculated by

poroPlasticStressedFoam

34 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

coupledPoroFoam: 1. Theory of itGiven a resulting finite volume discretization of a coupled equation set:

aP xP +

∑N

aN xN = b

The segregated approach - no coupling between variables:

aP xP +

∑N

aN xN =

[a11

. . .amm

]P

xP +

∑N

[a11

. . .amm

]N

xN

The block matrix solver approach - coupling between variables in owner and neighbor cells:

aP xP +

∑N

aN xN =

[a11 · · · a1m

.... . .

...am1 · · · amm

]P

xP +

∑N

[a11 · · · a1m

.... . .

...am1 · · · amm

]N

xN

35 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

coupledPoroFoam: 2. Our own block matrix

Biot’s poro-elastic consolidation equations∇ ·[µ∇u + µ(∇u)T + λItr(∇u)

]= ∇p

kγ∇2p =

nK ′

∂p∂t

+∂

∂t(∇ · u)

Construct our own block matrix algorithm

aP xP+

∑N

aN xN =

[a11 a14

a22 a24a33 a34

a41 a42 a43 a44

]P

[uxuyuzp

]P

+

∑N

[a11 a14

a22 a24a33 a34

a41 a42 a43 a44

]N

[uxuyuzp

]N

36 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

plasticStressedFoamporoPlasticStressedFoamcoupledPoroFoam

coupledPoroFoam: 3. Solution routine

block matrix U∗, p∗

segregated, momentum equation only

U

pore flow equation

p

fvc::grad(p∗)

converged

The details of implementation files can found in the report.

37 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

Outline

1 Introduction

2 stressedFoam in OpenFOAM-1.6-ext

3 A couple of new implementations

4 Closure

38 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

More solid stress analysis to do in OpenFOAM?

Advanced plasticityFully coupled block matrix solverFluid-structure interactions (FSI)

39 / 40

IntroductionstressedFoam in OpenFOAM-1.6-ext

A couple of new implementationsClosure

That’s it!

40 / 40