Excess pore-water pressure in triaxial test

Asked by Fedor

Hello.

Can you please provide any information how to implement undrained condition with flow engine? When I change boundary condition in example script (oedometric.py) and put fluidBulkModulus=0.00001 (compressible scheme) I cannot achieve undrained behavior.
Kind regards, Fedor

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Fedor
Solved:
Last query:
Last reply:
Revision history for this message
Fedor (vodovozov) said :
#1
Revision history for this message
Yuri Bezmenov (yuribezmenov) said :
#2

Hi Fedor!
I was also trying to simulate a similar problem when I used 'flow.bndCondIsPressure = [0, 0, 0, 0, 0, 0]' to simulate undrained condition, the software throws an errors :
negative volume for an ordinary pore (temp warning, should still be safe)
Failed to triangulate body with id=36 Point=-0.342856 -0.282828 1.24841 rad=0.0553163
and ultimately, it terminates with 'segementation fault'.
If I tried with some boundaries having pressure conditions, e.g. ' 'flow.bndCondIsPressure = '[0, 0, 0, 1, 0, 0]', the software works fine. But applying any pressure condition doesn't reflect the actual scenario.

I believe using DFNFlowEngine could help, but I am so naive that I couldn't compile to yade. If you could do that and check, that may serve the purpose for both of us.
thanks.

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#3

Hi Fedor,

Mathematically it should be possible to solve for pressure when the fluid is compressible (else it is ill-posed), but it requires that at least the initial value of pressure is defined. I don't think I've tried that before.
Do you have a (non-)working example?
Regards
Bruno

Revision history for this message
Fedor (vodovozov) said :
#4
Revision history for this message
Fedor (vodovozov) said :
#5

Hi Yuri, thanks for your comment

Revision history for this message
Fedor (vodovozov) said :
#6

Dear Bruno,

I was wondering if you checked the script? \

Kind regards, Fedor

Revision history for this message
Chareyre (bruno-chareyre-9) said :
#7

No, not yet. In the coming days with a bit of luck.
-------- Message d'origine --------De : Fedor <email address hidden> Date : 30/05/2023 16:55 (GMT+01:00) À : <email address hidden> Objet : Re: [Question #706740]: Excess pore-water pressure in triaxial test Question #706740 on Yade changed:https://answers.launchpad.net/yade/+question/706740Fedor posted a new comment:Dear Bruno,I was wondering if you checked the script? \Kind regards, Fedor-- You received this question notification because you are subscribed tothe question.

Revision history for this message
Fedor (vodovozov) said :
#8

Brilliant!

Revision history for this message
Fedor (vodovozov) said :
#9

Dum spiro spero

Revision history for this message
Metehan Karslioglu (zmetehans) said :
#10

Are there any updates regarding this question? I would also like to simulate an undrained triaxial test with a flow engine and I am encountering the same error. Are there any alternative methods available to determine the evolution of pore water during the test? Thank you in advance.

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#11

Hi,
I checked the script and I did not see a problem.
There is a pressure response by the fluid when loading is applied.
Did you expect something different? How?

There is indeed this annoying warning (but "should still be safe") , I'll remove it from source code. You can ignore it.

Revision history for this message
Fedor (vodovozov) said :
#12

Hello,
Thank you for reply.
 I imposed pressure (flow.imposePressure) to compressible fluid (flow.fluidBulkModulus=0.00001) but I am concerned because, first - volumetric strain should not change during undrained condition, second - i could not see pore pressure built up. Could you recommend me something?

Revision history for this message
Yuri Bezmenov (yuribezmenov) said :
#13

hi Fedor,
I have a question, why did you choose so low bulk modulus, bulk modulus of water is about 2.1e9. such low bulk modulus will result in volumetric strain.
Thanks

Revision history for this message
Fedor (vodovozov) said :
#14

Hey Yuri,
Check the manual please is written as a coefficient

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#15

> I imposed pressure (flow.imposePressure)

No, you don't. In the script this line is commented out. If you were imposing pressure it would be a "drained" test.

> volumetric strain should not change during undrained condition

If the fluid is compressible there is nothing to prevent volume changes, as long as you don't force a constant volume (and you don't, because you have mixed stress/displacement conditions on the walls).

> i could not see pore pressure built up

Not sure what you mean. I run your script and I see a plot with changes in the value of "p".

Yuri is correct in #13: flow.fluidBulkModulus=0.00001 is really not water but I don't mind that at this point, it is a value and it gives a response in truly undrained (not "constant volume") conditions.

Revision history for this message
Fedor (vodovozov) said :
#16

Thanks a lot.
>Mathematically it should be possible to solve for pressure when the fluid is compressible (else it is ill-posed), but it requires that at least the initial value of pressure is defined.

That's why I tried to do it both with compressible fluid and some initial water pressure inside. Maybe I did't understand correctly.

In undrained experiment usually the pore pressure is rising during deviatoric and reach the max value which is corresponded minimum effective stress.

Now I tried with comprssible fluid and receive this
 CHOLMOD error: invalid xtype. file: ../Cholesky/cholmod_analyze.c line: 431
CHOLMOD error: argument missing. file: ../Cholesky/cholmod_factorize.c line: 121
Segmentation fault

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#17

Initially, I thought your script was crashing in undrained conditions. I thus conjectured that it could come from uninitialized pressure.
But in fact the script does not crash. Pressure is simply initialized at zero. There is no problem.

Imposing pressure in one point would not only initialize, it would continuously impose pressure (at least if you just uncomment the corresponding line, that's what would happen).

> In undrained experiment usually the pore pressure is rising during deviatoric

That is another question. It depends on many things. Let's stick to the numerical model and let's see if it is self-consistent before considering experiments. The main question at this step: is pressure change consistent with the volume change?

> Now I tried with comprssible fluid and receive this

I suppose you meant "incompressible"? This one won't solve: the pressure of an incompressible fluid is unknown if no pressure is imposed somewhere (in other words, the matrix is singular).

Revision history for this message
Fedor (vodovozov) said :
#18

No no. I run scrip as it is ( which I attached ) with flow.fluidBulkModulus=0.00001 . And I received this error

CHOLMOD error: invalid xtype. file: ../Cholesky/cholmod_analyze.c line: 431
CHOLMOD error: argument missing. file: ../Cholesky/cholmod_factorize.c line: 121
Segmentation fault

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#19

I cannot reproduce your problem with current yadedaily (20230525-7264~94b01fd~focal1).
Which version are you using?

Revision history for this message
Fedor (vodovozov) said :
#20

Yade 2018.02b

Revision history for this message
Bruno Chareyre (bruno-chareyre) said (last edit ):
#21

2018... hence the misunderstanding.
Apparently something has been improved since then.
I suggest using a newer version. The good news is that you will not have to change the script.

Revision history for this message
Fedor (vodovozov) said :
#22

Welcome to Yade 2022.01a
Using python version: 3.10.6 (main, Mar 10 2023, 10:55:28) [GCC 11.3.0]
TCP python prompt on localhost:9000, auth cookie `dyseak'
XMLRPC info provider on http://localhost:21000
Running script N3.py
time step 0.0006163537652128292
Segmentation fault (core dumped)

Revision history for this message
Bruno Chareyre (bruno-chareyre) said (last edit ):
#23

Try yadedaily?

p.s. No need. I tried your script with yade 2020.01a and it also runs without problem.
Do you confirm that you have segfaults with the exact script in #4?

Could you show the output of:
yade.libVersions.printAllVersions()

Revision history for this message
Fedor (vodovozov) said :
#24

fedor@fedor-virtual-machine:~$ yadedaily N3.py
Welcome to Yade 20230525-7264~94b01fd~jammy1
Using python version: 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0]
TCP python prompt on localhost:9000, auth cookie `seacus'
XMLRPC info provider on http://localhost:21000
Running script N3.py
time step 0.015408844130320731
Segmentation fault (core dumped)

Revision history for this message
Fedor (vodovozov) said :
#25

Dear Bruno.
I used the yadedaily exactly you did

Welcome to Yade 20230525-7264~94b01fd~focal1
Using python version: 3.8.10 (default, May 26 2023, 14:05:08)
[GCC 9.4.0]
TCP python prompt on localhost:9000, auth cookie `yeukdc'
XMLRPC info provider on http://localhost:21000
Running script N3.py
INFO:matplotlib.font_manager:Could not open font file /usr/share/fonts/truetype/noto/NotoColorEmoji.ttf: In FT2Font: Could not set the fontsize
INFO:matplotlib.font_manager:generated new fontManager
time step 0.4082482904638631

negative volume for an ordinary pore (temp warning, should still be safe)
negative volume for an ordinary pore (temp warning, should still be safe)
negative volume for an ordinary pore (temp warning, should still be safe)
<FATAL ERROR> ThreadRunner:35 void yade::ThreadRunner::run(): Exception occured:
CGAL ERROR: assertion violation!
Expr: dexp != 2047
File: /usr/include/CGAL/Mpzf.h
Line: 404
Explanation: Creating an Mpzf from infinity or NaN.
CHOLMOD error: invalid xtype. file: ../Cholesky/cholmod_analyze.c line: 431
CHOLMOD error: argument missing. file: ../Cholesky/cholmod_factorize.c line: 121
Segmentation fault (core dumped)

Revision history for this message
Fedor (vodovozov) said :
#26

Sorry, I skipped your PS

fm547@ubuntu:~$ yadedaily
Welcome to Yade 20230525-7264~94b01fd~focal1
Using python version: 3.8.10 (default, May 26 2023, 14:05:08)
[GCC 9.4.0]
TCP python prompt on localhost:9000, auth cookie `ckeuay'
XMLRPC info provider on http://localhost:21000
[[ ^L clears screen, ^U kills line. F12 controller, F11 3D view (press "h" in 3D view for help), F10 both, F9 generator, F8 plot. ]]

In [1]: yade.libVersions.printAllVersions()

```
Yade version : 20230525-7264~94b01fd~focal1
Yade features : LOGGER USEFUL_ERRORS COMPLEX_MP VTK OPENMP GTS QT5 CGAL PFVFLOW PFVFLOW LINSOLV MPI TWOPHASEFLOW LS_DEM FEMLIKE GL2PS LBMFLOW THERMAL PARTIALSAT POTENTIAL_PARTICLES POTENTIAL_BLOCKS
Yade config dir: ~/.config/yadedaily
Yade precision : 53 bits, 15 decimal places, with mpmath, PrecisionDouble
Yade RealHP<…> : (15, 33, 45, 60, 120, 150, 300) decimal digits in C++, (15, 33) decimal digits accessible from python
```

Libraries used :

| library | cmake | C++ |
| ------------- | -------------------- | ------------------ |
| boost | 107100 | 1.71.0 |
| cgal | | 5.0.2 |
| clp | 1.17.5 | 1.17.5 |
| cmake | 3.16.3 | |
| coinutils | 2.11.4 | 2.11.4 |
| compiler | /usr/bin/c++ 9.4.0 | gcc 9.4.0 |
| eigen | 3.3.7 | 3.3.7 |
| freeglut | 2.8.1 | |
| gl | | 20190805 |
| ipython | 7.13.0 | |
| metis | | 5.1.0 |
| mpi | 3.1 | ompi:4.0.3 |
| mpi4py | 3.0.3 | |
| mpmath | 1.1.0 | |
| openblas | | OpenBLAS 0.3.8 |
| python | 3.8.10 | 3.8.10 |
| qglviewer | | 2.6.3 |
| qt | | 5.12.8 |
| sqlite | | 3.31.1 |
| suitesparse | 5.7.1 | 5.7.1 |
| vtk | 6.3.0 | 6.3.0 |

```
Linux version : Ubuntu 20.04.6 LTS
Architecture : amd64
Little endian : True
```

Revision history for this message
Fedor (vodovozov) said :
#27

fedor@fedor-virtual-machine:~$ yadedaily
Welcome to Yade 20230525-7264~94b01fd~jammy1
Using python version: 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0]
TCP python prompt on localhost:9000, auth cookie `syksce'
XMLRPC info provider on http://localhost:21000
[[ ^L clears screen, ^U kills line. F12 controller, F11 3D view (press "h" in 3D view for help), F10 both, F9 generator, F8 plot. ]]

In [1]: yade.libVersions.printAllVersions()

```
Yade version : 20230525-7264~94b01fd~jammy1
Yade features : LOGGER USEFUL_ERRORS COMPLEX_MP VTK OPENMP GTS QT5 CGAL PFVFLOW PFVFLOW LINSOLV MPI TWOPHASEFLOW LS_DEM FEMLIKE GL2PS LBMFLOW THERMAL PARTIALSAT POTENTIAL_PARTICLES POTENTIAL_BLOCKS
Yade config dir: ~/.config/yadedaily
Yade precision : 53 bits, 15 decimal places, with mpmath, PrecisionDouble
Yade RealHP<…> : (15, 33, 45, 60, 120, 150, 300) decimal digits in C++, (15, 33) decimal digits accessible from python
```

Libraries used :

| library | cmake | C++ |
| ------------- | --------------------- | ------------------- |
| boost | 107400 | 1.74.0 |
| cgal | | 5.4 |
| clp | 1.17.5 | 1.17.5 |
| cmake | 3.22.1 | |
| coinutils | 2.11.4 | 2.11.4 |
| compiler | /usr/bin/c++ 11.3.0 | gcc 11.3.0 |
| eigen | 3.4.0 | 3.4.0 |
| freeglut | 2.8.1 | |
| gl | | 20190805 |
| ipython | 7.31.1 | |
| metis | | 5.1.0 |
| mpi | 3.1 | ompi:4.1.2 |
| mpi4py | 3.1.3 | |
| mpmath | 1.2.1 | |
| openblas | | OpenBLAS 0.3.20 |
| python | 3.10.6 | 3.10.6 |
| qglviewer | | 2.6.3 |
| qt | | 5.15.3 |
| sqlite | | 3.37.2 |
| suitesparse | 5.10.1 | 5.10.1 |
| vtk | 9.1.0 | 9.1.0 |

```
Linux version : Ubuntu 22.04.2 LTS
Architecture : amd64
Little endian : True
```

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#28

Thanks. We have the same versions... hard to tell why it doesn't give the same behavior on two computers and very difficult to debug.
Do you get the same error always? Or are there cases when it runs longer/differently?
What if you try multiple times with "yade -j3 test.py"?

Revision history for this message
Fedor (vodovozov) said :
#29

Good news) The problem was related to vtk recorder (interaction part). I comment it and it works well.
Thanks a bunch.
Bruno, let me ask you something ties to simulation.

During the simulation i obtained this.
n [1]: <WARNING> Shop:401 static yade::Matrix3r yade::Shop::getStress(yade::Real): getStress used with default volume tend to underestimate the stress due to overlaps on the boundaries, passing actual volume could be more safe.

How should i deal with it?

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#30

I doubt vtkRecorder was the problem given this line (related to solving a linear system):
CHOLMOD error: invalid xtype. file: ../Cholesky/cholmod_analyze.c line: 431

More likely, the problem appears randomly, and it is the annoying part.

> How should i deal with it?

By "passing the actual volume"? ;)
If the contacts on the boundaries are sufficiently stiff it probably makes a very small difference.

Revision history for this message
Fedor (vodovozov) said :
#31

Hello Bruno. Thank you for your support and patience.

Revision history for this message
Fedor (vodovozov) said :
#32

Thanks a bunch