implementation of solid body stress analysis in...
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