Stress Solver - Pre-strain is not applied?

Numerical methods and mathematical models of Elmer
Post Reply
aandre
Posts: 3
Joined: 11 Apr 2024, 22:30
Antispam: Yes

Stress Solver - Pre-strain is not applied?

Post by aandre »

Hi,
I am trying to use the pre-strain option for the stress solver. The structure is very simple - two boxes one on top another, the bottom box has zero displacement in the bottom as boundary condition and the second box on top has a uniform pre-strain defined as

Pre Strain
Size 6
Real -0.0401 -0.0401 -0.0401 0 0 0

in the corresponding materials section (it is not clear from the manual how the Pre Strain is defined, but looking at the source code I can see that it is a 6-element array).
ElmerSolver runs fine and gives zero result - the displacement, strain and stress in the whole structure is just zero, which is apparently not the correct solution I am looking for in this example.

The sif and gmsh geo files are attached.

I would really appreciate any help in correcting this simple example.

From physical point of view this is an attempt to model a simple "Quantum Well" strain - Ge "thin" strained layer on top of thick (and hence - mainly unstrained) Si layer. The Si layer is assumed to be a "substrate" - therefore zero displacement boundary condition at the bottom. This is related to semiconductor structures - i.e. growth of thin material with different lattice constant on top of the other material, the strain occurs because of difference in lattice constants - the thin material on top "has to match" the lattice constant of the bottom material (="substrate") and hence gets strained.

Many thanks!
Aleksey
Attachments
t1_QW.geo
(4.39 KiB) Downloaded 4 times
Elmer_t1_QW.sif
(4.8 KiB) Downloaded 5 times
kevinarden
Posts: 2319
Joined: 25 Jan 2019, 01:28
Antispam: Yes

Re: Stress Solver - Pre-strain is not applied?

Post by kevinarden »

I put a load on it so that there would be a solution. Then I ran it with and with out the pre strain. There was no change in the answer.
aandre
Posts: 3
Joined: 11 Apr 2024, 22:30
Antispam: Yes

Re: Stress Solver - Pre-strain is not applied?

Post by aandre »

Hi All,

to add - as you can see from the sif file (commented out Body Force 1 section), I also tried to apply the "pre-strain" in a different way - to have it as "Body Force" to volume 2, the result is the same - zero trivial solution. I also tried to apply "Body Force" as Stress - also zero result = displacement is still zero as a the solution.

I started to look more in the source code and it seems to me that although ElmerSolver does not complain on Pre-Strain entry in the sif file, it may be the case that I do the input incorrectly for some reason and therefore Pre-strain is interpreted as zero and ElmerSolver is doing the solution effectively with pre-strain being just 0.

And / or, it is also possible that I am doing the output in a wrong way?

Many thanks for your help!

Aleksey
aandre
Posts: 3
Joined: 11 Apr 2024, 22:30
Antispam: Yes

Re: Stress Solver - Pre-strain is not applied?

Post by aandre »

Hi All,

I am looking at the source code - StressSolve.f90

1. PreStrain is defined as array (6,N), where (I guess) N- number of nodes. This means that my input for Pre Strain as "Size 6" array is probably correct.

2. PreStrain is set by default to zero in the following section:

(line 1177 of StressSolve.f90)

IF (.NOT. ConstantBulkMatrixInUse ) THEN
PreStress = 0.0d0
PreStrain = 0.0d0
IF( AnyPre ) THEN
CALL ListGetRealArray( Material, 'Pre Stress', Work, n, NodeIndexes, Found )
IF ( Found ) THEN
k = SIZE(Work,1)
PreStress(1:k,1:n) = Work(1:k,1,1:n)
END IF
CALL ListGetRealArray( Material, 'Pre Strain', Work, n, NodeIndexes, Found )
IF ( Found ) THEN
k = SIZE(Work,1)
PreStrain(1:k,1:n) = Work(1:k,1,1:n)
END IF
END IF
END IF


The above means to me that to have PreStrain to be non-zero I must have ConstantBulkMatrixInUse set as False ?

In my sif file it is set :

Constant Bulk System = False

I need to check - does it mean that ConstantBulkMatrixInUse is False? I need to dig it further...

3. The in StressSolve.f90 Prestrain is used in a call to StressCompose and, again, this happens ONLY if ConstantBulkMatrixInUse=False

(line 1301 of StressSolve.f90)

CASE( Cartesian, AxisSymmetric, CylindricSymmetric )
IF ( ConstantBulkMatrixInUse ) THEN
CALL StressForceCompose( FORCE, FORCE_im, LOAD, LOAD_im, ElasticModulus, PoissonRatio, &
PlaneStress, Isotropic,StressLoad, StrainLoad, HeatExpansionCoeff, &
LocalTemperature, Element, n, ntot, ElementNodes, RelIntegOrder, RotateC, TransformMatrix )
ELSE
CALL StressCompose( MASS, DAMP, STIFF, FORCE, FORCE_im, LOAD, LOAD_im, ElasticModulus, &
PoissonRatio, Density, PlaneStress, Isotropic, &
PreStress, PreStrain, StressLoad, StrainLoad, HeatExpansionCoeff, &
LocalTemperature, Element, n, ntot, ElementNodes, RelIntegOrder, StabilityAnalysis &
.AND. iter>1, GeometricStiffness .AND. iter>1, NodalDisplacement, &
RotateC, TransformMatrix, NodalMeshVelo, Damping, RayleighDamping, &
RayleighAlpha, RayleighBeta,EvaluateAtIP,EvaluateLoadAtIp,NeedMass)
END IF


My conclusion is that I need to be sure that ConstantBulkMatrixInUse=False, otherwise PreStrain is not applied.
I hope that the above statement in the Solver section Constant Bulk System = False actually does it?

to add - I also put
Constant Bulk Matrix = False
in the sif file and the result is the same.

according to StreeSolver.f90

ConstantBulkMatrix = GetLogical( SolverParams, 'Constant Bulk Matrix', Found )

and

ConstantBulkMatrixInUse = ConstantBulkMatrix .AND. &
ASSOCIATED(Solver % Matrix % BulkValues)

I am not quite sure what is the value of ASSOCIATED(Solver % Matrix % BulkValues) and how it is set, but at least if ConstantBulkMatrix=False, then it is "guaranteed" that ConstantBulkMatrixInUse=False


Any comment would be much appreciated!

Kind regards,
Aleksey
mika
Posts: 236
Joined: 15 Sep 2009, 07:44

Re: Stress Solver - Pre-strain is not applied?

Post by mika »

After checking the solver code I think a given Pre Strain is used only in special cases where the effect of geometric stiffness is activated (Stability Analysis = True or Geometric Stiffness = True).

If you update to get the change

https://github.com/ElmerCSC/elmerfem/co ... 0f675667e6

it might be possible to include initial strains by giving them in a body force section as

Strain Load(6) = -0.0401 -0.0401 -0.0401 0 0 0

The stress and strain computation haven't been modified, so their interpretation may need to be done with some care if Strain Load is given.

-- Mika
Post Reply