]> https://gitweb.dealii.org/ - code-gallery.git/commitdiff
Initial source code and documentation
authorEster <estercomellas@gmail.com>
Mon, 11 May 2020 20:31:45 +0000 (16:31 -0400)
committerJean-Paul Pelteret <jppelteret@gmail.com>
Tue, 9 Jun 2020 20:45:49 +0000 (22:45 +0200)
42 files changed:
.gitignore
Nonlinear_PoroViscoelasticity/CMakeLists.txt [new file with mode: 0644]
Nonlinear_PoroViscoelasticity/doc/author.txt [new file with mode: 0644]
Nonlinear_PoroViscoelasticity/doc/builds-on.txt [new file with mode: 0644]
Nonlinear_PoroViscoelasticity/doc/dependencies.txt [new file with mode: 0644]
Nonlinear_PoroViscoelasticity/doc/entry-name.txt [new file with mode: 0644]
Nonlinear_PoroViscoelasticity/doc/tooltip.txt [new file with mode: 0644]
Nonlinear_PoroViscoelasticity/input-files/1-Franceschini_consolidation/PLOT-Franceschini.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/1-Franceschini_consolidation/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/compression/PLOT-brain_g-mm-s-COMP.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/compression/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/shear/PLOT-brain_g-mm-s-SHEAR.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/shear/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/tension/PLOT-brain_g-mm-s-TENS.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/tension/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/compression/PLOT-brain_g-mm-s-COMP.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/compression/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/shear/PLOT-brain_g-mm-s-SHEAR.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/shear/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/tension/PLOT-brain_g-mm-s-TENS.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/tension/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/PLOT-consolidation.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/base_nos0.8_k40_Kos8.0e-11_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.7_k40_Kos8.0e-11_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k1_Kos8.0e-11_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos1.6e-11_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos4.0e-10_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu0.89e-1/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu0.89e-5/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu1.78e-4/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu4.45e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-13_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-9_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k80_Kos8.0e-11_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.9_k40_Kos8.0e-11_mu0.89e-3/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/PLOT-Verification-Ehlers-EPS.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/PLOT-Verification-Ehlers.gp [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/run-multi-calc.py [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/runPoro.sh [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/nonlinear-poro-viscoelasticity.cc [new file with mode: 0644]
Nonlinear_PoroViscoelasticity/parameters.prm [new file with mode: 0755]
Nonlinear_PoroViscoelasticity/readme.md [new file with mode: 0644]

index 51c4338ed1560458c041016aca58f646b27a1bae..a0ef3729f9aa954a62ad36f84c99d97a7ad98319 100644 (file)
 *.out
 *.app
 
-# Build folders
-**/build/*
+* macOS hidden files
+*.DS_Store
 
 # IDE related files
 .project
 .cproject
-.vscode
\ No newline at end of file
+.vscode
+
+# Build folders
+**/build/*
\ No newline at end of file
diff --git a/Nonlinear_PoroViscoelasticity/CMakeLists.txt b/Nonlinear_PoroViscoelasticity/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a0a416d
--- /dev/null
@@ -0,0 +1,47 @@
+##
+#  CMake script for the nonlinear-poro-viscoelasticity problem
+##
+
+# Set the name of the project and target:
+SET(TARGET "nonlinear-poro-viscoelasticity")
+
+# Declare all source files the target consists of:
+SET(TARGET_SRC
+  ${TARGET}.cc
+  )
+
+#Search for required deal.II version
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8)
+
+FIND_PACKAGE(deal.II 9.1 QUIET
+  HINTS ${deal.II_DIR} ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR}
+  )
+IF(NOT ${deal.II_FOUND})
+  MESSAGE(FATAL_ERROR "\n"
+    "*** Could not locate a (sufficiently recent) version of deal.II. ***\n\n"
+    "You may want to either pass a flag -DDEAL_II_DIR=/path/to/deal.II to cmake\n"
+    "or set an environment variable \"DEAL_II_DIR\" that contains this path."
+    )
+ENDIF()
+
+
+# Are all dependencies fullfilled?
+IF(NOT DEAL_II_WITH_CXX11     OR
+   NOT DEAL_II_WITH_MPI       OR
+   NOT DEAL_II_WITH_METIS     OR
+   NOT DEAL_II_WITH_TRILINOS  OR
+   NOT DEAL_II_TRILINOS_WITH_SACADO)
+  MESSAGE(FATAL_ERROR "
+Error! The deal.II library found at ${DEAL_II_PATH} was not configured with
+    DEAL_II_WITH_CXX11 = ON
+    DEAL_II_WITH_MPI = ON
+    DEAL_II_WITH_METIS = ON
+    DEAL_II_WITH_TRILINOS = ON
+    DEAL_II_TRILINOS_WITH_SACADO = ON
+One or all of these are OFF in your installation but are required for this code gallery example."
+    )
+ENDIF()
+
+DEAL_II_INITIALIZE_CACHED_VARIABLES()
+PROJECT(${TARGET})
+DEAL_II_INVOKE_AUTOPILOT()
diff --git a/Nonlinear_PoroViscoelasticity/doc/author.txt b/Nonlinear_PoroViscoelasticity/doc/author.txt
new file mode 100644 (file)
index 0000000..30c8edd
--- /dev/null
@@ -0,0 +1,2 @@
+Ester Comellas <ester.comellas@upc.edu>,
+Jean-Paul Pelteret <jppelteret@gmail.com>
\ No newline at end of file
diff --git a/Nonlinear_PoroViscoelasticity/doc/builds-on.txt b/Nonlinear_PoroViscoelasticity/doc/builds-on.txt
new file mode 100644 (file)
index 0000000..0198e1f
--- /dev/null
@@ -0,0 +1 @@
+Step-44 gallery-Quasi-Static Finite-Strain Compressible Elasticity gallery-Quasi-Static Finite-Strain Quasi-incompressible Visco-elasticity
\ No newline at end of file
diff --git a/Nonlinear_PoroViscoelasticity/doc/dependencies.txt b/Nonlinear_PoroViscoelasticity/doc/dependencies.txt
new file mode 100644 (file)
index 0000000..ccadfb5
--- /dev/null
@@ -0,0 +1,5 @@
+DEAL_II_WITH_CXX11
+DEAL_II_WITH_MPI
+DEAL_II_WITH_METIS
+DEAL_II_WITH_TRILINOS
+DEAL_II_TRILINOS_WITH_SACADO
\ No newline at end of file
diff --git a/Nonlinear_PoroViscoelasticity/doc/entry-name.txt b/Nonlinear_PoroViscoelasticity/doc/entry-name.txt
new file mode 100644 (file)
index 0000000..34bfcb1
--- /dev/null
@@ -0,0 +1 @@
+Nonlinear poro-viscoelasticity
\ No newline at end of file
diff --git a/Nonlinear_PoroViscoelasticity/doc/tooltip.txt b/Nonlinear_PoroViscoelasticity/doc/tooltip.txt
new file mode 100644 (file)
index 0000000..2865e8f
--- /dev/null
@@ -0,0 +1 @@
+A parallelized biphasic nonlinear poro-viscoelastic formulation based on Ogden hyperelasticity, using automatic differentiation and MPI from the Trilinos package.
diff --git a/Nonlinear_PoroViscoelasticity/input-files/1-Franceschini_consolidation/PLOT-Franceschini.gp b/Nonlinear_PoroViscoelasticity/input-files/1-Franceschini_consolidation/PLOT-Franceschini.gp
new file mode 100755 (executable)
index 0000000..b6882f3
--- /dev/null
@@ -0,0 +1,137 @@
+\r
+# GNUPLOT file to plot consolidation curve Francheschini (2006)\r
+\r
+#To see color names:\r
+# >> show palette colornames\r
+\r
+#To see line style, line width, etc.:\r
+# >> set terminal wxt enhanced dashed\r
+# >> test\r
+clear\r
+reset\r
+set datafile separator ","\r
+\r
+# -------------------------------------------------------------------------------\r
+# DATA EXTRACTED WITH ENGAUGE FROM FRANCESCHINI PAPER COPIED HERE\r
+# -------------------------------------------------------------------------------\r
+$dataFranceschiniFig2Ce << EOD\r
+#minutes, consolidation ratio\r
+0.083718,0.0738636\r
+0.167816,0.127841\r
+0.251772,0.15625\r
+0.336392,0.193182\r
+0.424147,0.21875\r
+0.504685,0.238636\r
+0.589026,0.252841\r
+0.674309,0.269886\r
+0.757172,0.284091\r
+0.833952,0.301136\r
+0.918517,0.318182\r
+1.01166,0.323864\r
+1.11424,0.335227\r
+1.18072,0.34375\r
+1.27557,0.349432\r
+1.37804,0.355114\r
+1.51778,0.360795\r
+1.6397,0.366477\r
+1.77142,0.375\r
+1.87711,0.383523\r
+2.19081,0.403409\r
+2.55693,0.426136\r
+2.87114,0.448864\r
+3.22396,0.471591\r
+3.48294,0.488636\r
+3.91095,0.505682\r
+4.56453,0.536932\r
+5.32734,0.559659\r
+5.98199,0.585227\r
+6.58858,0.605114\r
+7.25668,0.625\r
+7.83963,0.644886\r
+8.63459,0.659091\r
+9.14975,0.676136\r
+10.0776,0.6875\r
+11.9911,0.71875\r
+13.995,0.744318\r
+16.0213,0.761364\r
+18.341,0.784091\r
+19.8144,0.798295\r
+22.2493,0.815341\r
+24.0366,0.838068\r
+26.474,0.857955\r
+28.0535,0.872159\r
+30.8982,0.886364\r
+36.0618,0.897727\r
+40.4932,0.909091\r
+46.3562,0.917614\r
+51.0568,0.931818\r
+56.2341,0.940341\r
+61.9364,0.948864\r
+66.9119,0.954545\r
+72.287,0.960227\r
+78.094,0.965909\r
+84.3674,0.971591\r
+114.922,0.985795\r
+144.902,0.988636\r
+175.779,0.994318\r
+209.156,0.994318\r
+239.439,0.994318\r
+268.862,0.994318\r
+296.126,0.994318\r
+326.154,0.994318\r
+352.355,1.00284\r
+380.66,0.997159\r
+411.239,0.994318\r
+EOD\r
+\r
+fileNH = "data-for-gnuplot.sol"\r
+# -------------------------------------------------------------------------------\r
+set term epslatex size 9cm,6cm color colortext standalone\r
+set output "Franceschini-consolidation.tex"\r
+\r
+unset colorbox\r
+unset grid\r
+\r
+set style line 1  lt 7 lw 2 lc rgb "black"   ps 0.7 dt 1\r
+set style line 2  lt 2 lw 2 lc rgb "gray25"  ps 0.7 dt 2\r
+set style line 3  lt 6 lw 2 lc rgb "gray50"  ps 0.7 dt 3\r
+set style line 4  lt 10 lw 2 lc rgb "gray75"  ps 0.7\r
+\r
+set style line 5  lt 2  lw 5   lc rgb "dark-blue"\r
+\r
+# ---------  CONSOLIDATION CURVE  -------------------------------------------\r
+#Final specimen shortening                                                                         ****CHANGE IF NEEDED***\r
+Umax = 8.1e-2\r
+\r
+unset key\r
+\r
+# ---------  EPSLATEX  -------------------------------------------\r
+set key box out vert right above box width -6.0 height 1.0\r
+\r
+set logscale x\r
+set xrange [0.01:1000]\r
+set yrange [1.1:-0.1] reverse\r
+\r
+set xlabel 'time [min]'\r
+set ylabel 'consolidation ratio'\r
+\r
+plot '$dataFranceschiniFig2Ce' with points  ls 3 title 'experimental data', \\r
+      fileNH using (($1)/60):(-($7)/Umax) with lines ls 5 title 'nonlinear poroelasticity'\r
+\r
+\r
+\r
+# ---------  PNG  -------------------------------------------\r
+\r
+set term png size 450,300 enhanced font 'Verdana,12'\r
+set key box out vert right above box font 'Verdana,12' width -4.0\r
+\r
+set logscale x\r
+set xrange [0.01:1000]\r
+set yrange [1.1:-0.1] reverse\r
+\r
+set xlabel 'time [min]' font 'Verdana,14'\r
+set ylabel 'consolidation ratio' font 'Verdana,14'\r
+\r
+set output "Franceschini-consolidation.png"\r
+plot '$dataFranceschiniFig2Ce' with points  ls 1 title 'experimental data', \\r
+      fileNH using (($1)/60):(-($7)/Umax) with lines ls 5 title 'nonlinear poroelasticity'\r
diff --git a/Nonlinear_PoroViscoelasticity/input-files/1-Franceschini_consolidation/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/1-Franceschini_consolidation/parameters.prm
new file mode 100755 (executable)
index 0000000..4e64a6c
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 2
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -4.24e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  6.825e3
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             =  0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          =  1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          =  1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1         = 10
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = true
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-6
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-6
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-6
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 18000
+
+  # Time step size [s]
+  set Time step size      = 2.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 3
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/compression/PLOT-brain_g-mm-s-COMP.gp b/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/compression/PLOT-brain_g-mm-s-COMP.gp
new file mode 100755 (executable)
index 0000000..e7010c4
--- /dev/null
@@ -0,0 +1,157 @@
+
+#GNUPLOT file to plot graphs of biomechanical brain tests in Budday et al 2017
+# **** cycles must be separated in the .sol file by two blank lines ****
+# UNITS CONSIDERED: g - mm - s
+
+#To see color names:
+# >> show palette colornames
+
+#To see line style, line width, etc.:
+# >> set terminal wxt enhanced dashed
+# >> test
+
+clear
+set datafile separator ","
+set term png size 400,300 enhanced font 'Verdana,12'
+
+
+unset colorbox
+set style line 1  lw 1.5  lc rgb "black"   dt 1
+set style line 2  lw 1.5  lc rgb "blue"    dt 1
+set style line 3  lw 1.5  lc rgb "red"     dt 1
+set style line 4  lw 1.5  lc rgb "dark-turquoise"  dt 1
+set style line 5  lw 1.5  lc rgb "dark-red"        dt 1
+
+set style line 100 lt 1  lw 1  lc rgb "gray" dt 3
+set style line 101 lt 1  lw 1  lc rgb "red"
+
+set notitle
+set grid xtics ytics ls 100
+
+# -------------------- PROBLEM DATA --------------------------------------------------------------------------------------
+#length of specimen along loading direction to compute stretch [mm]
+length = 5.0
+
+#area of loading surface to compute reaction force [mm²]
+area = length * length                    #cube
+#area = 3.1416 * (length/2) * (length/2)  #cylinder
+
+#length to compute pressure gradient [mm]
+radius = length/2
+
+#pressure at drained boundary to compute pressure gradient [Pa]
+atm_pressure = 0.0
+
+
+#dynamic (shear) fluid viscosity [Pa·s]
+mu = 0.89e-3
+#effective fluid density [g/mm³]
+rho = 0.997e-3
+#kinematic fluid viscosity [mm²/s]
+nu = mu/rho
+
+#time step to compute numerical dissipation [s]
+timestep = 1.0
+
+
+# -------------------- Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  -y / (area*1000)           #compression  [10⁻⁶ N / mm² = Pa]
+#nominal(y) =  y / (area)           #tension
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside top left font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set xrange [1.0:0.89] reverse                    #compression
+set yrange [0.0:5.5]
+
+unset y2tics
+set xtics 0.02 rotate by 45 right
+set ytics 1.0
+set format x "%3.2f"
+set format y "%3.1f"
+
+set output "brain_cube_stress-stretch-poro-COMP.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($7)):(nominal($15)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($7)):(nominal($15)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($7)):(nominal($15)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Extra stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  -y / (area*1000)           #compression  [10⁻⁶ N / mm² = Pa]
+#nominal(y) =  y / (area)           #tension
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'solid nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside top left font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set xrange [1.0:0.89] reverse                    #compression
+set yrange [0.0:5.5]
+
+unset y2tics
+set xtics 0.02 rotate by 45 right
+set ytics 1.0
+set format x "%3.2f"
+set format y "%3.1f"
+
+set output "brain_cube_solid-stress-stretch-poro-COMP.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($7)):(nominal($21)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($7)):(nominal($21)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($7)):(nominal($21)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs time  --------------------------------------------------------------------------
+set xrange [] noreverse
+set yrange [] noreverse
+set xtics 30 norotate nooffset
+set ytics 0.5
+set autoscale xy
+set format x "%3.0f"
+set format y "%3.1f"
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+
+unset key
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-time-poro-COMP.png"
+plot 'data-for-gnuplot.sol' index 0 using ($1):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($1):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($1):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs reaction pressure  ---------------------------------------------------------------
+set xlabel 'fluid reaction pressure [kPa]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+set key on box outside above right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set autoscale xy
+set ytics 0.5
+set xtics 10
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-reac_p-poro-COMP.png"
+plot 'data-for-gnuplot.sol' index 0 using (-($18)/1000):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (-($18)/1000):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (-($18)/1000):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Pressure and displ. vs time -------------------------------------------------------------------------
+set term png size 600,380 enhanced font 'Verdana,12'
+
+set format x "%3.0f"
+set format y "%3.1f"
+set xtics 30 norotate nooffset
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel 'displacement [mm]' font 'Verdana,14'
+set y2label 'pressure [kPa]' font 'Verdana,14'
+set ytics 0.1 nomirror
+set y2tics autofreq
+set key width -5
+set output "brain_cube_pres-displ-vs-time-poro-COMP.png"
+plot 'data-for-gnuplot.sol' using ($1):($8)/1000 every 1  with lines ls 5 axes x1y2 title 'pressure at central column', \
+     'data-for-gnuplot.sol' using ($1):($7) every 1  with lines ls 4 axes x1y1 title 'vertical displacement of top surface'
diff --git a/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/compression/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/compression/parameters.prm
new file mode 100755 (executable)
index 0000000..d326394
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Budday_cube_tension_compression_fully_fixed
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 3
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 5.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = displacement
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -0.5
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  6.825e3
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             =  0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          =  1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          =  1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1         = 10
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 90.0
+
+  # Time step size [s]
+  set Time step size      =  0.1
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/shear/PLOT-brain_g-mm-s-SHEAR.gp b/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/shear/PLOT-brain_g-mm-s-SHEAR.gp
new file mode 100755 (executable)
index 0000000..0aab1be
--- /dev/null
@@ -0,0 +1,154 @@
+
+#GNUPLOT file to plot graphs of biomechanical brain tests in Budday et al 2017
+# **** cycles must be separated in the .sol file by two blank lines ****
+# UNITS CONSIDERED: g - mm - s
+
+#To see color names:
+# >> show palette colornames
+
+#To see line style, line width, etc.:
+# >> set terminal wxt enhanced dashed
+# >> test
+
+clear
+set datafile separator ","
+set term png size 400,300 enhanced font 'Verdana,12'
+
+
+unset colorbox
+set style line 1  lw 1.5  lc rgb "black"   dt 1
+set style line 2  lw 1.5  lc rgb "blue"    dt 1
+set style line 3  lw 1.5  lc rgb "red"     dt 1
+set style line 4  lw 1.5  lc rgb "dark-turquoise"  dt 1
+set style line 5  lw 1.5  lc rgb "dark-salmon"     dt 1
+
+set style line 100 lt 1  lw 1  lc rgb "gray" dt 3
+set style line 101 lt 1  lw 1  lc rgb "red"
+
+set notitle
+set grid xtics ytics ls 100
+
+# -------------------- PROBLEM DATA --------------------------------------------------------------------------------------
+#length of specimen along loading direction to compute stretch [mm]
+length = 5.0
+
+#area of loading surface to computre reaction force [mm²]
+area = length * length                    #cube
+#area = 3.1416 * (length/2) * (length/2)  #cylinder
+
+#length to compute pressure gradient [mm]
+radius = length/2
+
+#pressure at drained boundary to compute pressure gradient [Pa]
+atm_pressure = 0.0
+
+
+#dynamic (shear) fluid viscosity [Pa·s]
+mu = 0.89e-3
+#effective fluid density [g/mm³]
+rho = 0.997e-3
+#kinematic fluid viscosity [mm²/s]
+nu = mu/rho
+
+#time step to compute numerical dissipation [s]
+timestep = 1.0
+
+
+# -------------------- Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  y / (area*1000)           #[10⁻⁶ N / mm² = Pa]
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside top left font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+#set xrange [] reverse                    #compression
+set xrange [] noreverse          #tension
+set autoscale xy
+
+unset y2tics
+set xtics autofreq rotate by 45 right
+set ytics autofreq
+
+set output "brain_cube_stress-stretch-poro-SHEAR.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($5)):(nominal($13)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($5)):(nominal($13)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($5)):(nominal($13)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- solid Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  y / (area*1000)           #[10⁻⁶ N / mm² = Pa]
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'solid nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside top left font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+#set xrange [] reverse                    #compression
+set xrange [] noreverse          #tension
+set autoscale xy
+
+unset y2tics
+set xtics autofreq rotate by 45 right
+set ytics autofreq
+
+set output "brain_cube_solid-stress-stretch-poro-SHEAR.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($5)):(nominal($19)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($5)):(nominal($19)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($5)):(nominal($19)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs time  --------------------------------------------------------------------------
+set xrange [] noreverse
+set yrange [] noreverse
+set xtics 30 norotate nooffset
+set ytics 1.5
+set autoscale xy
+set format x "%3.0f"
+set format y "%3.1f"
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+
+unset key
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-time-poro-SHEAR.png"
+plot 'data-for-gnuplot.sol' index 0 using ($1):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($1):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($1):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs reaction pressure  ---------------------------------------------------------------
+set xlabel 'fluid reaction pressure [kPa]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+set key on box outside above right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set autoscale xy
+set format x "%3.1f"
+set ytics 1.5
+set xtics 1
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-reac_p-poro-SHEAR.png"
+plot 'data-for-gnuplot.sol' index 0 using ($18/1000):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($18/1000):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($18/1000):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Pressure and displ. vs time -------------------------------------------------------------------------
+set term png size 600,380 enhanced font 'Verdana,12'
+
+set format x "%3.0f"
+set format y "%3.1f"
+set xtics 30 norotate nooffset
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel 'displacement [mm]' font 'Verdana,14'
+set y2label 'pressure [kPa]' font 'Verdana,14'
+set ytics 0.5 nomirror
+set y2tics autofreq
+set key width -5
+set output "brain_cube_pres-displ-vs-time-poro-SHEAR.png"
+plot 'data-for-gnuplot.sol' using ($1):($8)/1000 every 1  with lines ls 5 axes x1y2 title 'pressure at central column', \
+     'data-for-gnuplot.sol' using ($1):($5) every 1  with lines ls 4 axes x1y1 title 'vertical displacement of top surface'
diff --git a/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/shear/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/shear/parameters.prm
new file mode 100755 (executable)
index 0000000..02a3662
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Budday_cube_shear_fully_fixed
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 3
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 5.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = displacement
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = 1.0
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  6.825e3
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             =  0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          =  1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          =  1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1         = 10
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 180.0
+
+  # Time step size [s]
+  set Time step size      =  0.1
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/tension/PLOT-brain_g-mm-s-TENS.gp b/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/tension/PLOT-brain_g-mm-s-TENS.gp
new file mode 100755 (executable)
index 0000000..2a44d96
--- /dev/null
@@ -0,0 +1,159 @@
+
+#GNUPLOT file to plot graphs of biomechanical brain tests in Budday et al 2017
+# **** cycles must be separated in the .sol file by two blank lines ****
+# UNITS CONSIDERED: g - mm - s
+
+#To see color names:
+# >> show palette colornames
+
+#To see line style, line width, etc.:
+# >> set terminal wxt enhanced dashed
+# >> test
+
+clear
+set datafile separator ","
+set term png size 400,300 enhanced font 'Verdana,12'
+
+
+unset colorbox
+set style line 1  lw 1.5  lc rgb "black"   dt 1
+set style line 2  lw 1.5  lc rgb "blue"    dt 1
+set style line 3  lw 1.5  lc rgb "red"     dt 1
+set style line 4  lw 1.5  lc rgb "dark-turquoise"  dt 1
+set style line 5  lw 1.5  lc rgb "dark-blue"        dt 1
+
+set style line 100 lt 1  lw 1  lc rgb "gray" dt 3
+set style line 101 lt 1  lw 1  lc rgb "red"
+
+set notitle
+set grid xtics ytics ls 100
+
+# -------------------- PROBLEM DATA --------------------------------------------------------------------------------------
+#length of specimen along loading direction to compute stretch [mm]
+length = 5.0
+
+#area of loading surface to computre reaction force [mm²]
+area = length * length                    #cube
+#area = 3.1416 * (length/2) * (length/2)  #cylinder
+
+#length to compute pressure gradient [mm]
+radius = length/2
+
+#pressure at drained boundary to compute pressure gradient [Pa]
+atm_pressure = 0.0
+
+
+#dynamic (shear) fluid viscosity [Pa·s]
+mu = 0.89e-3
+#effective fluid density [g/mm³]
+rho = 0.997e-3
+#kinematic fluid viscosity [mm²/s]
+nu = mu/rho
+
+#time step to compute numerical dissipation [s]
+timestep = 1.0
+
+
+# -------------------- Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  y / (area*1000)       #[10⁻⁶ N / mm² = Pa]
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside bottom right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+#set xrange [] reverse                    #compression
+set xrange [1.0:1.11] noreverse          #tension
+set yrange [0.0:5.0]
+#set autoscale y
+
+unset y2tics
+set xtics 0.02 rotate by 45 right
+set ytics 1.0
+set format x "%3.2f"
+set format y "%3.1f"
+
+set output "brain_cube_stress-stretch-poro-TENS.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($7)):(nominal($15)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($7)):(nominal($15)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($7)):(nominal($15)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- solid Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  y / (area*1000)       #[10⁻⁶ N / mm² = Pa]
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'solid nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside bottom right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+#set xrange [] reverse                    #compression
+set xrange [1.0:1.11] noreverse          #tension
+set yrange [0.0:5.0]
+#set autoscale y
+
+unset y2tics
+set xtics 0.02 rotate by 45 right
+set ytics 1.0
+set format x "%3.2f"
+set format y "%3.1f"
+
+set output "brain_cube_solid-stress-stretch-poro-TENS.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($7)):(nominal($21)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($7)):(nominal($21)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($7)):(nominal($21)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs time  --------------------------------------------------------------------------
+set xrange [] noreverse
+set yrange [] noreverse
+set xtics 30 norotate nooffset
+set ytics 2
+set autoscale xy
+set format x "%3.0f"
+set format y "%3.0f"
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+
+unset key
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-time-poro-TENS.png"
+plot 'data-for-gnuplot.sol' index 0 using ($1):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($1):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($1):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs reaction pressure  ---------------------------------------------------------------
+set xlabel 'fluid reaction pressure [kPa]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+set key on box outside above right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set autoscale xy
+set ytics 2
+set xtics 10
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-reac_p-poro-TENS.png"
+plot 'data-for-gnuplot.sol' index 0 using ($18/1000):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($18/1000):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($18/1000):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Pressure and displ. vs time -------------------------------------------------------------------------
+set term png size 600,380 enhanced font 'Verdana,12'
+
+set format x "%3.0f"
+set format y "%3.1f"
+set xtics 30 norotate nooffset
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel 'displacement [mm]' font 'Verdana,14'
+set y2label 'pressure [kPa]' font 'Verdana,14'
+set ytics 0.1 nomirror
+set y2tics autofreq
+set key width -5
+set output "brain_cube_pres-displ-vs-time-poro-TENS.png"
+plot 'data-for-gnuplot.sol' using ($1):($8)/1000 every 1  with lines ls 5 axes x1y2 title 'pressure at central column', \
+     'data-for-gnuplot.sol' using ($1):($7) every 1  with lines ls 4 axes x1y1 title 'vertical displacement of top surface'
diff --git a/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/tension/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/2-Graz-loading_poroelasticity/tension/parameters.prm
new file mode 100755 (executable)
index 0000000..518a08c
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Budday_cube_tension_compression_fully_fixed
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 3
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 5.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = displacement
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = 0.5
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  6.825e3
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             =  0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          =  1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          =  1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1         = 10
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 90.0
+
+  # Time step size [s]
+  set Time step size      =  0.1
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/compression/PLOT-brain_g-mm-s-COMP.gp b/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/compression/PLOT-brain_g-mm-s-COMP.gp
new file mode 100755 (executable)
index 0000000..e2b14f6
--- /dev/null
@@ -0,0 +1,133 @@
+
+#GNUPLOT file to plot graphs of biomechanical brain tests in Budday et al 2017
+# **** cycles must be separated in the .sol file by two blank lines ****
+# UNITS CONSIDERED: g - mm - s
+
+#To see color names:
+# >> show palette colornames
+
+#To see line style, line width, etc.:
+# >> set terminal wxt enhanced dashed
+# >> test
+
+clear
+set datafile separator ","
+set term png size 400,300 enhanced font 'Verdana,12'
+
+
+unset colorbox
+set style line 1  lw 1.5  lc rgb "black"   dt 1
+set style line 2  lw 1.5  lc rgb "blue"    dt 1
+set style line 3  lw 1.5  lc rgb "red"     dt 1
+set style line 4  lw 1.5  lc rgb "dark-turquoise"  dt 1
+set style line 5  lw 1.5  lc rgb "dark-red"        dt 1
+
+set style line 100 lt 1  lw 1  lc rgb "gray" dt 3
+set style line 101 lt 1  lw 1  lc rgb "red"
+
+set notitle
+set grid xtics ytics ls 100
+
+# -------------------- PROBLEM DATA --------------------------------------------------------------------------------------
+#length of specimen along loading direction to compute stretch [mm]
+length = 5.0
+
+#area of loading surface to computre reaction force [mm²]
+area = length * length                    #cube
+#area = 3.1416 * (length/2) * (length/2)  #cylinder
+
+#length to compute pressure gradient [mm]
+radius = length/2
+
+#pressure at drained boundary to compute pressure gradient [Pa]
+atm_pressure = 0.0
+
+
+#dynamic (shear) fluid viscosity [Pa·s]
+mu = 0.89e-3
+#effective fluid density [g/mm³]
+rho = 0.997e-3
+#kinematic fluid viscosity [mm²/s]
+nu = mu/rho
+
+#time step to compute numerical dissipation [s]
+timestep = 1.0
+
+
+# -------------------- Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  -y / (area*1000)           #compression  [10⁻⁶ N / mm² = Pa]
+#nominal(y) =  y / (area)           #tension
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside top left font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set xrange [1.0:0.89] reverse                    #compression
+set yrange [-0.5:1.5]
+
+unset y2tics
+set xtics 0.02 rotate by 45 right
+set ytics 0.5
+set format x "%3.2f"
+set format y "%3.1f"
+
+set output "brain_cube_stress-stretch-poro-visco-COMP.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($7)):(nominal($15)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($7)):(nominal($15)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($7)):(nominal($15)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs time  --------------------------------------------------------------------------
+set xrange [] noreverse
+set yrange [] noreverse
+set xtics 30 norotate nooffset
+set ytics 10
+set autoscale xy
+set format x "%3.0f"
+set format y "%3.0f"
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+
+unset key
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-time-poro-visco-COMP.png"
+plot 'data-for-gnuplot.sol' index 0 using ($1):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($1):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($1):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs reaction pressure  ---------------------------------------------------------------
+set xlabel 'fluid reaction pressure [kPa]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+set key on box outside above right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set autoscale xy
+set ytics 10
+set xtics 2
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-reac_p-poro-visco-COMP.png"
+plot 'data-for-gnuplot.sol' index 0 using (-($18)/1000):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (-($18)/1000):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (-($18)/1000):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Pressure and displ. vs time -------------------------------------------------------------------------
+set term png size 600,380 enhanced font 'Verdana,12'
+
+set format x "%3.0f"
+set format y "%3.1f"
+set xtics 30 norotate nooffset
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel 'displacement [mm]' font 'Verdana,14'
+set y2label 'pressure [kPa]' font 'Verdana,14'
+set ytics 0.1 nomirror
+set y2tics autofreq
+set key width -5
+set output "brain_cube_pres-displ-vs-time-poro-visco-COMP.png"
+plot 'data-for-gnuplot.sol' using ($1):($8)/1000 every 1  with lines ls 5 axes x1y2 title 'pressure at central column', \
+     'data-for-gnuplot.sol' using ($1):($7) every 1  with lines ls 4 axes x1y1 title 'vertical displacement of top surface'
diff --git a/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/compression/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/compression/parameters.prm
new file mode 100755 (executable)
index 0000000..9fdce22
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed 
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Budday_cube_tension_compression_fully_fixed
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 3
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 5.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = displacement
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -0.5
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = visco-Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 24502
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  660.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = -83.9
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = -11.92
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          = 1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = -2100
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = -2.2
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 14000
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.75
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 50
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 1.0e-8
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 90.0
+
+  # Time step size [s]
+  set Time step size      =  0.1
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/shear/PLOT-brain_g-mm-s-SHEAR.gp b/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/shear/PLOT-brain_g-mm-s-SHEAR.gp
new file mode 100755 (executable)
index 0000000..9ca94f2
--- /dev/null
@@ -0,0 +1,133 @@
+
+#GNUPLOT file to plot graphs of biomechanical brain tests in Budday et al 2017
+# **** cycles must be separated in the .sol file by two blank lines ****
+# UNITS CONSIDERED: g - mm - s
+
+#To see color names:
+# >> show palette colornames
+
+#To see line style, line width, etc.:
+# >> set terminal wxt enhanced dashed
+# >> test
+
+clear
+set datafile separator ","
+set term png size 400,300 enhanced font 'Verdana,12'
+
+
+unset colorbox
+set style line 1  lw 1.5  lc rgb "black"   dt 1
+set style line 2  lw 1.5  lc rgb "blue"    dt 1
+set style line 3  lw 1.5  lc rgb "red"     dt 1
+set style line 4  lw 1.5  lc rgb "dark-turquoise"  dt 1
+set style line 5  lw 1.5  lc rgb "dark-salmon"     dt 1
+
+set style line 100 lt 1  lw 1  lc rgb "gray" dt 3
+set style line 101 lt 1  lw 1  lc rgb "red"
+
+set notitle
+set grid xtics ytics ls 100
+
+# -------------------- PROBLEM DATA --------------------------------------------------------------------------------------
+#length of specimen along loading direction to compute stretch [mm]
+length = 5.0
+
+#area of loading surface to computre reaction force [mm²]
+area = length * length                    #cube
+#area = 3.1416 * (length/2) * (length/2)  #cylinder
+
+#length to compute pressure gradient [mm]
+radius = length/2
+
+#pressure at drained boundary to compute pressure gradient [Pa]
+atm_pressure = 0.0
+
+
+#dynamic (shear) fluid viscosity [Pa·s]
+mu = 0.89e-3
+#effective fluid density [g/mm³]
+rho = 0.997e-3
+#kinematic fluid viscosity [mm²/s]
+nu = mu/rho
+
+#time step to compute numerical dissipation [s]
+timestep = 1.0
+
+
+# -------------------- Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  y / (area*1000)           #compression  [10⁻⁶ N / mm² = Pa]
+#nominal(y) =  y / (area)           #tension
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside top left font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+#set xrange [] reverse                    #compression
+set xrange [] noreverse          #tension
+set autoscale xy
+
+unset y2tics
+set xtics autofreq rotate by 45 right
+set ytics autofreq
+
+set output "brain_cube_stress-stretch-poro-visco-SHEAR.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($5)):(nominal($13)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($5)):(nominal($13)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($5)):(nominal($13)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs time  --------------------------------------------------------------------------
+set xrange [] noreverse
+set yrange [] noreverse
+set xtics 30 norotate nooffset
+set ytics 100
+set autoscale xy
+set format x "%3.0f"
+set format y "%3.0f"
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+
+unset key
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-time-poro-visco-SHEAR.png"
+plot 'data-for-gnuplot.sol' index 0 using ($1):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($1):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($1):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs reaction pressure  ---------------------------------------------------------------
+set xlabel 'fluid reaction pressure [kPa]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+set key on box outside above right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set format x "%3.1f"
+set autoscale xy
+set ytics 100
+set xtics 0.5
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-reac_p-poro-visco-SHEAR.png"
+plot 'data-for-gnuplot.sol' index 0 using ($18/1000):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($18/1000):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($18/1000):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Pressure and displ. vs time -------------------------------------------------------------------------
+set term png size 600,380 enhanced font 'Verdana,12'
+
+set format x "%3.0f"
+set format y "%3.1f"
+set xtics 30 norotate nooffset
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel 'displacement [mm]' font 'Verdana,14'
+set y2label 'pressure [kPa]' font 'Verdana,14'
+set ytics 0.5 nomirror
+set y2tics autofreq
+set key width -5
+set output "brain_cube_pres-displ-vs-time-poro-visco-SHEAR.png"
+plot 'data-for-gnuplot.sol' using ($1):($8)/1000 every 1  with lines ls 5 axes x1y2 title 'pressure at central column', \
+     'data-for-gnuplot.sol' using ($1):($5) every 1  with lines ls 4 axes x1y1 title 'vertical displacement of top surface'
diff --git a/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/shear/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/shear/parameters.prm
new file mode 100755 (executable)
index 0000000..27f271d
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Budday_cube_shear_fully_fixed
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 3
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 5.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = displacement
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = 1.0
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = visco-Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 12250
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  250.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = -16.88
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = -29.62
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          = 1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = -72.48
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = -25.11
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 38700
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.75
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 50
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 1.0e-8
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 180.0
+
+  # Time step size [s]
+  set Time step size      =  0.1
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/tension/PLOT-brain_g-mm-s-TENS.gp b/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/tension/PLOT-brain_g-mm-s-TENS.gp
new file mode 100755 (executable)
index 0000000..31789bb
--- /dev/null
@@ -0,0 +1,133 @@
+
+#GNUPLOT file to plot graphs of biomechanical brain tests in Budday et al 2017
+# **** cycles must be separated in the .sol file by two blank lines ****
+# UNITS CONSIDERED: g - mm - s
+
+#To see color names:
+# >> show palette colornames
+
+#To see line style, line width, etc.:
+# >> set terminal wxt enhanced dashed
+# >> test
+
+clear
+set datafile separator ","
+set term png size 400,300 enhanced font 'Verdana,12'
+
+
+unset colorbox
+set style line 1  lw 1.5  lc rgb "black"   dt 1
+set style line 2  lw 1.5  lc rgb "blue"    dt 1
+set style line 3  lw 1.5  lc rgb "red"     dt 1
+set style line 4  lw 1.5  lc rgb "dark-turquoise"  dt 1
+set style line 5  lw 1.5  lc rgb "dark-blue"        dt 1
+
+set style line 100 lt 1  lw 1  lc rgb "gray" dt 3
+set style line 101 lt 1  lw 1  lc rgb "red"
+
+set notitle
+set grid xtics ytics ls 100
+
+# -------------------- PROBLEM DATA --------------------------------------------------------------------------------------
+#length of specimen along loading direction to compute stretch [mm]
+length = 5.0
+
+#area of loading surface to computre reaction force [mm²]
+area = length * length                    #cube
+#area = 3.1416 * (length/2) * (length/2)  #cylinder
+
+#length to compute pressure gradient [mm]
+radius = length/2
+
+#pressure at drained boundary to compute pressure gradient [Pa]
+atm_pressure = 0.0
+
+
+#dynamic (shear) fluid viscosity [Pa·s]
+mu = 0.89e-3
+#effective fluid density [g/mm³]
+rho = 0.997e-3
+#kinematic fluid viscosity [mm²/s]
+nu = mu/rho
+
+#time step to compute numerical dissipation [s]
+timestep = 1.0
+
+
+# -------------------- Stress vs stretch ---------------------------------------------------------------------------------
+stretch(x) = (length + x) / length
+nominal(y) =  y / (area*1000)           #compression  [10⁻⁶ N / mm² = Pa]
+#nominal(y) =  y / (area)           #tension
+
+set xlabel 'stretch [-]' font 'Verdana,14'
+set ylabel 'nominal stress [kPa]' font 'Verdana,14'
+unset y2label
+set key on box inside bottom right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set xrange [1:1.11] noreverse          #tension
+set yrange [-0.6:0.9]
+
+unset y2tics
+set xtics 0.02 rotate by 45 right
+set ytics 0.3
+set format x "%3.2f"
+set format y "%3.1f"
+
+set output "brain_cube_stress-stretch-poro-visco-TENS.png"
+plot 'data-for-gnuplot.sol' index 0 using (stretch($7)):(nominal($15)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using (stretch($7)):(nominal($15)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using (stretch($7)):(nominal($15)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs time  --------------------------------------------------------------------------
+set xrange [] noreverse
+set yrange [] noreverse
+set xtics 30 norotate nooffset
+set ytics 10
+set autoscale xy
+set format x "%3.0f"
+set format y "%3.0f"
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+
+unset key
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-time-poro-visco-TENS.png"
+plot 'data-for-gnuplot.sol' index 0 using ($1):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($1):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($1):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Accumulated exiting fluid vs reaction pressure  ---------------------------------------------------------------
+set xlabel 'fluid reaction pressure [kPa]' font 'Verdana,14'
+set ylabel sprintf("accumulated fluid\n outside the sample [mm^3]") font 'Verdana,14'
+set key on box outside above right font 'Verdana,12' spacing 1.0 maxcols 1 width -0.2
+
+set autoscale xy
+set ytics 10
+set xtics 2
+a=0
+y_axis(y) = (a=a+y*timestep,a)
+
+set output "brain_cube_fluid-reac_p-poro-visco-TENS.png"
+plot 'data-for-gnuplot.sol' index 0 using ($18/1000):(y_axis($22)) every 1  with lines ls 1 title '1^{st} cycle', \
+     'data-for-gnuplot.sol' index 1 using ($18/1000):(y_axis($22)) every 1  with lines ls 2 title '2^{nd} cycle', \
+     'data-for-gnuplot.sol' index 2 using ($18/1000):(y_axis($22)) every 1  with lines ls 3 title '3^{rd} cycle'
+
+# -------------------- Pressure and displ. vs time -------------------------------------------------------------------------
+set term png size 600,380 enhanced font 'Verdana,12'
+
+set format x "%3.0f"
+set format y "%3.1f"
+set xtics 30 norotate nooffset
+
+set xlabel 'time [s]' font 'Verdana,14'
+set ylabel 'displacement [mm]' font 'Verdana,14'
+set y2label 'pressure [kPa]' font 'Verdana,14'
+set ytics 0.1 nomirror
+set y2tics autofreq
+set key width -5
+set output "brain_cube_pres-displ-vs-time-poro-visco-TENS.png"
+plot 'data-for-gnuplot.sol' using ($1):($8)/1000 every 1  with lines ls 5 axes x1y2 title 'pressure at central column', \
+     'data-for-gnuplot.sol' using ($1):($7) every 1  with lines ls 4 axes x1y1 title 'vertical displacement of top surface'
diff --git a/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/tension/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/3-Graz-loading_poro-viscoelasticity/tension/parameters.prm
new file mode 100755 (executable)
index 0000000..44f6ed2
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Budday_cube_tension_compression_fully_fixed
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 3
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 5.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = displacement
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = 0.5
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = visco-Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 24502
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  660.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = -83.9
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = -11.92
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          = 1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = -2100
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = -2.2
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 14000
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.75
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 50
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 1.0e-8
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 90.0
+
+  # Time step size [s]
+  set Time step size      =  0.1
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/PLOT-consolidation.gp b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/PLOT-consolidation.gp
new file mode 100755 (executable)
index 0000000..b3a6b3b
--- /dev/null
@@ -0,0 +1,86 @@
+\r
+# GNUPLOT file to plot consolidation curves\r
+\r
+#To see color names:\r
+# >> show palette colornames\r
+\r
+#To see line style, line width, etc.:\r
+# >> set terminal wxt enhanced dashed\r
+# >> test\r
+clear\r
+reset\r
+\r
+file_base = "base_nos0.8_k40_Kos8.0e-11_mu0.89e-3/data-for-gnuplot.sol"\r
+Umax_base = 1.958069e-02\r
+\r
+file_nos1 = "nos0.7_k40_Kos8.0e-11_mu0.89e-3/data-for-gnuplot.sol"\r
+Umax_nos1 = 1.967018e-02\r
+file_nos2 = "nos0.9_k40_Kos8.0e-11_mu0.89e-3/data-for-gnuplot.sol"\r
+Umax_nos2 = 1.931683e-02\r
+\r
+file_k1 = "nos0.8_k1_Kos8.0e-11_mu0.89e-3/data-for-gnuplot.sol"\r
+Umax_k1 = 1.958069e-02\r
+file_k2 = "nos0.8_k80_Kos8.0e-11_mu0.89e-3/data-for-gnuplot.sol"\r
+Umax_k2 = 1.958069e-02\r
+\r
+\r
+\r
+file_mu1 = "nos0.8_k40_Kos8.0e-11_mu1.78e-4/data-for-gnuplot.sol"\r
+Umax_mu1 = 1.958069e-02\r
+file_mu2 = "nos0.8_k40_Kos8.0e-11_mu4.45e-3/data-for-gnuplot.sol"\r
+Umax_mu2 = 1.953904e-02\r
+\r
+file_Kos1 = "nos0.8_k40_Kos1.6e-11_mu0.89e-3/data-for-gnuplot.sol"\r
+Umax_Kos1 = 1.953904e-02\r
+file_Kos2 = "nos0.8_k40_Kos4.0e-10_mu0.89e-3/data-for-gnuplot.sol"\r
+Umax_Kos2 = 1.958069e-02\r
+\r
+\r
+\r
+# -------------------------------------------------------------------------------\r
+unset colorbox\r
+unset grid\r
+\r
+set style line 1  lt 1 lw 2 lc rgb "black"   ps 0.7 dt 1\r
+set style line 2  lt 2 lw 2 lc rgb "gray25"  ps 0.7 dt 2\r
+set style line 3  lt 4 lw 2 lc rgb "gray50"  ps 0.7 dt 3\r
+set style line 4  lt 10 lw 2 lc rgb "gray75"  ps 0.7\r
+\r
+set style line 5  lt 2  lw 2   lc rgb "gray70"\r
+set style line 6  lt 2  lw 2   lc rgb "gray40"\r
+set style line 7  lt 2  lw 2   lc rgb "gray10"\r
+\r
+\r
+# ---------  CONSOLIDATION CURVE  -------------------------------------------\r
+#Final specimen shortening\r
+\r
+set term png size 450,300 enhanced font 'Verdana,12'\r
+unset key\r
+set key box inside top right font 'Verdana,12' width 1.0\r
+\r
+set logscale x\r
+set xrange [0.1:100]\r
+set yrange [1.1:0.0] reverse\r
+\r
+set xlabel 'time [min]' font 'Verdana,14'\r
+set ylabel 'consolidation ratio' font 'Verdana,14'\r
+\r
+set output "consolidation-effect-nos.png"\r
+plot file_nos1 using (($1)/60):(-($7)/Umax_nos1) with lines ls 5 title "n_{0s}=0.7",\\r
+     file_base using (($1)/60):(-($7)/Umax_base) with lines ls 6 title "n_{0s}=0.8",\\r
+     file_nos2 using (($1)/60):(-($7)/Umax_nos2) with lines ls 7 title "n_{0s}=0.9"\r
+\r
+set output "consolidation-effect-k.png"\r
+plot file_k1   using (($1)/60):(-($7)/Umax_k1)   with lines ls 5 title "{/Symbol k}=1",\\r
+     file_base using (($1)/60):(-($7)/Umax_base) with lines ls 6 title "{/Symbol k}=40",\\r
+     file_k2   using (($1)/60):(-($7)/Umax_k2)   with lines ls 7 title "{/Symbol k}=80"\r
+\r
+set output "consolidation-effect-Kos.png"\r
+plot file_Kos1 using (($1)/60):(-($7)/Umax_Kos1) with lines ls 5 title "K_{0s}= 16 nm^2",\\r
+     file_base using (($1)/60):(-($7)/Umax_base) with lines ls 6 title "K_{0s}= 80 nm^2",\\r
+     file_Kos2 using (($1)/60):(-($7)/Umax_Kos2) with lines ls 7 title "K_{0s}=400 nm^2"\r
+\r
+set output "consolidation-effect-mu.png"\r
+plot file_mu1  using (($1)/60):(-($7)/Umax_mu1)  with lines ls 5 title "{/Symbol m}^{FR}=0.178 mmPa·s",\\r
+     file_base using (($1)/60):(-($7)/Umax_base) with lines ls 6 title "{/Symbol m}^{FR}=0.890 mmPa·s",\\r
+     file_mu2  using (($1)/60):(-($7)/Umax_mu2)  with lines ls 7 title "{/Symbol m}^{FR}=4.450 mmPa·s"\r
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/base_nos0.8_k40_Kos8.0e-11_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/base_nos0.8_k40_Kos8.0e-11_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..286019c
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.7_k40_Kos8.0e-11_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.7_k40_Kos8.0e-11_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..4f882d0
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.70
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k1_Kos8.0e-11_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k1_Kos8.0e-11_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..69475b8
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 1
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos1.6e-11_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos1.6e-11_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..edf1afb
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 1.6e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos4.0e-10_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos4.0e-10_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..5e07595
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 4.0e-10
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu0.89e-1/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu0.89e-1/parameters.prm
new file mode 100755 (executable)
index 0000000..a2e32c2
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-1
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu0.89e-5/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu0.89e-5/parameters.prm
new file mode 100755 (executable)
index 0000000..53ab13b
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-5
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu1.78e-4/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu1.78e-4/parameters.prm
new file mode 100755 (executable)
index 0000000..819d615
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 1.78e-4
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu4.45e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-11_mu4.45e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..6ca248b
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 4.45e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-13_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-13_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..215ceab
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-13
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-9_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k40_Kos8.0e-9_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..4177f0b
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-9
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k80_Kos8.0e-11_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.8_k80_Kos8.0e-11_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..f6500e8
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.80
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 80
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.9_k40_Kos8.0e-11_mu0.89e-3/parameters.prm b/Nonlinear_PoroViscoelasticity/input-files/4-consolidation_parameters/nos0.9_k40_Kos8.0e-11_mu0.89e-3/parameters.prm
new file mode 100755 (executable)
index 0000000..5cf5d13
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed
+  #                  | Budday_cube_shear_fully_fixed 
+  set Geometry type       = Franceschini_consolidation
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 1
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 30.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = pressure
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -1.0e3
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 3.34e5
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  0.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = 1044
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 1183
+
+  # Shear modulus mu3  [Pa]
+  set mu3             =  0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = 4.309
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 7.736
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          =  1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1             = 0.0
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = 1.0
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 1.0
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.90
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 40
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 8.0e-11
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 6000
+
+  # Time step size [s]
+  set Time step size      =  6.0
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/PLOT-Verification-Ehlers-EPS.gp b/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/PLOT-Verification-Ehlers-EPS.gp
new file mode 100755 (executable)
index 0000000..e2c9991
--- /dev/null
@@ -0,0 +1,616 @@
+\r
+# GNUPLOT file to plot verification examples (Fig 2) of Ehlers and Eippers (1999)\r
+\r
+#To see color names:\r
+# >> show palette colornames\r
+\r
+#To see line style, line width, etc.:\r
+# >> set terminal wxt enhanced dashed\r
+# >> test\r
+clear\r
+reset\r
+set datafile separator ","\r
+\r
+# -------------------------------------------------------------------------------\r
+# DATA EXTRACTED WITH ENGAUGE FROM EHLERS & EIPPERS PAPER COPIED HERE\r
+# -------------------------------------------------------------------------------\r
+$dataEhlers1 << EOD\r
+#x,step load,load increase,theor bound\r
+0.0,0.0,0.0,-0.33\r
+0.0114476,-0.023822,-0.023822,-0.33\r
+0.0332767,-0.0366492,-0.0393381,-0.33\r
+0.0333608,-0.0366742,-0.0393979,-0.33\r
+0.0765419,-0.0494764,-0.0549133,-0.33\r
+0.0767103,-0.049521,-0.0549738,-0.33\r
+0.119765,-0.0609293,-0.0670155,-0.33\r
+0.130764,-0.0632646,-0.0700916,-0.33\r
+0.162918,-0.0700916,-0.0813088,-0.33\r
+0.174099,-0.0717567,-0.0852094,-0.33\r
+0.205987,-0.0765052,-0.0941279,-0.33\r
+0.228153,-0.0799625,-0.100327,-0.33\r
+0.238296,-0.0815445,-0.103164,-0.33\r
+0.270576,-0.0856675,-0.112192,-0.33\r
+0.282206,-0.0873173,-0.115445,-0.33\r
+0.302871,-0.0902487,-0.121051,-0.33\r
+0.336246,-0.095925,-0.130105,-0.33\r
+0.356742,-0.099411,-0.136826,-0.33\r
+0.379553,-0.102325,-0.144306,-0.33\r
+0.389023,-0.103534,-0.146516,-0.33\r
+0.432035,-0.108115,-0.156556,-0.33\r
+0.444325,-0.109685,-0.159424,-0.33\r
+0.464316,-0.112238,-0.16409,-0.33\r
+0.496597,-0.116361,-0.171624,-0.33\r
+0.509096,-0.117693,-0.174542,-0.33\r
+0.539609,-0.120942,-0.183076,-0.33\r
+0.561172,-0.125065,-0.189106,-0.33\r
+0.56315,-0.125255,-0.18966,-0.33\r
+0.604171,-0.129188,-0.200788,-0.33\r
+0.617189,-0.130575,-0.204319,-0.33\r
+0.647183,-0.13377,-0.211109,-0.33\r
+0.668704,-0.136518,-0.215981,-0.33\r
+0.681947,-0.137788,-0.218979,-0.33\r
+0.711702,-0.140641,-0.225924,-0.33\r
+0.746719,-0.143999,-0.234097,-0.33\r
+0.754701,-0.144764,-0.235848,-0.33\r
+0.808404,-0.148429,-0.247628,-0.33\r
+0.811462,-0.148709,-0.248298,-0.33\r
+0.883641,-0.155301,-0.262318,-0.33\r
+0.886938,-0.155554,-0.262958,-0.33\r
+0.937358,-0.159424,-0.269612,-0.33\r
+0.980357,-0.163547,-0.275286,-0.33\r
+0.994554,-0.164355,-0.27716,-0.33\r
+1.03757,-0.166802,-0.281741,-0.33\r
+1.04478,-0.167212,-0.282068,-0.33\r
+1.09848,-0.170877,-0.284503,-0.33\r
+1.1629,-0.174542,-0.287425,-0.33\r
+1.2093,-0.177181,-0.289529,-0.33\r
+1.22732,-0.178207,-0.290189,-0.33\r
+1.28441,-0.181454,-0.292277,-0.33\r
+1.29174,-0.181872,-0.292427,-0.33\r
+1.36687,-0.185079,-0.293955,-0.33\r
+1.44201,-0.188743,-0.295483,-0.33\r
+1.50963,-0.191218,-0.296859,-0.33\r
+1.51712,-0.191492,-0.296965,-0.33\r
+1.60296,-0.194699,-0.298188,-0.33\r
+1.68878,-0.19699,-0.29941,-0.33\r
+1.77459,-0.19928,-0.300632,-0.33\r
+1.86348,-0.200968,-0.301898,-0.33\r
+1.87111,-0.201113,-0.301979,-0.33\r
+1.96763,-0.202945,-0.30301,-0.33\r
+2.07485,-0.204319,-0.304156,-0.33\r
+2.17136,-0.205694,-0.305187,-0.33\r
+2.20657,-0.206028,-0.305563,-0.33\r
+2.26785,-0.20661,-0.30607,-0.33\r
+2.37504,-0.207068,-0.306956,-0.33\r
+2.47154,-0.207984,-0.307754,-0.33\r
+2.53892,-0.208272,-0.308312,-0.33\r
+2.57873,-0.208442,-0.308612,-0.33\r
+2.68593,-0.208901,-0.30942,-0.33\r
+2.79312,-0.209359,-0.310228,-0.33\r
+2.88958,-0.209359,-0.310956,-0.33\r
+2.90342,-0.209359,-0.31106,-0.33\r
+2.99676,-0.209359,-0.311544,-0.33\r
+3.10396,-0.209817,-0.312099,-0.33\r
+3.21116,-0.210275,-0.312654,-0.33\r
+3.25717,-0.210275,-0.312893,-0.33\r
+3.31834,-0.210275,-0.313138,-0.33\r
+3.42552,-0.210275,-0.313567,-0.33\r
+3.5327,-0.210275,-0.313997,-0.33\r
+3.60019,-0.210275,-0.314267,-0.33\r
+3.63988,-0.210275,-0.314417,-0.33\r
+3.74706,-0.210275,-0.314821,-0.33\r
+3.85424,-0.210275,-0.315225,-0.33\r
+3.96142,-0.210275,-0.315629,-0.33\r
+3.96465,-0.210275,-0.315641,-0.33\r
+4.0686,-0.210275,-0.315911,-0.33\r
+4.17579,-0.210275,-0.316188,-0.33\r
+4.28297,-0.210275,-0.316466,-0.33\r
+4.31838,-0.210275,-0.316558,-0.33\r
+4.39015,-0.210275,-0.316738,-0.33\r
+4.49733,-0.210275,-0.317007,-0.33\r
+4.60451,-0.210275,-0.317277,-0.33\r
+4.68282,-0.210275,-0.317474,-0.33\r
+4.71169,-0.210275,-0.317586,-0.33\r
+4.81887,-0.210275,-0.318002,-0.33\r
+4.92605,-0.210275,-0.318419,-0.33\r
+5.03323,-0.210275,-0.318835,-0.33\r
+5.03656,-0.210275,-0.318848,-0.33\r
+5.14042,-0.210275,-0.318983,-0.33\r
+5.2476,-0.210275,-0.319121,-0.33\r
+5.35478,-0.210275,-0.31926,-0.33\r
+5.39027,-0.210275,-0.319306,-0.33\r
+5.46196,-0.210275,-0.319396,-0.33\r
+5.56914,-0.210275,-0.319531,-0.33\r
+5.67632,-0.210275,-0.319666,-0.33\r
+5.7547,-0.210275,-0.319764,-0.33\r
+5.7835,-0.210275,-0.319803,-0.33\r
+5.89068,-0.210275,-0.319946,-0.33\r
+5.99786,-0.210275,-0.320089,-0.33\r
+6.09769,-0.210275,-0.320223,-0.33\r
+6.10505,-0.210275,-0.320232,-0.33\r
+6.21223,-0.210275,-0.320366,-0.33\r
+6.31941,-0.210275,-0.320501,-0.33\r
+6.42659,-0.210275,-0.320636,-0.33\r
+6.46212,-0.210275,-0.320681,-0.33\r
+6.53377,-0.210275,-0.320866,-0.33\r
+6.64095,-0.210275,-0.321144,-0.33\r
+6.74813,-0.210275,-0.321421,-0.33\r
+6.81585,-0.210275,-0.321597,-0.33\r
+6.85531,-0.210275,-0.321648,-0.33\r
+6.9625,-0.210275,-0.321787,-0.33\r
+7.06968,-0.210275,-0.321926,-0.33\r
+7.16956,-0.210275,-0.322055,-0.33\r
+7.17686,-0.210275,-0.322055,-0.33\r
+7.28404,-0.210275,-0.322055,-0.33\r
+7.39122,-0.210275,-0.322055,-0.33\r
+7.4984,-0.210275,-0.322055,-0.33\r
+7.52326,-0.210275,-0.322055,-0.33\r
+7.60558,-0.210275,-0.322158,-0.33\r
+7.71276,-0.210275,-0.322293,-0.33\r
+7.81994,-0.210275,-0.322428,-0.33\r
+7.88769,-0.210275,-0.322513,-0.33\r
+7.92713,-0.210275,-0.322563,-0.33\r
+8.03431,-0.210275,-0.322697,-0.33\r
+8.14149,-0.210275,-0.322832,-0.33\r
+8.24867,-0.210275,-0.322967,-0.33\r
+8.25212,-0.210275,-0.322971,-0.33\r
+8.35585,-0.210275,-0.323106,-0.33\r
+8.46303,-0.210275,-0.323244,-0.33\r
+8.57021,-0.210275,-0.323383,-0.33\r
+8.60583,-0.210275,-0.323429,-0.33\r
+8.67739,-0.210275,-0.323429,-0.33\r
+8.78457,-0.210275,-0.323429,-0.33\r
+8.89176,-0.210275,-0.323429,-0.33\r
+8.95953,-0.210275,-0.323429,-0.33\r
+8.99894,-0.210275,-0.32348,-0.33\r
+9.10612,-0.210275,-0.323619,-0.33\r
+9.2133,-0.210275,-0.323758,-0.33\r
+9.31324,-0.210275,-0.323887,-0.33\r
+9.32048,-0.210275,-0.323887,-0.33\r
+9.42766,-0.210275,-0.323887,-0.33\r
+9.53484,-0.210275,-0.323887,-0.33\r
+9.64202,-0.210275,-0.323887,-0.33\r
+9.67766,-0.210275,-0.323887,-0.33\r
+9.7492,-0.210275,-0.323986,-0.33\r
+9.85639,-0.210275,-0.324134,-0.33\r
+9.96357,-0.210275,-0.324282,-0.33\r
+10.0099,-0.210275,-0.324346,-0.33\r
+EOD\r
+\r
+$dataEhlers2 << EOD\r
+#x,kappa_0,kappa_1,kappa_2,kappa_5\r
+0      ,       0       ,       0       ,       0       ,       0\r
+0.0104603      ,       -0.00766284     ,       -0.00063857     ,       -0.00510856     ,       -0.008066\r
+0.0313808      ,       -0.0223499      ,       -0.00766284     ,       -0.0146871      ,       -0.01062069\r
+0.041841       ,       -0.0269796      ,       -0.011175       ,       -0.0194764      ,       -0.01541\r
+0.0523013      ,       -0.0316092      ,       -0.0136494      ,       -0.0221371      ,       -0.0167935\r
+0.0732218      ,       -0.0427842      ,       -0.0185983      ,       -0.0274585      ,       -0.0195607\r
+0.083682       ,       -0.0456577      ,       -0.0210728      ,       -0.0322478      ,       -0.0203908\r
+0.104603       ,       -0.0514049      ,       -0.0280971      ,       -0.0343231      ,       -0.0220511\r
+0.115063       ,       -0.0541188      ,       -0.0316092      ,       -0.0353608      ,       -0.0228812\r
+0.125523       ,       -0.0568327      ,       -0.0363186      ,       -0.0363985      ,       -0.0237114\r
+0.146444       ,       -0.0600255      ,       -0.0457375      ,       -0.0402299      ,       -0.0254674\r
+0.156904       ,       -0.0632184      ,       -0.050447       ,       -0.0415868      ,       -0.0263455\r
+0.167364       ,       -0.0673691      ,       -0.0434227      ,       -0.0429438      ,       -0.0272235\r
+0.177824       ,       -0.0687527      ,       -0.0539591      ,       -0.0443008      ,       -0.0280536\r
+0.188285       ,       -0.0701362      ,       -0.0556354      ,       -0.0456577      ,       -0.0288838\r
+0.198745       ,       -0.0715198      ,       -0.0573116      ,       -0.0474138      ,       -0.0297139\r
+0.209205       ,       -0.0747126      ,       -0.0589879      ,       -0.0491699      ,       -0.0305441\r
+0.219665       ,       -0.0761494      ,       -0.0606641      ,       -0.0498883      ,       -0.0313742\r
+0.230126       ,       -0.0775862      ,       -0.0619413      ,       -0.0506066      ,       -0.031917\r
+0.251046       ,       -0.0807791      ,       -0.0644955      ,       -0.0520434      ,       -0.0330026\r
+0.261506       ,       -0.0839719      ,       -0.066092       ,       -0.0530013      ,       -0.0335453\r
+0.282427       ,       -0.0865262      ,       -0.0692848      ,       -0.054917       ,       -0.0346309\r
+0.292887       ,       -0.0878033      ,       -0.0708812      ,       -0.0559547      ,       -0.0351737\r
+0.303347       ,       -0.0909962      ,       -0.0723712      ,       -0.0569923      ,       -0.0357165\r
+0.324268       ,       -0.0929119      ,       -0.0753512      ,       -0.0590677      ,       -0.036802\r
+0.334728       ,       -0.0938697      ,       -0.0762559      ,       -0.0603448      ,       -0.0373129\r
+0.345188       ,       -0.0954662      ,       -0.0771605      ,       -0.061622       ,       -0.0378238\r
+0.355649       ,       -0.0970626      ,       -0.0780651      ,       -0.0627927      ,       -0.0383346\r
+0.376569       ,       -0.100255       ,       -0.0798744      ,       -0.0651341      ,       -0.0393563\r
+0.387029       ,       -0.101852       ,       -0.0807791      ,       -0.0657727      ,       -0.0399239\r
+0.39749        ,       -0.103448       ,       -0.0818966      ,       -0.0664112      ,       -0.0404916\r
+0.41841        ,       -0.106322       ,       -0.0841315      ,       -0.0676884      ,       -0.0416268\r
+0.42887        ,       -0.107918       ,       -0.085249       ,       -0.0684068      ,       -0.0421944\r
+0.439331       ,       -0.109515       ,       -0.0863133      ,       -0.0691252      ,       -0.042762\r
+0.460251       ,       -0.11143        ,       -0.0884419      ,       -0.0705619      ,       -0.0438973\r
+0.470711       ,       -0.112388       ,       -0.0895062      ,       -0.0719455      ,       -0.0444649\r
+0.491632       ,       -0.115581       ,       -0.0916347      ,       -0.0747126      ,       -0.0453163\r
+0.523013       ,       -0.118774       ,       -0.0945083      ,       -0.0763889      ,       -0.0465934\r
+0.533473       ,       -0.119732       ,       -0.0954662      ,       -0.0769476      ,       -0.0470192\r
+0.554393       ,       -0.121648       ,       -0.0975947      ,       -0.0785441      ,       -0.047977\r
+0.575314       ,       -0.12484        ,       -0.0997233      ,       -0.0801405      ,       -0.0489349\r
+0.596234       ,       -0.127182       ,       -0.101852       ,       -0.0814176      ,       -0.0498927\r
+0.606695       ,       -0.128352       ,       -0.102682       ,       -0.0820562      ,       -0.050212\r
+0.617155       ,       -0.12947        ,       -0.103512       ,       -0.0826948      ,       -0.0505313\r
+0.648536       ,       -0.132822       ,       -0.106003       ,       -0.0842273      ,       -0.0514891\r
+0.658996       ,       -0.13394        ,       -0.106778       ,       -0.0847382      ,       -0.0518084\r
+0.669456       ,       -0.135057       ,       -0.107553       ,       -0.085249       ,       -0.0523193\r
+0.690377       ,       -0.137292       ,       -0.109104       ,       -0.0873244      ,       -0.053341\r
+0.711297       ,       -0.139421       ,       -0.110655       ,       -0.0893997      ,       -0.0543627\r
+0.721757       ,       -0.140485       ,       -0.11143        ,       -0.0900383      ,       -0.0547529\r
+0.753138       ,       -0.142401       ,       -0.113825       ,       -0.091954       ,       -0.0559237\r
+0.763598       ,       -0.14304        ,       -0.114623       ,       -0.0925926      ,       -0.0563139\r
+0.784519       ,       -0.145168       ,       -0.11622        ,       -0.0938697      ,       -0.0570944\r
+0.794979       ,       -0.146232       ,       -0.116858       ,       -0.0945083      ,       -0.0574846\r
+0.805439       ,       -0.147669       ,       -0.117497       ,       -0.0951469      ,       -0.0578748\r
+0.8159 ,       -0.149106       ,       -0.118135       ,       -0.0955726      ,       -0.0582296\r
+0.857741       ,       -0.15198        ,       -0.12069        ,       -0.0972754      ,       -0.0596486\r
+0.868201       ,       -0.152778       ,       -0.121328       ,       -0.0977011      ,       -0.0600034\r
+0.899582       ,       -0.155172       ,       -0.123819       ,       -0.0998563      ,       -0.0610677\r
+0.910042       ,       -0.15613        ,       -0.124649       ,       -0.100575       ,       -0.061387\r
+0.920502       ,       -0.157088       ,       -0.125479       ,       -0.101277       ,       -0.0617063\r
+0.930962       ,       -0.158046       ,       -0.126153       ,       -0.10198        ,       -0.0620255\r
+0.962343       ,       -0.160201       ,       -0.128175       ,       -0.104087       ,       -0.0629834\r
+0.972803       ,       -0.16092        ,       -0.128849       ,       -0.104534       ,       -0.063183\r
+1.00418        ,       -0.164112       ,       -0.130871       ,       -0.105875       ,       -0.0637816\r
+1.01464        ,       -0.164687       ,       -0.131545       ,       -0.106322       ,       -0.0639812\r
+1.04603        ,       -0.166411       ,       -0.133653       ,       -0.107759       ,       -0.0645798\r
+1.05649        ,       -0.166986       ,       -0.134355       ,       -0.108238       ,       -0.0652184\r
+1.06695        ,       -0.167704       ,       -0.135057       ,       -0.108716       ,       -0.065857\r
+1.07741        ,       -0.168423       ,       -0.1356 ,       -0.109195       ,       -0.0661762\r
+1.09833        ,       -0.16986        ,       -0.136686       ,       -0.110217       ,       -0.0668148\r
+1.12971        ,       -0.172015       ,       -0.138314       ,       -0.11175        ,       -0.0677727\r
+1.14017        ,       -0.172733       ,       -0.138857       ,       -0.112324       ,       -0.0680565\r
+1.17155        ,       -0.174457       ,       -0.140485       ,       -0.114049       ,       -0.0689079\r
+1.18201        ,       -0.175032       ,       -0.141078       ,       -0.114623       ,       -0.0691917\r
+1.19247        ,       -0.175607       ,       -0.141671       ,       -0.115182       ,       -0.0694755\r
+1.22385        ,       -0.177762       ,       -0.14345        ,       -0.116858       ,       -0.0703269\r
+1.23431        ,       -0.17848        ,       -0.144043       ,       -0.117417       ,       -0.0706143\r
+1.24477        ,       -0.178991       ,       -0.144636       ,       -0.117976       ,       -0.0709017\r
+1.26569        ,       -0.180013       ,       -0.145849       ,       -0.119093       ,       -0.0714764\r
+1.28661        ,       -0.181034       ,       -0.147063       ,       -0.120016       ,       -0.0720511\r
+1.32845        ,       -0.18295        ,       -0.149489       ,       -0.12186        ,       -0.0732005\r
+1.34937        ,       -0.183908       ,       -0.150702       ,       -0.122783       ,       -0.0736566\r
+1.35983        ,       -0.184355       ,       -0.151181       ,       -0.123244       ,       -0.0738847\r
+1.40167        ,       -0.186143       ,       -0.153097       ,       -0.124521       ,       -0.0747969\r
+1.41213        ,       -0.186622       ,       -0.153576       ,       -0.12484        ,       -0.0750706\r
+1.43305        ,       -0.18758        ,       -0.154563       ,       -0.125479       ,       -0.075618\r
+1.46444        ,       -0.189017       ,       -0.156043       ,       -0.126756       ,       -0.076439\r
+1.4749 ,       -0.189389       ,       -0.156537       ,       -0.127182       ,       -0.0767126\r
+1.49582        ,       -0.190134       ,       -0.157524       ,       -0.128033       ,       -0.07726\r
+1.5272 ,       -0.191252       ,       -0.159004       ,       -0.129523       ,       -0.078081\r
+1.54812        ,       -0.191981       ,       -0.159962       ,       -0.130517       ,       -0.0786284\r
+1.58996        ,       -0.193441       ,       -0.161877       ,       -0.132503       ,       -0.079723\r
+1.60042        ,       -0.193806       ,       -0.162356       ,       -0.132886       ,       -0.0799967\r
+1.61088        ,       -0.19408        ,       -0.162835       ,       -0.133269       ,       -0.0802704\r
+1.62134        ,       -0.194353       ,       -0.163204       ,       -0.133653       ,       -0.0805441\r
+1.67364        ,       -0.195722       ,       -0.165046       ,       -0.135568       ,       -0.0819124\r
+1.69456        ,       -0.196269       ,       -0.165782       ,       -0.136335       ,       -0.0824598\r
+1.74686        ,       -0.197637       ,       -0.167625       ,       -0.137931       ,       -0.0840562\r
+1.76778        ,       -0.198185       ,       -0.168405       ,       -0.13857        ,       -0.0843755\r
+1.82008        ,       -0.199553       ,       -0.170356       ,       -0.140166       ,       -0.0851737\r
+1.83054        ,       -0.199753       ,       -0.170746       ,       -0.140485       ,       -0.0853333\r
+1.841  ,       -0.199952       ,       -0.171137       ,       -0.140805       ,       -0.085493\r
+1.90377        ,       -0.201149       ,       -0.173326       ,       -0.143069       ,       -0.0864508\r
+1.91423        ,       -0.201327       ,       -0.173691       ,       -0.143446       ,       -0.0866105\r
+1.95607        ,       -0.202036       ,       -0.175151       ,       -0.144955       ,       -0.0877052\r
+1.98745        ,       -0.202568       ,       -0.176245       ,       -0.146009       ,       -0.0885262\r
+1.99791        ,       -0.202746       ,       -0.176564       ,       -0.14636        ,       -0.0887542\r
+2.06067        ,       -0.203597       ,       -0.17848        ,       -0.148467       ,       -0.0901226\r
+2.08159        ,       -0.203881       ,       -0.179119       ,       -0.148946       ,       -0.0905217\r
+2.09205        ,       -0.204023       ,       -0.179395       ,       -0.149186       ,       -0.0907213\r
+2.14435        ,       -0.204555       ,       -0.180779       ,       -0.150383       ,       -0.091719\r
+2.18619        ,       -0.204981       ,       -0.181886       ,       -0.15166        ,       -0.0925705\r
+2.20711        ,       -0.205194       ,       -0.182439       ,       -0.152299       ,       -0.0929962\r
+2.21757        ,       -0.2053 ,       -0.182716       ,       -0.152618       ,       -0.0932356\r
+2.23849        ,       -0.205513       ,       -0.183269       ,       -0.153328       ,       -0.0937146\r
+2.28033        ,       -0.205939       ,       -0.184334       ,       -0.154747       ,       -0.0946724\r
+2.29079        ,       -0.206003       ,       -0.1846 ,       -0.155101       ,       -0.0949119\r
+2.31172        ,       -0.20613        ,       -0.185132       ,       -0.155811       ,       -0.0951513\r
+2.36402        ,       -0.20645        ,       -0.186462       ,       -0.156951       ,       -0.09575\r
+2.37448        ,       -0.206513       ,       -0.186682       ,       -0.157179       ,       -0.0958697\r
+2.38494        ,       -0.206577       ,       -0.186901       ,       -0.157407       ,       -0.0960978\r
+2.4477 ,       -0.207003       ,       -0.188218       ,       -0.159049       ,       -0.0974662\r
+2.45816        ,       -0.207074       ,       -0.188438       ,       -0.159323       ,       -0.0976657\r
+2.47908        ,       -0.207216       ,       -0.188877       ,       -0.159802       ,       -0.0980648\r
+2.53138        ,       -0.207535       ,       -0.189974       ,       -0.160999       ,       -0.0990626\r
+2.54184        ,       -0.207599       ,       -0.190166       ,       -0.161239       ,       -0.0992621\r
+2.58368        ,       -0.207854       ,       -0.190932       ,       -0.162197       ,       -0.1000603\r
+2.61506        ,       -0.207961       ,       -0.191507       ,       -0.162915       ,       -0.100659\r
+2.62552        ,       -0.207996       ,       -0.191699       ,       -0.163155       ,       -0.1007787\r
+2.63598        ,       -0.208032       ,       -0.19189        ,       -0.163442       ,       -0.1008985\r
+2.67782        ,       -0.208174       ,       -0.192562       ,       -0.164591       ,       -0.1013774\r
+2.69874        ,       -0.208245       ,       -0.192898       ,       -0.165166       ,       -0.1016169\r
+2.73013        ,       -0.208351       ,       -0.193403       ,       -0.166028       ,       -0.102301\r
+2.77197        ,       -0.208493       ,       -0.194075       ,       -0.166596       ,       -0.103213\r
+2.82427        ,       -0.208653       ,       -0.194915       ,       -0.167305       ,       -0.104011\r
+2.83473        ,       -0.208685       ,       -0.195083       ,       -0.167625       ,       -0.104171\r
+2.85565        ,       -0.208748       ,       -0.195427       ,       -0.168263       ,       -0.10449\r
+2.87657        ,       -0.208812       ,       -0.195771       ,       -0.168902       ,       -0.104874\r
+2.89749        ,       -0.208812       ,       -0.196115       ,       -0.16954        ,       -0.105257\r
+2.90795        ,       -0.208812       ,       -0.196286       ,       -0.1697 ,       -0.105448\r
+2.97071        ,       -0.208812       ,       -0.197318       ,       -0.170658       ,       -0.106167\r
+2.98117        ,       -0.208812       ,       -0.197436       ,       -0.170817       ,       -0.106286\r
+2.99163        ,       -0.208844       ,       -0.197553       ,       -0.17103        ,       -0.106406\r
+3.07531        ,       -0.2091 ,       -0.198494       ,       -0.172733       ,       -0.107758\r
+3.08577        ,       -0.209132       ,       -0.198612       ,       -0.172903       ,       -0.107927\r
+3.16946        ,       -0.209132       ,       -0.199553       ,       -0.174266       ,       -0.10928\r
+3.19038        ,       -0.209132       ,       -0.199727       ,       -0.174606       ,       -0.109564\r
+3.23222        ,       -0.209259       ,       -0.200075       ,       -0.175287       ,       -0.110131\r
+3.2636 ,       -0.209355       ,       -0.200337       ,       -0.175803       ,       -0.110557\r
+3.28452        ,       -0.209419       ,       -0.200511       ,       -0.176147       ,       -0.110912\r
+3.29498        ,       -0.209451       ,       -0.200602       ,       -0.176319       ,       -0.111089\r
+3.35774        ,       -0.209451       ,       -0.201149       ,       -0.17735        ,       -0.112153\r
+3.3682 ,       -0.209451       ,       -0.201241       ,       -0.177522       ,       -0.112295\r
+3.38912        ,       -0.209451       ,       -0.201423       ,       -0.177877       ,       -0.112579\r
+3.45188        ,       -0.209451       ,       -0.20197        ,       -0.178941       ,       -0.11343\r
+3.46234        ,       -0.209451       ,       -0.202062       ,       -0.179119       ,       -0.113537\r
+3.49372        ,       -0.209451       ,       -0.202335       ,       -0.179544       ,       -0.113856\r
+3.50418        ,       -0.209451       ,       -0.202427       ,       -0.179686       ,       -0.113963\r
+3.54603        ,       -0.209451       ,       -0.2027 ,       -0.180254       ,       -0.114388\r
+3.55649        ,       -0.209451       ,       -0.202769       ,       -0.180396       ,       -0.114548\r
+3.59833        ,       -0.209451       ,       -0.203042       ,       -0.181034       ,       -0.115186\r
+3.62971        ,       -0.209451       ,       -0.203248       ,       -0.181513       ,       -0.115665\r
+3.65063        ,       -0.209451       ,       -0.203384       ,       -0.181833       ,       -0.115956\r
+3.70293        ,       -0.209451       ,       -0.203704       ,       -0.182631       ,       -0.116681\r
+3.72385        ,       -0.209451       ,       -0.203831       ,       -0.18295        ,       -0.116972\r
+3.74477        ,       -0.209451       ,       -0.203959       ,       -0.183224       ,       -0.117262\r
+3.80753        ,       -0.209451       ,       -0.204342       ,       -0.184045       ,       -0.1179\r
+3.83891        ,       -0.209451       ,       -0.204534       ,       -0.184455       ,       -0.11822\r
+3.85983        ,       -0.209451       ,       -0.204662       ,       -0.184729       ,       -0.118539\r
+3.87029        ,       -0.209451       ,       -0.204715       ,       -0.184866       ,       -0.118699\r
+3.88075        ,       -0.209451       ,       -0.204768       ,       -0.185008       ,       -0.118858\r
+3.91213        ,       -0.209451       ,       -0.204928       ,       -0.185434       ,       -0.119217\r
+3.96444        ,       -0.209451       ,       -0.205194       ,       -0.186143       ,       -0.119816\r
+3.98536        ,       -0.209451       ,       -0.2053 ,       -0.186271       ,       -0.120056\r
+4.01674        ,       -0.209451       ,       -0.205431       ,       -0.186462       ,       -0.120415\r
+4.04812        ,       -0.209642       ,       -0.205561       ,       -0.186654       ,       -0.120774\r
+4.06904        ,       -0.20977        ,       -0.205648       ,       -0.186782       ,       -0.121093\r
+4.12134        ,       -0.210089       ,       -0.205866       ,       -0.187527       ,       -0.121891\r
+4.1318 ,       -0.210089       ,       -0.20591        ,       -0.187676       ,       -0.122051\r
+4.21548        ,       -0.210089       ,       -0.206258       ,       -0.188868       ,       -0.122903\r
+4.22594        ,       -0.210089       ,       -0.206316       ,       -0.189017       ,       -0.123009\r
+4.32008        ,       -0.210089       ,       -0.206838       ,       -0.189974       ,       -0.124286\r
+4.33054        ,       -0.210089       ,       -0.206897       ,       -0.190081       ,       -0.124406\r
+4.38285        ,       -0.210089       ,       -0.207042       ,       -0.190613       ,       -0.125004\r
+4.40377        ,       -0.210089       ,       -0.2071 ,       -0.190741       ,       -0.125244\r
+4.43515        ,       -0.210089       ,       -0.207187       ,       -0.190932       ,       -0.125531\r
+4.48745        ,       -0.210089       ,       -0.207332       ,       -0.191252       ,       -0.12601\r
+4.50837        ,       -0.210089       ,       -0.20739        ,       -0.191464       ,       -0.126202\r
+4.53975        ,       -0.210089       ,       -0.207477       ,       -0.191784       ,       -0.126521\r
+4.56067        ,       -0.210089       ,       -0.207535       ,       -0.191997       ,       -0.126734\r
+4.58159        ,       -0.210089       ,       -0.207588       ,       -0.192209       ,       -0.126947\r
+4.63389        ,       -0.210089       ,       -0.207721       ,       -0.192701       ,       -0.127479\r
+4.64435        ,       -0.210089       ,       -0.207748       ,       -0.192799       ,       -0.127639\r
+4.67573        ,       -0.210089       ,       -0.207828       ,       -0.193094       ,       -0.128117\r
+4.68619        ,       -0.210089       ,       -0.207854       ,       -0.193192       ,       -0.128224\r
+4.71757        ,       -0.210089       ,       -0.207896       ,       -0.193487       ,       -0.128543\r
+4.74895        ,       -0.210089       ,       -0.207938       ,       -0.193712       ,       -0.128862\r
+4.76987        ,       -0.210089       ,       -0.207965       ,       -0.193862       ,       -0.129075\r
+4.85356        ,       -0.210089       ,       -0.208077       ,       -0.194463       ,       -0.130097\r
+4.87448        ,       -0.210089       ,       -0.208104       ,       -0.194613       ,       -0.130352\r
+4.8954 ,       -0.210089       ,       -0.208132       ,       -0.194764       ,       -0.130416\r
+4.92678        ,       -0.210089       ,       -0.208174       ,       -0.194977       ,       -0.130512\r
+4.95816        ,       -0.210089       ,       -0.208254       ,       -0.195189       ,       -0.130608\r
+4.97908        ,       -0.210089       ,       -0.208307       ,       -0.195331       ,       -0.130672\r
+4.98954        ,       -0.210089       ,       -0.208333       ,       -0.195402       ,       -0.130814\r
+5.0523 ,       -0.210089       ,       -0.208493       ,       -0.195785       ,       -0.131665\r
+5.07322        ,       -0.210089       ,       -0.208551       ,       -0.195913       ,       -0.131949\r
+5.09414        ,       -0.210089       ,       -0.208609       ,       -0.196041       ,       -0.132162\r
+5.12552        ,       -0.210089       ,       -0.208696       ,       -0.196315       ,       -0.132481\r
+5.16736        ,       -0.210089       ,       -0.208812       ,       -0.196679       ,       -0.132907\r
+5.23013        ,       -0.210089       ,       -0.208986       ,       -0.197227       ,       -0.133332\r
+5.24059        ,       -0.210089       ,       -0.209015       ,       -0.197318       ,       -0.133403\r
+5.26151        ,       -0.210089       ,       -0.209073       ,       -0.19746        ,       -0.133545\r
+5.28243        ,       -0.210089       ,       -0.209132       ,       -0.197602       ,       -0.133737\r
+5.32427        ,       -0.210089       ,       -0.209132       ,       -0.197886       ,       -0.13412\r
+5.33473        ,       -0.210089       ,       -0.209132       ,       -0.197957       ,       -0.134216\r
+5.36611        ,       -0.210089       ,       -0.209132       ,       -0.198063       ,       -0.134503\r
+5.40795        ,       -0.210089       ,       -0.209132       ,       -0.198205       ,       -0.134982\r
+5.42887        ,       -0.210089       ,       -0.209158       ,       -0.198276       ,       -0.135222\r
+5.44979        ,       -0.210089       ,       -0.209185       ,       -0.198404       ,       -0.135461\r
+5.51255        ,       -0.210089       ,       -0.209265       ,       -0.198787       ,       -0.13594\r
+5.53347        ,       -0.210089       ,       -0.209291       ,       -0.198914       ,       -0.1361\r
+5.61715        ,       -0.210089       ,       -0.209398       ,       -0.199482       ,       -0.136667\r
+5.62762        ,       -0.210089       ,       -0.209411       ,       -0.199553       ,       -0.136738\r
+5.659  ,       -0.210089       ,       -0.209451       ,       -0.199713       ,       -0.137057\r
+5.7113 ,       -0.210089       ,       -0.209584       ,       -0.199979       ,       -0.13759\r
+5.72176        ,       -0.210089       ,       -0.20961        ,       -0.200032       ,       -0.137696\r
+5.78452        ,       -0.210089       ,       -0.20977        ,       -0.200351       ,       -0.138175\r
+5.80544        ,       -0.210089       ,       -0.20977        ,       -0.200458       ,       -0.138335\r
+5.8159 ,       -0.210089       ,       -0.20977        ,       -0.200511       ,       -0.138441\r
+5.89958        ,       -0.210089       ,       -0.20977        ,       -0.200851       ,       -0.139292\r
+5.91004        ,       -0.210089       ,       -0.20977        ,       -0.200894       ,       -0.139399\r
+5.9728 ,       -0.210089       ,       -0.20977        ,       -0.201149       ,       -0.140037\r
+5.99372        ,       -0.210089       ,       -0.20977        ,       -0.201213       ,       -0.14025\r
+6.00418        ,       -0.210089       ,       -0.20977        ,       -0.201245       ,       -0.140321\r
+6.07741        ,       -0.210089       ,       -0.209834       ,       -0.201469       ,       -0.140818\r
+6.08787        ,       -0.210089       ,       -0.209843       ,       -0.201504       ,       -0.140889\r
+6.09833        ,       -0.210089       ,       -0.209852       ,       -0.20154        ,       -0.140953\r
+6.17155        ,       -0.210089       ,       -0.209916       ,       -0.201788       ,       -0.1414\r
+6.19247        ,       -0.210089       ,       -0.209934       ,       -0.201916       ,       -0.141527\r
+6.22385        ,       -0.210089       ,       -0.209962       ,       -0.202107       ,       -0.14174\r
+6.28661        ,       -0.210089       ,       -0.210016       ,       -0.20249        ,       -0.142166\r
+6.32845        ,       -0.210089       ,       -0.210053       ,       -0.202746       ,       -0.142485\r
+6.37029        ,       -0.210089       ,       -0.210089       ,       -0.202746       ,       -0.142805\r
+6.43305        ,       -0.210089       ,       -0.210089       ,       -0.202746       ,       -0.143379\r
+6.4749 ,       -0.210089       ,       -0.210089       ,       -0.202928       ,       -0.143762\r
+6.50628        ,       -0.210089       ,       -0.210089       ,       -0.203065       ,       -0.143937\r
+6.5272 ,       -0.210089       ,       -0.210089       ,       -0.203129       ,       -0.144053\r
+6.58996        ,       -0.210089       ,       -0.210089       ,       -0.203321       ,       -0.144401\r
+6.61088        ,       -0.210089       ,       -0.210089       ,       -0.203384       ,       -0.144543\r
+6.6318 ,       -0.210089       ,       -0.210089       ,       -0.203455       ,       -0.144685\r
+6.6841 ,       -0.210089       ,       -0.210089       ,       -0.203633       ,       -0.14504\r
+6.70502        ,       -0.210089       ,       -0.210089       ,       -0.203704       ,       -0.145181\r
+6.7364 ,       -0.210089       ,       -0.210089       ,       -0.203823       ,       -0.145394\r
+6.77824        ,       -0.210089       ,       -0.210089       ,       -0.203983       ,       -0.145678\r
+6.841  ,       -0.210089       ,       -0.210089       ,       -0.204223       ,       -0.146317\r
+6.87238        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.146636\r
+6.94561        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.146884\r
+6.96653        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.146955\r
+6.97699        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.147051\r
+7.05021        ,       -0.210089       ,       -0.210089       ,       -0.204622       ,       -0.147722\r
+7.06067        ,       -0.210089       ,       -0.210089       ,       -0.204662       ,       -0.147817\r
+7.07113        ,       -0.210089       ,       -0.210089       ,       -0.204693       ,       -0.147913\r
+7.15481        ,       -0.210089       ,       -0.210089       ,       -0.204949       ,       -0.148481\r
+7.16527        ,       -0.210089       ,       -0.210089       ,       -0.204981       ,       -0.148552\r
+7.25941        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.149126\r
+7.26987        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.14919\r
+7.31172        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.149446\r
+7.36402        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.149765\r
+7.42678        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.150148\r
+7.43724        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.150255\r
+7.46862        ,       -0.210089       ,       -0.210089       ,       -0.20542        ,       -0.150574\r
+7.52092        ,       -0.210089       ,       -0.210089       ,       -0.205619       ,       -0.151106\r
+7.56276        ,       -0.210089       ,       -0.210089       ,       -0.205779       ,       -0.151106\r
+7.6046 ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151106\r
+7.61506        ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151106\r
+7.66736        ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151425\r
+7.70921        ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151681\r
+7.71967        ,       -0.210089       ,       -0.210089       ,       -0.205971       ,       -0.151745\r
+7.78243        ,       -0.210089       ,       -0.210089       ,       -0.206162       ,       -0.152383\r
+7.81381        ,       -0.210089       ,       -0.210089       ,       -0.206258       ,       -0.152702\r
+7.87657        ,       -0.210089       ,       -0.210089       ,       -0.206405       ,       -0.153086\r
+7.91841        ,       -0.210089       ,       -0.210089       ,       -0.206504       ,       -0.153341\r
+7.94979        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.153554\r
+7.97071        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.153696\r
+8.00209        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.153909\r
+8.01255        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.15398\r
+8.05439        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.154192\r
+8.08577        ,       -0.210089       ,       -0.210089       ,       -0.206673       ,       -0.154352\r
+8.159  ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.154725\r
+8.19038        ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.154884\r
+8.20084        ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.154937\r
+8.25314        ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.155292\r
+8.29498        ,       -0.210089       ,       -0.210089       ,       -0.207038       ,       -0.155576\r
+8.34728        ,       -0.210089       ,       -0.210089       ,       -0.207216       ,       -0.155576\r
+8.39958        ,       -0.210089       ,       -0.210089       ,       -0.207322       ,       -0.155576\r
+8.4728 ,       -0.210089       ,       -0.210089       ,       -0.207471       ,       -0.156135\r
+8.48326        ,       -0.210089       ,       -0.210089       ,       -0.207493       ,       -0.156215\r
+8.50418        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.156356\r
+8.57741        ,       -0.210089       ,       -0.210089       ,       -0.207312       ,       -0.156853\r
+8.60879        ,       -0.210089       ,       -0.210089       ,       -0.207216       ,       -0.15696\r
+8.67155        ,       -0.210089       ,       -0.210089       ,       -0.207455       ,       -0.157172\r
+8.69247        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.1573\r
+8.71339        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.157428\r
+8.77615        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.157811\r
+8.79707        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.157917\r
+8.81799        ,       -0.210089       ,       -0.210089       ,       -0.207599       ,       -0.158024\r
+8.90167        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.15845\r
+8.92259        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.158513\r
+9.00628        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.158769\r
+9.0272 ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.158911\r
+9.04812        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159053\r
+9.10042        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159407\r
+9.1318 ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159647\r
+9.15272        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159807\r
+9.1841 ,       -0.210089       ,       -0.210089       ,       -0.207974       ,       -0.160046\r
+9.20502        ,       -0.210089       ,       -0.210089       ,       -0.208054       ,       -0.16011\r
+9.2364 ,       -0.210089       ,       -0.210089       ,       -0.208174       ,       -0.160206\r
+9.2887 ,       -0.210089       ,       -0.210089       ,       -0.208014       ,       -0.160365\r
+9.341  ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.160525\r
+9.39331        ,       -0.210089       ,       -0.210089       ,       -0.208209       ,       -0.160685\r
+9.43515        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161004\r
+9.44561        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161084\r
+9.47699        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161323\r
+9.52929        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161642\r
+9.55021        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161706\r
+9.63389        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161962\r
+9.71757        ,       -0.210089       ,       -0.210089       ,       -0.208963       ,       -0.162194\r
+9.74895        ,       -0.210089       ,       -0.210089       ,       -0.209019       ,       -0.162281\r
+9.81172        ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.162707\r
+9.8431 ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.16292\r
+9.8954 ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163097\r
+9.91632        ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163168\r
+9.93724        ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163239\r
+10     ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163452\r
+EOD\r
+\r
+# -------------------------------------------------------------------------------\r
+unset colorbox\r
+unset grid\r
+unset key\r
+\r
+set style line 1  lt 1  lw 3 lc rgb "black"   ps 0.7 dt 1\r
+set style line 2  lt 2  lw 3 lc rgb "gray25"  ps 0.7 dt 2\r
+set style line 3  lt 4  lw 3 lc rgb "gray50"  ps 0.7 dt 3\r
+set style line 4  lt 10 lw 3 lc rgb "gray75"  ps 0.7\r
+\r
+set style line 11 lt 1  lw 1   lc rgb "dark-spring-green"   ps 1.0\r
+set style line 12 lt 2  lw 1   lc rgb "dark-blue"           ps 1.0\r
+set style line 13 lt 7  lw 1   lc rgb "dark-red"            ps 1.0\r
+set style line 21 lt 6  lw 1   lc rgb "dark-yellow"         ps 1.0\r
+set style line 22 lt 8  lw 1   lc rgb "dark-magenta"        ps 1.0\r
+set style line 23 lt 4  lw 1   lc rgb "coral"               ps 1.0\r
+\r
+# -------------------------------------------------------------------------------\r
+# Read files for plotting                                                         ****CHANGE IF NEEDED***\r
+# -------------------------------------------------------------------------------\r
+fileStepK0 = "./Ehlers_step_load_kappa_0/data-for-gnuplot.sol"\r
+fileStepK1 = "./Ehlers_step_load_kappa_1/data-for-gnuplot.sol"\r
+fileStepK2 = "./Ehlers_step_load_kappa_2/data-for-gnuplot.sol"\r
+fileStepK5 = "./Ehlers_step_load_kappa_5/data-for-gnuplot.sol"\r
+fileIncrK0 = "./Ehlers_increase_load_kappa_0/data-for-gnuplot.sol"\r
+\r
+# ---------  VERIFICATION EHLERS FIG 1 -------------------------------------------\r
+set term epslatex size 9cm,9cm color colortext standalone\r
+set key box out vert right above box width -23.0 height 1.2\r
+\r
+set xrange [0:10]\r
+set yrange [-0.35:0]\r
+\r
+set xlabel 'time [s]'\r
+set ylabel 'vertical displacement [m]'\r
+\r
+set output 'Ehlers-Fig1.tex'\r
+plot '$dataEhlers1'  using 1:2          with lines  ls 1  title 'Ehlers \& Eipper (1999),             step loading', \\r
+     '$dataEhlers1'  using 1:3          with lines  ls 2  title                       'load increasing', \\r
+     '$dataEhlers1'  using 1:4          with lines  ls 3  title                  'theoretical boundary', \\r
+     fileStepK0      using 1:7 every 30  with points ls 23 title 'deal.II poroelasticity, step loading', \\r
+     fileIncrK0      using 1:7 every 30  with points ls 12 title                           'load increasing'\r
+\r
+\r
+# ---------  VERIFICATION EHLERS FIG 2 -------------------------------------------\r
+set term epslatex size 9.2cm,10cm color colortext  standalone\r
+set key width -9.0\r
+\r
+set xrange [0:10]\r
+set yrange [-0.25:0]\r
+\r
+set xlabel 'time [s]'\r
+set ylabel 'vertical displacement [m]'\r
+\r
+set output 'Ehlers-Fig2-displ.tex'\r
+plot '$dataEhlers2'  using 1:2          with lines  ls 1  title 'Ehlers \& Eipper (1999), $\kappa = 0$' , \\r
+     '$dataEhlers2'  using 1:3          with lines  ls 2  title '$\kappa = 1$' , \\r
+     '$dataEhlers2'  using 1:4          with lines  ls 3  title '$\kappa = 2$' , \\r
+     '$dataEhlers2'  using 1:5          with lines  ls 4  title '$\kappa = 5$' , \\r
+     fileStepK0      using 1:7 every 30  with points ls 23 title 'deal.II poroelasticity, $\kappa = 0$', \\r
+     fileStepK1      using 1:7 every 30  with points ls 22 title '$\kappa = 1$', \\r
+     fileStepK2      using 1:7 every 30  with points ls 11 title '$\kappa = 2$', \\r
+     fileStepK5      using 1:7 every 30  with points ls 21 title '$\kappa = 5$'\r
+\r
+\r
+set term epslatex size 8.1cm,8.4cm color colortext standalone\r
+\r
+set xrange [0:10]\r
+set yrange [0:8]\r
+\r
+set ylabel 'pore pressure [MPa]'\r
+\r
+set output 'Ehlers-Fig2-pressure.tex'\r
+plot fileStepK0   using 1:($12)/1000000  with lines ls 21 title 'deal.II poroelasticity, $\kappa = 0$', \\r
+     fileStepK1   using 1:($12)/1000000  with lines ls 22 title '$\kappa = 1$', \\r
+     fileStepK2   using 1:($12)/1000000  with lines ls 23 title '$\kappa = 2$', \\r
+     fileStepK5   using 1:($12)/1000000  with lines ls 11 title '$\kappa = 5$'\r
+\r
+\r
+# ---------  VERIFICATION EHLERS CONSOLIDATION CURVES  -------------------------------------------\r
+#Final specimen shortening                                                                         ****CHANGE IF NEEDED***\r
+Umax = 2.087773e-01\r
+\r
+set term epslatex size 8.6cm,8.4cm color colortext standalone\r
+\r
+set logscale x\r
+set xrange [0.001:10]\r
+set yrange [1:0]\r
+\r
+set xlabel 'Time [s]'\r
+set ylabel 'consolidation ratio [-]'\r
+\r
+set output 'Ehlers-consolidation.tex'\r
+plot fileStepK0  using ($1):(-($7)/Umax) with lines ls 21 title 'deal.II poroelasticity, $\kappa = 0$', \\r
+     fileStepK1  using ($1):(-($7)/Umax) with lines ls 22 title '$\kappa = 1$', \\r
+     fileStepK2  using ($1):(-($7)/Umax) with lines ls 23 title '$\kappa = 2$', \\r
+     fileStepK5  using ($1):(-($7)/Umax) with lines ls 11 title '$\kappa = 5$'\r
diff --git a/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/PLOT-Verification-Ehlers.gp b/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/PLOT-Verification-Ehlers.gp
new file mode 100755 (executable)
index 0000000..4e01ff0
--- /dev/null
@@ -0,0 +1,620 @@
+\r
+# GNUPLOT file to plot verification examples (Figs 1 & 2) of Ehlers and Eippers (1999)\r
+\r
+#To see color names:\r
+# >> show palette colornames\r
+\r
+#To see line style, line width, etc.:\r
+# >> set terminal wxt enhanced dashed\r
+# >> test\r
+clear\r
+reset\r
+set datafile separator ","\r
+set encoding utf8\r
+\r
+# -------------------------------------------------------------------------------\r
+# DATA EXTRACTED WITH ENGAUGE FROM EHLERS & EIPPERS PAPER COPIED HERE\r
+# -------------------------------------------------------------------------------\r
+$dataEhlers1 << EOD\r
+#x,step load,load increase,theor bound\r
+0.0,0.0,0.0,-0.33\r
+0.0114476,-0.023822,-0.023822,-0.33\r
+0.0332767,-0.0366492,-0.0393381,-0.33\r
+0.0333608,-0.0366742,-0.0393979,-0.33\r
+0.0765419,-0.0494764,-0.0549133,-0.33\r
+0.0767103,-0.049521,-0.0549738,-0.33\r
+0.119765,-0.0609293,-0.0670155,-0.33\r
+0.130764,-0.0632646,-0.0700916,-0.33\r
+0.162918,-0.0700916,-0.0813088,-0.33\r
+0.174099,-0.0717567,-0.0852094,-0.33\r
+0.205987,-0.0765052,-0.0941279,-0.33\r
+0.228153,-0.0799625,-0.100327,-0.33\r
+0.238296,-0.0815445,-0.103164,-0.33\r
+0.270576,-0.0856675,-0.112192,-0.33\r
+0.282206,-0.0873173,-0.115445,-0.33\r
+0.302871,-0.0902487,-0.121051,-0.33\r
+0.336246,-0.095925,-0.130105,-0.33\r
+0.356742,-0.099411,-0.136826,-0.33\r
+0.379553,-0.102325,-0.144306,-0.33\r
+0.389023,-0.103534,-0.146516,-0.33\r
+0.432035,-0.108115,-0.156556,-0.33\r
+0.444325,-0.109685,-0.159424,-0.33\r
+0.464316,-0.112238,-0.16409,-0.33\r
+0.496597,-0.116361,-0.171624,-0.33\r
+0.509096,-0.117693,-0.174542,-0.33\r
+0.539609,-0.120942,-0.183076,-0.33\r
+0.561172,-0.125065,-0.189106,-0.33\r
+0.56315,-0.125255,-0.18966,-0.33\r
+0.604171,-0.129188,-0.200788,-0.33\r
+0.617189,-0.130575,-0.204319,-0.33\r
+0.647183,-0.13377,-0.211109,-0.33\r
+0.668704,-0.136518,-0.215981,-0.33\r
+0.681947,-0.137788,-0.218979,-0.33\r
+0.711702,-0.140641,-0.225924,-0.33\r
+0.746719,-0.143999,-0.234097,-0.33\r
+0.754701,-0.144764,-0.235848,-0.33\r
+0.808404,-0.148429,-0.247628,-0.33\r
+0.811462,-0.148709,-0.248298,-0.33\r
+0.883641,-0.155301,-0.262318,-0.33\r
+0.886938,-0.155554,-0.262958,-0.33\r
+0.937358,-0.159424,-0.269612,-0.33\r
+0.980357,-0.163547,-0.275286,-0.33\r
+0.994554,-0.164355,-0.27716,-0.33\r
+1.03757,-0.166802,-0.281741,-0.33\r
+1.04478,-0.167212,-0.282068,-0.33\r
+1.09848,-0.170877,-0.284503,-0.33\r
+1.1629,-0.174542,-0.287425,-0.33\r
+1.2093,-0.177181,-0.289529,-0.33\r
+1.22732,-0.178207,-0.290189,-0.33\r
+1.28441,-0.181454,-0.292277,-0.33\r
+1.29174,-0.181872,-0.292427,-0.33\r
+1.36687,-0.185079,-0.293955,-0.33\r
+1.44201,-0.188743,-0.295483,-0.33\r
+1.50963,-0.191218,-0.296859,-0.33\r
+1.51712,-0.191492,-0.296965,-0.33\r
+1.60296,-0.194699,-0.298188,-0.33\r
+1.68878,-0.19699,-0.29941,-0.33\r
+1.77459,-0.19928,-0.300632,-0.33\r
+1.86348,-0.200968,-0.301898,-0.33\r
+1.87111,-0.201113,-0.301979,-0.33\r
+1.96763,-0.202945,-0.30301,-0.33\r
+2.07485,-0.204319,-0.304156,-0.33\r
+2.17136,-0.205694,-0.305187,-0.33\r
+2.20657,-0.206028,-0.305563,-0.33\r
+2.26785,-0.20661,-0.30607,-0.33\r
+2.37504,-0.207068,-0.306956,-0.33\r
+2.47154,-0.207984,-0.307754,-0.33\r
+2.53892,-0.208272,-0.308312,-0.33\r
+2.57873,-0.208442,-0.308612,-0.33\r
+2.68593,-0.208901,-0.30942,-0.33\r
+2.79312,-0.209359,-0.310228,-0.33\r
+2.88958,-0.209359,-0.310956,-0.33\r
+2.90342,-0.209359,-0.31106,-0.33\r
+2.99676,-0.209359,-0.311544,-0.33\r
+3.10396,-0.209817,-0.312099,-0.33\r
+3.21116,-0.210275,-0.312654,-0.33\r
+3.25717,-0.210275,-0.312893,-0.33\r
+3.31834,-0.210275,-0.313138,-0.33\r
+3.42552,-0.210275,-0.313567,-0.33\r
+3.5327,-0.210275,-0.313997,-0.33\r
+3.60019,-0.210275,-0.314267,-0.33\r
+3.63988,-0.210275,-0.314417,-0.33\r
+3.74706,-0.210275,-0.314821,-0.33\r
+3.85424,-0.210275,-0.315225,-0.33\r
+3.96142,-0.210275,-0.315629,-0.33\r
+3.96465,-0.210275,-0.315641,-0.33\r
+4.0686,-0.210275,-0.315911,-0.33\r
+4.17579,-0.210275,-0.316188,-0.33\r
+4.28297,-0.210275,-0.316466,-0.33\r
+4.31838,-0.210275,-0.316558,-0.33\r
+4.39015,-0.210275,-0.316738,-0.33\r
+4.49733,-0.210275,-0.317007,-0.33\r
+4.60451,-0.210275,-0.317277,-0.33\r
+4.68282,-0.210275,-0.317474,-0.33\r
+4.71169,-0.210275,-0.317586,-0.33\r
+4.81887,-0.210275,-0.318002,-0.33\r
+4.92605,-0.210275,-0.318419,-0.33\r
+5.03323,-0.210275,-0.318835,-0.33\r
+5.03656,-0.210275,-0.318848,-0.33\r
+5.14042,-0.210275,-0.318983,-0.33\r
+5.2476,-0.210275,-0.319121,-0.33\r
+5.35478,-0.210275,-0.31926,-0.33\r
+5.39027,-0.210275,-0.319306,-0.33\r
+5.46196,-0.210275,-0.319396,-0.33\r
+5.56914,-0.210275,-0.319531,-0.33\r
+5.67632,-0.210275,-0.319666,-0.33\r
+5.7547,-0.210275,-0.319764,-0.33\r
+5.7835,-0.210275,-0.319803,-0.33\r
+5.89068,-0.210275,-0.319946,-0.33\r
+5.99786,-0.210275,-0.320089,-0.33\r
+6.09769,-0.210275,-0.320223,-0.33\r
+6.10505,-0.210275,-0.320232,-0.33\r
+6.21223,-0.210275,-0.320366,-0.33\r
+6.31941,-0.210275,-0.320501,-0.33\r
+6.42659,-0.210275,-0.320636,-0.33\r
+6.46212,-0.210275,-0.320681,-0.33\r
+6.53377,-0.210275,-0.320866,-0.33\r
+6.64095,-0.210275,-0.321144,-0.33\r
+6.74813,-0.210275,-0.321421,-0.33\r
+6.81585,-0.210275,-0.321597,-0.33\r
+6.85531,-0.210275,-0.321648,-0.33\r
+6.9625,-0.210275,-0.321787,-0.33\r
+7.06968,-0.210275,-0.321926,-0.33\r
+7.16956,-0.210275,-0.322055,-0.33\r
+7.17686,-0.210275,-0.322055,-0.33\r
+7.28404,-0.210275,-0.322055,-0.33\r
+7.39122,-0.210275,-0.322055,-0.33\r
+7.4984,-0.210275,-0.322055,-0.33\r
+7.52326,-0.210275,-0.322055,-0.33\r
+7.60558,-0.210275,-0.322158,-0.33\r
+7.71276,-0.210275,-0.322293,-0.33\r
+7.81994,-0.210275,-0.322428,-0.33\r
+7.88769,-0.210275,-0.322513,-0.33\r
+7.92713,-0.210275,-0.322563,-0.33\r
+8.03431,-0.210275,-0.322697,-0.33\r
+8.14149,-0.210275,-0.322832,-0.33\r
+8.24867,-0.210275,-0.322967,-0.33\r
+8.25212,-0.210275,-0.322971,-0.33\r
+8.35585,-0.210275,-0.323106,-0.33\r
+8.46303,-0.210275,-0.323244,-0.33\r
+8.57021,-0.210275,-0.323383,-0.33\r
+8.60583,-0.210275,-0.323429,-0.33\r
+8.67739,-0.210275,-0.323429,-0.33\r
+8.78457,-0.210275,-0.323429,-0.33\r
+8.89176,-0.210275,-0.323429,-0.33\r
+8.95953,-0.210275,-0.323429,-0.33\r
+8.99894,-0.210275,-0.32348,-0.33\r
+9.10612,-0.210275,-0.323619,-0.33\r
+9.2133,-0.210275,-0.323758,-0.33\r
+9.31324,-0.210275,-0.323887,-0.33\r
+9.32048,-0.210275,-0.323887,-0.33\r
+9.42766,-0.210275,-0.323887,-0.33\r
+9.53484,-0.210275,-0.323887,-0.33\r
+9.64202,-0.210275,-0.323887,-0.33\r
+9.67766,-0.210275,-0.323887,-0.33\r
+9.7492,-0.210275,-0.323986,-0.33\r
+9.85639,-0.210275,-0.324134,-0.33\r
+9.96357,-0.210275,-0.324282,-0.33\r
+10.0099,-0.210275,-0.324346,-0.33\r
+EOD\r
+\r
+$dataEhlers2 << EOD\r
+#x,kappa_0,kappa_1,kappa_2,kappa_5\r
+0      ,       0       ,       0       ,       0       ,       0\r
+0.0104603      ,       -0.00766284     ,       -0.00063857     ,       -0.00510856     ,       -0.008066\r
+0.0313808      ,       -0.0223499      ,       -0.00766284     ,       -0.0146871      ,       -0.01062069\r
+0.041841       ,       -0.0269796      ,       -0.011175       ,       -0.0194764      ,       -0.01541\r
+0.0523013      ,       -0.0316092      ,       -0.0136494      ,       -0.0221371      ,       -0.0167935\r
+0.0732218      ,       -0.0427842      ,       -0.0185983      ,       -0.0274585      ,       -0.0195607\r
+0.083682       ,       -0.0456577      ,       -0.0210728      ,       -0.0322478      ,       -0.0203908\r
+0.104603       ,       -0.0514049      ,       -0.0280971      ,       -0.0343231      ,       -0.0220511\r
+0.115063       ,       -0.0541188      ,       -0.0316092      ,       -0.0353608      ,       -0.0228812\r
+0.125523       ,       -0.0568327      ,       -0.0363186      ,       -0.0363985      ,       -0.0237114\r
+0.146444       ,       -0.0600255      ,       -0.0457375      ,       -0.0402299      ,       -0.0254674\r
+0.156904       ,       -0.0632184      ,       -0.050447       ,       -0.0415868      ,       -0.0263455\r
+0.167364       ,       -0.0673691      ,       -0.0434227      ,       -0.0429438      ,       -0.0272235\r
+0.177824       ,       -0.0687527      ,       -0.0539591      ,       -0.0443008      ,       -0.0280536\r
+0.188285       ,       -0.0701362      ,       -0.0556354      ,       -0.0456577      ,       -0.0288838\r
+0.198745       ,       -0.0715198      ,       -0.0573116      ,       -0.0474138      ,       -0.0297139\r
+0.209205       ,       -0.0747126      ,       -0.0589879      ,       -0.0491699      ,       -0.0305441\r
+0.219665       ,       -0.0761494      ,       -0.0606641      ,       -0.0498883      ,       -0.0313742\r
+0.230126       ,       -0.0775862      ,       -0.0619413      ,       -0.0506066      ,       -0.031917\r
+0.251046       ,       -0.0807791      ,       -0.0644955      ,       -0.0520434      ,       -0.0330026\r
+0.261506       ,       -0.0839719      ,       -0.066092       ,       -0.0530013      ,       -0.0335453\r
+0.282427       ,       -0.0865262      ,       -0.0692848      ,       -0.054917       ,       -0.0346309\r
+0.292887       ,       -0.0878033      ,       -0.0708812      ,       -0.0559547      ,       -0.0351737\r
+0.303347       ,       -0.0909962      ,       -0.0723712      ,       -0.0569923      ,       -0.0357165\r
+0.324268       ,       -0.0929119      ,       -0.0753512      ,       -0.0590677      ,       -0.036802\r
+0.334728       ,       -0.0938697      ,       -0.0762559      ,       -0.0603448      ,       -0.0373129\r
+0.345188       ,       -0.0954662      ,       -0.0771605      ,       -0.061622       ,       -0.0378238\r
+0.355649       ,       -0.0970626      ,       -0.0780651      ,       -0.0627927      ,       -0.0383346\r
+0.376569       ,       -0.100255       ,       -0.0798744      ,       -0.0651341      ,       -0.0393563\r
+0.387029       ,       -0.101852       ,       -0.0807791      ,       -0.0657727      ,       -0.0399239\r
+0.39749        ,       -0.103448       ,       -0.0818966      ,       -0.0664112      ,       -0.0404916\r
+0.41841        ,       -0.106322       ,       -0.0841315      ,       -0.0676884      ,       -0.0416268\r
+0.42887        ,       -0.107918       ,       -0.085249       ,       -0.0684068      ,       -0.0421944\r
+0.439331       ,       -0.109515       ,       -0.0863133      ,       -0.0691252      ,       -0.042762\r
+0.460251       ,       -0.11143        ,       -0.0884419      ,       -0.0705619      ,       -0.0438973\r
+0.470711       ,       -0.112388       ,       -0.0895062      ,       -0.0719455      ,       -0.0444649\r
+0.491632       ,       -0.115581       ,       -0.0916347      ,       -0.0747126      ,       -0.0453163\r
+0.523013       ,       -0.118774       ,       -0.0945083      ,       -0.0763889      ,       -0.0465934\r
+0.533473       ,       -0.119732       ,       -0.0954662      ,       -0.0769476      ,       -0.0470192\r
+0.554393       ,       -0.121648       ,       -0.0975947      ,       -0.0785441      ,       -0.047977\r
+0.575314       ,       -0.12484        ,       -0.0997233      ,       -0.0801405      ,       -0.0489349\r
+0.596234       ,       -0.127182       ,       -0.101852       ,       -0.0814176      ,       -0.0498927\r
+0.606695       ,       -0.128352       ,       -0.102682       ,       -0.0820562      ,       -0.050212\r
+0.617155       ,       -0.12947        ,       -0.103512       ,       -0.0826948      ,       -0.0505313\r
+0.648536       ,       -0.132822       ,       -0.106003       ,       -0.0842273      ,       -0.0514891\r
+0.658996       ,       -0.13394        ,       -0.106778       ,       -0.0847382      ,       -0.0518084\r
+0.669456       ,       -0.135057       ,       -0.107553       ,       -0.085249       ,       -0.0523193\r
+0.690377       ,       -0.137292       ,       -0.109104       ,       -0.0873244      ,       -0.053341\r
+0.711297       ,       -0.139421       ,       -0.110655       ,       -0.0893997      ,       -0.0543627\r
+0.721757       ,       -0.140485       ,       -0.11143        ,       -0.0900383      ,       -0.0547529\r
+0.753138       ,       -0.142401       ,       -0.113825       ,       -0.091954       ,       -0.0559237\r
+0.763598       ,       -0.14304        ,       -0.114623       ,       -0.0925926      ,       -0.0563139\r
+0.784519       ,       -0.145168       ,       -0.11622        ,       -0.0938697      ,       -0.0570944\r
+0.794979       ,       -0.146232       ,       -0.116858       ,       -0.0945083      ,       -0.0574846\r
+0.805439       ,       -0.147669       ,       -0.117497       ,       -0.0951469      ,       -0.0578748\r
+0.8159 ,       -0.149106       ,       -0.118135       ,       -0.0955726      ,       -0.0582296\r
+0.857741       ,       -0.15198        ,       -0.12069        ,       -0.0972754      ,       -0.0596486\r
+0.868201       ,       -0.152778       ,       -0.121328       ,       -0.0977011      ,       -0.0600034\r
+0.899582       ,       -0.155172       ,       -0.123819       ,       -0.0998563      ,       -0.0610677\r
+0.910042       ,       -0.15613        ,       -0.124649       ,       -0.100575       ,       -0.061387\r
+0.920502       ,       -0.157088       ,       -0.125479       ,       -0.101277       ,       -0.0617063\r
+0.930962       ,       -0.158046       ,       -0.126153       ,       -0.10198        ,       -0.0620255\r
+0.962343       ,       -0.160201       ,       -0.128175       ,       -0.104087       ,       -0.0629834\r
+0.972803       ,       -0.16092        ,       -0.128849       ,       -0.104534       ,       -0.063183\r
+1.00418        ,       -0.164112       ,       -0.130871       ,       -0.105875       ,       -0.0637816\r
+1.01464        ,       -0.164687       ,       -0.131545       ,       -0.106322       ,       -0.0639812\r
+1.04603        ,       -0.166411       ,       -0.133653       ,       -0.107759       ,       -0.0645798\r
+1.05649        ,       -0.166986       ,       -0.134355       ,       -0.108238       ,       -0.0652184\r
+1.06695        ,       -0.167704       ,       -0.135057       ,       -0.108716       ,       -0.065857\r
+1.07741        ,       -0.168423       ,       -0.1356 ,       -0.109195       ,       -0.0661762\r
+1.09833        ,       -0.16986        ,       -0.136686       ,       -0.110217       ,       -0.0668148\r
+1.12971        ,       -0.172015       ,       -0.138314       ,       -0.11175        ,       -0.0677727\r
+1.14017        ,       -0.172733       ,       -0.138857       ,       -0.112324       ,       -0.0680565\r
+1.17155        ,       -0.174457       ,       -0.140485       ,       -0.114049       ,       -0.0689079\r
+1.18201        ,       -0.175032       ,       -0.141078       ,       -0.114623       ,       -0.0691917\r
+1.19247        ,       -0.175607       ,       -0.141671       ,       -0.115182       ,       -0.0694755\r
+1.22385        ,       -0.177762       ,       -0.14345        ,       -0.116858       ,       -0.0703269\r
+1.23431        ,       -0.17848        ,       -0.144043       ,       -0.117417       ,       -0.0706143\r
+1.24477        ,       -0.178991       ,       -0.144636       ,       -0.117976       ,       -0.0709017\r
+1.26569        ,       -0.180013       ,       -0.145849       ,       -0.119093       ,       -0.0714764\r
+1.28661        ,       -0.181034       ,       -0.147063       ,       -0.120016       ,       -0.0720511\r
+1.32845        ,       -0.18295        ,       -0.149489       ,       -0.12186        ,       -0.0732005\r
+1.34937        ,       -0.183908       ,       -0.150702       ,       -0.122783       ,       -0.0736566\r
+1.35983        ,       -0.184355       ,       -0.151181       ,       -0.123244       ,       -0.0738847\r
+1.40167        ,       -0.186143       ,       -0.153097       ,       -0.124521       ,       -0.0747969\r
+1.41213        ,       -0.186622       ,       -0.153576       ,       -0.12484        ,       -0.0750706\r
+1.43305        ,       -0.18758        ,       -0.154563       ,       -0.125479       ,       -0.075618\r
+1.46444        ,       -0.189017       ,       -0.156043       ,       -0.126756       ,       -0.076439\r
+1.4749 ,       -0.189389       ,       -0.156537       ,       -0.127182       ,       -0.0767126\r
+1.49582        ,       -0.190134       ,       -0.157524       ,       -0.128033       ,       -0.07726\r
+1.5272 ,       -0.191252       ,       -0.159004       ,       -0.129523       ,       -0.078081\r
+1.54812        ,       -0.191981       ,       -0.159962       ,       -0.130517       ,       -0.0786284\r
+1.58996        ,       -0.193441       ,       -0.161877       ,       -0.132503       ,       -0.079723\r
+1.60042        ,       -0.193806       ,       -0.162356       ,       -0.132886       ,       -0.0799967\r
+1.61088        ,       -0.19408        ,       -0.162835       ,       -0.133269       ,       -0.0802704\r
+1.62134        ,       -0.194353       ,       -0.163204       ,       -0.133653       ,       -0.0805441\r
+1.67364        ,       -0.195722       ,       -0.165046       ,       -0.135568       ,       -0.0819124\r
+1.69456        ,       -0.196269       ,       -0.165782       ,       -0.136335       ,       -0.0824598\r
+1.74686        ,       -0.197637       ,       -0.167625       ,       -0.137931       ,       -0.0840562\r
+1.76778        ,       -0.198185       ,       -0.168405       ,       -0.13857        ,       -0.0843755\r
+1.82008        ,       -0.199553       ,       -0.170356       ,       -0.140166       ,       -0.0851737\r
+1.83054        ,       -0.199753       ,       -0.170746       ,       -0.140485       ,       -0.0853333\r
+1.841  ,       -0.199952       ,       -0.171137       ,       -0.140805       ,       -0.085493\r
+1.90377        ,       -0.201149       ,       -0.173326       ,       -0.143069       ,       -0.0864508\r
+1.91423        ,       -0.201327       ,       -0.173691       ,       -0.143446       ,       -0.0866105\r
+1.95607        ,       -0.202036       ,       -0.175151       ,       -0.144955       ,       -0.0877052\r
+1.98745        ,       -0.202568       ,       -0.176245       ,       -0.146009       ,       -0.0885262\r
+1.99791        ,       -0.202746       ,       -0.176564       ,       -0.14636        ,       -0.0887542\r
+2.06067        ,       -0.203597       ,       -0.17848        ,       -0.148467       ,       -0.0901226\r
+2.08159        ,       -0.203881       ,       -0.179119       ,       -0.148946       ,       -0.0905217\r
+2.09205        ,       -0.204023       ,       -0.179395       ,       -0.149186       ,       -0.0907213\r
+2.14435        ,       -0.204555       ,       -0.180779       ,       -0.150383       ,       -0.091719\r
+2.18619        ,       -0.204981       ,       -0.181886       ,       -0.15166        ,       -0.0925705\r
+2.20711        ,       -0.205194       ,       -0.182439       ,       -0.152299       ,       -0.0929962\r
+2.21757        ,       -0.2053 ,       -0.182716       ,       -0.152618       ,       -0.0932356\r
+2.23849        ,       -0.205513       ,       -0.183269       ,       -0.153328       ,       -0.0937146\r
+2.28033        ,       -0.205939       ,       -0.184334       ,       -0.154747       ,       -0.0946724\r
+2.29079        ,       -0.206003       ,       -0.1846 ,       -0.155101       ,       -0.0949119\r
+2.31172        ,       -0.20613        ,       -0.185132       ,       -0.155811       ,       -0.0951513\r
+2.36402        ,       -0.20645        ,       -0.186462       ,       -0.156951       ,       -0.09575\r
+2.37448        ,       -0.206513       ,       -0.186682       ,       -0.157179       ,       -0.0958697\r
+2.38494        ,       -0.206577       ,       -0.186901       ,       -0.157407       ,       -0.0960978\r
+2.4477 ,       -0.207003       ,       -0.188218       ,       -0.159049       ,       -0.0974662\r
+2.45816        ,       -0.207074       ,       -0.188438       ,       -0.159323       ,       -0.0976657\r
+2.47908        ,       -0.207216       ,       -0.188877       ,       -0.159802       ,       -0.0980648\r
+2.53138        ,       -0.207535       ,       -0.189974       ,       -0.160999       ,       -0.0990626\r
+2.54184        ,       -0.207599       ,       -0.190166       ,       -0.161239       ,       -0.0992621\r
+2.58368        ,       -0.207854       ,       -0.190932       ,       -0.162197       ,       -0.1000603\r
+2.61506        ,       -0.207961       ,       -0.191507       ,       -0.162915       ,       -0.100659\r
+2.62552        ,       -0.207996       ,       -0.191699       ,       -0.163155       ,       -0.1007787\r
+2.63598        ,       -0.208032       ,       -0.19189        ,       -0.163442       ,       -0.1008985\r
+2.67782        ,       -0.208174       ,       -0.192562       ,       -0.164591       ,       -0.1013774\r
+2.69874        ,       -0.208245       ,       -0.192898       ,       -0.165166       ,       -0.1016169\r
+2.73013        ,       -0.208351       ,       -0.193403       ,       -0.166028       ,       -0.102301\r
+2.77197        ,       -0.208493       ,       -0.194075       ,       -0.166596       ,       -0.103213\r
+2.82427        ,       -0.208653       ,       -0.194915       ,       -0.167305       ,       -0.104011\r
+2.83473        ,       -0.208685       ,       -0.195083       ,       -0.167625       ,       -0.104171\r
+2.85565        ,       -0.208748       ,       -0.195427       ,       -0.168263       ,       -0.10449\r
+2.87657        ,       -0.208812       ,       -0.195771       ,       -0.168902       ,       -0.104874\r
+2.89749        ,       -0.208812       ,       -0.196115       ,       -0.16954        ,       -0.105257\r
+2.90795        ,       -0.208812       ,       -0.196286       ,       -0.1697 ,       -0.105448\r
+2.97071        ,       -0.208812       ,       -0.197318       ,       -0.170658       ,       -0.106167\r
+2.98117        ,       -0.208812       ,       -0.197436       ,       -0.170817       ,       -0.106286\r
+2.99163        ,       -0.208844       ,       -0.197553       ,       -0.17103        ,       -0.106406\r
+3.07531        ,       -0.2091 ,       -0.198494       ,       -0.172733       ,       -0.107758\r
+3.08577        ,       -0.209132       ,       -0.198612       ,       -0.172903       ,       -0.107927\r
+3.16946        ,       -0.209132       ,       -0.199553       ,       -0.174266       ,       -0.10928\r
+3.19038        ,       -0.209132       ,       -0.199727       ,       -0.174606       ,       -0.109564\r
+3.23222        ,       -0.209259       ,       -0.200075       ,       -0.175287       ,       -0.110131\r
+3.2636 ,       -0.209355       ,       -0.200337       ,       -0.175803       ,       -0.110557\r
+3.28452        ,       -0.209419       ,       -0.200511       ,       -0.176147       ,       -0.110912\r
+3.29498        ,       -0.209451       ,       -0.200602       ,       -0.176319       ,       -0.111089\r
+3.35774        ,       -0.209451       ,       -0.201149       ,       -0.17735        ,       -0.112153\r
+3.3682 ,       -0.209451       ,       -0.201241       ,       -0.177522       ,       -0.112295\r
+3.38912        ,       -0.209451       ,       -0.201423       ,       -0.177877       ,       -0.112579\r
+3.45188        ,       -0.209451       ,       -0.20197        ,       -0.178941       ,       -0.11343\r
+3.46234        ,       -0.209451       ,       -0.202062       ,       -0.179119       ,       -0.113537\r
+3.49372        ,       -0.209451       ,       -0.202335       ,       -0.179544       ,       -0.113856\r
+3.50418        ,       -0.209451       ,       -0.202427       ,       -0.179686       ,       -0.113963\r
+3.54603        ,       -0.209451       ,       -0.2027 ,       -0.180254       ,       -0.114388\r
+3.55649        ,       -0.209451       ,       -0.202769       ,       -0.180396       ,       -0.114548\r
+3.59833        ,       -0.209451       ,       -0.203042       ,       -0.181034       ,       -0.115186\r
+3.62971        ,       -0.209451       ,       -0.203248       ,       -0.181513       ,       -0.115665\r
+3.65063        ,       -0.209451       ,       -0.203384       ,       -0.181833       ,       -0.115956\r
+3.70293        ,       -0.209451       ,       -0.203704       ,       -0.182631       ,       -0.116681\r
+3.72385        ,       -0.209451       ,       -0.203831       ,       -0.18295        ,       -0.116972\r
+3.74477        ,       -0.209451       ,       -0.203959       ,       -0.183224       ,       -0.117262\r
+3.80753        ,       -0.209451       ,       -0.204342       ,       -0.184045       ,       -0.1179\r
+3.83891        ,       -0.209451       ,       -0.204534       ,       -0.184455       ,       -0.11822\r
+3.85983        ,       -0.209451       ,       -0.204662       ,       -0.184729       ,       -0.118539\r
+3.87029        ,       -0.209451       ,       -0.204715       ,       -0.184866       ,       -0.118699\r
+3.88075        ,       -0.209451       ,       -0.204768       ,       -0.185008       ,       -0.118858\r
+3.91213        ,       -0.209451       ,       -0.204928       ,       -0.185434       ,       -0.119217\r
+3.96444        ,       -0.209451       ,       -0.205194       ,       -0.186143       ,       -0.119816\r
+3.98536        ,       -0.209451       ,       -0.2053 ,       -0.186271       ,       -0.120056\r
+4.01674        ,       -0.209451       ,       -0.205431       ,       -0.186462       ,       -0.120415\r
+4.04812        ,       -0.209642       ,       -0.205561       ,       -0.186654       ,       -0.120774\r
+4.06904        ,       -0.20977        ,       -0.205648       ,       -0.186782       ,       -0.121093\r
+4.12134        ,       -0.210089       ,       -0.205866       ,       -0.187527       ,       -0.121891\r
+4.1318 ,       -0.210089       ,       -0.20591        ,       -0.187676       ,       -0.122051\r
+4.21548        ,       -0.210089       ,       -0.206258       ,       -0.188868       ,       -0.122903\r
+4.22594        ,       -0.210089       ,       -0.206316       ,       -0.189017       ,       -0.123009\r
+4.32008        ,       -0.210089       ,       -0.206838       ,       -0.189974       ,       -0.124286\r
+4.33054        ,       -0.210089       ,       -0.206897       ,       -0.190081       ,       -0.124406\r
+4.38285        ,       -0.210089       ,       -0.207042       ,       -0.190613       ,       -0.125004\r
+4.40377        ,       -0.210089       ,       -0.2071 ,       -0.190741       ,       -0.125244\r
+4.43515        ,       -0.210089       ,       -0.207187       ,       -0.190932       ,       -0.125531\r
+4.48745        ,       -0.210089       ,       -0.207332       ,       -0.191252       ,       -0.12601\r
+4.50837        ,       -0.210089       ,       -0.20739        ,       -0.191464       ,       -0.126202\r
+4.53975        ,       -0.210089       ,       -0.207477       ,       -0.191784       ,       -0.126521\r
+4.56067        ,       -0.210089       ,       -0.207535       ,       -0.191997       ,       -0.126734\r
+4.58159        ,       -0.210089       ,       -0.207588       ,       -0.192209       ,       -0.126947\r
+4.63389        ,       -0.210089       ,       -0.207721       ,       -0.192701       ,       -0.127479\r
+4.64435        ,       -0.210089       ,       -0.207748       ,       -0.192799       ,       -0.127639\r
+4.67573        ,       -0.210089       ,       -0.207828       ,       -0.193094       ,       -0.128117\r
+4.68619        ,       -0.210089       ,       -0.207854       ,       -0.193192       ,       -0.128224\r
+4.71757        ,       -0.210089       ,       -0.207896       ,       -0.193487       ,       -0.128543\r
+4.74895        ,       -0.210089       ,       -0.207938       ,       -0.193712       ,       -0.128862\r
+4.76987        ,       -0.210089       ,       -0.207965       ,       -0.193862       ,       -0.129075\r
+4.85356        ,       -0.210089       ,       -0.208077       ,       -0.194463       ,       -0.130097\r
+4.87448        ,       -0.210089       ,       -0.208104       ,       -0.194613       ,       -0.130352\r
+4.8954 ,       -0.210089       ,       -0.208132       ,       -0.194764       ,       -0.130416\r
+4.92678        ,       -0.210089       ,       -0.208174       ,       -0.194977       ,       -0.130512\r
+4.95816        ,       -0.210089       ,       -0.208254       ,       -0.195189       ,       -0.130608\r
+4.97908        ,       -0.210089       ,       -0.208307       ,       -0.195331       ,       -0.130672\r
+4.98954        ,       -0.210089       ,       -0.208333       ,       -0.195402       ,       -0.130814\r
+5.0523 ,       -0.210089       ,       -0.208493       ,       -0.195785       ,       -0.131665\r
+5.07322        ,       -0.210089       ,       -0.208551       ,       -0.195913       ,       -0.131949\r
+5.09414        ,       -0.210089       ,       -0.208609       ,       -0.196041       ,       -0.132162\r
+5.12552        ,       -0.210089       ,       -0.208696       ,       -0.196315       ,       -0.132481\r
+5.16736        ,       -0.210089       ,       -0.208812       ,       -0.196679       ,       -0.132907\r
+5.23013        ,       -0.210089       ,       -0.208986       ,       -0.197227       ,       -0.133332\r
+5.24059        ,       -0.210089       ,       -0.209015       ,       -0.197318       ,       -0.133403\r
+5.26151        ,       -0.210089       ,       -0.209073       ,       -0.19746        ,       -0.133545\r
+5.28243        ,       -0.210089       ,       -0.209132       ,       -0.197602       ,       -0.133737\r
+5.32427        ,       -0.210089       ,       -0.209132       ,       -0.197886       ,       -0.13412\r
+5.33473        ,       -0.210089       ,       -0.209132       ,       -0.197957       ,       -0.134216\r
+5.36611        ,       -0.210089       ,       -0.209132       ,       -0.198063       ,       -0.134503\r
+5.40795        ,       -0.210089       ,       -0.209132       ,       -0.198205       ,       -0.134982\r
+5.42887        ,       -0.210089       ,       -0.209158       ,       -0.198276       ,       -0.135222\r
+5.44979        ,       -0.210089       ,       -0.209185       ,       -0.198404       ,       -0.135461\r
+5.51255        ,       -0.210089       ,       -0.209265       ,       -0.198787       ,       -0.13594\r
+5.53347        ,       -0.210089       ,       -0.209291       ,       -0.198914       ,       -0.1361\r
+5.61715        ,       -0.210089       ,       -0.209398       ,       -0.199482       ,       -0.136667\r
+5.62762        ,       -0.210089       ,       -0.209411       ,       -0.199553       ,       -0.136738\r
+5.659  ,       -0.210089       ,       -0.209451       ,       -0.199713       ,       -0.137057\r
+5.7113 ,       -0.210089       ,       -0.209584       ,       -0.199979       ,       -0.13759\r
+5.72176        ,       -0.210089       ,       -0.20961        ,       -0.200032       ,       -0.137696\r
+5.78452        ,       -0.210089       ,       -0.20977        ,       -0.200351       ,       -0.138175\r
+5.80544        ,       -0.210089       ,       -0.20977        ,       -0.200458       ,       -0.138335\r
+5.8159 ,       -0.210089       ,       -0.20977        ,       -0.200511       ,       -0.138441\r
+5.89958        ,       -0.210089       ,       -0.20977        ,       -0.200851       ,       -0.139292\r
+5.91004        ,       -0.210089       ,       -0.20977        ,       -0.200894       ,       -0.139399\r
+5.9728 ,       -0.210089       ,       -0.20977        ,       -0.201149       ,       -0.140037\r
+5.99372        ,       -0.210089       ,       -0.20977        ,       -0.201213       ,       -0.14025\r
+6.00418        ,       -0.210089       ,       -0.20977        ,       -0.201245       ,       -0.140321\r
+6.07741        ,       -0.210089       ,       -0.209834       ,       -0.201469       ,       -0.140818\r
+6.08787        ,       -0.210089       ,       -0.209843       ,       -0.201504       ,       -0.140889\r
+6.09833        ,       -0.210089       ,       -0.209852       ,       -0.20154        ,       -0.140953\r
+6.17155        ,       -0.210089       ,       -0.209916       ,       -0.201788       ,       -0.1414\r
+6.19247        ,       -0.210089       ,       -0.209934       ,       -0.201916       ,       -0.141527\r
+6.22385        ,       -0.210089       ,       -0.209962       ,       -0.202107       ,       -0.14174\r
+6.28661        ,       -0.210089       ,       -0.210016       ,       -0.20249        ,       -0.142166\r
+6.32845        ,       -0.210089       ,       -0.210053       ,       -0.202746       ,       -0.142485\r
+6.37029        ,       -0.210089       ,       -0.210089       ,       -0.202746       ,       -0.142805\r
+6.43305        ,       -0.210089       ,       -0.210089       ,       -0.202746       ,       -0.143379\r
+6.4749 ,       -0.210089       ,       -0.210089       ,       -0.202928       ,       -0.143762\r
+6.50628        ,       -0.210089       ,       -0.210089       ,       -0.203065       ,       -0.143937\r
+6.5272 ,       -0.210089       ,       -0.210089       ,       -0.203129       ,       -0.144053\r
+6.58996        ,       -0.210089       ,       -0.210089       ,       -0.203321       ,       -0.144401\r
+6.61088        ,       -0.210089       ,       -0.210089       ,       -0.203384       ,       -0.144543\r
+6.6318 ,       -0.210089       ,       -0.210089       ,       -0.203455       ,       -0.144685\r
+6.6841 ,       -0.210089       ,       -0.210089       ,       -0.203633       ,       -0.14504\r
+6.70502        ,       -0.210089       ,       -0.210089       ,       -0.203704       ,       -0.145181\r
+6.7364 ,       -0.210089       ,       -0.210089       ,       -0.203823       ,       -0.145394\r
+6.77824        ,       -0.210089       ,       -0.210089       ,       -0.203983       ,       -0.145678\r
+6.841  ,       -0.210089       ,       -0.210089       ,       -0.204223       ,       -0.146317\r
+6.87238        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.146636\r
+6.94561        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.146884\r
+6.96653        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.146955\r
+6.97699        ,       -0.210089       ,       -0.210089       ,       -0.204342       ,       -0.147051\r
+7.05021        ,       -0.210089       ,       -0.210089       ,       -0.204622       ,       -0.147722\r
+7.06067        ,       -0.210089       ,       -0.210089       ,       -0.204662       ,       -0.147817\r
+7.07113        ,       -0.210089       ,       -0.210089       ,       -0.204693       ,       -0.147913\r
+7.15481        ,       -0.210089       ,       -0.210089       ,       -0.204949       ,       -0.148481\r
+7.16527        ,       -0.210089       ,       -0.210089       ,       -0.204981       ,       -0.148552\r
+7.25941        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.149126\r
+7.26987        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.14919\r
+7.31172        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.149446\r
+7.36402        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.149765\r
+7.42678        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.150148\r
+7.43724        ,       -0.210089       ,       -0.210089       ,       -0.2053 ,       -0.150255\r
+7.46862        ,       -0.210089       ,       -0.210089       ,       -0.20542        ,       -0.150574\r
+7.52092        ,       -0.210089       ,       -0.210089       ,       -0.205619       ,       -0.151106\r
+7.56276        ,       -0.210089       ,       -0.210089       ,       -0.205779       ,       -0.151106\r
+7.6046 ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151106\r
+7.61506        ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151106\r
+7.66736        ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151425\r
+7.70921        ,       -0.210089       ,       -0.210089       ,       -0.205939       ,       -0.151681\r
+7.71967        ,       -0.210089       ,       -0.210089       ,       -0.205971       ,       -0.151745\r
+7.78243        ,       -0.210089       ,       -0.210089       ,       -0.206162       ,       -0.152383\r
+7.81381        ,       -0.210089       ,       -0.210089       ,       -0.206258       ,       -0.152702\r
+7.87657        ,       -0.210089       ,       -0.210089       ,       -0.206405       ,       -0.153086\r
+7.91841        ,       -0.210089       ,       -0.210089       ,       -0.206504       ,       -0.153341\r
+7.94979        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.153554\r
+7.97071        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.153696\r
+8.00209        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.153909\r
+8.01255        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.15398\r
+8.05439        ,       -0.210089       ,       -0.210089       ,       -0.206577       ,       -0.154192\r
+8.08577        ,       -0.210089       ,       -0.210089       ,       -0.206673       ,       -0.154352\r
+8.159  ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.154725\r
+8.19038        ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.154884\r
+8.20084        ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.154937\r
+8.25314        ,       -0.210089       ,       -0.210089       ,       -0.206897       ,       -0.155292\r
+8.29498        ,       -0.210089       ,       -0.210089       ,       -0.207038       ,       -0.155576\r
+8.34728        ,       -0.210089       ,       -0.210089       ,       -0.207216       ,       -0.155576\r
+8.39958        ,       -0.210089       ,       -0.210089       ,       -0.207322       ,       -0.155576\r
+8.4728 ,       -0.210089       ,       -0.210089       ,       -0.207471       ,       -0.156135\r
+8.48326        ,       -0.210089       ,       -0.210089       ,       -0.207493       ,       -0.156215\r
+8.50418        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.156356\r
+8.57741        ,       -0.210089       ,       -0.210089       ,       -0.207312       ,       -0.156853\r
+8.60879        ,       -0.210089       ,       -0.210089       ,       -0.207216       ,       -0.15696\r
+8.67155        ,       -0.210089       ,       -0.210089       ,       -0.207455       ,       -0.157172\r
+8.69247        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.1573\r
+8.71339        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.157428\r
+8.77615        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.157811\r
+8.79707        ,       -0.210089       ,       -0.210089       ,       -0.207535       ,       -0.157917\r
+8.81799        ,       -0.210089       ,       -0.210089       ,       -0.207599       ,       -0.158024\r
+8.90167        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.15845\r
+8.92259        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.158513\r
+9.00628        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.158769\r
+9.0272 ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.158911\r
+9.04812        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159053\r
+9.10042        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159407\r
+9.1318 ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159647\r
+9.15272        ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.159807\r
+9.1841 ,       -0.210089       ,       -0.210089       ,       -0.207974       ,       -0.160046\r
+9.20502        ,       -0.210089       ,       -0.210089       ,       -0.208054       ,       -0.16011\r
+9.2364 ,       -0.210089       ,       -0.210089       ,       -0.208174       ,       -0.160206\r
+9.2887 ,       -0.210089       ,       -0.210089       ,       -0.208014       ,       -0.160365\r
+9.341  ,       -0.210089       ,       -0.210089       ,       -0.207854       ,       -0.160525\r
+9.39331        ,       -0.210089       ,       -0.210089       ,       -0.208209       ,       -0.160685\r
+9.43515        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161004\r
+9.44561        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161084\r
+9.47699        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161323\r
+9.52929        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161642\r
+9.55021        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161706\r
+9.63389        ,       -0.210089       ,       -0.210089       ,       -0.208493       ,       -0.161962\r
+9.71757        ,       -0.210089       ,       -0.210089       ,       -0.208963       ,       -0.162194\r
+9.74895        ,       -0.210089       ,       -0.210089       ,       -0.209019       ,       -0.162281\r
+9.81172        ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.162707\r
+9.8431 ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.16292\r
+9.8954 ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163097\r
+9.91632        ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163168\r
+9.93724        ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163239\r
+10     ,       -0.210089       ,       -0.210089       ,       -0.209132       ,       -0.163452\r
+EOD\r
+\r
+# -------------------------------------------------------------------------------\r
+\r
+unset colorbox\r
+unset grid\r
+\r
+set style line 1  lt 1 lw 2 lc rgb "black"   ps 0.7 dt 1\r
+set style line 2  lt 2 lw 2 lc rgb "gray25"  ps 0.7 dt 2\r
+set style line 3  lt 4 lw 2 lc rgb "gray50"  ps 0.7 dt 3\r
+set style line 4  lt 10 lw 2 lc rgb "gray75"  ps 0.7\r
+\r
+set style line 11 lt 1  lw 1   lc rgb "dark-spring-green"   ps 0.7\r
+set style line 12 lt 2  lw 1   lc rgb "dark-blue"           ps 0.7\r
+set style line 13 lt 7  lw 1   lc rgb "dark-red"            ps 1.0\r
+set style line 21 lt 19 lw 1   lc rgb "dark-yellow"         ps 1.0\r
+set style line 22 lt 8  lw 1   lc rgb "dark-magenta"        ps 1.0\r
+set style line 23 lt 4  lw 1   lc rgb "coral"               ps 1.0\r
+\r
+# -------------------------------------------------------------------------------\r
+# Read files for plotting                                                         ****CHANGE IF NEEDED***\r
+# -------------------------------------------------------------------------------\r
+fileStepK0 = "./Ehlers_step_load_kappa_0/data-for-gnuplot.sol"\r
+fileStepK1 = "./Ehlers_step_load_kappa_1/data-for-gnuplot.sol"\r
+fileStepK2 = "./Ehlers_step_load_kappa_2/data-for-gnuplot.sol"\r
+fileStepK5 = "./Ehlers_step_load_kappa_5/data-for-gnuplot.sol"\r
+fileIncrK0 = "./Ehlers_increase_load_kappa_0/data-for-gnuplot.sol"\r
+\r
+# ---------  VERIFICATION EHLERS FIG 1 -------------------------------------------\r
+set term png size 750,350 enhanced font 'Verdana,12'\r
+\r
+set xrange [0:10]\r
+set yrange [-0.35:0]\r
+\r
+set xlabel 'Time [s]' font 'Verdana,14'\r
+set ylabel 'vertical displacement [m]' font 'Verdana,14'\r
+\r
+set key box  rmargin font 'Verdana,12'   width -10.0\r
+\r
+set output "Ehlers-Fig1.png"\r
+plot '$dataEhlers1'  using 1:2          with lines  ls 1  title 'Ehlers 1999,             step loading', \\r
+     '$dataEhlers1'  using 1:3          with lines  ls 2  title                       'load increasing', \\r
+     '$dataEhlers1'  using 1:4          with lines  ls 3  title                  'theoretical boundary', \\r
+     fileStepK0      using 1:7 every 40  with points ls 23 title 'deal.II poroelasticity, step loading', \\r
+     fileIncrK0      using 1:7 every 40  with points ls 12 title                           'load increasing'\r
+\r
+\r
+# ---------  VERIFICATION EHLERS FIG 2 -------------------------------------------\r
+set term png size 450,500 enhanced font 'Verdana,12'\r
+\r
+set xrange [0:10]\r
+set yrange [-0.25:0]\r
+\r
+set xlabel 'Time [s]' font 'Verdana,14'\r
+set ylabel 'vertical displacement [m]' font 'Verdana,14'\r
+\r
+set key box out vert right above box font 'Verdana,12' width -5.0\r
+\r
+set output "Ehlers-Fig2-displ.png"\r
+plot '$dataEhlers2'  using 1:2          with lines  ls 1  title '(Ehlers 1999) κ = 0' , \\r
+     '$dataEhlers2'  using 1:3          with lines  ls 2  title 'κ = 1' , \\r
+     '$dataEhlers2'  using 1:4          with lines  ls 3  title 'κ = 2' , \\r
+     '$dataEhlers2'  using 1:5          with lines  ls 4  title 'κ = 5' , \\r
+     fileStepK0      using 1:7 every 50  with points ls 21 title 'deal.II poroelasticity, κ = 0', \\r
+     fileStepK1      using 1:7 every 50  with points ls 22 title 'κ = 1', \\r
+     fileStepK2      using 1:7 every 50  with points ls 23 title 'κ = 2', \\r
+     fileStepK5      using 1:7 every 50  with points ls 11 title 'κ = 5'\r
+\r
+set term png size 450,420 enhanced font 'Verdana,12'\r
+\r
+set xrange [0:10]\r
+set yrange [0:8]\r
+set ylabel 'pore pressure [MPa]' font 'Verdana,14'\r
+\r
+set output "Ehlers-Fig2-pressure.png"\r
+plot fileStepK0   using 1:($12)/1000000  with lines ls 21 title 'deal.II poroelasticity, κ = 0', \\r
+     fileStepK1   using 1:($12)/1000000  with lines ls 22 title 'κ = 1', \\r
+     fileStepK2   using 1:($12)/1000000  with lines ls 23 title 'κ = 2', \\r
+     fileStepK5   using 1:($12)/1000000  with lines ls 11 title 'κ = 5'\r
+\r
+\r
+# ---------  VALIDATION EHLERS CONSOLIDATION CURVES  -------------------------------------------\r
+#Final specimen shortening                                                                         ****CHANGE IF NEEDED***\r
+Umax = 2.087773e-01\r
+\r
+set key box out vert right above box font 'Verdana,12'  width -5.0\r
+\r
+set logscale x\r
+set xrange [0.001:10]\r
+set yrange [1:0]\r
+\r
+set xlabel 'Time [s]' font 'Verdana,14'\r
+set ylabel 'consolidation ratio [-]' font 'Verdana,14'\r
+\r
+set output "Ehlers-consolidation.png"\r
+plot fileStepK0  using ($1):(-($7)/Umax) with lines ls 21 title 'deal.II poroelasticity, κ = 0', \\r
+     fileStepK1  using ($1):(-($7)/Umax) with lines ls 22 title 'κ = 1', \\r
+     fileStepK2  using ($1):(-($7)/Umax) with lines ls 23 title 'κ = 2', \\r
+     fileStepK5  using ($1):(-($7)/Umax) with lines ls 11 title 'κ = 5'\r
+\r
+unset logscale x\r
+set yrange [0:1]\r
diff --git a/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/run-multi-calc.py b/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/run-multi-calc.py
new file mode 100755 (executable)
index 0000000..43cb737
--- /dev/null
@@ -0,0 +1,213 @@
+\r
+#-----------------------------------------------------------------------------------------\r
+#\r
+# This python script runs the deal.ii verification problems based on Ehlers & Eipper 1999\r
+# To execute, type in console >>"python ./run-multi-calc.py"\r
+#\r
+#   *** remember to load deal.ii and mpi before executing the script***\r
+#\r
+# NOTE: If changes are made to the file runPoro.sh, remember to define it as executable\r
+#       by typing in the console >>"chmod +x runPoro.sh"\r
+#\r
+#-----------------------------------------------------------------------------------------\r
+import fileinput\r
+import sys\r
+import subprocess\r
+import os\r
+import shutil\r
+import select\r
+import time\r
+\r
+# Number of parallel processes, i.e. how many jobs are run in parallel.\r
+# Since the deal.ii code is executed already in parallel (-np 6), it doesn't make sense\r
+# to execute any jobs in parallel. So , parallelProcesses = 1 should be used.\r
+parallelProcesses = 1\r
+processes = {}\r
+jobnames = {}\r
+\r
+\r
+# Generate new parameter file\r
+x = open("parameters.prm", 'w')\r
+x.write("subsection Finite element system\n")\r
+x.write("  set Polynomial degree displ = 2\n")\r
+x.write("  set Polynomial degree pore  = 1\n")\r
+x.write("  set Quadrature order        = 3\n")\r
+x.write("end\n\n")\r
+x.write("subsection Geometry\n")\r
+x.write("  set Geometry type       = Ehlers_tube_step_load\n")\r
+x.write("  set Global refinement   = 1\n")\r
+x.write("  set Grid scale          = 1\n")\r
+x.write("  set Load type           = pressure\n")\r
+x.write("  set Load value          = -7.5e6\n")\r
+x.write("  set Drained pressure    = 0\n")\r
+x.write("end\n\n")\r
+x.write("subsection Material properties \n")\r
+x.write("  set material                         = Neo-Hooke\n")\r
+x.write("  set lambda                           = 8.375e6\n")\r
+x.write("  set shear modulus                    = 5.583e6\n")\r
+x.write("  set seepage definition               = Ehlers\n")\r
+x.write("  set initial solid volume fraction    = 0.67\n")\r
+x.write("  set kappa                            = 0\n")\r
+x.write("  set initial Darcy coefficient        = 1.0e-4\n")\r
+x.write("  set fluid weight                     = 1.0e4\n")\r
+x.write("  set gravity term                     = false\n")\r
+x.write("end\n\n")\r
+x.write("subsection Nonlinear solver\n")\r
+x.write("  set Max iterations Newton-Raphson = 20\n")\r
+x.write("  set Tolerance force               = 1.0e-6\n")\r
+x.write("  set Tolerance displacement        = 1.0e-6\n")\r
+x.write("  set Tolerance pore pressure       = 1.0e-6\n")\r
+x.write("end\n\n")\r
+x.write("subsection Time\n")\r
+x.write("  set End time          = 10.0\n")\r
+x.write("  set Time step size    = 0.002\n")\r
+x.write("end\n\n")\r
+x.write("subsection Output parameters\n")\r
+x.write("  set Time step number output    = 5\n")\r
+x.write("end\n")\r
+x.close()\r
+\r
+#---------------------------------------------------------------------------------------\r
+# Step loading problem with different kappa values\r
+#---------------------------------------------------------------------------------------\r
+kappas = ["0","1","2","5"]\r
+\r
+for kappa in kappas:\r
+       # Jobname\r
+       jobname = "Ehlers_step_load_kappa_"+kappa\r
+       # make changes in parameter file\r
+       x = fileinput.input("parameters.prm", inplace=1)\r
+       for line in x:\r
+               if "set kappa" in line:\r
+                       line = "  set kappa                            = "+kappa+"\n"\r
+               print (line),\r
+       x.close()\r
+\r
+       # start cp fem code without output\r
+       #process = subprocess.Popen("./runPoro.sh " + jobname + "> /dev/null 2>&1", shell=True)\r
+       process = subprocess.Popen("./runPoro.sh " + jobname, shell=True)\r
+\r
+       # check if Input folder is copied\r
+       # to make sure I look for the executable which is copied afterwards\r
+       executable = "RESULTS/calcDir_" + jobname\r
+       results = "RESULTS/resultDir_" + jobname\r
+       time.sleep(1)\r
+       while not os.path.exists(executable) and not os.path.exists(results):\r
+               time.sleep(1)\r
+               print ("waiting for executable to be copied")\r
+\r
+       # store process to wait for it later\r
+       processes[process.pid] = process\r
+       jobnames[process.pid] = jobname\r
+\r
+       # if more than parallelProcesses running, wait for the first to finish\r
+       while len(processes) >= parallelProcesses:\r
+               pid, status = os.wait()\r
+               if pid in processes:\r
+                       if status == 0:\r
+                               print ("Job %30s successful" % jobnames[pid])\r
+                       del processes[pid]\r
+                       del jobnames[pid]\r
+\r
+\r
+# wait for the other processes\r
+while processes:\r
+       pid, status = os.wait()\r
+       if pid in processes:\r
+               if status == 0:\r
+                       print ("Job %30s successful" % jobnames[pid])\r
+               del processes[pid]\r
+               del jobnames[pid]\r
+\r
+#---------------------------------------------------------------------------------------\r
+# Load increasing problem with kappa = 0\r
+#---------------------------------------------------------------------------------------\r
+# Jobname\r
+jobname = "Ehlers_increase_load_kappa_0"\r
+# make changes in parameter file\r
+x = fileinput.input("parameters.prm", inplace=1)\r
+for line in x:\r
+       if "set Geometry type" in line:\r
+               line = "  set Geometry type       = Ehlers_tube_increase_load\n"\r
+       if "set kappa" in line:\r
+               line = "  set kappa                            = 0\n"\r
+       print (line),\r
+x.close()\r
+# start cp fem code without output\r
+#process = subprocess.Popen("./runPoro.sh " + jobname + "> /dev/null 2>&1", shell=True)\r
+process = subprocess.Popen("./runPoro.sh " + jobname, shell=True)\r
+\r
+# check if Input folder is copied\r
+# to make sure I look for the executable which is copied afterwards\r
+executable = "RESULTS/calcDir_" + jobname\r
+results = "RESULTS/resultDir_" + jobname\r
+time.sleep(1)\r
+while not os.path.exists(executable) and not os.path.exists(results):\r
+       time.sleep(1)\r
+       print ("waiting for executable to be copied")\r
+\r
+# store process to wait for it later\r
+processes[process.pid] = process\r
+jobnames[process.pid] = jobname\r
+\r
+# if more than parallelProcesses running, wait for the first to finish\r
+while len(processes) >= parallelProcesses:\r
+       pid, status = os.wait()\r
+       if pid in processes:\r
+               if status == 0:\r
+                       print ("Job %30s successful" % jobnames[pid])\r
+               del processes[pid]\r
+               del jobnames[pid]\r
+\r
+\r
+#---------------------------------------------------------------------------------------\r
+# Consolidation cube problem\r
+#---------------------------------------------------------------------------------------\r
+# Jobname\r
+jobname = "Ehlers_cube"\r
+# make changes in parameter file\r
+x = fileinput.input("parameters.prm", inplace=1)\r
+for line in x:\r
+       if "set Geometry type" in line:\r
+               line = "  set Geometry type       = Ehlers_cube_consolidation\n"\r
+       if "set Global refinement" in line:\r
+               line = "  set Global refinement   = 2\n"\r
+       if "set Time step size" in line:\r
+               line = "  set Time step size    = 0.01\n"\r
+       if "set Time step number output" in line:\r
+               line = "  set Time step number output    = 1\n"\r
+       print (line),\r
+x.close()\r
+\r
+# start cp fem code without output\r
+#process = subprocess.Popen("./runPoro.sh " + jobname + "> /dev/null 2>&1", shell=True)\r
+process = subprocess.Popen("./runPoro.sh " + jobname, shell=True)\r
+\r
+# check if Input folder is copied\r
+# to make sure I look for the executable which is copied afterwards\r
+executable = "RESULTS/calcDir_" + jobname\r
+results = "RESULTS/resultDir_" + jobname\r
+time.sleep(1)\r
+while not os.path.exists(executable) and not os.path.exists(results):\r
+       time.sleep(1)\r
+       print ("waiting for executable to be copied")\r
+\r
+# store process to wait for it later\r
+processes[process.pid] = process\r
+jobnames[process.pid] = jobname\r
+\r
+# if more than parallelProcesses running, wait for the first to finish\r
+while len(processes) >= parallelProcesses:\r
+       pid, status = os.wait()\r
+       if pid in processes:\r
+               if status == 0:\r
+                       print ("Job %30s successful" % jobnames[pid])\r
+               del processes[pid]\r
+               del jobnames[pid]\r
+\r
+\r
+print ("   _   _ _     _     _                           _     _          _ _ ")\r
+print ("  /_\ | | |   (_)___| |__ ___  __ ___ _ __  _ __| |___| |_ ___ __| | |")\r
+print (" / _ \| | |   | / _ \ '_ (_-< / _/ _ \ '  \| '_ \ / -_)  _/ -_) _  |_|")\r
+print ("/_/ \_\_|_|  _/ \___/_.__/__/ \__\___/_|_|_| .__/_\___|\__\___\__,_(_)")\r
+print ("            |__/                           |_|                        ")\r
diff --git a/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/runPoro.sh b/Nonlinear_PoroViscoelasticity/input-files/5-Ehlers-verification/runPoro.sh
new file mode 100755 (executable)
index 0000000..fe36359
--- /dev/null
@@ -0,0 +1,55 @@
+ #!/bin/bash   
+ # first parameter is the name for directory where the calculation is made
+echo "                    _                _          _   _ _              "
+echo " _ _ _  _ _ _  _ _ (_)_ _  __ _   __| |___ __ _| | (_|_)             "
+echo "| '_| || | ' \| ' \| | ' \/ _  | / _  / -_) _  | |_| | |  _   _   _  "
+echo "|_|  \_,_|_||_|_||_|_|_||_\__, | \__,_\___\__,_|_(_)_|_| (_) (_) (_) "
+echo "                          |___/                                      "
+
+
+echo "DEAL_II_DIR:               " $DEAL_II_DIR
+
+# Define and print tmpdir, where calculations are made and resultsdir where results will be stored
+maindir=`pwd`
+tmpdir=$maindir/RESULTS/calcDir_$1
+resultdir=$maindir/RESULTS/resultDir_$1
+echo "Main directory            :" $maindir
+echo "Directory for calculations:" $tmpdir
+echo "Directory for results     :" $resultdir
+
+# change to temporary job directory
+mkdir -p $tmpdir
+cd $tmpdir
+# copy stuff from location where job was submitted to temporary directory
+cp -r $maindir/parameters.prm . && echo "Copying input file succeeded" || echo "Copying input file failed"
+cp -r $maindir/nonlinear-poro-viscoelasticity . && echo "Copying executable succeeded" || echo "Copying executable failed"
+
+# run code (change num of parallel processes if desired)
+touch out.log
+touch err.log
+COUNTER=0
+while [  $COUNTER -lt 10 ]; do
+    COUNTER=$((COUNTER+1))
+    echo "Start run " $COUNTER
+    mpirun -np 6 ./nonlinear-poro-viscoelasticity >>out.log 2>err.log
+    if [ $? -eq 0 ]; then
+        echo FEM Code OK
+        break
+    else
+        echo $?
+        echo FEM Code FAILED
+       fi
+done
+
+
+# create folder for output and copy parameter file and results into it
+mkdir -p $resultdir
+mkdir -p $resultdir/Paraview-files
+
+cp parameters.prm $resultdir/
+cp *.sol $resultdir/
+cp solution.* $resultdir/Paraview-files/
+
+# get rid of the temporary job dir
+rm -rf $tmpdir
diff --git a/Nonlinear_PoroViscoelasticity/nonlinear-poro-viscoelasticity.cc b/Nonlinear_PoroViscoelasticity/nonlinear-poro-viscoelasticity.cc
new file mode 100644 (file)
index 0000000..74a431f
--- /dev/null
@@ -0,0 +1,5110 @@
+/* ---------------------------------------------------------------------\r
+ *\r
+ * Copyright (C) 2010 - 2020 by the deal.II authors and\r
+ *                              Ester Comellas and Jean-Paul Pelteret\r
+ *\r
+ * This file is part of the deal.II library.\r
+ *\r
+ * The deal.II library is free software; you can use it, redistribute\r
+ * it, and/or modify it under the terms of the GNU Lesser General\r
+ * Public License as published by the Free Software Foundation; either\r
+ * version 2.1 of the License, or (at your option) any later version.\r
+ * The full text of the license can be found in the file LICENSE at\r
+ * the top level of the deal.II distribution.\r
+ *\r
+ * ---------------------------------------------------------------------\r
+ */\r
+\r
+/*   Authors: Ester Comellas and Jean-Paul Pelteret,\r
+ *           University of Erlangen-Nuremberg, 2018\r
+ */\r
+\r
+// We start by including all the necessary deal.II header files and some C++\r
+// related ones. They have been discussed in detail in previous tutorial\r
+// programs, so you need only refer to past tutorials for details.\r
+\r
+#include <deal.II/base/function.h>\r
+#include <deal.II/base/parameter_handler.h>\r
+#include <deal.II/base/point.h>\r
+#include <deal.II/base/quadrature_lib.h>\r
+#include <deal.II/base/symmetric_tensor.h>\r
+#include <deal.II/base/tensor.h>\r
+#include <deal.II/base/timer.h>\r
+#include <deal.II/base/work_stream.h>\r
+#include <deal.II/base/mpi.h>\r
+#include <deal.II/base/quadrature_point_data.h>\r
+#include <deal.II/base/std_cxx11/shared_ptr.h>\r
+\r
+#include <deal.II/differentiation/ad.h>\r
+\r
+#include <deal.II/dofs/dof_renumbering.h>\r
+#include <deal.II/dofs/dof_tools.h>\r
+#include <deal.II/dofs/dof_accessor.h>\r
+\r
+#include <deal.II/grid/filtered_iterator.h>\r
+#include <deal.II/grid/grid_generator.h>\r
+#include <deal.II/grid/grid_tools.h>\r
+#include <deal.II/grid/grid_in.h>\r
+#include <deal.II/grid/grid_out.h>\r
+#include <deal.II/grid/manifold_lib.h>\r
+#include <deal.II/grid/tria.h>\r
+#include <deal.II/grid/tria_accessor.h>\r
+#include <deal.II/grid/tria_boundary_lib.h>\r
+#include <deal.II/grid/tria_iterator.h>\r
+\r
+#include <deal.II/fe/fe_dgp_monomial.h>\r
+#include <deal.II/fe/fe_q.h>\r
+#include <deal.II/fe/fe_system.h>\r
+#include <deal.II/fe/fe_tools.h>\r
+#include <deal.II/fe/fe_values.h>\r
+\r
+#include <deal.II/lac/block_sparsity_pattern.h>\r
+#include <deal.II/lac/affine_constraints.h>\r
+#include <deal.II/lac/dynamic_sparsity_pattern.h>\r
+#include <deal.II/lac/full_matrix.h>\r
+#include <deal.II/lac/linear_operator.h>\r
+#include <deal.II/lac/packaged_operation.h>\r
+\r
+#include <deal.II/lac/trilinos_block_sparse_matrix.h>\r
+#include <deal.II/lac/trilinos_linear_operator.h>\r
+#include <deal.II/lac/trilinos_parallel_block_vector.h>\r
+#include <deal.II/lac/trilinos_precondition.h>\r
+#include <deal.II/lac/trilinos_sparse_matrix.h>\r
+#include <deal.II/lac/trilinos_sparsity_pattern.h>\r
+#include <deal.II/lac/trilinos_solver.h>\r
+#include <deal.II/lac/trilinos_vector.h>\r
+\r
+#include <deal.II/lac/block_vector.h>\r
+#include <deal.II/lac/vector.h>\r
+\r
+#include <deal.II/numerics/data_postprocessor.h>\r
+#include <deal.II/numerics/data_out.h>\r
+#include <deal.II/numerics/data_out_faces.h>\r
+#include <deal.II/numerics/fe_field_function.h>\r
+#include <deal.II/numerics/vector_tools.h>\r
+\r
+#include <deal.II/physics/transformations.h>\r
+#include <deal.II/physics/elasticity/kinematics.h>\r
+#include <deal.II/physics/elasticity/standard_tensors.h>\r
+\r
+#include <iostream>\r
+#include <fstream>\r
+#include <numeric>\r
+#include <iomanip>\r
+\r
+\r
+// We create a namespace for everything that relates to\r
+// the nonlinear poro-viscoelastic formulation,\r
+// and import all the deal.II function and class names into it:\r
+namespace NonLinearPoroViscoElasticity\r
+{\r
+    using namespace dealii;\r
+\r
+// @sect3{Run-time parameters}\r
+//\r
+// Set up a ParameterHandler object to read in the parameter choices at run-time\r
+// introduced by the user through the file "parameters.prm"\r
+    namespace Parameters\r
+    {\r
+// @sect4{Finite Element system}\r
+// Here we specify the polynomial order used to approximate the solution,\r
+// both for the displacements and pressure unknowns.\r
+// The quadrature order should be adjusted accordingly.\r
+      struct FESystem\r
+      {\r
+        unsigned int poly_degree_displ;\r
+        unsigned int poly_degree_pore;\r
+        unsigned int quad_order;\r
+\r
+        static void\r
+        declare_parameters(ParameterHandler &prm);\r
+\r
+        void\r
+        parse_parameters(ParameterHandler &prm);\r
+      };\r
+\r
+      void FESystem::declare_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Finite element system");\r
+        {\r
+          prm.declare_entry("Polynomial degree displ", "2",\r
+                            Patterns::Integer(0),\r
+                            "Displacement system polynomial order");\r
+\r
+          prm.declare_entry("Polynomial degree pore", "1",\r
+                            Patterns::Integer(0),\r
+                            "Pore pressure system polynomial order");\r
+\r
+          prm.declare_entry("Quadrature order", "3",\r
+                            Patterns::Integer(0),\r
+                            "Gauss quadrature order");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+      void FESystem::parse_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Finite element system");\r
+        {\r
+          poly_degree_displ = prm.get_integer("Polynomial degree displ");\r
+          poly_degree_pore = prm.get_integer("Polynomial degree pore");\r
+          quad_order = prm.get_integer("Quadrature order");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+// @sect4{Geometry}\r
+// These parameters are related to the geometry definition and mesh generation.\r
+// We select the type of problem to solve and introduce the desired load values.\r
+      struct Geometry\r
+      {\r
+        std::string  geom_type;\r
+        unsigned int global_refinement;\r
+        double       scale;\r
+        std::string  load_type;\r
+        double       load;\r
+        unsigned int num_cycle_sets;\r
+        double       fluid_flow;\r
+        double       drained_pressure;\r
+\r
+        static void\r
+        declare_parameters(ParameterHandler &prm);\r
+\r
+        void\r
+        parse_parameters(ParameterHandler &prm);\r
+      };\r
+\r
+      void Geometry::declare_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Geometry");\r
+        {\r
+          prm.declare_entry("Geometry type", "Ehlers_tube_step_load",\r
+                             Patterns::Selection("Ehlers_tube_step_load"\r
+                                                 "|Ehlers_tube_increase_load"\r
+                                                 "|Ehlers_cube_consolidation"\r
+                                                 "|Franceschini_consolidation"\r
+                                                 "|Budday_cube_tension_compression"\r
+                                                 "|Budday_cube_tension_compression_fully_fixed"\r
+                                                 "|Budday_cube_shear_fully_fixed"),\r
+                                "Type of geometry used. "\r
+                                "For Ehlers verification examples see Ehlers and Eipper (1999). "\r
+                                "For Franceschini brain consolidation see Franceschini et al. (2006)"\r
+                                "For Budday brain examples see Budday et al. (2017)");\r
+\r
+          prm.declare_entry("Global refinement", "1",\r
+                            Patterns::Integer(0),\r
+                            "Global refinement level");\r
+\r
+          prm.declare_entry("Grid scale", "1.0",\r
+                            Patterns::Double(0.0),\r
+                            "Global grid scaling factor");\r
+\r
+          prm.declare_entry("Load type", "pressure",\r
+                            Patterns::Selection("pressure|displacement|none"),\r
+                            "Type of loading");\r
+\r
+          prm.declare_entry("Load value", "-7.5e+6",\r
+                            Patterns::Double(),\r
+                            "Loading value");\r
+\r
+          prm.declare_entry("Number of cycle sets", "1",\r
+                            Patterns::Integer(1,2),\r
+                            "Number of times each set of 3 cycles is repeated, only for "\r
+                            "Budday_cube_tension_compression and Budday_cube_tension_compression_fully_fixed. "\r
+                            "Load value is doubled in second set, load rate is kept constant."\r
+                            "Final time indicates end of second cycle set.");\r
+\r
+          prm.declare_entry("Fluid flow value", "0.0",\r
+                            Patterns::Double(),\r
+                            "Prescribed fluid flow. Not implemented in any example yet.");\r
+\r
+          prm.declare_entry("Drained pressure", "0.0",\r
+                            Patterns::Double(),\r
+                            "Increase of pressure value at drained boundary w.r.t the atmospheric pressure.");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+      void Geometry::parse_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Geometry");\r
+        {\r
+          geom_type = prm.get("Geometry type");\r
+          global_refinement = prm.get_integer("Global refinement");\r
+          scale = prm.get_double("Grid scale");\r
+          load_type = prm.get("Load type");\r
+          load = prm.get_double("Load value");\r
+          num_cycle_sets = prm.get_integer("Number of cycle sets");\r
+          fluid_flow = prm.get_double("Fluid flow value");\r
+          drained_pressure = prm.get_double("Drained pressure");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+// @sect4{Materials}\r
+\r
+// Here we select the type of material for the solid component\r
+// and define the corresponding material parameters.\r
+// Then we define he fluid data, including the type of\r
+// seepage velocity definition to use.\r
+      struct Materials\r
+      {\r
+        std::string  mat_type;\r
+        double lambda;\r
+        double mu;\r
+        double mu1_infty;\r
+        double mu2_infty;\r
+        double mu3_infty;\r
+        double alpha1_infty;\r
+        double alpha2_infty;\r
+        double alpha3_infty;\r
+        double mu1_mode_1;\r
+        double mu2_mode_1;\r
+        double mu3_mode_1;\r
+        double alpha1_mode_1;\r
+        double alpha2_mode_1;\r
+        double alpha3_mode_1;\r
+        double viscosity_mode_1;\r
+        std::string  fluid_type;\r
+        double solid_vol_frac;\r
+        double kappa_darcy;\r
+        double init_intrinsic_perm;\r
+        double viscosity_FR;\r
+        double init_darcy_coef;\r
+        double weight_FR;\r
+        bool gravity_term;\r
+        int gravity_direction;\r
+        double gravity_value;\r
+        double density_FR;\r
+        double density_SR;\r
+        enum SymmetricTensorEigenvectorMethod eigen_solver;\r
+\r
+        static void\r
+        declare_parameters(ParameterHandler &prm);\r
+\r
+        void\r
+        parse_parameters(ParameterHandler &prm);\r
+      };\r
+\r
+      void Materials::declare_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Material properties");\r
+        {\r
+          prm.declare_entry("material", "Neo-Hooke",\r
+                            Patterns::Selection("Neo-Hooke|Ogden|visco-Ogden"),\r
+                            "Type of material used in the problem");\r
+\r
+          prm.declare_entry("lambda", "8.375e6",\r
+                            Patterns::Double(0,1e100),\r
+                            "First Lamé parameter for extension function related to compactation point in solid material [Pa].");\r
+\r
+          prm.declare_entry("shear modulus", "5.583e6",\r
+                            Patterns::Double(0,1e100),\r
+                            "shear modulus for Neo-Hooke materials [Pa].");\r
+\r
+          prm.declare_entry("eigen solver", "QL Implicit Shifts",\r
+                            Patterns::Selection("QL Implicit Shifts|Jacobi"),\r
+                            "The type of eigen solver to be used for Ogden and visco-Ogden models.");\r
+\r
+          prm.declare_entry("mu1", "0.0",\r
+                            Patterns::Double(),\r
+                            "Shear material parameter 'mu1' for Ogden material [Pa].");\r
+\r
+          prm.declare_entry("mu2", "0.0",\r
+                            Patterns::Double(),\r
+                            "Shear material parameter 'mu2' for Ogden material [Pa].");\r
+\r
+          prm.declare_entry("mu3", "0.0",\r
+                            Patterns::Double(),\r
+                            "Shear material parameter 'mu1' for Ogden material [Pa].");\r
+\r
+          prm.declare_entry("alpha1", "1.0",\r
+                            Patterns::Double(),\r
+                            "Stiffness material parameter 'alpha1' for Ogden material [-].");\r
+\r
+          prm.declare_entry("alpha2", "1.0",\r
+                            Patterns::Double(),\r
+                            "Stiffness material parameter 'alpha2' for Ogden material [-].");\r
+\r
+          prm.declare_entry("alpha3", "1.0",\r
+                            Patterns::Double(),\r
+                            "Stiffness material parameter 'alpha3' for Ogden material [-].");\r
+\r
+          prm.declare_entry("mu1_1", "0.0",\r
+                            Patterns::Double(),\r
+                            "Shear material parameter 'mu1' for first viscous mode in Ogden material [Pa].");\r
+\r
+          prm.declare_entry("mu2_1", "0.0",\r
+                            Patterns::Double(),\r
+                            "Shear material parameter 'mu2' for first viscous mode in Ogden material [Pa].");\r
+\r
+          prm.declare_entry("mu3_1", "0.0",\r
+                            Patterns::Double(),\r
+                            "Shear material parameter 'mu1' for first viscous mode in Ogden material [Pa].");\r
+\r
+          prm.declare_entry("alpha1_1", "1.0",\r
+                            Patterns::Double(),\r
+                            "Stiffness material parameter 'alpha1' for first viscous mode in Ogden material [-].");\r
+\r
+          prm.declare_entry("alpha2_1", "1.0",\r
+                            Patterns::Double(),\r
+                            "Stiffness material parameter 'alpha2' for first viscous mode in Ogden material [-].");\r
+\r
+          prm.declare_entry("alpha3_1", "1.0",\r
+                            Patterns::Double(),\r
+                            "Stiffness material parameter 'alpha3' for first viscous mode in Ogden material [-].");\r
+\r
+          prm.declare_entry("viscosity_1", "1e-10",\r
+                            Patterns::Double(1e-10,1e100),\r
+                            "Deformation-independent viscosity parameter 'eta_1' for first viscous mode in Ogden material [-].");\r
+\r
+          prm.declare_entry("seepage definition", "Ehlers",\r
+                            Patterns::Selection("Markert|Ehlers"),\r
+                            "Type of formulation used to define the seepage velocity in the problem. "\r
+                            "Choose between Markert formulation of deformation-dependent intrinsic permeability "\r
+                            "and Ehlers formulation of deformation-dependent Darcy flow coefficient.");\r
+\r
+          prm.declare_entry("initial solid volume fraction", "0.67",\r
+                            Patterns::Double(0.001,0.999),\r
+                            "Initial porosity (solid volume fraction, 0 < n_0s < 1)");\r
+\r
+          prm.declare_entry("kappa", "0.0",\r
+                            Patterns::Double(0,100),\r
+                            "Deformation-dependency control parameter for specific permeability (kappa >= 0)");\r
+\r
+          prm.declare_entry("initial intrinsic permeability", "0.0",\r
+                            Patterns::Double(0,1e100),\r
+                            "Initial intrinsic permeability parameter [m^2] (isotropic permeability). To be used with Markert formulation.");\r
+\r
+          prm.declare_entry("fluid viscosity", "0.0",\r
+                            Patterns::Double(0, 1e100),\r
+                            "Effective shear viscosity parameter of the fluid [Pa·s, (N·s)/m^2]. To be used with Markert formulation.");\r
+\r
+          prm.declare_entry("initial Darcy coefficient", "1.0e-4",\r
+                            Patterns::Double(0,1e100),\r
+                            "Initial Darcy flow coefficient [m/s] (isotropic permeability). To be used with Ehlers formulation.");\r
+\r
+          prm.declare_entry("fluid weight", "1.0e4",\r
+                            Patterns::Double(0, 1e100),\r
+                            "Effective weight of the fluid [N/m^3]. To be used with Ehlers formulation.");\r
+\r
+          prm.declare_entry("gravity term", "false",\r
+                            Patterns::Bool(),\r
+                            "Gravity term considered (true) or neglected (false)");\r
+\r
+          prm.declare_entry("fluid density", "1.0",\r
+                            Patterns::Double(0,1e100),\r
+                            "Real (or effective) density of the fluid");\r
+\r
+          prm.declare_entry("solid density", "1.0",\r
+                            Patterns::Double(0,1e100),\r
+                            "Real (or effective) density of the solid");\r
+\r
+          prm.declare_entry("gravity direction", "2",\r
+                            Patterns::Integer(0,2),\r
+                            "Direction of gravity (unit vector 0 for x, 1 for y, 2 for z)");\r
+\r
+          prm.declare_entry("gravity value", "-9.81",\r
+                            Patterns::Double(),\r
+                            "Value of gravity (be careful to have consistent units!)");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+      void Materials::parse_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Material properties");\r
+        {\r
+          //Solid\r
+          mat_type = prm.get("material");\r
+          lambda = prm.get_double("lambda");\r
+          mu = prm.get_double("shear modulus");\r
+          mu1_infty = prm.get_double("mu1");\r
+          mu2_infty = prm.get_double("mu2");\r
+          mu3_infty = prm.get_double("mu3");\r
+          alpha1_infty = prm.get_double("alpha1");\r
+          alpha2_infty = prm.get_double("alpha2");\r
+          alpha3_infty = prm.get_double("alpha3");\r
+          mu1_mode_1 = prm.get_double("mu1_1");\r
+          mu2_mode_1 = prm.get_double("mu2_1");\r
+          mu3_mode_1 = prm.get_double("mu3_1");\r
+          alpha1_mode_1 = prm.get_double("alpha1_1");\r
+          alpha2_mode_1 = prm.get_double("alpha2_1");\r
+          alpha3_mode_1 = prm.get_double("alpha3_1");\r
+          viscosity_mode_1 = prm.get_double("viscosity_1");\r
+          //Fluid\r
+          fluid_type = prm.get("seepage definition");\r
+          solid_vol_frac = prm.get_double("initial solid volume fraction");\r
+          kappa_darcy = prm.get_double("kappa");\r
+          init_intrinsic_perm = prm.get_double("initial intrinsic permeability");\r
+          viscosity_FR = prm.get_double("fluid viscosity");\r
+          init_darcy_coef = prm.get_double("initial Darcy coefficient");\r
+          weight_FR = prm.get_double("fluid weight");\r
+          //Gravity effects\r
+          gravity_term = prm.get_bool("gravity term");\r
+          density_FR = prm.get_double("fluid density");\r
+          density_SR = prm.get_double("solid density");\r
+          gravity_direction = prm.get_integer("gravity direction");\r
+          gravity_value = prm.get_double("gravity value");\r
+\r
+          if ( (fluid_type == "Markert") && ((init_intrinsic_perm == 0.0) || (viscosity_FR == 0.0)) )\r
+              throw std::runtime_error ("Markert seepage velocity formulation requires the definition of "\r
+                                          "'initial intrinsic permeability' and 'fluid viscosity' greater than 0.0.");\r
+\r
+          if ( (fluid_type == "Ehlers") && ((init_darcy_coef == 0.0) || (weight_FR == 0.0)) )\r
+              throw std::runtime_error ("Ehler seepage velocity formulation requires the definition of "\r
+                                          "'initial Darcy coefficient' and 'fluid weight' greater than 0.0.");\r
+\r
+          const std::string eigen_solver_type = prm.get("eigen solver");\r
+          if (eigen_solver_type == "QL Implicit Shifts")\r
+            eigen_solver = SymmetricTensorEigenvectorMethod::ql_implicit_shifts;\r
+          else if (eigen_solver_type == "Jacobi")\r
+            eigen_solver = SymmetricTensorEigenvectorMethod::jacobi;\r
+          else\r
+          {\r
+            AssertThrow(false, ExcMessage("Unknown eigen solver selected."));\r
+          }\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+// @sect4{Nonlinear solver}\r
+\r
+// We now define the tolerances and the maximum number of iterations for the\r
+// Newton-Raphson scheme used to solve the nonlinear system of governing equations.\r
+      struct NonlinearSolver\r
+      {\r
+        unsigned int max_iterations_NR;\r
+        double       tol_f;\r
+        double       tol_u;\r
+        double       tol_p_fluid;\r
+\r
+        static void\r
+        declare_parameters(ParameterHandler &prm);\r
+\r
+        void\r
+        parse_parameters(ParameterHandler &prm);\r
+      };\r
+\r
+      void NonlinearSolver::declare_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Nonlinear solver");\r
+        {\r
+          prm.declare_entry("Max iterations Newton-Raphson", "15",\r
+                            Patterns::Integer(0),\r
+                            "Number of Newton-Raphson iterations allowed");\r
+\r
+          prm.declare_entry("Tolerance force", "1.0e-8",\r
+                            Patterns::Double(0.0),\r
+                            "Force residual tolerance");\r
+\r
+          prm.declare_entry("Tolerance displacement", "1.0e-6",\r
+                            Patterns::Double(0.0),\r
+                            "Displacement error tolerance");\r
+\r
+          prm.declare_entry("Tolerance pore pressure", "1.0e-6",\r
+                            Patterns::Double(0.0),\r
+                            "Pore pressure error tolerance");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+      void NonlinearSolver::parse_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Nonlinear solver");\r
+        {\r
+          max_iterations_NR = prm.get_integer("Max iterations Newton-Raphson");\r
+          tol_f = prm.get_double("Tolerance force");\r
+          tol_u = prm.get_double("Tolerance displacement");\r
+          tol_p_fluid =  prm.get_double("Tolerance pore pressure");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+// @sect4{Time}\r
+// Here we set the timestep size $ \varDelta t $ and the simulation end-time.\r
+      struct Time\r
+      {\r
+        double end_time;\r
+        double delta_t;\r
+        static void\r
+        declare_parameters(ParameterHandler &prm);\r
+\r
+        void\r
+        parse_parameters(ParameterHandler &prm);\r
+      };\r
+\r
+      void Time::declare_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Time");\r
+        {\r
+          prm.declare_entry("End time", "10.0",\r
+                            Patterns::Double(),\r
+                            "End time");\r
+\r
+          prm.declare_entry("Time step size", "0.002",\r
+                            Patterns::Double(1.0e-6),\r
+                            "Time step size. The value must be larger than the displacement error tolerance defined.");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+      void Time::parse_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Time");\r
+        {\r
+          end_time = prm.get_double("End time");\r
+          delta_t = prm.get_double("Time step size");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+\r
+// @sect4{Output}\r
+// We can choose the frequency of the data for the output files.\r
+      struct OutputParam\r
+      {\r
+\r
+        std::string  outfiles_requested;\r
+        unsigned int timestep_output;\r
+        std::string  outtype;\r
+\r
+        static void\r
+        declare_parameters(ParameterHandler &prm);\r
+\r
+        void\r
+        parse_parameters(ParameterHandler &prm);\r
+      };\r
+\r
+      void OutputParam::declare_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Output parameters");\r
+        {\r
+          prm.declare_entry("Output files", "true",\r
+                            Patterns::Selection("true|false"),\r
+                            "Paraview output files to generate.");\r
+          prm.declare_entry("Time step number output", "1",\r
+                            Patterns::Integer(0),\r
+                            "Output data for time steps multiple of the given "\r
+                            "integer value.");\r
+          prm.declare_entry("Averaged results", "nodes",\r
+                             Patterns::Selection("elements|nodes"),\r
+                             "Output data associated with integration point values"\r
+                             " averaged on elements or on nodes.");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+      void OutputParam::parse_parameters(ParameterHandler &prm)\r
+      {\r
+        prm.enter_subsection("Output parameters");\r
+        {\r
+          outfiles_requested = prm.get("Output files");\r
+          timestep_output = prm.get_integer("Time step number output");\r
+          outtype = prm.get("Averaged results");\r
+        }\r
+        prm.leave_subsection();\r
+      }\r
+\r
+// @sect4{All parameters}\r
+// We finally consolidate all of the above structures into a single container that holds all the run-time selections.\r
+      struct AllParameters : public FESystem,\r
+                             public Geometry,\r
+                             public Materials,\r
+                             public NonlinearSolver,\r
+                             public Time,\r
+                             public OutputParam\r
+      {\r
+        AllParameters(const std::string &input_file);\r
+\r
+        static void\r
+        declare_parameters(ParameterHandler &prm);\r
+\r
+        void\r
+        parse_parameters(ParameterHandler &prm);\r
+      };\r
+\r
+      AllParameters::AllParameters(const std::string &input_file)\r
+      {\r
+        ParameterHandler prm;\r
+        declare_parameters(prm);\r
+        prm.parse_input(input_file);\r
+        parse_parameters(prm);\r
+      }\r
+\r
+      void AllParameters::declare_parameters(ParameterHandler &prm)\r
+      {\r
+        FESystem::declare_parameters(prm);\r
+        Geometry::declare_parameters(prm);\r
+        Materials::declare_parameters(prm);\r
+        NonlinearSolver::declare_parameters(prm);\r
+        Time::declare_parameters(prm);\r
+        OutputParam::declare_parameters(prm);\r
+      }\r
+\r
+      void AllParameters::parse_parameters(ParameterHandler &prm)\r
+      {\r
+        FESystem::parse_parameters(prm);\r
+        Geometry::parse_parameters(prm);\r
+        Materials::parse_parameters(prm);\r
+        NonlinearSolver::parse_parameters(prm);\r
+        Time::parse_parameters(prm);\r
+        OutputParam::parse_parameters(prm);\r
+      }\r
+    }\r
+\r
+// @sect3{Time class}\r
+// A simple class to store time data.\r
+// For simplicity we assume a constant time step size.\r
+    class Time\r
+    {\r
+        public:\r
+          Time (const double time_end,\r
+                const double delta_t)\r
+            :\r
+            timestep(0),\r
+            time_current(0.0),\r
+            time_end(time_end),\r
+            delta_t(delta_t)\r
+          {}\r
+\r
+          virtual ~Time()\r
+          {}\r
+\r
+          double get_current() const\r
+          {\r
+            return time_current;\r
+          }\r
+          double get_end() const\r
+          {\r
+            return time_end;\r
+          }\r
+          double get_delta_t() const\r
+          {\r
+            return delta_t;\r
+          }\r
+          unsigned int get_timestep() const\r
+          {\r
+            return timestep;\r
+          }\r
+          void increment_time ()\r
+          {\r
+            time_current += delta_t;\r
+            ++timestep;\r
+          }\r
+\r
+        private:\r
+          unsigned int timestep;\r
+          double time_current;\r
+          double time_end;\r
+          const double delta_t;\r
+    };\r
+\r
+// @sect3{Constitutive equation for the solid component of the biphasic material}\r
+\r
+//@sect4{Base class: generic hyperelastic material}\r
+// The ``extra" Kirchhoff stress in the solid component is the sum of isochoric\r
+// and a volumetric part.\r
+// $\mathbf{\tau} = \mathbf{\tau}_E^{(\bullet)} + \mathbf{\tau}^{\textrm{vol}}$\r
+// The deviatoric part changes depending on the type of material model selected:\r
+// Neo-Hooken hyperelasticity, Ogden hyperelasticiy,\r
+// or a single-mode finite viscoelasticity based on the Ogden hyperelastic model.\r
+// In this base class we declare  it as a virtual function,\r
+// and it will be defined for each model type in the corresponding derived class.\r
+// We define here the volumetric component, which depends on the\r
+// extension function $U(J_S)$ selected, and in this case is the same for all models.\r
+// We use the function proposed by\r
+// Ehlers & Eipper 1999 doi:10.1023/A:1006565509095\r
+// We also define some public functions to access and update the internal variables.\r
+    template <int dim, typename NumberType = Sacado::Fad::DFad<double> >\r
+    class Material_Hyperelastic\r
+    {\r
+        public:\r
+          Material_Hyperelastic(const Parameters::AllParameters &parameters,\r
+                                const Time                      &time)\r
+            :\r
+            n_OS (parameters.solid_vol_frac),\r
+            lambda (parameters.lambda),\r
+            time(time),\r
+            det_F (1.0),\r
+            det_F_converged (1.0),\r
+            eigen_solver (parameters.eigen_solver)\r
+           {}\r
+          ~Material_Hyperelastic()\r
+          {}\r
+\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_tau_E(const Tensor<2,dim, NumberType> &F) const\r
+          {\r
+            return ( get_tau_E_base(F) + get_tau_E_ext_func(F) );\r
+          }\r
+\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_Cauchy_E(const Tensor<2, dim, NumberType> &F) const\r
+          {\r
+              const NumberType det_F = determinant(F);\r
+              Assert(det_F > 0, ExcInternalError());\r
+              return get_tau_E(F)*NumberType(1/det_F);\r
+          }\r
+\r
+          double\r
+          get_converged_det_F() const\r
+          {\r
+              return  det_F_converged;\r
+          }\r
+\r
+          virtual void\r
+          update_end_timestep()\r
+          {\r
+              det_F_converged = det_F;\r
+          }\r
+\r
+          virtual void\r
+          update_internal_equilibrium( const Tensor<2, dim, NumberType> &F )\r
+          {\r
+              det_F = Tensor<0,dim,double>(determinant(F));\r
+          }\r
+\r
+          virtual double\r
+          get_viscous_dissipation( ) const = 0;\r
+\r
+          const double n_OS;\r
+          const double lambda;\r
+          const Time  &time;\r
+          double det_F;\r
+          double det_F_converged;\r
+          const enum SymmetricTensorEigenvectorMethod eigen_solver;\r
+\r
+        protected:\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_tau_E_ext_func(const Tensor<2,dim, NumberType> &F) const\r
+          {\r
+              const NumberType det_F = determinant(F);\r
+              Assert(det_F > 0, ExcInternalError());\r
+\r
+              static const SymmetricTensor< 2, dim, double>\r
+                    I (Physics::Elasticity::StandardTensors<dim>::I);\r
+              return  ( NumberType(lambda * (1.0-n_OS)*(1.0-n_OS)\r
+                         * (det_F/(1.0-n_OS) - det_F/(det_F-n_OS))) * I );\r
+          }\r
+\r
+          virtual SymmetricTensor<2, dim, NumberType>\r
+           get_tau_E_base(const Tensor<2,dim, NumberType> &F) const = 0;\r
+    };\r
+\r
+//@sect4{Derived class: Neo-Hookean hyperelastic material}\r
+    template <int dim, typename NumberType = Sacado::Fad::DFad<double> >\r
+    class NeoHooke : public Material_Hyperelastic < dim, NumberType >\r
+    {\r
+        public:\r
+            NeoHooke(const Parameters::AllParameters &parameters,\r
+                     const Time                      &time)\r
+            :\r
+            Material_Hyperelastic< dim, NumberType > (parameters,time),\r
+            mu(parameters.mu)\r
+           {}\r
+          virtual ~NeoHooke()\r
+          {}\r
+\r
+           double\r
+           get_viscous_dissipation() const\r
+           {\r
+               return 0.0;\r
+           }\r
+\r
+        protected:\r
+          const double mu;\r
+\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_tau_E_base(const Tensor<2,dim, NumberType> &F) const\r
+          {\r
+             static const SymmetricTensor< 2, dim, double>\r
+                I (Physics::Elasticity::StandardTensors<dim>::I);\r
+\r
+             const bool use_standard_model = true;\r
+\r
+             if (use_standard_model)\r
+             {\r
+               // Standard Neo-Hooke\r
+               return ( mu * ( symmetrize(F * transpose(F)) - I ) );\r
+             }\r
+             else\r
+             {\r
+               // Neo-Hooke in terms of principal stretches\r
+               const SymmetricTensor<2, dim, NumberType>\r
+                B = symmetrize(F * transpose(F));\r
+               const std::array< std::pair< NumberType, Tensor< 1, dim, NumberType > >, dim >\r
+                eigen_B = eigenvectors(B, this->eigen_solver);\r
+\r
+               SymmetricTensor<2, dim, NumberType> B_ev;\r
+               for (unsigned int d=0; d<dim; ++d)\r
+                 B_ev += eigen_B[d].first*symmetrize(outer_product(eigen_B[d].second,eigen_B[d].second));\r
+\r
+                return ( mu*(B_ev-I) );\r
+             }\r
+          }\r
+    };\r
+\r
+//@sect4{Derived class: Ogden hyperelastic material}\r
+    template <int dim, typename NumberType = Sacado::Fad::DFad<double> >\r
+    class Ogden : public Material_Hyperelastic < dim, NumberType >\r
+    {\r
+        public:\r
+          Ogden(const Parameters::AllParameters &parameters,\r
+                const Time                      &time)\r
+          :\r
+          Material_Hyperelastic< dim, NumberType > (parameters,time),\r
+          mu({parameters.mu1_infty,\r
+              parameters.mu2_infty,\r
+              parameters.mu3_infty}),\r
+          alpha({parameters.alpha1_infty,\r
+                 parameters.alpha2_infty,\r
+                 parameters.alpha3_infty})\r
+           {}\r
+          virtual ~Ogden()\r
+          {}\r
+\r
+           double\r
+           get_viscous_dissipation() const\r
+           {\r
+               return 0.0;\r
+           }\r
+\r
+        protected:\r
+          std::vector<double> mu;\r
+          std::vector<double> alpha;\r
+\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_tau_E_base(const Tensor<2,dim, NumberType> &F) const\r
+          {\r
+            const SymmetricTensor<2, dim, NumberType>\r
+             B = symmetrize(F * transpose(F));\r
+\r
+            const std::array< std::pair< NumberType, Tensor< 1, dim, NumberType > >, dim >\r
+             eigen_B = eigenvectors(B, this->eigen_solver);\r
+\r
+            SymmetricTensor<2, dim, NumberType>  tau;\r
+            static const SymmetricTensor< 2, dim, double>\r
+              I (Physics::Elasticity::StandardTensors<dim>::I);\r
+\r
+            for (unsigned int i = 0; i < 3; ++i)\r
+            {\r
+                for (unsigned int A = 0; A < dim; ++A)\r
+                {\r
+                    SymmetricTensor<2, dim, NumberType>  tau_aux1 = symmetrize(\r
+                            outer_product(eigen_B[A].second,eigen_B[A].second));\r
+                    tau_aux1 *= mu[i]*std::pow(eigen_B[A].first, (alpha[i]/2.) );\r
+                    tau += tau_aux1;\r
+                }\r
+                SymmetricTensor<2, dim, NumberType>  tau_aux2 (I);\r
+                tau_aux2 *= mu[i];\r
+                tau -= tau_aux2;\r
+            }\r
+            return tau;\r
+          }\r
+    };\r
+\r
+//@sect4{Derived class: Single-mode Ogden viscoelastic material}\r
+// We use the finite viscoelastic model described in\r
+// Reese & Govindjee (1998) doi:10.1016/S0020-7683(97)00217-5\r
+// The algorithm for the implicit exponential time integration is given in\r
+// Budday et al. (2017) doi: 10.1016/j.actbio.2017.06.024\r
+    template <int dim, typename NumberType = Sacado::Fad::DFad<double> >\r
+    class visco_Ogden : public Material_Hyperelastic < dim, NumberType >\r
+    {\r
+        public:\r
+            visco_Ogden(const Parameters::AllParameters &parameters,\r
+                        const Time                      &time)\r
+            :\r
+            Material_Hyperelastic< dim, NumberType > (parameters,time),\r
+            mu_infty({parameters.mu1_infty,\r
+                      parameters.mu2_infty,\r
+                      parameters.mu3_infty}),\r
+            alpha_infty({parameters.alpha1_infty,\r
+                         parameters.alpha2_infty,\r
+                         parameters.alpha3_infty}),\r
+            mu_mode_1({parameters.mu1_mode_1,\r
+                       parameters.mu2_mode_1,\r
+                       parameters.mu3_mode_1}),\r
+            alpha_mode_1({parameters.alpha1_mode_1,\r
+                          parameters.alpha2_mode_1,\r
+                          parameters.alpha3_mode_1}),\r
+            viscosity_mode_1(parameters.viscosity_mode_1),\r
+            Cinv_v_1(Physics::Elasticity::StandardTensors<dim>::I),\r
+            Cinv_v_1_converged(Physics::Elasticity::StandardTensors<dim>::I)\r
+            {}\r
+            virtual ~visco_Ogden()\r
+            {}\r
+\r
+          void\r
+          update_internal_equilibrium( const Tensor<2, dim, NumberType> &F )\r
+          {\r
+              Material_Hyperelastic < dim, NumberType >::update_internal_equilibrium(F);\r
+\r
+              this->Cinv_v_1 = this->Cinv_v_1_converged;\r
+              SymmetricTensor<2, dim, NumberType> B_e_1_tr = symmetrize(F * this->Cinv_v_1 * transpose(F));\r
+\r
+              const std::array< std::pair< NumberType, Tensor< 1, dim, NumberType > >, dim >\r
+                eigen_B_e_1_tr = eigenvectors(B_e_1_tr, this->eigen_solver);\r
+\r
+              Tensor< 1, dim, NumberType > lambdas_e_1_tr;\r
+              Tensor< 1, dim, NumberType > epsilon_e_1_tr;\r
+              for (int a = 0; a < dim; ++a)\r
+              {\r
+                  lambdas_e_1_tr[a] = std::sqrt(eigen_B_e_1_tr[a].first);\r
+                  epsilon_e_1_tr[a] = std::log(lambdas_e_1_tr[a]);\r
+              }\r
+\r
+             const double tolerance = 1e-8;\r
+             double residual_check = tolerance*10.0;\r
+             Tensor< 1, dim, NumberType > residual;\r
+             Tensor< 2, dim, NumberType > tangent;\r
+             static const SymmetricTensor< 2, dim, double> I(Physics::Elasticity::StandardTensors<dim>::I);\r
+             NumberType J_e_1 = std::sqrt(determinant(B_e_1_tr));\r
+\r
+             std::vector<NumberType> lambdas_e_1_iso(dim);\r
+             SymmetricTensor<2, dim, NumberType> B_e_1;\r
+             int iteration = 0;\r
+\r
+             Tensor< 1, dim, NumberType > lambdas_e_1;\r
+             Tensor< 1, dim, NumberType > epsilon_e_1;\r
+             epsilon_e_1 = epsilon_e_1_tr;\r
+\r
+              while(residual_check > tolerance)\r
+              {\r
+                  NumberType aux_J_e_1 = 1.0;\r
+                  for (unsigned int a = 0; a < dim; ++a)\r
+                  {\r
+                      lambdas_e_1[a] = std::exp(epsilon_e_1[a]);\r
+                      aux_J_e_1 *= lambdas_e_1[a];\r
+                  }\r
+\r
+                  J_e_1 = aux_J_e_1;\r
+\r
+                  for (unsigned int a = 0; a < dim; ++a)\r
+                      lambdas_e_1_iso[a] = lambdas_e_1[a]*std::pow(J_e_1,-1.0/dim);\r
+\r
+                  for (unsigned int a = 0; a < dim; ++a)\r
+                  {\r
+                      residual[a] = get_beta_mode_1(lambdas_e_1_iso, a);\r
+                      residual[a] *= this->time.get_delta_t()/(2.0*viscosity_mode_1);\r
+                      residual[a] += epsilon_e_1[a];\r
+                      residual[a] -= epsilon_e_1_tr[a];\r
+\r
+                      for (unsigned int b = 0; b < dim; ++b)\r
+                      {\r
+                          tangent[a][b]  = get_gamma_mode_1(lambdas_e_1_iso, a, b);\r
+                          tangent[a][b] *= this->time.get_delta_t()/(2.0*viscosity_mode_1);\r
+                          tangent[a][b] += I[a][b];\r
+                      }\r
+\r
+                  }\r
+                  epsilon_e_1 -= invert(tangent)*residual;\r
+\r
+                  residual_check = 0.0;\r
+                  for (unsigned int a = 0; a < dim; ++a)\r
+                  {\r
+                      if ( std::abs(residual[a]) > residual_check)\r
+                          residual_check = std::abs(Tensor<0,dim,double>(residual[a]));\r
+                  }\r
+                  iteration += 1;\r
+                  if (iteration > 15 )\r
+                      throw std::runtime_error ("No convergence in local Newton iteration for the "\r
+                                                "viscoelastic exponential time integration algorithm.");\r
+              }\r
+\r
+              NumberType aux_J_e_1 = 1.0;\r
+              for (unsigned int a = 0; a < dim; ++a)\r
+              {\r
+                  lambdas_e_1[a] = std::exp(epsilon_e_1[a]);\r
+                  aux_J_e_1 *= lambdas_e_1[a];\r
+              }\r
+              J_e_1 = aux_J_e_1;\r
+\r
+              for (unsigned int a = 0; a < dim; ++a)\r
+                  lambdas_e_1_iso[a] = lambdas_e_1[a]*std::pow(J_e_1,-1.0/dim);\r
+\r
+              for (unsigned int a = 0; a < dim; ++a)\r
+              {\r
+                  SymmetricTensor<2, dim, NumberType>\r
+                  B_e_1_aux = symmetrize(outer_product(eigen_B_e_1_tr[a].second,eigen_B_e_1_tr[a].second));\r
+                  B_e_1_aux *= lambdas_e_1[a] * lambdas_e_1[a];\r
+                  B_e_1 += B_e_1_aux;\r
+              }\r
+\r
+              Tensor<2, dim, NumberType>Cinv_v_1_AD = symmetrize(invert(F) * B_e_1 * invert(transpose(F)));\r
+\r
+              this->tau_neq_1 = 0;\r
+              for (unsigned int a = 0; a < dim; ++a)\r
+              {\r
+                  SymmetricTensor<2, dim, NumberType>\r
+                  tau_neq_1_aux = symmetrize(outer_product(eigen_B_e_1_tr[a].second,eigen_B_e_1_tr[a].second));\r
+                  tau_neq_1_aux *=  get_beta_mode_1(lambdas_e_1_iso, a);\r
+                  this->tau_neq_1 += tau_neq_1_aux;\r
+              }\r
+\r
+              // Store history\r
+              for (unsigned int a = 0; a < dim; ++a)\r
+                  for (unsigned int b = 0; b < dim; ++b)\r
+                      this->Cinv_v_1[a][b]= Tensor<0,dim,double>(Cinv_v_1_AD[a][b]);\r
+          }\r
+\r
+          void update_end_timestep()\r
+          {\r
+              Material_Hyperelastic < dim, NumberType >::update_end_timestep();\r
+              this->Cinv_v_1_converged = this->Cinv_v_1;\r
+          }\r
+\r
+           double get_viscous_dissipation() const\r
+           {\r
+               NumberType dissipation_term = get_tau_E_neq() * get_tau_E_neq(); //Double contract the two SymmetricTensor\r
+               dissipation_term /= (2*viscosity_mode_1);\r
+\r
+               return dissipation_term.val();\r
+           }\r
+\r
+        protected:\r
+          std::vector<double> mu_infty;\r
+          std::vector<double> alpha_infty;\r
+          std::vector<double> mu_mode_1;\r
+          std::vector<double> alpha_mode_1;\r
+          double viscosity_mode_1;\r
+          SymmetricTensor<2, dim, double> Cinv_v_1;\r
+          SymmetricTensor<2, dim, double> Cinv_v_1_converged;\r
+          SymmetricTensor<2, dim, NumberType> tau_neq_1;\r
+\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_tau_E_base(const Tensor<2,dim, NumberType> &F) const\r
+          {\r
+              return ( get_tau_E_neq() + get_tau_E_eq(F) );\r
+          }\r
+\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_tau_E_eq(const Tensor<2,dim, NumberType> &F) const\r
+          {\r
+            const SymmetricTensor<2, dim, NumberType> B = symmetrize(F * transpose(F));\r
+\r
+            std::array< std::pair< NumberType, Tensor< 1, dim, NumberType > >, dim > eigen_B;\r
+            eigen_B = eigenvectors(B, this->eigen_solver);\r
+\r
+            SymmetricTensor<2, dim, NumberType>  tau;\r
+            static const SymmetricTensor< 2, dim, double>\r
+              I (Physics::Elasticity::StandardTensors<dim>::I);\r
+\r
+            for (unsigned int i = 0; i < 3; ++i)\r
+            {\r
+                for (unsigned int A = 0; A < dim; ++A)\r
+                {\r
+                    SymmetricTensor<2, dim, NumberType>  tau_aux1 = symmetrize(\r
+                          outer_product(eigen_B[A].second,eigen_B[A].second));\r
+                    tau_aux1 *= mu_infty[i]*std::pow(eigen_B[A].first, (alpha_infty[i]/2.) );\r
+                    tau += tau_aux1;\r
+                }\r
+                SymmetricTensor<2, dim, NumberType>  tau_aux2 (I);\r
+                tau_aux2 *= mu_infty[i];\r
+                tau -= tau_aux2;\r
+            }\r
+            return tau;\r
+          }\r
+\r
+          SymmetricTensor<2, dim, NumberType>\r
+          get_tau_E_neq() const\r
+          {\r
+              return tau_neq_1;\r
+          }\r
+\r
+          NumberType\r
+          get_beta_mode_1(std::vector< NumberType > &lambda, const int &A) const\r
+          {\r
+              NumberType beta = 0.0;\r
+\r
+              for (unsigned int i = 0; i < 3; ++i) //3rd-order Ogden model\r
+              {\r
+\r
+                  NumberType aux = 0.0;\r
+                  for (int p = 0; p < dim; ++p)\r
+                      aux += std::pow(lambda[p],alpha_mode_1[i]);\r
+\r
+                  aux *= -1.0/dim;\r
+                  aux += std::pow(lambda[A], alpha_mode_1[i]);\r
+                  aux *= mu_mode_1[i];\r
+\r
+                  beta  += aux;\r
+              }\r
+              return beta;\r
+          }\r
+\r
+          NumberType\r
+          get_gamma_mode_1(std::vector< NumberType > &lambda,\r
+                           const int                 &A,\r
+                           const int                 &B       ) const\r
+          {\r
+              NumberType gamma = 0.0;\r
+\r
+              if (A==B)\r
+              {\r
+                  for (unsigned int i = 0; i < 3; ++i)\r
+                  {\r
+                      NumberType aux = 0.0;\r
+                      for (int p = 0; p < dim; ++p)\r
+                          aux += std::pow(lambda[p],alpha_mode_1[i]);\r
+\r
+                      aux *= 1.0/(dim*dim);\r
+                      aux += 1.0/dim * std::pow(lambda[A], alpha_mode_1[i]);\r
+                      aux *= mu_mode_1[i]*alpha_mode_1[i];\r
+\r
+                      gamma += aux;\r
+                  }\r
+              }\r
+              else\r
+              {\r
+                  for (unsigned int i = 0; i < 3; ++i)\r
+                  {\r
+                      NumberType aux = 0.0;\r
+                      for (int p = 0; p < dim; ++p)\r
+                          aux += std::pow(lambda[p],alpha_mode_1[i]);\r
+\r
+                      aux *= 1.0/(dim*dim);\r
+                      aux -= 1.0/dim * std::pow(lambda[A], alpha_mode_1[i]);\r
+                      aux -= 1.0/dim * std::pow(lambda[B], alpha_mode_1[i]);\r
+                      aux *= mu_mode_1[i]*alpha_mode_1[i];\r
+\r
+                      gamma += aux;\r
+                  }\r
+              }\r
+\r
+              return gamma;\r
+          }\r
+    };\r
+\r
+\r
+// @sect3{Constitutive equation for the fluid component of the biphasic material}\r
+// We consider two slightly different definitions to define the seepage velocity with a Darcy-like law.\r
+// Ehlers & Eipper 1999, doi:10.1023/A:1006565509095\r
+// Markert 2007, doi:10.1007/s11242-007-9107-6\r
+// The selection of one or another is made by the user via the parameters file.\r
+    template <int dim, typename NumberType = Sacado::Fad::DFad<double> >\r
+    class Material_Darcy_Fluid\r
+    {\r
+       public:\r
+         Material_Darcy_Fluid(const Parameters::AllParameters &parameters)\r
+         :\r
+         fluid_type(parameters.fluid_type),\r
+         n_OS(parameters.solid_vol_frac),\r
+         initial_intrinsic_permeability(parameters.init_intrinsic_perm),\r
+         viscosity_FR(parameters.viscosity_FR),\r
+         initial_darcy_coefficient(parameters.init_darcy_coef),\r
+         weight_FR(parameters.weight_FR),\r
+         kappa_darcy(parameters.kappa_darcy),\r
+         gravity_term(parameters.gravity_term),\r
+         density_FR(parameters.density_FR),\r
+         gravity_direction(parameters.gravity_direction),\r
+         gravity_value(parameters.gravity_value)\r
+         {\r
+           Assert(kappa_darcy >= 0, ExcInternalError());\r
+         }\r
+         ~Material_Darcy_Fluid()\r
+         {}\r
+\r
+         Tensor<1, dim, NumberType> get_seepage_velocity_current\r
+                             (const Tensor<2,dim, NumberType> &F,\r
+                              const Tensor<1,dim, NumberType> &grad_p_fluid) const\r
+         {\r
+             const NumberType det_F = determinant(F);\r
+             Assert(det_F > 0.0, ExcInternalError());\r
+\r
+             Tensor<2, dim, NumberType> permeability_term;\r
+\r
+             if (fluid_type == "Markert")\r
+                 permeability_term = get_instrinsic_permeability_current(F) / viscosity_FR;\r
+\r
+             else if (fluid_type == "Ehlers")\r
+                 permeability_term = get_darcy_flow_current(F) / weight_FR;\r
+\r
+             else\r
+                 throw std::runtime_error ("Material_Darcy_Fluid --> Only Markert "\r
+                          "and Ehlers formulations have been implemented.");\r
+\r
+             return ( -1.0 * permeability_term * det_F\r
+                      * (grad_p_fluid - get_body_force_FR_current()) );\r
+         }\r
+\r
+         double get_porous_dissipation(const Tensor<2,dim, NumberType> &F,\r
+                                       const Tensor<1,dim, NumberType> &grad_p_fluid) const\r
+         {\r
+             NumberType dissipation_term;\r
+             Tensor<1, dim, NumberType> seepage_velocity;\r
+             Tensor<2, dim, NumberType> permeability_term;\r
+\r
+             const NumberType det_F = determinant(F);\r
+             Assert(det_F > 0.0, ExcInternalError());\r
+\r
+             if (fluid_type == "Markert")\r
+             {\r
+                 permeability_term = get_instrinsic_permeability_current(F) / viscosity_FR;\r
+                 seepage_velocity = get_seepage_velocity_current(F,grad_p_fluid);\r
+             }\r
+             else if (fluid_type == "Ehlers")\r
+             {\r
+                 permeability_term = get_darcy_flow_current(F) / weight_FR;\r
+                 seepage_velocity = get_seepage_velocity_current(F,grad_p_fluid);\r
+             }\r
+             else\r
+                 throw std::runtime_error ("Material_Darcy_Fluid --> Only Markert and Ehlers formulations have been implemented.");\r
+\r
+             dissipation_term = ( invert(permeability_term) * seepage_velocity ) * seepage_velocity;\r
+             dissipation_term *= 1.0/(det_F*det_F);\r
+             return Tensor<0,dim,double>(dissipation_term);\r
+         }\r
+\r
+       protected:\r
+         const std::string  fluid_type;\r
+         const double n_OS;\r
+         const double initial_intrinsic_permeability;\r
+         const double viscosity_FR;\r
+         const double initial_darcy_coefficient;\r
+         const double weight_FR;\r
+         const double kappa_darcy;\r
+         const bool   gravity_term;\r
+         const double density_FR;\r
+         const int    gravity_direction;\r
+         const double    gravity_value;\r
+\r
+         Tensor<2, dim, NumberType>\r
+         get_instrinsic_permeability_current(const Tensor<2,dim, NumberType> &F) const\r
+         {\r
+           static const SymmetricTensor< 2, dim, double>\r
+               I (Physics::Elasticity::StandardTensors<dim>::I);\r
+           const Tensor<2, dim, NumberType> initial_instrinsic_permeability_tensor\r
+               = Tensor<2, dim, double>(initial_intrinsic_permeability * I);\r
+\r
+           const NumberType det_F = determinant(F);\r
+           Assert(det_F > 0.0, ExcInternalError());\r
+\r
+           const NumberType fraction = (det_F - n_OS)/(1 - n_OS);\r
+           return ( NumberType (std::pow(fraction, kappa_darcy))\r
+                     * initial_instrinsic_permeability_tensor );\r
+         }\r
+\r
+         Tensor<2, dim, NumberType>\r
+         get_darcy_flow_current(const Tensor<2,dim, NumberType> &F) const\r
+         {\r
+           static const SymmetricTensor< 2, dim, double>\r
+              I (Physics::Elasticity::StandardTensors<dim>::I);\r
+           const Tensor<2, dim, NumberType> initial_darcy_flow_tensor\r
+              = Tensor<2, dim, double>(initial_darcy_coefficient * I);\r
+\r
+           const NumberType det_F = determinant(F);\r
+           Assert(det_F > 0.0, ExcInternalError());\r
+\r
+           const NumberType fraction = (1.0 - (n_OS / det_F) )/(1.0 - n_OS);\r
+           return ( NumberType (std::pow(fraction, kappa_darcy))\r
+                     * initial_darcy_flow_tensor);\r
+         }\r
+\r
+        Tensor<1, dim, NumberType>\r
+        get_body_force_FR_current() const\r
+        {\r
+            Tensor<1, dim, NumberType> body_force_FR_current;\r
+\r
+            if (gravity_term == true)\r
+            {\r
+               Tensor<1, dim, NumberType> gravity_vector;\r
+               gravity_vector[gravity_direction] = gravity_value;\r
+               body_force_FR_current = density_FR * gravity_vector;\r
+            }\r
+            return body_force_FR_current;\r
+        }\r
+    };\r
+\r
+// @sect3{Quadrature point history}\r
+// As seen in step-18, the <code> PointHistory </code> class offers a method\r
+// for storing data at the quadrature points.  Here each quadrature point\r
+// holds a pointer to a material description.  Thus, different material models\r
+// can be used in different regions of the domain.  Among other data, we\r
+// choose to store the ``extra" Kirchhoff stress $\boldsymbol{\tau}_E$ and\r
+// the dissipation values $\mathcal{D}_p$ and $\mathcal{D}_v$.\r
+    template <int dim, typename NumberType = Sacado::Fad::DFad<double> > //double>\r
+    class PointHistory\r
+    {\r
+        public:\r
+            PointHistory()\r
+            {}\r
+\r
+            virtual ~PointHistory()\r
+            {}\r
+\r
+            void setup_lqp (const Parameters::AllParameters &parameters,\r
+                            const Time                      &time)\r
+            {\r
+                if (parameters.mat_type == "Neo-Hooke")\r
+                    solid_material.reset(new NeoHooke<dim,NumberType>(parameters,time));\r
+                else if (parameters.mat_type == "Ogden")\r
+                    solid_material.reset(new Ogden<dim,NumberType>(parameters,time));\r
+                else if (parameters.mat_type == "visco-Ogden")\r
+                    solid_material.reset(new visco_Ogden<dim,NumberType>(parameters,time));\r
+                else\r
+                    Assert (false, ExcMessage("Material type not implemented"));\r
+\r
+                fluid_material.reset(new Material_Darcy_Fluid<dim,NumberType>(parameters));\r
+            }\r
+\r
+            SymmetricTensor<2, dim, NumberType>\r
+            get_tau_E(const Tensor<2, dim, NumberType> &F) const\r
+            {\r
+                return solid_material->get_tau_E(F);\r
+            }\r
+\r
+            SymmetricTensor<2, dim, NumberType>\r
+            get_Cauchy_E(const Tensor<2, dim, NumberType> &F) const\r
+            {\r
+                return solid_material->get_Cauchy_E(F);\r
+            }\r
+\r
+            double\r
+            get_converged_det_F() const\r
+            {\r
+              return  solid_material->get_converged_det_F();\r
+            }\r
+\r
+            void\r
+            update_end_timestep()\r
+            {\r
+                solid_material->update_end_timestep();\r
+            }\r
+\r
+            void\r
+            update_internal_equilibrium(const Tensor<2, dim, NumberType> &F )\r
+            {\r
+                solid_material->update_internal_equilibrium(F);\r
+            }\r
+\r
+            double\r
+            get_viscous_dissipation() const\r
+            {\r
+                return solid_material->get_viscous_dissipation();\r
+            }\r
+\r
+            Tensor<1,dim, NumberType>\r
+            get_seepage_velocity_current (const Tensor<2,dim, NumberType> &F,\r
+                                          const Tensor<1,dim, NumberType> &grad_p_fluid) const\r
+             {\r
+                 return fluid_material->get_seepage_velocity_current(F, grad_p_fluid);\r
+             }\r
+\r
+            double\r
+            get_porous_dissipation(const Tensor<2,dim, NumberType> &F,\r
+                                   const Tensor<1,dim, NumberType> &grad_p_fluid) const\r
+            {\r
+                return fluid_material->get_porous_dissipation(F, grad_p_fluid);\r
+            }\r
+\r
+            Tensor<1, dim, NumberType>\r
+            get_overall_body_force (const Tensor<2,dim, NumberType> &F,\r
+                                    const Parameters::AllParameters &parameters) const\r
+            {\r
+                Tensor<1, dim, NumberType> body_force;\r
+\r
+                if (parameters.gravity_term == true)\r
+                {\r
+                    const NumberType det_F_AD = determinant(F);\r
+                    Assert(det_F_AD > 0.0, ExcInternalError());\r
+\r
+                    const NumberType overall_density_ref\r
+                        = parameters.density_SR * parameters.solid_vol_frac\r
+                          + parameters.density_FR\r
+                          * (det_F_AD - parameters.solid_vol_frac);\r
+\r
+                   Tensor<1, dim, NumberType> gravity_vector;\r
+                   gravity_vector[parameters.gravity_direction] = parameters.gravity_value;\r
+                   body_force = overall_density_ref * gravity_vector;\r
+                }\r
+\r
+                return body_force;\r
+            }\r
+        private:\r
+            std_cxx11::shared_ptr< Material_Hyperelastic<dim, NumberType> > solid_material;\r
+            std_cxx11::shared_ptr< Material_Darcy_Fluid<dim, NumberType> > fluid_material;\r
+    };\r
+\r
+// @sect3{Nonlinear poro-viscoelastic solid}\r
+// The Solid class is the central class as it represents the problem at hand:\r
+// the nonlinear poro-viscoelastic solid\r
+    template <int dim>\r
+    class Solid\r
+    {\r
+          public:\r
+            Solid(const Parameters::AllParameters &parameters);\r
+            virtual ~Solid();\r
+            void run();\r
+\r
+          protected:\r
+            typedef Sacado::Fad::DFad<double> ADNumberType;\r
+\r
+            std::ofstream outfile;\r
+            std::ofstream pointfile;\r
+\r
+            struct PerTaskData_ASM;\r
+            template<typename NumberType = double> struct ScratchData_ASM;\r
+\r
+            //Generate mesh\r
+            virtual void make_grid() = 0;\r
+\r
+            //Define points for post-processing\r
+            virtual void define_tracked_vertices(std::vector<Point<dim> > &tracked_vertices) = 0;\r
+\r
+            //Set up the finite element system to be solved:\r
+            void system_setup(TrilinosWrappers::MPI::BlockVector &solution_delta_OUT);\r
+\r
+            //Extract sub-blocks from the global matrix\r
+            void determine_component_extractors();\r
+\r
+            // Several functions to assemble the system and right hand side matrices using multithreading.\r
+            void assemble_system\r
+                  (const TrilinosWrappers::MPI::BlockVector &solution_delta_OUT );\r
+            void assemble_system_one_cell\r
+                  (const typename DoFHandler<dim>::active_cell_iterator &cell,\r
+                   ScratchData_ASM<ADNumberType> &scratch,\r
+                   PerTaskData_ASM &data) const;\r
+            void copy_local_to_global_system(const PerTaskData_ASM &data);\r
+\r
+            // Define boundary conditions\r
+            virtual void make_constraints(const int &it_nr);\r
+            virtual void make_dirichlet_constraints(AffineConstraints<double> &constraints) = 0;\r
+            virtual Tensor<1,dim> get_neumann_traction\r
+                   (const types::boundary_id &boundary_id,\r
+                    const Point<dim>         &pt,\r
+                    const Tensor<1,dim>      &N) const = 0;\r
+            virtual double get_prescribed_fluid_flow\r
+                   (const types::boundary_id &boundary_id,\r
+                    const Point<dim>         &pt) const = 0;\r
+            virtual types::boundary_id\r
+                     get_reaction_boundary_id_for_output () const = 0;\r
+            virtual std::pair<types::boundary_id,types::boundary_id>\r
+                     get_drained_boundary_id_for_output () const = 0;\r
+            virtual std::vector<double> get_dirichlet_load\r
+                    (const types::boundary_id   &boundary_id,\r
+                     const int                  &direction) const = 0;\r
+\r
+            // Create and update the quadrature points.\r
+            void setup_qph();\r
+\r
+            //Solve non-linear system using a Newton-Raphson scheme\r
+            void solve_nonlinear_timestep(TrilinosWrappers::MPI::BlockVector &solution_delta_OUT);\r
+\r
+            //Solve the linearized equations using a direct solver\r
+            void solve_linear_system ( TrilinosWrappers::MPI::BlockVector &newton_update_OUT);\r
+\r
+            //Retrieve the  solution\r
+            TrilinosWrappers::MPI::BlockVector\r
+            get_total_solution(const TrilinosWrappers::MPI::BlockVector &solution_delta_IN) const;\r
+\r
+            // Store the converged values of the internal variables at the end of each timestep\r
+            void update_end_timestep();\r
+\r
+            //Post-processing and writing data to files\r
+            void output_results_to_vtu(const unsigned int timestep,\r
+                                       const double current_time,\r
+                                       TrilinosWrappers::MPI::BlockVector solution) const;\r
+            void output_results_to_plot(const unsigned int timestep,\r
+                                        const double current_time,\r
+                                        TrilinosWrappers::MPI::BlockVector solution,\r
+                                        std::vector<Point<dim> > &tracked_vertices,\r
+                                        std::ofstream &pointfile) const;\r
+\r
+            // Headers and footer for the output files\r
+            void print_console_file_header( std::ofstream &outfile) const;\r
+            void print_plot_file_header(std::vector<Point<dim> > &tracked_vertices,\r
+                                        std::ofstream &pointfile) const;\r
+            void print_console_file_footer(std::ofstream &outfile) const;\r
+            void print_plot_file_footer( std::ofstream &pointfile) const;\r
+\r
+            // For parallel communication\r
+            MPI_Comm                         mpi_communicator;\r
+            const unsigned int               n_mpi_processes;\r
+            const unsigned int               this_mpi_process;\r
+            mutable ConditionalOStream       pcout;\r
+\r
+            //A collection of the parameters used to describe the problem setup\r
+            const Parameters::AllParameters &parameters;\r
+\r
+            //Declare an instance of dealii Triangulation class (mesh)\r
+            Triangulation<dim>  triangulation;\r
+\r
+            // Keep track of the current time and the time spent evaluating certain functions\r
+            Time          time;\r
+            TimerOutput   timerconsole;\r
+            TimerOutput   timerfile;\r
+\r
+            // A storage object for quadrature point information.\r
+            CellDataStorage<typename Triangulation<dim>::cell_iterator, PointHistory<dim,ADNumberType> > quadrature_point_history;\r
+\r
+            //Integers to store polynomial degree (needed for output)\r
+            const unsigned int  degree_displ;\r
+            const unsigned int  degree_pore;\r
+\r
+            //Declare an instance of dealii FESystem class (finite element definition)\r
+            const FESystem<dim> fe;\r
+\r
+            //Declare an instance of dealii DoFHandler class (assign DoFs to mesh)\r
+            DoFHandler<dim>     dof_handler_ref;\r
+\r
+            //Integer to store DoFs per element (this value will be used often)\r
+            const unsigned int  dofs_per_cell;\r
+\r
+            //Declare an instance of dealii Extractor objects used to retrieve information from the solution vectors\r
+            //We will use "u_fe" and "p_fluid_fe"as subscript in operator [] expressions on FEValues and FEFaceValues\r
+            //objects to extract the components of the displacement vector and fluid pressure, respectively.\r
+            const FEValuesExtractors::Vector u_fe;\r
+            const FEValuesExtractors::Scalar p_fluid_fe;\r
+\r
+            // Description of how the block-system is arranged. There are 3 blocks:\r
+            //   0 - vector DOF displacements u\r
+            //   1 - scalar DOF fluid pressure p_fluid\r
+            static const unsigned int  n_blocks = 2;\r
+            static const unsigned int  n_components = dim+1;\r
+            static const unsigned int  first_u_component = 0;\r
+            static const unsigned int  p_fluid_component = dim;\r
+\r
+            enum\r
+            {\r
+              u_block = 0,\r
+              p_fluid_block = 1\r
+            };\r
+\r
+            // Extractors\r
+            const FEValuesExtractors::Scalar x_displacement;\r
+            const FEValuesExtractors::Scalar y_displacement;\r
+            const FEValuesExtractors::Scalar z_displacement;\r
+            const FEValuesExtractors::Scalar pressure;\r
+\r
+            // Block data\r
+            std::vector<unsigned int> block_component;\r
+\r
+            // DoF index data\r
+            std::vector<IndexSet> all_locally_owned_dofs;\r
+            IndexSet locally_owned_dofs;\r
+            IndexSet locally_relevant_dofs;\r
+            std::vector<IndexSet> locally_owned_partitioning;\r
+            std::vector<IndexSet> locally_relevant_partitioning;\r
+\r
+            std::vector<types::global_dof_index>   dofs_per_block;\r
+            std::vector<types::global_dof_index>   element_indices_u;\r
+            std::vector<types::global_dof_index>   element_indices_p_fluid;\r
+\r
+            //Declare an instance of dealii QGauss class (The Gauss-Legendre family of quadrature rules for numerical integration)\r
+            //Gauss Points in element, with n quadrature points (in each space direction <dim> )\r
+            const QGauss<dim>                qf_cell;\r
+            //Gauss Points on element faces (used for definition of BCs)\r
+            const QGauss<dim - 1>            qf_face;\r
+            //Integer to store num GPs per element (this value will be used often)\r
+            const unsigned int               n_q_points;\r
+            //Integer to store num GPs per face (this value will be used often)\r
+            const unsigned int               n_q_points_f;\r
+\r
+            //Declare an instance of dealii AffineConstraints class (linear constraints on DoFs due to hanging nodes or BCs)\r
+            AffineConstraints<double>        constraints;\r
+\r
+            //Declare an instance of dealii classes necessary for FE system set-up and assembly\r
+            //Store elements of tangent matrix (indicated by SparsityPattern class) as sparse matrix (more efficient)\r
+            TrilinosWrappers::BlockSparseMatrix tangent_matrix;\r
+            TrilinosWrappers::BlockSparseMatrix tangent_matrix_preconditioner;\r
+            //Right hand side vector of forces\r
+            TrilinosWrappers::MPI::BlockVector  system_rhs;\r
+            //Total displacement values + pressure (accumulated solution to FE system)\r
+            TrilinosWrappers::MPI::BlockVector  solution_n;\r
+\r
+            // Non-block system for the direct solver. We will copy the block system into these to solve the linearized system of equations.\r
+            TrilinosWrappers::SparseMatrix tangent_matrix_nb;\r
+            TrilinosWrappers::MPI::Vector  system_rhs_nb;\r
+\r
+            //We define variables to store norms and update norms and normalisation factors.\r
+            struct Errors\r
+            {\r
+              Errors()\r
+                :\r
+                norm(1.0), u(1.0), p_fluid(1.0)\r
+              {}\r
+\r
+              void reset()\r
+              {\r
+                norm = 1.0;\r
+                u = 1.0;\r
+                p_fluid = 1.0;\r
+              }\r
+              void normalise(const Errors &rhs)\r
+              {\r
+                if (rhs.norm != 0.0)\r
+                  norm /= rhs.norm;\r
+                if (rhs.u != 0.0)\r
+                  u /= rhs.u;\r
+                if (rhs.p_fluid != 0.0)\r
+                  p_fluid /= rhs.p_fluid;\r
+              }\r
+\r
+              double norm, u, p_fluid;\r
+            };\r
+\r
+            //Declare several instances of the "Error" structure\r
+            Errors error_residual, error_residual_0, error_residual_norm, error_update,\r
+                   error_update_0, error_update_norm;\r
+\r
+            // Methods to calculate error measures\r
+            void get_error_residual(Errors &error_residual_OUT);\r
+            void get_error_update\r
+                 (const TrilinosWrappers::MPI::BlockVector &newton_update_IN,\r
+                  Errors                                   &error_update_OUT);\r
+\r
+            // Print information to screen\r
+            void print_conv_header();\r
+            void print_conv_footer();\r
+\r
+//NOTE: In all functions, we pass by reference (&), so these functions work on the original copy (not a clone copy),\r
+//      modifying the input variables inside the functions will change them outside the function.\r
+    };\r
+\r
+// @sect3{Implementation of the <code>Solid</code> class}\r
+// @sect4{Public interface}\r
+// We initialise the Solid class using data extracted from the parameter file.\r
+    template <int dim>\r
+    Solid<dim>::Solid(const Parameters::AllParameters &parameters)\r
+        :\r
+        mpi_communicator(MPI_COMM_WORLD),\r
+        n_mpi_processes (Utilities::MPI::n_mpi_processes(mpi_communicator)),\r
+        this_mpi_process (Utilities::MPI::this_mpi_process(mpi_communicator)),\r
+        pcout(std::cout, this_mpi_process == 0),\r
+        parameters(parameters),\r
+        triangulation(Triangulation<dim>::maximum_smoothing),\r
+        time(parameters.end_time, parameters.delta_t),\r
+        timerconsole( mpi_communicator,\r
+                      pcout,\r
+                      TimerOutput::summary,\r
+                      TimerOutput::wall_times),\r
+        timerfile( mpi_communicator,\r
+                   outfile,\r
+                   TimerOutput::summary,\r
+                   TimerOutput::wall_times),\r
+        degree_displ(parameters.poly_degree_displ),\r
+        degree_pore(parameters.poly_degree_pore),\r
+        fe( FE_Q<dim>(parameters.poly_degree_displ), dim,\r
+            FE_Q<dim>(parameters.poly_degree_pore), 1 ),\r
+        dof_handler_ref(triangulation),\r
+        dofs_per_cell (fe.dofs_per_cell),\r
+        u_fe(first_u_component),\r
+        p_fluid_fe(p_fluid_component),\r
+        x_displacement(first_u_component),\r
+        y_displacement(first_u_component+1),\r
+        z_displacement(first_u_component+2),\r
+        pressure(p_fluid_component),\r
+        dofs_per_block(n_blocks),\r
+        qf_cell(parameters.quad_order),\r
+        qf_face(parameters.quad_order),\r
+        n_q_points (qf_cell.size()),\r
+        n_q_points_f (qf_face.size())\r
+        {\r
+         Assert(dim==3, ExcMessage("This problem only works in 3 space dimensions."));\r
+         determine_component_extractors();\r
+        }\r
+\r
+    //The class destructor simply clears the data held by the DOFHandler\r
+    template <int dim>\r
+    Solid<dim>::~Solid()\r
+    {\r
+        dof_handler_ref.clear();\r
+    }\r
+\r
+//Runs the 3D solid problem\r
+    template <int dim>\r
+    void Solid<dim>::run()\r
+    {\r
+          //The current solution increment is defined as a block vector to reflect the structure\r
+          //of the PDE system, with multiple solution components\r
+          TrilinosWrappers::MPI::BlockVector solution_delta;\r
+\r
+          //Open file\r
+          if (this_mpi_process == 0)\r
+          {\r
+              outfile.open("console-output.sol");\r
+              print_console_file_header(outfile);\r
+          }\r
+\r
+          //Generate mesh\r
+          make_grid();\r
+\r
+          //Assign DOFs and create the stiffness and right-hand-side force vector\r
+          system_setup(solution_delta);\r
+\r
+          //Define points for post-processing\r
+          std::vector<Point<dim> > tracked_vertices (2);\r
+          define_tracked_vertices(tracked_vertices);\r
+          std::vector<Point<dim>> reaction_force;\r
+\r
+          if (this_mpi_process == 0)\r
+          {\r
+              pointfile.open("data-for-gnuplot.sol");\r
+              print_plot_file_header(tracked_vertices, pointfile);\r
+          }\r
+\r
+          //Print results to output file\r
+          if (parameters.outfiles_requested == "true")\r
+          {\r
+                output_results_to_vtu(time.get_timestep(),\r
+                                      time.get_current(),\r
+                                      solution_n           );\r
+          }\r
+\r
+          output_results_to_plot(time.get_timestep(),\r
+                                 time.get_current(),\r
+                                 solution_n,\r
+                                 tracked_vertices,\r
+                                 pointfile);\r
+\r
+          //Increment time step (=load step)\r
+          //NOTE: In solving the quasi-static problem, the time becomes a loading parameter,\r
+          //i.e. we increase the loading linearly with time, making the two concepts interchangeable.\r
+          time.increment_time();\r
+\r
+          //Print information on screen\r
+          pcout << "\nSolver:";\r
+          pcout << "\n  CST     = make constraints";\r
+          pcout << "\n  ASM_SYS = assemble system";\r
+          pcout << "\n  SLV     = linear solver \n";\r
+\r
+          //Print information on file\r
+          outfile << "\nSolver:";\r
+          outfile << "\n  CST     = make constraints";\r
+          outfile << "\n  ASM_SYS = assemble system";\r
+          outfile << "\n  SLV     = linear solver \n";\r
+\r
+          while ( (time.get_end() - time.get_current()) > -1.0*parameters.tol_u )\r
+            {\r
+              //Initialize the current solution increment to zero\r
+              solution_delta = 0.0;\r
+\r
+              //Solve the non-linear system using a Newton-Rapshon scheme\r
+              solve_nonlinear_timestep(solution_delta);\r
+\r
+              //Add the computed solution increment to total solution\r
+              solution_n += solution_delta;\r
+\r
+              //Store the converged values of the internal variables\r
+              update_end_timestep();\r
+\r
+              //Output results\r
+              if (( (time.get_timestep()%parameters.timestep_output) == 0 )\r
+                   && (parameters.outfiles_requested == "true") )\r
+              {\r
+                      output_results_to_vtu(time.get_timestep(),\r
+                                            time.get_current(),\r
+                                            solution_n           );\r
+              }\r
+\r
+              output_results_to_plot(time.get_timestep(),\r
+                                     time.get_current(),\r
+                                     solution_n,\r
+                                     tracked_vertices,\r
+                                     pointfile);\r
+\r
+              //Increment the time step (=load step)\r
+              time.increment_time();\r
+            }\r
+\r
+          //Print the footers and close files\r
+          if (this_mpi_process == 0)\r
+          {\r
+              print_plot_file_footer(pointfile);\r
+              pointfile.close ();\r
+              print_console_file_footer(outfile);\r
+\r
+              //NOTE: ideally, we should close the outfile here [ >> outfile.close (); ]\r
+              //But if we do, then the timer output will not be printed. That is why we leave it open.\r
+          }\r
+    }\r
+\r
+// @sect4{Private interface}\r
+// We define the structures needed for parallelization with Threading Building Blocks (TBB)\r
+// Tangent matrix and right-hand side force vector assembly structures.\r
+// PerTaskData_ASM stores local contributions\r
+    template <int dim>\r
+    struct Solid<dim>::PerTaskData_ASM\r
+    {\r
+        FullMatrix<double>        cell_matrix;\r
+        Vector<double>            cell_rhs;\r
+        std::vector<types::global_dof_index> local_dof_indices;\r
+\r
+        PerTaskData_ASM(const unsigned int dofs_per_cell)\r
+          :\r
+          cell_matrix(dofs_per_cell, dofs_per_cell),\r
+          cell_rhs(dofs_per_cell),\r
+          local_dof_indices(dofs_per_cell)\r
+        {}\r
+\r
+        void reset()\r
+        {\r
+          cell_matrix = 0.0;\r
+          cell_rhs = 0.0;\r
+        }\r
+    };\r
+\r
+    // ScratchData_ASM stores larger objects used during the assembly\r
+    template <int dim>\r
+    template <typename NumberType>\r
+    struct Solid<dim>::ScratchData_ASM\r
+    {\r
+        const TrilinosWrappers::MPI::BlockVector &solution_total;\r
+\r
+        //Integration helper\r
+        FEValues<dim>     fe_values_ref;\r
+        FEFaceValues<dim> fe_face_values_ref;\r
+\r
+        // Quadrature point solution\r
+        std::vector<NumberType>                  local_dof_values;\r
+        std::vector<Tensor<2, dim, NumberType> > solution_grads_u_total;\r
+        std::vector<NumberType>                  solution_values_p_fluid_total;\r
+        std::vector<Tensor<1, dim, NumberType> > solution_grads_p_fluid_total;\r
+        std::vector<Tensor<1, dim, NumberType> > solution_grads_face_p_fluid_total;\r
+\r
+        //shape function values\r
+        std::vector<std::vector<Tensor<1,dim>>>          Nx;\r
+        std::vector<std::vector<double>>                 Nx_p_fluid;\r
+        //shape function gradients\r
+        std::vector<std::vector<Tensor<2,dim, NumberType>>>          grad_Nx;\r
+        std::vector<std::vector<SymmetricTensor<2,dim, NumberType>>> symm_grad_Nx;\r
+        std::vector<std::vector<Tensor<1,dim, NumberType>>>          grad_Nx_p_fluid;\r
+\r
+        ScratchData_ASM(const FiniteElement<dim> &fe_cell,\r
+                        const QGauss<dim> &qf_cell, const UpdateFlags uf_cell,\r
+                        const QGauss<dim - 1> & qf_face, const UpdateFlags uf_face,\r
+                        const TrilinosWrappers::MPI::BlockVector &solution_total    )\r
+          :\r
+          solution_total (solution_total),\r
+          fe_values_ref(fe_cell, qf_cell, uf_cell),\r
+          fe_face_values_ref(fe_cell, qf_face, uf_face),\r
+          local_dof_values(fe_cell.dofs_per_cell),\r
+          solution_grads_u_total(qf_cell.size()),\r
+          solution_values_p_fluid_total(qf_cell.size()),\r
+          solution_grads_p_fluid_total(qf_cell.size()),\r
+          solution_grads_face_p_fluid_total(qf_face.size()),\r
+          Nx(qf_cell.size(), std::vector<Tensor<1,dim>>(fe_cell.dofs_per_cell)),\r
+          Nx_p_fluid(qf_cell.size(), std::vector<double>(fe_cell.dofs_per_cell)),\r
+          grad_Nx(qf_cell.size(), std::vector<Tensor<2, dim, NumberType>>(fe_cell.dofs_per_cell)),\r
+          symm_grad_Nx(qf_cell.size(), std::vector<SymmetricTensor<2, dim, NumberType>> (fe_cell.dofs_per_cell)),\r
+          grad_Nx_p_fluid(qf_cell.size(), std::vector<Tensor<1, dim, NumberType>>(fe_cell.dofs_per_cell))\r
+        {}\r
+\r
+        ScratchData_ASM(const ScratchData_ASM &rhs)\r
+          :\r
+          solution_total (rhs.solution_total),\r
+          fe_values_ref(rhs.fe_values_ref.get_fe(),\r
+                        rhs.fe_values_ref.get_quadrature(),\r
+                        rhs.fe_values_ref.get_update_flags()),\r
+          fe_face_values_ref(rhs.fe_face_values_ref.get_fe(),\r
+                             rhs.fe_face_values_ref.get_quadrature(),\r
+                             rhs.fe_face_values_ref.get_update_flags()),\r
+          local_dof_values(rhs.local_dof_values),\r
+          solution_grads_u_total(rhs.solution_grads_u_total),\r
+          solution_values_p_fluid_total(rhs.solution_values_p_fluid_total),\r
+          solution_grads_p_fluid_total(rhs.solution_grads_p_fluid_total),\r
+          solution_grads_face_p_fluid_total(rhs.solution_grads_face_p_fluid_total),\r
+          Nx(rhs.Nx),\r
+          Nx_p_fluid(rhs.Nx_p_fluid),\r
+          grad_Nx(rhs.grad_Nx),\r
+          symm_grad_Nx(rhs.symm_grad_Nx),\r
+          grad_Nx_p_fluid(rhs.grad_Nx_p_fluid)\r
+        {}\r
+\r
+        void reset()\r
+        {\r
+          const unsigned int n_q_points = Nx_p_fluid.size();\r
+          const unsigned int n_dofs_per_cell = Nx_p_fluid[0].size();\r
+\r
+          Assert(local_dof_values.size() == n_dofs_per_cell, ExcInternalError());\r
+\r
+          for (unsigned int k = 0; k < n_dofs_per_cell; ++k)\r
+            {\r
+              local_dof_values[k] = 0.0;\r
+            }\r
+\r
+          Assert(solution_grads_u_total.size() == n_q_points, ExcInternalError());\r
+          Assert(solution_values_p_fluid_total.size() == n_q_points, ExcInternalError());\r
+          Assert(solution_grads_p_fluid_total.size() == n_q_points, ExcInternalError());\r
+\r
+          Assert(Nx.size() == n_q_points, ExcInternalError());\r
+          Assert(grad_Nx.size() == n_q_points, ExcInternalError());\r
+          Assert(symm_grad_Nx.size() == n_q_points, ExcInternalError());\r
+\r
+          for (unsigned int q_point = 0; q_point < n_q_points; ++q_point)\r
+            {\r
+              Assert( Nx[q_point].size() == n_dofs_per_cell, ExcInternalError());\r
+              Assert( grad_Nx[q_point].size() == n_dofs_per_cell, ExcInternalError());\r
+              Assert( symm_grad_Nx[q_point].size() == n_dofs_per_cell, ExcInternalError());\r
+\r
+              solution_grads_u_total[q_point] = 0.0;\r
+              solution_values_p_fluid_total[q_point] = 0.0;\r
+              solution_grads_p_fluid_total[q_point] = 0.0;\r
+\r
+              for (unsigned int k = 0; k < n_dofs_per_cell; ++k)\r
+                {\r
+                  Nx[q_point][k] = 0.0;\r
+                  Nx_p_fluid[q_point][k] = 0.0;\r
+                  grad_Nx[q_point][k] = 0.0;\r
+                  symm_grad_Nx[q_point][k] = 0.0;\r
+                  grad_Nx_p_fluid[q_point][k] = 0.0;\r
+                }\r
+            }\r
+\r
+          const unsigned int n_f_q_points = solution_grads_face_p_fluid_total.size();\r
+          Assert(solution_grads_face_p_fluid_total.size() == n_f_q_points, ExcInternalError());\r
+\r
+          for (unsigned int f_q_point = 0; f_q_point < n_f_q_points; ++f_q_point)\r
+              solution_grads_face_p_fluid_total[f_q_point] = 0.0;\r
+        }\r
+    };\r
+\r
+    //Define the boundary conditions on the mesh\r
+    template <int dim>\r
+    void Solid<dim>::make_constraints(const int &it_nr_IN)\r
+    {\r
+        pcout     << " CST " << std::flush;\r
+        outfile   << " CST " << std::flush;\r
+\r
+        if (it_nr_IN > 1) return;\r
+\r
+        const bool apply_dirichlet_bc = (it_nr_IN == 0);\r
+\r
+        if (apply_dirichlet_bc)\r
+        {\r
+          constraints.clear();\r
+          make_dirichlet_constraints(constraints);\r
+        }\r
+        else\r
+        {\r
+          for (unsigned int i=0; i<dof_handler_ref.n_dofs(); ++i)\r
+            if (constraints.is_inhomogeneously_constrained(i) == true)\r
+              constraints.set_inhomogeneity(i,0.0);\r
+        }\r
+        constraints.close();\r
+    }\r
+\r
+    //Set-up the FE system\r
+    template <int dim>\r
+    void Solid<dim>::system_setup(TrilinosWrappers::MPI::BlockVector &solution_delta_OUT)\r
+    {\r
+        timerconsole.enter_subsection("Setup system");\r
+        timerfile.enter_subsection("Setup system");\r
+\r
+        // Partition triangulation\r
+        GridTools::partition_triangulation (n_mpi_processes, triangulation);\r
+\r
+\r
+        //Determine number of components per block\r
+        std::vector<unsigned int> block_component(n_components, u_block);\r
+        block_component[p_fluid_component] = p_fluid_block;\r
+\r
+        // The DOF handler is initialised and we renumber the grid in an efficient manner.\r
+        dof_handler_ref.distribute_dofs(fe);\r
+        DoFRenumbering::Cuthill_McKee(dof_handler_ref);\r
+        DoFRenumbering::component_wise(dof_handler_ref, block_component);\r
+\r
+        // Count the number of DoFs in each block\r
+        dofs_per_block.clear();\r
+        dofs_per_block.resize(n_blocks);\r
+        DoFTools::count_dofs_per_block(dof_handler_ref, dofs_per_block, block_component);\r
+\r
+        // Setup the sparsity pattern and tangent matrix\r
+        all_locally_owned_dofs = DoFTools::locally_owned_dofs_per_subdomain (dof_handler_ref);\r
+        std::vector<IndexSet> all_locally_relevant_dofs\r
+        = DoFTools::locally_relevant_dofs_per_subdomain (dof_handler_ref);\r
+\r
+        locally_owned_dofs.clear();\r
+        locally_owned_partitioning.clear();\r
+        Assert(all_locally_owned_dofs.size() > this_mpi_process, ExcInternalError());\r
+        locally_owned_dofs = all_locally_owned_dofs[this_mpi_process];\r
+\r
+        locally_relevant_dofs.clear();\r
+        locally_relevant_partitioning.clear();\r
+        Assert(all_locally_relevant_dofs.size() > this_mpi_process, ExcInternalError());\r
+        locally_relevant_dofs = all_locally_relevant_dofs[this_mpi_process];\r
+\r
+        locally_owned_partitioning.reserve(n_blocks);\r
+        locally_relevant_partitioning.reserve(n_blocks);\r
+\r
+        for (unsigned int b=0; b<n_blocks; ++b)\r
+          {\r
+            const types::global_dof_index idx_begin\r
+            = std::accumulate(dofs_per_block.begin(),\r
+                              std::next(dofs_per_block.begin(),b), 0);\r
+            const types::global_dof_index idx_end\r
+            = std::accumulate(dofs_per_block.begin(),\r
+                              std::next(dofs_per_block.begin(),b+1), 0);\r
+            locally_owned_partitioning.push_back(locally_owned_dofs.get_view(idx_begin, idx_end));\r
+            locally_relevant_partitioning.push_back(locally_relevant_dofs.get_view(idx_begin, idx_end));\r
+          }\r
+\r
+        //Print information on screen\r
+        pcout  << "\nTriangulation:\n"\r
+               << "  Number of active cells: "\r
+               << triangulation.n_active_cells()\r
+               << " (by partition:";\r
+        for (unsigned int p=0; p<n_mpi_processes; ++p)\r
+          pcout  << (p==0 ? ' ' : '+')\r
+                 << (GridTools::count_cells_with_subdomain_association (triangulation,p));\r
+        pcout << ")"\r
+              << std::endl;\r
+        pcout << "  Number of degrees of freedom: "\r
+              << dof_handler_ref.n_dofs()\r
+              << " (by partition:";\r
+        for (unsigned int p=0; p<n_mpi_processes; ++p)\r
+          pcout  << (p==0 ? ' ' : '+')\r
+                 << (DoFTools::count_dofs_with_subdomain_association (dof_handler_ref,p));\r
+        pcout << ")"\r
+              << std::endl;\r
+        pcout   << "  Number of degrees of freedom per block: "\r
+            << "[n_u, n_p_fluid] = ["\r
+            << dofs_per_block[u_block]\r
+            << ", "\r
+            << dofs_per_block[p_fluid_block]\r
+            << "]"\r
+            << std::endl;\r
+\r
+        //Print information to file\r
+        outfile  << "\nTriangulation:\n"\r
+                 <<  "  Number of active cells: "\r
+                << triangulation.n_active_cells()\r
+                << " (by partition:";\r
+        for (unsigned int p=0; p<n_mpi_processes; ++p)\r
+          outfile << (p==0 ? ' ' : '+')\r
+                  << (GridTools::count_cells_with_subdomain_association (triangulation,p));\r
+        outfile << ")"\r
+                << std::endl;\r
+        outfile << "  Number of degrees of freedom: "\r
+                << dof_handler_ref.n_dofs()\r
+                << " (by partition:";\r
+        for (unsigned int p=0; p<n_mpi_processes; ++p)\r
+          outfile  << (p==0 ? ' ' : '+')\r
+                   << (DoFTools::count_dofs_with_subdomain_association (dof_handler_ref,p));\r
+        outfile << ")"\r
+                << std::endl;\r
+        outfile << "  Number of degrees of freedom per block: "\r
+            << "[n_u, n_p_fluid] = ["\r
+            << dofs_per_block[u_block]\r
+            << ", "\r
+            << dofs_per_block[p_fluid_block]\r
+            << "]"\r
+            << std::endl;\r
+\r
+        // We optimise the sparsity pattern to reflect this structure and prevent\r
+        // unnecessary data creation for the right-diagonal block components.\r
+        Table<2, DoFTools::Coupling> coupling(n_components, n_components);\r
+        for (unsigned int ii = 0; ii < n_components; ++ii)\r
+          for (unsigned int jj = 0; jj < n_components; ++jj)\r
+\r
+            //Identify "zero" matrix components of FE-system (The two components do not couple)\r
+            if (((ii == p_fluid_component) && (jj < p_fluid_component))\r
+                || ((ii < p_fluid_component) && (jj == p_fluid_component)) )\r
+              coupling[ii][jj] = DoFTools::none;\r
+\r
+            //The rest of components always couple\r
+            else\r
+              coupling[ii][jj] = DoFTools::always;\r
+\r
+        TrilinosWrappers::BlockSparsityPattern bsp (locally_owned_partitioning,\r
+                                                    mpi_communicator);\r
+\r
+        DoFTools::make_sparsity_pattern (dof_handler_ref, bsp, constraints,\r
+                                         false, this_mpi_process);\r
+        bsp.compress();\r
+\r
+        //Reinitialize the (sparse) tangent matrix with the given sparsity pattern.\r
+        tangent_matrix.reinit (bsp);\r
+\r
+        //Initialize the right hand side and solution vectors with number of DoFs\r
+        system_rhs.reinit(locally_owned_partitioning, mpi_communicator);\r
+        solution_n.reinit(locally_owned_partitioning, mpi_communicator);\r
+        solution_delta_OUT.reinit(locally_owned_partitioning, mpi_communicator);\r
+\r
+        // Non-block system\r
+        TrilinosWrappers::SparsityPattern sp (locally_owned_dofs,\r
+                                              mpi_communicator);\r
+        DoFTools::make_sparsity_pattern (dof_handler_ref, sp, constraints,\r
+                                         false, this_mpi_process);\r
+        sp.compress();\r
+        tangent_matrix_nb.reinit (sp);\r
+        system_rhs_nb.reinit(locally_owned_dofs, mpi_communicator);\r
+\r
+        //Set up the quadrature point history\r
+        setup_qph();\r
+\r
+        timerconsole.leave_subsection();\r
+        timerfile.leave_subsection();\r
+    }\r
+\r
+    //Component extractors: used to extract sub-blocks from the global matrix\r
+    //Description of which local element DOFs are attached to which block component\r
+    template <int dim>\r
+    void Solid<dim>::determine_component_extractors()\r
+    {\r
+        element_indices_u.clear();\r
+        element_indices_p_fluid.clear();\r
+\r
+        for (unsigned int k = 0; k < fe.dofs_per_cell; ++k)\r
+          {\r
+            const unsigned int k_group = fe.system_to_base_index(k).first.first;\r
+            if (k_group == u_block)\r
+              element_indices_u.push_back(k);\r
+            else if (k_group == p_fluid_block)\r
+              element_indices_p_fluid.push_back(k);\r
+            else\r
+              {\r
+                Assert(k_group <= p_fluid_block, ExcInternalError());\r
+              }\r
+          }\r
+    }\r
+\r
+    //Set-up quadrature point history (QPH) data objects\r
+    template <int dim>\r
+    void Solid<dim>::setup_qph()\r
+    {\r
+        pcout     << "\nSetting up quadrature point data..." << std::endl;\r
+        outfile   << "\nSetting up quadrature point data..." << std::endl;\r
+\r
+        //Create QPH data objects.\r
+        quadrature_point_history.initialize(triangulation.begin_active(),\r
+                                            triangulation.end(), n_q_points);\r
+\r
+        //Setup the initial quadrature point data using the info stored in parameters\r
+        FilteredIterator<typename DoFHandler<dim>::active_cell_iterator>\r
+        cell (IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+              dof_handler_ref.begin_active()),\r
+        endc (IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+              dof_handler_ref.end());\r
+        for (; cell!=endc; ++cell)\r
+          {\r
+            Assert(cell->subdomain_id()==this_mpi_process, ExcInternalError());\r
+            const std::vector<std::shared_ptr<PointHistory<dim, ADNumberType> > >\r
+                lqph = quadrature_point_history.get_data(cell);\r
+            Assert(lqph.size() == n_q_points, ExcInternalError());\r
+\r
+            for (unsigned int q_point = 0; q_point < n_q_points; ++q_point)\r
+              lqph[q_point]->setup_lqp(parameters, time);\r
+          }\r
+    }\r
+\r
+    //Solve the non-linear system using a Newton-Raphson scheme\r
+    template <int dim>\r
+    void Solid<dim>::solve_nonlinear_timestep(TrilinosWrappers::MPI::BlockVector &solution_delta_OUT)\r
+    {\r
+        //Print the load step\r
+        pcout  << std::endl\r
+               << "\nTimestep "\r
+               << time.get_timestep()\r
+               << " @ "\r
+               << time.get_current()\r
+               << "s"\r
+               << std::endl;\r
+        outfile  << std::endl\r
+                 << "\nTimestep "\r
+                 << time.get_timestep()\r
+                 << " @ "\r
+                 << time.get_current()\r
+                 << "s"\r
+                 << std::endl;\r
+\r
+        //Declare newton_update vector (solution of a Newton iteration),\r
+        //which must have as many positions as global DoFs.\r
+        TrilinosWrappers::MPI::BlockVector newton_update\r
+            (locally_owned_partitioning, mpi_communicator);\r
+\r
+        //Reset the error storage objects\r
+        error_residual.reset();\r
+        error_residual_0.reset();\r
+        error_residual_norm.reset();\r
+        error_update.reset();\r
+        error_update_0.reset();\r
+        error_update_norm.reset();\r
+\r
+        print_conv_header();\r
+\r
+        //Declare and initialize iterator for the Newton-Raphson algorithm steps\r
+        unsigned int newton_iteration = 0;\r
+\r
+        //Iterate until error is below tolerance or max number iterations are reached\r
+        while(newton_iteration < parameters.max_iterations_NR)\r
+          {\r
+            pcout     << " " << std::setw(2) << newton_iteration << " " << std::flush;\r
+            outfile   << " " << std::setw(2) << newton_iteration << " " << std::flush;\r
+\r
+            //Initialize global stiffness matrix and global force vector to zero\r
+            tangent_matrix = 0.0;\r
+            system_rhs = 0.0;\r
+\r
+            tangent_matrix_nb = 0.0;\r
+            system_rhs_nb = 0.0;\r
+\r
+            //Apply boundary conditions\r
+            make_constraints(newton_iteration);\r
+            assemble_system(solution_delta_OUT);\r
+\r
+            //Compute the rhs residual (error between external and internal forces in FE system)\r
+            get_error_residual(error_residual);\r
+\r
+            //error_residual in first iteration is stored to normalize posterior error measures\r
+            if (newton_iteration == 0)\r
+              error_residual_0 = error_residual;\r
+\r
+            // Determine the normalised residual error\r
+            error_residual_norm = error_residual;\r
+            error_residual_norm.normalise(error_residual_0);\r
+\r
+            //If both errors are below the tolerances, exit the loop.\r
+            // We need to check the residual vector directly for convergence\r
+            // in the load steps where no external forces or displacements are imposed.\r
+            if (  ((newton_iteration > 0)\r
+                && (error_update_norm.u <= parameters.tol_u)\r
+                && (error_update_norm.p_fluid <= parameters.tol_p_fluid)\r
+                && (error_residual_norm.u <= parameters.tol_f)\r
+                && (error_residual_norm.p_fluid  <= parameters.tol_f))\r
+                || ( (newton_iteration > 0)\r
+                    && system_rhs.l2_norm() <= parameters.tol_f) )\r
+              {\r
+                pcout   << "\n ***** CONVERGED! *****     "\r
+                        << system_rhs.l2_norm() << "      "\r
+                        << "  " << error_residual_norm.norm\r
+                        << "  " << error_residual_norm.u\r
+                        << "  " << error_residual_norm.p_fluid\r
+                        << "        " << error_update_norm.norm\r
+                        << "  " << error_update_norm.u\r
+                        << "  " << error_update_norm.p_fluid\r
+                        << "  " << std::endl;\r
+                outfile   << "\n ***** CONVERGED! *****     "\r
+                        << system_rhs.l2_norm() << "      "\r
+                        << "  " << error_residual_norm.norm\r
+                        << "  " << error_residual_norm.u\r
+                        << "  " << error_residual_norm.p_fluid\r
+                        << "        " << error_update_norm.norm\r
+                        << "  " << error_update_norm.u\r
+                        << "  " << error_update_norm.p_fluid\r
+                        << "  " << std::endl;\r
+                print_conv_footer();\r
+\r
+                break;\r
+              }\r
+\r
+            //Solve the linearized system\r
+            solve_linear_system(newton_update);\r
+            constraints.distribute(newton_update);\r
+\r
+            //Compute the displacement error\r
+            get_error_update(newton_update, error_update);\r
+\r
+            //error_update in first iteration is stored to normalize posterior error measures\r
+            if (newton_iteration == 0)\r
+              error_update_0 = error_update;\r
+\r
+            // Determine the normalised Newton update error\r
+            error_update_norm = error_update;\r
+            error_update_norm.normalise(error_update_0);\r
+\r
+            // Determine the normalised residual error\r
+            error_residual_norm = error_residual;\r
+            error_residual_norm.normalise(error_residual_0);\r
+\r
+            //Print error values\r
+            pcout    << " |   " << std::fixed << std::setprecision(3)\r
+            << std::setw(7) << std::scientific\r
+            << system_rhs.l2_norm()\r
+            << "        " << error_residual_norm.norm\r
+            << "  " << error_residual_norm.u\r
+            << "  " << error_residual_norm.p_fluid\r
+            << "        " << error_update_norm.norm\r
+            << "  " << error_update_norm.u\r
+            << "  " << error_update_norm.p_fluid\r
+            << "  " << std::endl;\r
+\r
+            outfile  << " |   " << std::fixed << std::setprecision(3)\r
+            << std::setw(7) << std::scientific\r
+            << system_rhs.l2_norm()\r
+            << "        " << error_residual_norm.norm\r
+            << "  " << error_residual_norm.u\r
+            << "  " << error_residual_norm.p_fluid\r
+            << "        " << error_update_norm.norm\r
+            << "  " << error_update_norm.u\r
+            << "  " << error_update_norm.p_fluid\r
+            << "  " << std::endl;\r
+\r
+            // Update\r
+            solution_delta_OUT += newton_update;\r
+            newton_update = 0.0;\r
+            newton_iteration++;\r
+          }\r
+\r
+        //If maximum allowed number of iterations for Newton algorithm are reached, print non-convergence message and abort program\r
+        AssertThrow (newton_iteration < parameters.max_iterations_NR, ExcMessage("No convergence in nonlinear solver!"));\r
+    }\r
+\r
+    //Prints the header for convergence info on console\r
+    template <int dim>\r
+    void Solid<dim>::print_conv_header()\r
+    {\r
+        static const unsigned int l_width = 120;\r
+\r
+        for (unsigned int i = 0; i < l_width; ++i)\r
+          {\r
+            pcout     << "_";\r
+            outfile   << "_";\r
+          }\r
+\r
+        pcout     << std::endl;\r
+        outfile   << std::endl;\r
+\r
+        pcout   << "\n       SOLVER STEP      |    SYS_RES         "\r
+                << "RES_NORM     RES_U      RES_P           "\r
+                << "NU_NORM     NU_U       NU_P " << std::endl;\r
+        outfile << "\n       SOLVER STEP      |    SYS_RES         "\r
+                << "RES_NORM     RES_U      RES_P           "\r
+                << "NU_NORM     NU_U       NU_P " << std::endl;\r
+\r
+        for (unsigned int i = 0; i < l_width; ++i)\r
+          {\r
+            pcout     << "_";\r
+            outfile   << "_";\r
+          }\r
+        pcout     << std::endl << std::endl;\r
+        outfile   << std::endl << std::endl;\r
+    }\r
+\r
+    //Prints the footer for convergence info on console\r
+    template <int dim>\r
+    void Solid<dim>::print_conv_footer()\r
+    {\r
+        static const unsigned int l_width = 120;\r
+\r
+        for (unsigned int i = 0; i < l_width; ++i)\r
+          {\r
+            pcout     << "_";\r
+            outfile   << "_";\r
+          }\r
+        pcout     << std::endl << std::endl;\r
+        outfile   << std::endl << std::endl;\r
+\r
+        pcout << "Relative errors:" << std::endl\r
+              << "Displacement:  "\r
+              << error_update.u / error_update_0.u << std::endl\r
+              << "Force (displ): "\r
+              << error_residual.u / error_residual_0.u << std::endl\r
+              << "Pore pressure: "\r
+              << error_update.p_fluid / error_update_0.p_fluid << std::endl\r
+              << "Force (pore):  "\r
+              << error_residual.p_fluid / error_residual_0.p_fluid << std::endl;\r
+        outfile << "Relative errors:" << std::endl\r
+                << "Displacement:  "\r
+                << error_update.u / error_update_0.u << std::endl\r
+                << "Force (displ): "\r
+                << error_residual.u / error_residual_0.u << std::endl\r
+                << "Pore pressure: "\r
+                << error_update.p_fluid / error_update_0.p_fluid << std::endl\r
+                << "Force (pore):  "\r
+                << error_residual.p_fluid / error_residual_0.p_fluid << std::endl;\r
+    }\r
+\r
+    //Determine the true residual error for the problem\r
+    template <int dim>\r
+    void Solid<dim>::get_error_residual(Errors &error_residual_OUT)\r
+    {\r
+        TrilinosWrappers::MPI::BlockVector error_res(system_rhs);\r
+        constraints.set_zero(error_res);\r
+\r
+        error_residual_OUT.norm = error_res.l2_norm();\r
+        error_residual_OUT.u = error_res.block(u_block).l2_norm();\r
+        error_residual_OUT.p_fluid = error_res.block(p_fluid_block).l2_norm();\r
+    }\r
+\r
+    //Determine the true Newton update error for the problem\r
+    template <int dim>\r
+    void Solid<dim>::get_error_update\r
+               (const TrilinosWrappers::MPI::BlockVector &newton_update_IN,\r
+                Errors                                   &error_update_OUT)\r
+    {\r
+        TrilinosWrappers::MPI::BlockVector error_ud(newton_update_IN);\r
+        constraints.set_zero(error_ud);\r
+\r
+        error_update_OUT.norm = error_ud.l2_norm();\r
+        error_update_OUT.u = error_ud.block(u_block).l2_norm();\r
+        error_update_OUT.p_fluid = error_ud.block(p_fluid_block).l2_norm();\r
+    }\r
+\r
+    //Compute the total solution, which is valid at any Newton step. This is required as, to reduce\r
+    //computational error, the total solution is only updated at the end of the timestep.\r
+    template <int dim>\r
+    TrilinosWrappers::MPI::BlockVector\r
+    Solid<dim>::get_total_solution(const TrilinosWrappers::MPI::BlockVector &solution_delta_IN) const\r
+    {\r
+        // Cell interpolation -> Ghosted vector\r
+        TrilinosWrappers::MPI::BlockVector\r
+             solution_total (locally_owned_partitioning,\r
+                             locally_relevant_partitioning,\r
+                             mpi_communicator,\r
+                             /*vector_writable = */ false);\r
+        TrilinosWrappers::MPI::BlockVector tmp (solution_total);\r
+        solution_total = solution_n;\r
+        tmp = solution_delta_IN;\r
+        solution_total += tmp;\r
+        return solution_total;\r
+    }\r
+\r
+    //Compute elemental stiffness tensor and right-hand side force vector, and assemble into global ones\r
+    template <int dim>\r
+    void Solid<dim>::assemble_system( const TrilinosWrappers::MPI::BlockVector &solution_delta )\r
+    {\r
+        timerconsole.enter_subsection("Assemble system");\r
+        timerfile.enter_subsection("Assemble system");\r
+        pcout     << " ASM_SYS " << std::flush;\r
+        outfile   << " ASM_SYS " << std::flush;\r
+\r
+        const TrilinosWrappers::MPI::BlockVector solution_total(get_total_solution(solution_delta));\r
+\r
+        //Info given to FEValues and FEFaceValues constructors, to indicate which data will be needed at each element.\r
+        const UpdateFlags uf_cell(update_values |\r
+                                  update_gradients |\r
+                                  update_JxW_values);\r
+        const UpdateFlags uf_face(update_values |\r
+                                  update_gradients |\r
+                                  update_normal_vectors |\r
+                                  update_quadrature_points |\r
+                                  update_JxW_values );\r
+\r
+        //Setup a copy of the data structures required for the process and pass them, along with the\r
+        //memory addresses of the assembly functions to the WorkStream object for processing\r
+        PerTaskData_ASM per_task_data(dofs_per_cell);\r
+        ScratchData_ASM<ADNumberType> scratch_data(fe, qf_cell, uf_cell,\r
+                                                   qf_face, uf_face,\r
+                                                   solution_total);\r
+\r
+        FilteredIterator<typename DoFHandler<dim>::active_cell_iterator>\r
+        cell (IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+              dof_handler_ref.begin_active()),\r
+        endc (IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+              dof_handler_ref.end());\r
+        for (; cell != endc; ++cell)\r
+          {\r
+            Assert(cell->subdomain_id()==this_mpi_process, ExcInternalError());\r
+            assemble_system_one_cell(cell, scratch_data, per_task_data);\r
+            copy_local_to_global_system(per_task_data);\r
+          }\r
+        tangent_matrix.compress(VectorOperation::add);\r
+        system_rhs.compress(VectorOperation::add);\r
+\r
+        tangent_matrix_nb.compress(VectorOperation::add);\r
+        system_rhs_nb.compress(VectorOperation::add);\r
+\r
+        timerconsole.leave_subsection();\r
+        timerfile.leave_subsection();\r
+    }\r
+\r
+    //Add the local elemental contribution to the global stiffness tensor\r
+    // We do it twice, for the block and the non-block systems\r
+    template <int dim>\r
+    void Solid<dim>::copy_local_to_global_system (const PerTaskData_ASM &data)\r
+    {\r
+        constraints.distribute_local_to_global(data.cell_matrix,\r
+            data.cell_rhs,\r
+            data.local_dof_indices,\r
+            tangent_matrix,\r
+            system_rhs);\r
+\r
+        constraints.distribute_local_to_global(data.cell_matrix,\r
+            data.cell_rhs,\r
+            data.local_dof_indices,\r
+            tangent_matrix_nb,\r
+            system_rhs_nb);\r
+    }\r
+\r
+    //Compute stiffness matrix and corresponding rhs for one element\r
+    template <int dim>\r
+    void Solid<dim>::assemble_system_one_cell\r
+             (const typename DoFHandler<dim>::active_cell_iterator &cell,\r
+              ScratchData_ASM<ADNumberType>                        &scratch,\r
+              PerTaskData_ASM                                      &data) const\r
+    {\r
+        Assert(cell->subdomain_id()==this_mpi_process, ExcInternalError());\r
+\r
+        data.reset();\r
+        scratch.reset();\r
+        scratch.fe_values_ref.reinit(cell);\r
+        cell->get_dof_indices(data.local_dof_indices);\r
+\r
+        // Setup automatic differentiation\r
+        for (unsigned int k = 0; k < dofs_per_cell; ++k)\r
+          {\r
+            // Initialise the dofs for the cell using the current solution.\r
+            scratch.local_dof_values[k] = scratch.solution_total[data.local_dof_indices[k]];\r
+            // Mark this cell DoF as an independent variable\r
+            scratch.local_dof_values[k].diff(k, dofs_per_cell);\r
+          }\r
+\r
+        // Update the quadrature point solution\r
+        // Compute the values and gradients of the solution in terms of the AD variables\r
+        for (unsigned int q = 0; q < n_q_points; ++q)\r
+          {\r
+            for (unsigned int k = 0; k < dofs_per_cell; ++k)\r
+              {\r
+                const unsigned int k_group = fe.system_to_base_index(k).first.first;\r
+                if (k_group == u_block)\r
+                  {\r
+                    const Tensor<2, dim> Grad_Nx_u =\r
+                           scratch.fe_values_ref[u_fe].gradient(k, q);\r
+                    for (unsigned int dd = 0; dd < dim; dd++)\r
+                      {\r
+                        for (unsigned int ee = 0; ee < dim; ee++)\r
+                          {\r
+                            scratch.solution_grads_u_total[q][dd][ee]\r
+                             += scratch.local_dof_values[k] * Grad_Nx_u[dd][ee];\r
+                          }\r
+                      }\r
+                  }\r
+                else if  (k_group == p_fluid_block)\r
+                  {\r
+                    const double Nx_p = scratch.fe_values_ref[p_fluid_fe].value(k, q);\r
+                    const Tensor<1, dim> Grad_Nx_p =\r
+                              scratch.fe_values_ref[p_fluid_fe].gradient(k, q);\r
+\r
+                    scratch.solution_values_p_fluid_total[q]\r
+                             += scratch.local_dof_values[k] * Nx_p;\r
+                    for (unsigned int dd = 0; dd < dim; dd++)\r
+                      {\r
+                        scratch.solution_grads_p_fluid_total[q][dd]\r
+                            += scratch.local_dof_values[k] * Grad_Nx_p[dd];\r
+                      }\r
+                  }\r
+                else\r
+                  Assert(k_group <= p_fluid_block, ExcInternalError());\r
+              }\r
+          }\r
+\r
+        //Set up pointer "lgph" to the PointHistory object of this element\r
+        const std::vector<std::shared_ptr<const PointHistory<dim, ADNumberType> > >\r
+            lqph = quadrature_point_history.get_data(cell);\r
+        Assert(lqph.size() == n_q_points, ExcInternalError());\r
+\r
+\r
+        //Precalculate the element shape function values and gradients\r
+        for (unsigned int q_point = 0; q_point < n_q_points; ++q_point)\r
+          {\r
+            Tensor<2, dim, ADNumberType> F_AD = scratch.solution_grads_u_total[q_point];\r
+            F_AD += Tensor<2, dim, double>(Physics::Elasticity::StandardTensors<dim>::I);\r
+            Assert(determinant(F_AD) > 0, ExcMessage("Invalid deformation map"));\r
+            const Tensor<2, dim, ADNumberType> F_inv_AD = invert(F_AD);\r
+\r
+            for (unsigned int i = 0; i < dofs_per_cell; ++i)\r
+              {\r
+                const unsigned int i_group = fe.system_to_base_index(i).first.first;\r
+\r
+                if (i_group == u_block)\r
+                  {\r
+                    scratch.Nx[q_point][i] =\r
+                        scratch.fe_values_ref[u_fe].value(i, q_point);\r
+                    scratch.grad_Nx[q_point][i] =\r
+                        scratch.fe_values_ref[u_fe].gradient(i, q_point)*F_inv_AD;\r
+                    scratch.symm_grad_Nx[q_point][i] =\r
+                        symmetrize(scratch.grad_Nx[q_point][i]);\r
+                  }\r
+                else if  (i_group == p_fluid_block)\r
+                  {\r
+                    scratch.Nx_p_fluid[q_point][i] =\r
+                        scratch.fe_values_ref[p_fluid_fe].value(i, q_point);\r
+                    scratch.grad_Nx_p_fluid[q_point][i] =\r
+                        scratch.fe_values_ref[p_fluid_fe].gradient(i, q_point)*F_inv_AD;\r
+                  }\r
+                else\r
+                  Assert(i_group <= p_fluid_block, ExcInternalError());\r
+              }\r
+          }\r
+\r
+        //Assemble the stiffness matrix and rhs vector\r
+        std::vector<ADNumberType> residual_ad (dofs_per_cell, ADNumberType(0.0));\r
+        for (unsigned int q_point = 0; q_point < n_q_points; ++q_point)\r
+          {\r
+            Tensor<2, dim, ADNumberType> F_AD = scratch.solution_grads_u_total[q_point];\r
+            F_AD += Tensor<2, dim,double>(Physics::Elasticity::StandardTensors<dim>::I);\r
+            const ADNumberType det_F_AD = determinant(F_AD);\r
+\r
+            Assert(det_F_AD > 0, ExcInternalError());\r
+            const Tensor<2, dim, ADNumberType> F_inv_AD = invert(F_AD); //inverse of def. gradient tensor\r
+\r
+            const ADNumberType p_fluid = scratch.solution_values_p_fluid_total[q_point];\r
+\r
+            {\r
+              PointHistory<dim, ADNumberType> *lqph_q_point_nc =\r
+                 const_cast<PointHistory<dim, ADNumberType>*>(lqph[q_point].get());\r
+              lqph_q_point_nc->update_internal_equilibrium(F_AD);\r
+            }\r
+\r
+            //Get some info from constitutive model of solid\r
+            static const SymmetricTensor< 2, dim, double>\r
+                I (Physics::Elasticity::StandardTensors<dim>::I);\r
+            const SymmetricTensor<2, dim, ADNumberType>\r
+                tau_E = lqph[q_point]->get_tau_E(F_AD);\r
+            SymmetricTensor<2, dim, ADNumberType> tau_fluid_vol (I);\r
+            tau_fluid_vol *= -1.0 * p_fluid * det_F_AD;\r
+\r
+            //Get some info from constitutive model of fluid\r
+            const ADNumberType det_F_aux =  lqph[q_point]->get_converged_det_F();\r
+            const double det_F_converged = Tensor<0,dim,double>(det_F_aux); //Needs to be double, not AD number\r
+            const Tensor<1, dim, ADNumberType> overall_body_force\r
+                = lqph[q_point]->get_overall_body_force(F_AD, parameters);\r
+\r
+            // Define some aliases to make the assembly process easier to follow\r
+            const std::vector<Tensor<1,dim>> &Nu = scratch.Nx[q_point];\r
+            const std::vector<SymmetricTensor<2, dim, ADNumberType>>\r
+                &symm_grad_Nu = scratch.symm_grad_Nx[q_point];\r
+            const std::vector<double> &Np = scratch.Nx_p_fluid[q_point];\r
+            const std::vector<Tensor<1, dim, ADNumberType> > &grad_Np\r
+                = scratch.grad_Nx_p_fluid[q_point];\r
+            const Tensor<1, dim, ADNumberType> grad_p\r
+                = scratch.solution_grads_p_fluid_total[q_point]*F_inv_AD;\r
+            const double JxW = scratch.fe_values_ref.JxW(q_point);\r
+\r
+            for (unsigned int i = 0; i < dofs_per_cell; ++i)\r
+              {\r
+                const unsigned int i_group = fe.system_to_base_index(i).first.first;\r
+\r
+                if (i_group == u_block)\r
+                  {\r
+                    residual_ad[i] += symm_grad_Nu[i] * ( tau_E + tau_fluid_vol ) * JxW;\r
+                    residual_ad[i] -= Nu[i] * overall_body_force * JxW;\r
+                  }\r
+                else if (i_group == p_fluid_block)\r
+                  {\r
+                    const Tensor<1, dim, ADNumberType> seepage_vel_current\r
+                        = lqph[q_point]->get_seepage_velocity_current(F_AD, grad_p);\r
+                    residual_ad[i] += Np[i] * (det_F_AD - det_F_converged) * JxW;\r
+                    residual_ad[i] -= time.get_delta_t() * grad_Np[i]\r
+                                      * seepage_vel_current * JxW;\r
+                  }\r
+                else\r
+                  Assert(i_group <= p_fluid_block, ExcInternalError());\r
+              }\r
+          }\r
+\r
+          // Assemble the Neumann contribution (external force contribution).\r
+          for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face) //Loop over faces in element\r
+            {\r
+              if (cell->face(face)->at_boundary() == true)\r
+                {\r
+                  scratch.fe_face_values_ref.reinit(cell, face);\r
+\r
+                  for (unsigned int f_q_point = 0; f_q_point < n_q_points_f; ++f_q_point)\r
+                    {\r
+                      const Tensor<1, dim> &N\r
+                          = scratch.fe_face_values_ref.normal_vector(f_q_point);\r
+                      const Point<dim>     &pt\r
+                          = scratch.fe_face_values_ref.quadrature_point(f_q_point);\r
+                      const Tensor<1, dim> traction\r
+                          = get_neumann_traction(cell->face(face)->boundary_id(), pt, N);\r
+                      const double flow\r
+                          = get_prescribed_fluid_flow(cell->face(face)->boundary_id(), pt);\r
+\r
+                      if ( (traction.norm() < 1e-12) && (std::abs(flow) < 1e-12) ) continue;\r
+\r
+                      const double JxW_f = scratch.fe_face_values_ref.JxW(f_q_point);\r
+\r
+                      for (unsigned int i = 0; i < dofs_per_cell; ++i)\r
+                        {\r
+                          const unsigned int i_group = fe.system_to_base_index(i).first.first;\r
+\r
+                          if ((i_group == u_block) && (traction.norm() > 1e-12))\r
+                          {\r
+                              const unsigned int component_i\r
+                                = fe.system_to_component_index(i).first;\r
+                              const double Nu_f\r
+                                = scratch.fe_face_values_ref.shape_value(i, f_q_point);\r
+                              residual_ad[i] -= (Nu_f * traction[component_i]) * JxW_f;\r
+                          }\r
+                          if ((i_group == p_fluid_block) && (std::abs(flow) > 1e-12))\r
+                          {\r
+                              const double Nu_p\r
+                                = scratch.fe_face_values_ref.shape_value(i, f_q_point);\r
+                              residual_ad[i] -= (Nu_p * flow) * JxW_f;\r
+                          }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+\r
+        // Linearise the residual\r
+        for (unsigned int i = 0; i < dofs_per_cell; ++i)\r
+          {\r
+            const ADNumberType &R_i = residual_ad[i];\r
+\r
+            data.cell_rhs(i) -= R_i.val();\r
+            for (unsigned int j=0; j<dofs_per_cell; ++j)\r
+              data.cell_matrix(i,j) += R_i.fastAccessDx(j);\r
+          }\r
+    }\r
+\r
+    //Store the converged values of the internal variables\r
+    template <int dim>\r
+    void Solid<dim>::update_end_timestep()\r
+    {\r
+          FilteredIterator<typename DoFHandler<dim>::active_cell_iterator>\r
+          cell (IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+                dof_handler_ref.begin_active()),\r
+          endc (IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+                dof_handler_ref.end());\r
+          for (; cell!=endc; ++cell)\r
+          {\r
+            Assert(cell->subdomain_id()==this_mpi_process, ExcInternalError());\r
+            const std::vector<std::shared_ptr<PointHistory<dim, ADNumberType> > >\r
+                lqph = quadrature_point_history.get_data(cell);\r
+            Assert(lqph.size() == n_q_points, ExcInternalError());\r
+            for (unsigned int q_point = 0; q_point < n_q_points; ++q_point)\r
+              lqph[q_point]->update_end_timestep();\r
+          }\r
+    }\r
+\r
+\r
+     //Solve the linearized equations\r
+     template <int dim>\r
+     void Solid<dim>::solve_linear_system( TrilinosWrappers::MPI::BlockVector &newton_update_OUT)\r
+     {\r
+\r
+           timerconsole.enter_subsection("Linear solver");\r
+           timerfile.enter_subsection("Linear solver");\r
+           pcout     << " SLV " << std::flush;\r
+           outfile   << " SLV " << std::flush;\r
+\r
+           TrilinosWrappers::MPI::Vector newton_update_nb;\r
+           newton_update_nb.reinit(locally_owned_dofs, mpi_communicator);\r
+\r
+           SolverControl solver_control (tangent_matrix_nb.m(),\r
+                                         1.0e-6 * system_rhs_nb.l2_norm());\r
+           TrilinosWrappers::SolverDirect solver (solver_control);\r
+           solver.solve(tangent_matrix_nb, newton_update_nb, system_rhs_nb);\r
+\r
+           // Copy the non-block solution back to block system\r
+           for (unsigned int i=0; i<locally_owned_dofs.n_elements(); ++i)\r
+             {\r
+               const types::global_dof_index idx_i\r
+                              = locally_owned_dofs.nth_index_in_set(i);\r
+               newton_update_OUT(idx_i) = newton_update_nb(idx_i);\r
+             }\r
+           newton_update_OUT.compress(VectorOperation::insert);\r
+\r
+           timerconsole.leave_subsection();\r
+           timerfile.leave_subsection();\r
+     }\r
+\r
+    //Class to be able to output results correctly when using Paraview\r
+    template<int dim, class DH=DoFHandler<dim> >\r
+    class FilteredDataOut : public DataOut<dim, DH>\r
+    {\r
+        public:\r
+          FilteredDataOut (const unsigned int subdomain_id)\r
+            :\r
+            subdomain_id (subdomain_id)\r
+          {}\r
+\r
+          virtual ~FilteredDataOut() {}\r
+\r
+          virtual typename DataOut<dim, DH>::cell_iterator\r
+          first_cell ()\r
+          {\r
+            typename DataOut<dim, DH>::active_cell_iterator\r
+            cell = this->dofs->begin_active();\r
+            while ((cell != this->dofs->end()) &&\r
+                   (cell->subdomain_id() != subdomain_id))\r
+              ++cell;\r
+            return cell;\r
+          }\r
+\r
+          virtual typename DataOut<dim, DH>::cell_iterator\r
+          next_cell (const typename DataOut<dim, DH>::cell_iterator &old_cell)\r
+          {\r
+            if (old_cell != this->dofs->end())\r
+              {\r
+                const IteratorFilters::SubdomainEqualTo predicate(subdomain_id);\r
+                return\r
+                  ++(FilteredIterator<typename DataOut<dim, DH>::active_cell_iterator>\r
+                     (predicate,old_cell));\r
+              }\r
+            else\r
+              return old_cell;\r
+          }\r
+\r
+        private:\r
+          const unsigned int subdomain_id;\r
+    };\r
+\r
+    template<int dim, class DH=DoFHandler<dim> >\r
+     class FilteredDataOutFaces : public DataOutFaces<dim,DH>\r
+     {\r
+         public:\r
+           FilteredDataOutFaces (const unsigned int subdomain_id)\r
+             :\r
+             subdomain_id (subdomain_id)\r
+           {}\r
+\r
+           virtual ~FilteredDataOutFaces() {}\r
+\r
+           virtual typename DataOutFaces<dim,DH>::cell_iterator\r
+           first_cell ()\r
+           {\r
+             typename DataOutFaces<dim,DH>::active_cell_iterator\r
+             cell = this->dofs->begin_active();\r
+             while ((cell!=this->dofs->end()) && (cell->subdomain_id()!=subdomain_id))\r
+               ++cell;\r
+             return cell;\r
+           }\r
+\r
+           virtual typename DataOutFaces<dim,DH>::cell_iterator\r
+           next_cell (const typename DataOutFaces<dim, DH>::cell_iterator &old_cell)\r
+           {\r
+             if (old_cell!=this->dofs->end())\r
+             {\r
+                 const IteratorFilters::SubdomainEqualTo predicate(subdomain_id);\r
+                 return\r
+                   ++(FilteredIterator<typename DataOutFaces<dim,DH>::active_cell_iterator>\r
+                      (predicate,old_cell));\r
+             }\r
+             else\r
+               return old_cell;\r
+           }\r
+\r
+         private:\r
+           const unsigned int subdomain_id;\r
+     };\r
+\r
+    //Class to compute gradient of the pressure\r
+    template <int dim>\r
+    class GradientPostprocessor : public DataPostprocessorVector<dim>\r
+    {\r
+        public:\r
+          GradientPostprocessor (const unsigned int p_fluid_component)\r
+            :\r
+            DataPostprocessorVector<dim> ("grad_p",\r
+                                          update_gradients),\r
+            p_fluid_component (p_fluid_component)\r
+          {}\r
+\r
+          virtual ~GradientPostprocessor(){}\r
+\r
+          virtual void\r
+          evaluate_vector_field\r
+               (const DataPostprocessorInputs::Vector<dim> &input_data,\r
+                std::vector<Vector<double> >               &computed_quantities) const\r
+          {\r
+            AssertDimension (input_data.solution_gradients.size(),\r
+                             computed_quantities.size());\r
+            for (unsigned int p=0; p<input_data.solution_gradients.size(); ++p)\r
+              {\r
+                AssertDimension (computed_quantities[p].size(), dim);\r
+                for (unsigned int d=0; d<dim; ++d)\r
+                  computed_quantities[p][d]\r
+                    = input_data.solution_gradients[p][p_fluid_component][d];\r
+              }\r
+          }\r
+\r
+        private:\r
+          const unsigned int  p_fluid_component;\r
+    };\r
+\r
+\r
+      //Print results to vtu file\r
+      template <int dim> void Solid<dim>::output_results_to_vtu\r
+                            (const unsigned int timestep,\r
+                             const double current_time,\r
+                             TrilinosWrappers::MPI::BlockVector solution_IN) const\r
+      {\r
+        TrilinosWrappers::MPI::BlockVector solution_total(locally_owned_partitioning,\r
+                                                          locally_relevant_partitioning,\r
+                                                          mpi_communicator,\r
+                                                          false);\r
+        solution_total = solution_IN;\r
+        Vector<double> material_id;\r
+        material_id.reinit(triangulation.n_active_cells());\r
+        std::vector<types::subdomain_id> partition_int(triangulation.n_active_cells());\r
+        GradientPostprocessor<dim> gradient_postprocessor(p_fluid_component);\r
+\r
+         //Declare local variables with number of stress components\r
+         //& assign value according to "dim" value\r
+         unsigned int num_comp_symm_tensor = 6;\r
+\r
+        //Declare local vectors to store values\r
+        // OUTPUT AVERAGED ON ELEMENTS -------------------------------------------\r
+        std::vector<Vector<double>>cauchy_stresses_total_elements\r
+                             (num_comp_symm_tensor,\r
+                              Vector<double> (triangulation.n_active_cells()));\r
+        std::vector<Vector<double>>cauchy_stresses_E_elements\r
+                             (num_comp_symm_tensor,\r
+                              Vector<double> (triangulation.n_active_cells()));\r
+        std::vector<Vector<double>>stretches_elements\r
+                             (dim,\r
+                              Vector<double> (triangulation.n_active_cells()));\r
+        std::vector<Vector<double>>seepage_velocity_elements\r
+                              (dim,\r
+                               Vector<double> (triangulation.n_active_cells()));\r
+        Vector<double> porous_dissipation_elements\r
+                              (triangulation.n_active_cells());\r
+        Vector<double> viscous_dissipation_elements\r
+                              (triangulation.n_active_cells());\r
+        Vector<double> solid_vol_fraction_elements\r
+                              (triangulation.n_active_cells());\r
+\r
+        // OUTPUT AVERAGED ON NODES ----------------------------------------------\r
+        // We need to create a new FE space with a single dof per node to avoid\r
+        // duplication of the output on nodes for our problem with dim+1 dofs.\r
+        FE_Q<dim> fe_vertex(1);\r
+        DoFHandler<dim> vertex_handler_ref(triangulation);\r
+        vertex_handler_ref.distribute_dofs(fe_vertex);\r
+        AssertThrow(vertex_handler_ref.n_dofs() == triangulation.n_vertices(),\r
+          ExcDimensionMismatch(vertex_handler_ref.n_dofs(),\r
+                               triangulation.n_vertices()));\r
+\r
+        Vector<double> counter_on_vertices_mpi\r
+                        (vertex_handler_ref.n_dofs());\r
+        Vector<double> sum_counter_on_vertices\r
+                        (vertex_handler_ref.n_dofs());\r
+\r
+        std::vector<Vector<double>>cauchy_stresses_total_vertex_mpi\r
+                                  (num_comp_symm_tensor,\r
+                                   Vector<double>(vertex_handler_ref.n_dofs()));\r
+        std::vector<Vector<double>>sum_cauchy_stresses_total_vertex\r
+                                  (num_comp_symm_tensor,\r
+                                   Vector<double>(vertex_handler_ref.n_dofs()));\r
+        std::vector<Vector<double>>cauchy_stresses_E_vertex_mpi\r
+                                  (num_comp_symm_tensor,\r
+                                   Vector<double>(vertex_handler_ref.n_dofs()));\r
+        std::vector<Vector<double>>sum_cauchy_stresses_E_vertex\r
+                                  (num_comp_symm_tensor,\r
+                                   Vector<double>(vertex_handler_ref.n_dofs()));\r
+        std::vector<Vector<double>>stretches_vertex_mpi\r
+                                  (dim,\r
+                                   Vector<double>(vertex_handler_ref.n_dofs()));\r
+        std::vector<Vector<double>>sum_stretches_vertex\r
+                                  (dim,\r
+                                   Vector<double>(vertex_handler_ref.n_dofs()));\r
+        Vector<double> porous_dissipation_vertex_mpi(vertex_handler_ref.n_dofs());\r
+        Vector<double> sum_porous_dissipation_vertex(vertex_handler_ref.n_dofs());\r
+        Vector<double> viscous_dissipation_vertex_mpi(vertex_handler_ref.n_dofs());\r
+        Vector<double> sum_viscous_dissipation_vertex(vertex_handler_ref.n_dofs());\r
+        Vector<double> solid_vol_fraction_vertex_mpi(vertex_handler_ref.n_dofs());\r
+        Vector<double> sum_solid_vol_fraction_vertex(vertex_handler_ref.n_dofs());\r
+\r
+        // We need to create a new FE space with a dim dof per node to\r
+        // be able to ouput data on nodes in vector form\r
+        FESystem<dim> fe_vertex_vec(FE_Q<dim>(1),dim);\r
+        DoFHandler<dim> vertex_vec_handler_ref(triangulation);\r
+        vertex_vec_handler_ref.distribute_dofs(fe_vertex_vec);\r
+        AssertThrow(vertex_vec_handler_ref.n_dofs() == (dim*triangulation.n_vertices()),\r
+          ExcDimensionMismatch(vertex_vec_handler_ref.n_dofs(),\r
+                               (dim*triangulation.n_vertices())));\r
+\r
+        Vector<double> seepage_velocity_vertex_vec_mpi(vertex_vec_handler_ref.n_dofs());\r
+        Vector<double> sum_seepage_velocity_vertex_vec(vertex_vec_handler_ref.n_dofs());\r
+        Vector<double> counter_on_vertices_vec_mpi(vertex_vec_handler_ref.n_dofs());\r
+        Vector<double> sum_counter_on_vertices_vec(vertex_vec_handler_ref.n_dofs());\r
+        // -----------------------------------------------------------------------\r
+\r
+        //Declare and initialize local unit vectors (to construct tensor basis)\r
+        std::vector<Tensor<1,dim>> basis_vectors (dim, Tensor<1,dim>() );\r
+        for (unsigned int i=0; i<dim; ++i)\r
+            basis_vectors[i][i] = 1;\r
+\r
+        //Declare an instance of the material class object\r
+        if (parameters.mat_type == "Neo-Hooke")\r
+            NeoHooke<dim,ADNumberType> material(parameters,time);\r
+        else if (parameters.mat_type == "Ogden")\r
+            Ogden<dim,ADNumberType> material(parameters,time);\r
+        else if (parameters.mat_type == "visco-Ogden")\r
+            visco_Ogden <dim,ADNumberType>material(parameters,time);\r
+        else\r
+            Assert (false, ExcMessage("Material type not implemented"));\r
+\r
+        //Define a local instance of FEValues to compute updated values required\r
+        //to calculate stresses\r
+        const UpdateFlags uf_cell(update_values | update_gradients |\r
+                                  update_JxW_values);\r
+        FEValues<dim> fe_values_ref (fe, qf_cell, uf_cell);\r
+\r
+        //Iterate through elements (cells) and Gauss Points\r
+        FilteredIterator<typename DoFHandler<dim>::active_cell_iterator>\r
+          cell(IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+               dof_handler_ref.begin_active()),\r
+          endc(IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+               dof_handler_ref.end()),\r
+          cell_v(IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+                 vertex_handler_ref.begin_active()),\r
+          cell_v_vec(IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+                     vertex_vec_handler_ref.begin_active());\r
+        //start cell loop\r
+        for (; cell!=endc; ++cell, ++cell_v, ++cell_v_vec)\r
+        {\r
+          if (cell->subdomain_id() != this_mpi_process) continue;\r
+                material_id(cell->active_cell_index())=\r
+                   static_cast<int>(cell->material_id());\r
+\r
+            fe_values_ref.reinit(cell);\r
+\r
+            std::vector<Tensor<2,dim>> solution_grads_u(n_q_points);\r
+            fe_values_ref[u_fe].get_function_gradients(solution_total,\r
+                                                       solution_grads_u);\r
+\r
+            std::vector<double> solution_values_p_fluid_total(n_q_points);\r
+            fe_values_ref[p_fluid_fe].get_function_values(solution_total,\r
+                                                          solution_values_p_fluid_total);\r
+\r
+            std::vector<Tensor<1,dim>> solution_grads_p_fluid_AD (n_q_points);\r
+            fe_values_ref[p_fluid_fe].get_function_gradients(solution_total,\r
+                                                             solution_grads_p_fluid_AD);\r
+\r
+            //start gauss point loop\r
+            for (unsigned int q_point=0; q_point<n_q_points; ++q_point)\r
+            {\r
+                const Tensor<2,dim,ADNumberType>\r
+                  F_AD = Physics::Elasticity::Kinematics::F(solution_grads_u[q_point]);\r
+                ADNumberType det_F_AD = determinant(F_AD);\r
+                const double det_F = Tensor<0,dim,double>(det_F_AD);\r
+\r
+                const std::vector<std::shared_ptr<const PointHistory<dim,ADNumberType>>>\r
+                    lqph = quadrature_point_history.get_data(cell);\r
+                Assert(lqph.size() == n_q_points, ExcInternalError());\r
+\r
+                const double p_fluid = solution_values_p_fluid_total[q_point];\r
+\r
+                //Cauchy stress\r
+                static const SymmetricTensor<2,dim,double>\r
+                  I (Physics::Elasticity::StandardTensors<dim>::I);\r
+                SymmetricTensor<2,dim> sigma_E;\r
+                const SymmetricTensor<2,dim,ADNumberType> sigma_E_AD =\r
+                  lqph[q_point]->get_Cauchy_E(F_AD);\r
+\r
+                for (unsigned int i=0; i<dim; ++i)\r
+                    for (unsigned int j=0; j<dim; ++j)\r
+                       sigma_E[i][j] = Tensor<0,dim,double>(sigma_E_AD[i][j]);\r
+\r
+                SymmetricTensor<2,dim> sigma_fluid_vol (I);\r
+                sigma_fluid_vol *= -p_fluid;\r
+                const SymmetricTensor<2,dim> sigma = sigma_E + sigma_fluid_vol;\r
+\r
+                //Volumes\r
+                const double solid_vol_fraction = (parameters.solid_vol_frac)/det_F;\r
+\r
+                //Green-Lagrange strain\r
+                const Tensor<2,dim> E_strain = 0.5*(transpose(F_AD)*F_AD - I);\r
+\r
+                //Seepage velocity\r
+                const Tensor<2,dim,ADNumberType> F_inv = invert(F_AD);\r
+                const Tensor<1,dim,ADNumberType> grad_p_fluid_AD =\r
+                                          solution_grads_p_fluid_AD[q_point]*F_inv;\r
+                const Tensor<1,dim,ADNumberType> seepage_vel_AD =\r
+                 lqph[q_point]->get_seepage_velocity_current(F_AD, grad_p_fluid_AD);\r
+\r
+                //Dissipations\r
+                const double porous_dissipation =\r
+                  lqph[q_point]->get_porous_dissipation(F_AD, grad_p_fluid_AD);\r
+                const double viscous_dissipation =\r
+                  lqph[q_point]->get_viscous_dissipation();\r
+\r
+                // OUTPUT AVERAGED ON ELEMENTS -------------------------------------------\r
+                // Both average on elements and on nodes is NOT weighted with the\r
+                // integration point volume, i.e., we assume equal contribution of each\r
+                // integration point to the average. Ideally, it should be weighted,\r
+                // but I haven't invested time in getting it to work properly.\r
+                if (parameters.outtype == "elements")\r
+                {\r
+                    for (unsigned int j=0; j<dim; ++j)\r
+                    {\r
+                        cauchy_stresses_total_elements[j](cell->active_cell_index())\r
+                          += ((sigma*basis_vectors[j])*basis_vectors[j])/n_q_points;\r
+                        cauchy_stresses_E_elements[j](cell->active_cell_index())\r
+                          += ((sigma_E*basis_vectors[j])*basis_vectors[j])/n_q_points;\r
+                        stretches_elements[j](cell->active_cell_index())\r
+                          += std::sqrt(1.0+2.0*Tensor<0,dim,double>(E_strain[j][j]))\r
+                             /n_q_points;\r
+                        seepage_velocity_elements[j](cell->active_cell_index())\r
+                          +=  Tensor<0,dim,double>(seepage_vel_AD[j])/n_q_points;\r
+                    }\r
+\r
+                    porous_dissipation_elements(cell->active_cell_index())\r
+                      +=  porous_dissipation/n_q_points;\r
+                    viscous_dissipation_elements(cell->active_cell_index())\r
+                      +=  viscous_dissipation/n_q_points;\r
+                    solid_vol_fraction_elements(cell->active_cell_index())\r
+                      +=  solid_vol_fraction/n_q_points;\r
+\r
+                    cauchy_stresses_total_elements[3](cell->active_cell_index())\r
+                      += ((sigma*basis_vectors[0])*basis_vectors[1])/n_q_points; //sig_xy\r
+                    cauchy_stresses_total_elements[4](cell->active_cell_index())\r
+                      += ((sigma*basis_vectors[0])*basis_vectors[2])/n_q_points;//sig_xz\r
+                    cauchy_stresses_total_elements[5](cell->active_cell_index())\r
+                      += ((sigma*basis_vectors[1])*basis_vectors[2])/n_q_points;//sig_yz\r
+\r
+                    cauchy_stresses_E_elements[3](cell->active_cell_index())\r
+                      += ((sigma_E*basis_vectors[0])* basis_vectors[1])/n_q_points; //sig_xy\r
+                    cauchy_stresses_E_elements[4](cell->active_cell_index())\r
+                      += ((sigma_E*basis_vectors[0])* basis_vectors[2])/n_q_points;//sig_xz\r
+                    cauchy_stresses_E_elements[5](cell->active_cell_index())\r
+                      += ((sigma_E*basis_vectors[1])* basis_vectors[2])/n_q_points;//sig_yz\r
+\r
+                }\r
+                // OUTPUT AVERAGED ON NODES -------------------------------------------\r
+                else if (parameters.outtype == "nodes")\r
+                {\r
+                  for (unsigned int v=0; v<(GeometryInfo<dim>::vertices_per_cell); ++v)\r
+                  {\r
+                      types::global_dof_index local_vertex_indices =\r
+                                                    cell_v->vertex_dof_index(v, 0);\r
+                      counter_on_vertices_mpi(local_vertex_indices) += 1;\r
+                      for (unsigned int k=0; k<dim; ++k)\r
+                      {\r
+                          cauchy_stresses_total_vertex_mpi[k](local_vertex_indices)\r
+                            += (sigma*basis_vectors[k])*basis_vectors[k];\r
+                          cauchy_stresses_E_vertex_mpi[k](local_vertex_indices)\r
+                            += (sigma_E*basis_vectors[k])*basis_vectors[k];\r
+                          stretches_vertex_mpi[k](local_vertex_indices)\r
+                            += std::sqrt(1.0+2.0*Tensor<0,dim,double>(E_strain[k][k]));\r
+\r
+                          types::global_dof_index local_vertex_vec_indices =\r
+                                                cell_v_vec->vertex_dof_index(v, k);\r
+                          counter_on_vertices_vec_mpi(local_vertex_vec_indices) += 1;\r
+                          seepage_velocity_vertex_vec_mpi(local_vertex_vec_indices)\r
+                            += Tensor<0,dim,double>(seepage_vel_AD[k]);\r
+                      }\r
+\r
+                      porous_dissipation_vertex_mpi(local_vertex_indices)\r
+                        += porous_dissipation;\r
+                      viscous_dissipation_vertex_mpi(local_vertex_indices)\r
+                        += viscous_dissipation;\r
+                      solid_vol_fraction_vertex_mpi(local_vertex_indices)\r
+                        += solid_vol_fraction;\r
+\r
+                      cauchy_stresses_total_vertex_mpi[3](local_vertex_indices)\r
+                        += (sigma*basis_vectors[0])*basis_vectors[1]; //sig_xy\r
+                      cauchy_stresses_total_vertex_mpi[4](local_vertex_indices)\r
+                        += (sigma*basis_vectors[0])*basis_vectors[2];//sig_xz\r
+                      cauchy_stresses_total_vertex_mpi[5](local_vertex_indices)\r
+                        += (sigma*basis_vectors[1])*basis_vectors[2]; //sig_yz\r
+\r
+                      cauchy_stresses_E_vertex_mpi[3](local_vertex_indices)\r
+                        += (sigma_E*basis_vectors[0])*basis_vectors[1]; //sig_xy\r
+                      cauchy_stresses_E_vertex_mpi[4](local_vertex_indices)\r
+                        += (sigma_E*basis_vectors[0])*basis_vectors[2];//sig_xz\r
+                      cauchy_stresses_E_vertex_mpi[5](local_vertex_indices)\r
+                        += (sigma_E*basis_vectors[1])*basis_vectors[2]; //sig_yz\r
+                    }\r
+              }\r
+              //---------------------------------------------------------------\r
+            } //end gauss point loop\r
+        }//end cell loop\r
+\r
+        // Different nodes might have different amount of contributions, e.g.,\r
+        // corner nodes have less integration points contributing to the averaged.\r
+        // This is why we need a counter and divide at the end, outside the cell loop.\r
+        if (parameters.outtype == "nodes")\r
+        {\r
+          for (unsigned int d=0; d<(vertex_handler_ref.n_dofs()); ++d)\r
+          {\r
+            sum_counter_on_vertices[d] =\r
+              Utilities::MPI::sum(counter_on_vertices_mpi[d],\r
+                                  mpi_communicator);\r
+            sum_porous_dissipation_vertex[d] =\r
+              Utilities::MPI::sum(porous_dissipation_vertex_mpi[d],\r
+                                  mpi_communicator);\r
+            sum_viscous_dissipation_vertex[d] =\r
+              Utilities::MPI::sum(viscous_dissipation_vertex_mpi[d],\r
+                                  mpi_communicator);\r
+            sum_solid_vol_fraction_vertex[d] =\r
+              Utilities::MPI::sum(solid_vol_fraction_vertex_mpi[d],\r
+                                  mpi_communicator);\r
+\r
+            for (unsigned int k=0; k<num_comp_symm_tensor; ++k)\r
+            {\r
+              sum_cauchy_stresses_total_vertex[k][d] =\r
+                  Utilities::MPI::sum(cauchy_stresses_total_vertex_mpi[k][d],\r
+                                      mpi_communicator);\r
+              sum_cauchy_stresses_E_vertex[k][d] =\r
+                  Utilities::MPI::sum(cauchy_stresses_E_vertex_mpi[k][d],\r
+                                      mpi_communicator);\r
+            }\r
+            for (unsigned int k=0; k<dim; ++k)\r
+            {\r
+              sum_stretches_vertex[k][d] =\r
+                  Utilities::MPI::sum(stretches_vertex_mpi[k][d],\r
+                                      mpi_communicator);\r
+            }\r
+          }\r
+\r
+          for (unsigned int d=0; d<(vertex_vec_handler_ref.n_dofs()); ++d)\r
+          {\r
+              sum_counter_on_vertices_vec[d] =\r
+                  Utilities::MPI::sum(counter_on_vertices_vec_mpi[d],\r
+                                      mpi_communicator);\r
+              sum_seepage_velocity_vertex_vec[d] =\r
+                  Utilities::MPI::sum(seepage_velocity_vertex_vec_mpi[d],\r
+                                      mpi_communicator);\r
+          }\r
+\r
+          for (unsigned int d=0; d<(vertex_handler_ref.n_dofs()); ++d)\r
+          {\r
+            if (sum_counter_on_vertices[d]>0)\r
+            {\r
+              for (unsigned int i=0; i<num_comp_symm_tensor; ++i)\r
+              {\r
+                  sum_cauchy_stresses_total_vertex[i][d] /= sum_counter_on_vertices[d];\r
+                  sum_cauchy_stresses_E_vertex[i][d] /= sum_counter_on_vertices[d];\r
+              }\r
+              for (unsigned int i=0; i<dim; ++i)\r
+              {\r
+                  sum_stretches_vertex[i][d] /= sum_counter_on_vertices[d];\r
+              }\r
+              sum_porous_dissipation_vertex[d] /= sum_counter_on_vertices[d];\r
+              sum_viscous_dissipation_vertex[d] /= sum_counter_on_vertices[d];\r
+              sum_solid_vol_fraction_vertex[d] /= sum_counter_on_vertices[d];\r
+            }\r
+          }\r
+\r
+          for (unsigned int d=0; d<(vertex_vec_handler_ref.n_dofs()); ++d)\r
+          {\r
+            if (sum_counter_on_vertices_vec[d]>0)\r
+            {\r
+              sum_seepage_velocity_vertex_vec[d] /= sum_counter_on_vertices_vec[d];\r
+            }\r
+          }\r
+\r
+        }\r
+\r
+        // Add the results to the solution to create the output file for Paraview\r
+        FilteredDataOut<dim> data_out(this_mpi_process);\r
+        std::vector<DataComponentInterpretation::DataComponentInterpretation>\r
+          comp_type(dim,\r
+                    DataComponentInterpretation::component_is_part_of_vector);\r
+        comp_type.push_back(DataComponentInterpretation::component_is_scalar);\r
+\r
+        GridTools::get_subdomain_association(triangulation, partition_int);\r
+\r
+        std::vector<std::string> solution_name(dim, "displacement");\r
+        solution_name.push_back("pore_pressure");\r
+\r
+        data_out.attach_dof_handler(dof_handler_ref);\r
+        data_out.add_data_vector(solution_total,\r
+                                 solution_name,\r
+                                 DataOut<dim>::type_dof_data,\r
+                                 comp_type);\r
+\r
+        data_out.add_data_vector(solution_total,\r
+                                 gradient_postprocessor);\r
+\r
+        const Vector<double> partitioning(partition_int.begin(),\r
+                                          partition_int.end());\r
+\r
+        data_out.add_data_vector(partitioning, "partitioning");\r
+        data_out.add_data_vector(material_id, "material_id");\r
+\r
+        // Integration point results -----------------------------------------------------------\r
+        if (parameters.outtype == "elements")\r
+        {\r
+          data_out.add_data_vector(cauchy_stresses_total_elements[0], "cauchy_xx");\r
+          data_out.add_data_vector(cauchy_stresses_total_elements[1], "cauchy_yy");\r
+          data_out.add_data_vector(cauchy_stresses_total_elements[2], "cauchy_zz");\r
+          data_out.add_data_vector(cauchy_stresses_total_elements[3], "cauchy_xy");\r
+          data_out.add_data_vector(cauchy_stresses_total_elements[4], "cauchy_xz");\r
+          data_out.add_data_vector(cauchy_stresses_total_elements[5], "cauchy_yz");\r
+\r
+          data_out.add_data_vector(cauchy_stresses_E_elements[0], "cauchy_E_xx");\r
+          data_out.add_data_vector(cauchy_stresses_E_elements[1], "cauchy_E_yy");\r
+          data_out.add_data_vector(cauchy_stresses_E_elements[2], "cauchy_E_zz");\r
+          data_out.add_data_vector(cauchy_stresses_E_elements[3], "cauchy_E_xy");\r
+          data_out.add_data_vector(cauchy_stresses_E_elements[4], "cauchy_E_xz");\r
+          data_out.add_data_vector(cauchy_stresses_E_elements[5], "cauchy_E_yz");\r
+\r
+          data_out.add_data_vector(stretches_elements[0], "stretch_xx");\r
+          data_out.add_data_vector(stretches_elements[1], "stretch_yy");\r
+          data_out.add_data_vector(stretches_elements[2], "stretch_zz");\r
+\r
+          data_out.add_data_vector(seepage_velocity_elements[0], "seepage_vel_x");\r
+          data_out.add_data_vector(seepage_velocity_elements[1], "seepage_vel_y");\r
+          data_out.add_data_vector(seepage_velocity_elements[2], "seepage_vel_z");\r
+\r
+          data_out.add_data_vector(porous_dissipation_elements, "dissipation_porous");\r
+          data_out.add_data_vector(viscous_dissipation_elements, "dissipation_viscous");\r
+          data_out.add_data_vector(solid_vol_fraction_elements, "solid_vol_fraction");\r
+        }\r
+        else if  (parameters.outtype == "nodes")\r
+        {\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_total_vertex[0],\r
+                                   "cauchy_xx");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_total_vertex[1],\r
+                                   "cauchy_yy");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_total_vertex[2],\r
+                                   "cauchy_zz");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_total_vertex[3],\r
+                                   "cauchy_xy");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_total_vertex[4],\r
+                                   "cauchy_xz");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_total_vertex[5],\r
+                                   "cauchy_yz");\r
+\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_E_vertex[0],\r
+                                   "cauchy_E_xx");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_E_vertex[1],\r
+                                   "cauchy_E_yy");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_E_vertex[2],\r
+                                   "cauchy_E_zz");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_E_vertex[3],\r
+                                   "cauchy_E_xy");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_E_vertex[4],\r
+                                   "cauchy_E_xz");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_cauchy_stresses_E_vertex[5],\r
+                                   "cauchy_E_yz");\r
+\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_stretches_vertex[0],\r
+                                   "stretch_xx");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_stretches_vertex[1],\r
+                                   "stretch_yy");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_stretches_vertex[2],\r
+                                   "stretch_zz");\r
+\r
+          std::vector<DataComponentInterpretation::DataComponentInterpretation>\r
+           comp_type_vec(dim,\r
+                         DataComponentInterpretation::component_is_part_of_vector);\r
+          std::vector<std::string> solution_name_vec(dim,"seepage_velocity");\r
+\r
+          data_out.add_data_vector(vertex_vec_handler_ref,\r
+                                   sum_seepage_velocity_vertex_vec,\r
+                                   solution_name_vec,\r
+                                   comp_type_vec);\r
+\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_porous_dissipation_vertex,\r
+                                   "dissipation_porous");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_viscous_dissipation_vertex,\r
+                                   "dissipation_viscous");\r
+          data_out.add_data_vector(vertex_handler_ref,\r
+                                   sum_solid_vol_fraction_vertex,\r
+                                   "solid_vol_fraction");\r
+        }\r
+      //---------------------------------------------------------------------\r
+\r
+        data_out.build_patches(degree_displ);\r
+\r
+        struct Filename\r
+        {\r
+          static std::string get_filename_vtu(unsigned int process,\r
+                                              unsigned int timestep,\r
+                                              const unsigned int n_digits = 5)\r
+          {\r
+            std::ostringstream filename_vtu;\r
+            filename_vtu\r
+            << "solution."\r
+            << Utilities::int_to_string(process, n_digits)\r
+            << "."\r
+            << Utilities::int_to_string(timestep, n_digits)\r
+            << ".vtu";\r
+            return filename_vtu.str();\r
+          }\r
+\r
+          static std::string get_filename_pvtu(unsigned int timestep,\r
+                                               const unsigned int n_digits = 5)\r
+          {\r
+            std::ostringstream filename_vtu;\r
+            filename_vtu\r
+            << "solution."\r
+            << Utilities::int_to_string(timestep, n_digits)\r
+            << ".pvtu";\r
+            return filename_vtu.str();\r
+          }\r
+\r
+          static std::string get_filename_pvd (void)\r
+          {\r
+            std::ostringstream filename_vtu;\r
+            filename_vtu\r
+            << "solution.pvd";\r
+            return filename_vtu.str();\r
+          }\r
+        };\r
+\r
+        const std::string filename_vtu = Filename::get_filename_vtu(this_mpi_process,\r
+                                                                    timestep);\r
+        std::ofstream output(filename_vtu.c_str());\r
+        data_out.write_vtu(output);\r
+\r
+        // We have a collection of files written in parallel\r
+        // This next set of steps should only be performed by master process\r
+        if (this_mpi_process == 0)\r
+        {\r
+          // List of all files written out at this timestep by all processors\r
+          std::vector<std::string> parallel_filenames_vtu;\r
+          for (unsigned int p=0; p<n_mpi_processes; ++p)\r
+          {\r
+            parallel_filenames_vtu.push_back(Filename::get_filename_vtu(p, timestep));\r
+          }\r
+\r
+          const std::string filename_pvtu(Filename::get_filename_pvtu(timestep));\r
+          std::ofstream pvtu_master(filename_pvtu.c_str());\r
+          data_out.write_pvtu_record(pvtu_master,\r
+                                     parallel_filenames_vtu);\r
+\r
+          // Time dependent data master file\r
+          static std::vector<std::pair<double,std::string>> time_and_name_history;\r
+          time_and_name_history.push_back(std::make_pair(current_time,\r
+                                                          filename_pvtu));\r
+          const std::string filename_pvd(Filename::get_filename_pvd());\r
+          std::ofstream pvd_output(filename_pvd.c_str());\r
+          DataOutBase::write_pvd_record(pvd_output, time_and_name_history);\r
+        }\r
+      }\r
+\r
+\r
+      //Print results to plotting file\r
+      template <int dim>\r
+      void Solid<dim>::output_results_to_plot(\r
+                                const unsigned int timestep,\r
+                                const double current_time,\r
+                                TrilinosWrappers::MPI::BlockVector solution_IN,\r
+                                std::vector<Point<dim> > &tracked_vertices_IN,\r
+                                std::ofstream &plotpointfile) const\r
+      {\r
+        TrilinosWrappers::MPI::BlockVector solution_total(locally_owned_partitioning,\r
+                                                          locally_relevant_partitioning,\r
+                                                          mpi_communicator,\r
+                                                          false);\r
+\r
+        (void) timestep;\r
+        solution_total = solution_IN;\r
+\r
+        //Variables needed to print the solution file for plotting\r
+        Point<dim> reaction_force;\r
+        Point<dim> reaction_force_pressure;\r
+        Point<dim> reaction_force_extra;\r
+        double total_fluid_flow = 0.0;\r
+        double total_porous_dissipation = 0.0;\r
+        double total_viscous_dissipation = 0.0;\r
+        double total_solid_vol = 0.0;\r
+        double total_vol_current = 0.0;\r
+        double total_vol_reference = 0.0;\r
+        std::vector<Point<dim+1>> solution_vertices(tracked_vertices_IN.size());\r
+\r
+        //Auxiliar variables needed for mpi processing\r
+        Tensor<1,dim> sum_reaction_mpi;\r
+        Tensor<1,dim> sum_reaction_pressure_mpi;\r
+        Tensor<1,dim> sum_reaction_extra_mpi;\r
+        sum_reaction_mpi = 0.0;\r
+        sum_reaction_pressure_mpi = 0.0;\r
+        sum_reaction_extra_mpi = 0.0;\r
+        double sum_total_flow_mpi = 0.0;\r
+        double sum_porous_dissipation_mpi = 0.0;\r
+        double sum_viscous_dissipation_mpi = 0.0;\r
+        double sum_solid_vol_mpi = 0.0;\r
+        double sum_vol_current_mpi = 0.0;\r
+        double sum_vol_reference_mpi = 0.0;\r
+\r
+        //Declare an instance of the material class object\r
+        if (parameters.mat_type == "Neo-Hooke")\r
+            NeoHooke<dim,ADNumberType> material(parameters,time);\r
+        else if (parameters.mat_type == "Ogden")\r
+            Ogden<dim,ADNumberType> material(parameters, time);\r
+        else if (parameters.mat_type == "visco-Ogden")\r
+            visco_Ogden <dim,ADNumberType>material(parameters,time);\r
+        else\r
+        Assert (false, ExcMessage("Material type not implemented"));\r
+\r
+        //Define a local instance of FEValues to compute updated values required\r
+        //to calculate stresses\r
+        const UpdateFlags uf_cell(update_values | update_gradients |\r
+                                  update_JxW_values);\r
+        FEValues<dim> fe_values_ref (fe, qf_cell, uf_cell);\r
+\r
+        //Iterate through elements (cells) and Gauss Points\r
+        FilteredIterator<typename DoFHandler<dim>::active_cell_iterator>\r
+          cell(IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+               dof_handler_ref.begin_active()),\r
+          endc(IteratorFilters::SubdomainEqualTo(this_mpi_process),\r
+               dof_handler_ref.end());\r
+        //start cell loop\r
+        for (; cell!=endc; ++cell)\r
+        {\r
+\r
+            if (cell->subdomain_id() != this_mpi_process) continue;\r
+\r
+            fe_values_ref.reinit(cell);\r
+\r
+            std::vector<Tensor<2,dim>> solution_grads_u(n_q_points);\r
+            fe_values_ref[u_fe].get_function_gradients(solution_total,\r
+                                                       solution_grads_u);\r
+\r
+            std::vector<double> solution_values_p_fluid_total(n_q_points);\r
+            fe_values_ref[p_fluid_fe].get_function_values(solution_total,\r
+                                                          solution_values_p_fluid_total);\r
+\r
+            std::vector<Tensor<1,dim >> solution_grads_p_fluid_AD(n_q_points);\r
+            fe_values_ref[p_fluid_fe].get_function_gradients(solution_total,\r
+                                                             solution_grads_p_fluid_AD);\r
+\r
+            //start gauss point loop\r
+            for (unsigned int q_point=0; q_point<n_q_points; ++q_point)\r
+            {\r
+                const Tensor<2,dim,ADNumberType>\r
+                  F_AD = Physics::Elasticity::Kinematics::F(solution_grads_u[q_point]);\r
+                ADNumberType det_F_AD = determinant(F_AD);\r
+                const double det_F = Tensor<0,dim,double>(det_F_AD);\r
+\r
+                const std::vector<std::shared_ptr<const PointHistory<dim,ADNumberType>>>\r
+                    lqph = quadrature_point_history.get_data(cell);\r
+                Assert(lqph.size() == n_q_points, ExcInternalError());\r
+\r
+                double JxW = fe_values_ref.JxW(q_point);\r
+\r
+                //Volumes\r
+                sum_vol_current_mpi  += det_F * JxW;\r
+                sum_vol_reference_mpi += JxW;\r
+                sum_solid_vol_mpi += parameters.solid_vol_frac * JxW * det_F;\r
+\r
+                //Seepage velocity\r
+                const Tensor<2,dim,ADNumberType> F_inv = invert(F_AD);\r
+                const Tensor<1,dim,ADNumberType>\r
+                  grad_p_fluid_AD =  solution_grads_p_fluid_AD[q_point]*F_inv;\r
+                const Tensor<1,dim,ADNumberType> seepage_vel_AD\r
+                = lqph[q_point]->get_seepage_velocity_current(F_AD, grad_p_fluid_AD);\r
+\r
+                //Dissipations\r
+                const double porous_dissipation =\r
+                  lqph[q_point]->get_porous_dissipation(F_AD, grad_p_fluid_AD);\r
+                sum_porous_dissipation_mpi += porous_dissipation * det_F * JxW;\r
+\r
+                const double viscous_dissipation = lqph[q_point]->get_viscous_dissipation();\r
+                sum_viscous_dissipation_mpi += viscous_dissipation * det_F * JxW;\r
+\r
+              //---------------------------------------------------------------\r
+            } //end gauss point loop\r
+\r
+            // Compute reaction force on load boundary & total fluid flow across\r
+            // drained boundary.\r
+            // Define a local instance of FEFaceValues to compute values required\r
+            // to calculate reaction force\r
+            const UpdateFlags uf_face( update_values | update_gradients |\r
+                                       update_normal_vectors | update_JxW_values );\r
+            FEFaceValues<dim> fe_face_values_ref(fe, qf_face, uf_face);\r
+\r
+            //start face loop\r
+            for (unsigned int face=0; face<GeometryInfo<dim>::faces_per_cell; ++face)\r
+            {\r
+                //Reaction force\r
+                if (cell->face(face)->at_boundary() == true &&\r
+                    cell->face(face)->boundary_id() == get_reaction_boundary_id_for_output() )\r
+                {\r
+                    fe_face_values_ref.reinit(cell, face);\r
+\r
+                    //Get displacement gradients for current face\r
+                    std::vector<Tensor<2,dim> > solution_grads_u_f(n_q_points_f);\r
+                    fe_face_values_ref[u_fe].get_function_gradients\r
+                                                         (solution_total,\r
+                                                          solution_grads_u_f);\r
+\r
+                    //Get pressure for current element\r
+                    std::vector< double > solution_values_p_fluid_total_f(n_q_points_f);\r
+                    fe_face_values_ref[p_fluid_fe].get_function_values\r
+                                               (solution_total,\r
+                                                solution_values_p_fluid_total_f);\r
+\r
+                    //start gauss points on faces loop\r
+                    for (unsigned int f_q_point=0; f_q_point<n_q_points_f; ++f_q_point)\r
+                    {\r
+                        const Tensor<1,dim> &N = fe_face_values_ref.normal_vector(f_q_point);\r
+                        const double JxW_f = fe_face_values_ref.JxW(f_q_point);\r
+\r
+                        //Compute deformation gradient from displacements gradient\r
+                        //(present configuration)\r
+                        const Tensor<2,dim,ADNumberType> F_AD =\r
+                          Physics::Elasticity::Kinematics::F(solution_grads_u_f[f_q_point]);\r
+\r
+                        const std::vector<std::shared_ptr<const PointHistory<dim,ADNumberType>>>\r
+                            lqph = quadrature_point_history.get_data(cell);\r
+                        Assert(lqph.size() == n_q_points, ExcInternalError());\r
+\r
+                        const double p_fluid = solution_values_p_fluid_total[f_q_point];\r
+\r
+                        //Cauchy stress\r
+                        static const SymmetricTensor<2,dim,double>\r
+                          I (Physics::Elasticity::StandardTensors<dim>::I);\r
+                        SymmetricTensor<2,dim> sigma_E;\r
+                        const SymmetricTensor<2,dim,ADNumberType> sigma_E_AD =\r
+                          lqph[f_q_point]->get_Cauchy_E(F_AD);\r
+\r
+                        for (unsigned int i=0; i<dim; ++i)\r
+                            for (unsigned int j=0; j<dim; ++j)\r
+                               sigma_E[i][j] = Tensor<0,dim,double>(sigma_E_AD[i][j]);\r
+\r
+                        SymmetricTensor<2,dim> sigma_fluid_vol(I);\r
+                        sigma_fluid_vol *= -1.0*p_fluid;\r
+                        const SymmetricTensor<2,dim> sigma = sigma_E+sigma_fluid_vol;\r
+                        sum_reaction_mpi += sigma * N * JxW_f;\r
+                        sum_reaction_pressure_mpi += sigma_fluid_vol * N * JxW_f;\r
+                        sum_reaction_extra_mpi += sigma_E * N * JxW_f;\r
+                    }//end gauss points on faces loop\r
+                }\r
+\r
+                //Fluid flow\r
+                if (cell->face(face)->at_boundary() == true &&\r
+                   (cell->face(face)->boundary_id() ==\r
+                      get_drained_boundary_id_for_output().first ||\r
+                    cell->face(face)->boundary_id() ==\r
+                      get_drained_boundary_id_for_output().second ) )\r
+                {\r
+                    fe_face_values_ref.reinit(cell, face);\r
+\r
+                    //Get displacement gradients for current face\r
+                    std::vector<Tensor<2,dim>> solution_grads_u_f(n_q_points_f);\r
+                    fe_face_values_ref[u_fe].get_function_gradients\r
+                                                            (solution_total,\r
+                                                             solution_grads_u_f);\r
+\r
+                    //Get pressure gradients for current face\r
+                    std::vector<Tensor<1,dim>> solution_grads_p_f(n_q_points_f);\r
+                    fe_face_values_ref[p_fluid_fe].get_function_gradients\r
+                                                             (solution_total,\r
+                                                              solution_grads_p_f);\r
+\r
+                    //start gauss points on faces loop\r
+                    for (unsigned int f_q_point=0; f_q_point<n_q_points_f; ++f_q_point)\r
+                    {\r
+                        const Tensor<1,dim> &N =\r
+                                  fe_face_values_ref.normal_vector(f_q_point);\r
+                        const double JxW_f = fe_face_values_ref.JxW(f_q_point);\r
+\r
+                        //Deformation gradient and inverse from displacements gradient\r
+                        //(present configuration)\r
+                        const Tensor<2,dim,ADNumberType> F_AD\r
+                            = Physics::Elasticity::Kinematics::F(solution_grads_u_f[f_q_point]);\r
+\r
+                        const Tensor<2,dim,ADNumberType> F_inv_AD = invert(F_AD);\r
+                        ADNumberType det_F_AD = determinant(F_AD);\r
+\r
+                        const std::vector<std::shared_ptr<const PointHistory<dim,ADNumberType>>>\r
+                            lqph = quadrature_point_history.get_data(cell);\r
+                        Assert(lqph.size() == n_q_points, ExcInternalError());\r
+\r
+                        //Seepage velocity\r
+                        Tensor<1,dim> seepage;\r
+                        double det_F = Tensor<0,dim,double>(det_F_AD);\r
+                        const Tensor<1,dim,ADNumberType> grad_p\r
+                                          = solution_grads_p_f[f_q_point]*F_inv_AD;\r
+                        const Tensor<1,dim,ADNumberType> seepage_AD\r
+                          = lqph[f_q_point]->get_seepage_velocity_current(F_AD, grad_p);\r
+\r
+                        for (unsigned int i=0; i<dim; ++i)\r
+                            seepage[i] = Tensor<0,dim,double>(seepage_AD[i]);\r
+\r
+                        sum_total_flow_mpi += (seepage/det_F) * N * JxW_f;\r
+                    }//end gauss points on faces loop\r
+                }\r
+            }//end face loop\r
+        }//end cell loop\r
+\r
+        //Sum the results from different MPI process and then add to the reaction_force vector\r
+        //In theory, the solution on each surface (each cell) only exists in one MPI process\r
+        //so, we add all MPI process, one will have the solution and the others will be zero\r
+        for (unsigned int d=0; d<dim; ++d)\r
+        {\r
+            reaction_force[d] = Utilities::MPI::sum(sum_reaction_mpi[d],\r
+                                                    mpi_communicator);\r
+            reaction_force_pressure[d] = Utilities::MPI::sum(sum_reaction_pressure_mpi[d],\r
+                                                             mpi_communicator);\r
+            reaction_force_extra[d] = Utilities::MPI::sum(sum_reaction_extra_mpi[d],\r
+                                                          mpi_communicator);\r
+        }\r
+\r
+        //Same for total fluid flow, and for porous and viscous dissipations\r
+        total_fluid_flow = Utilities::MPI::sum(sum_total_flow_mpi,\r
+                                               mpi_communicator);\r
+        total_porous_dissipation = Utilities::MPI::sum(sum_porous_dissipation_mpi,\r
+                                                       mpi_communicator);\r
+        total_viscous_dissipation = Utilities::MPI::sum(sum_viscous_dissipation_mpi,\r
+                                                        mpi_communicator);\r
+        total_solid_vol = Utilities::MPI::sum(sum_solid_vol_mpi,\r
+                                              mpi_communicator);\r
+        total_vol_current = Utilities::MPI::sum(sum_vol_current_mpi,\r
+                                                mpi_communicator);\r
+        total_vol_reference = Utilities::MPI::sum(sum_vol_reference_mpi,\r
+                                                  mpi_communicator);\r
+\r
+      //  Extract solution for tracked vectors\r
+      // Copying an MPI::BlockVector into MPI::Vector is not possible,\r
+      // so we copy each block of MPI::BlockVector into an MPI::Vector\r
+      // And then we copy the MPI::Vector into "normal" Vectors\r
+        TrilinosWrappers::MPI::Vector solution_vector_u_MPI(solution_total.block(u_block));\r
+        TrilinosWrappers::MPI::Vector solution_vector_p_MPI(solution_total.block(p_fluid_block));\r
+        Vector<double> solution_u_vector(solution_vector_u_MPI);\r
+        Vector<double> solution_p_vector(solution_vector_p_MPI);\r
+\r
+        if (this_mpi_process == 0)\r
+        {\r
+            //Append the pressure solution vector to the displacement solution vector,\r
+            //creating a single solution vector equivalent to the original BlockVector\r
+            //so FEFieldFunction will work with the dof_handler_ref.\r
+            Vector<double> solution_vector(solution_p_vector.size()\r
+                                           +solution_u_vector.size());\r
+\r
+            for (unsigned int d=0; d<(solution_u_vector.size()); ++d)\r
+                solution_vector[d] = solution_u_vector[d];\r
+\r
+            for (unsigned int d=0; d<(solution_p_vector.size()); ++d)\r
+                solution_vector[solution_u_vector.size()+d] = solution_p_vector[d];\r
+\r
+            Functions::FEFieldFunction<dim,DoFHandler<dim>,Vector<double>>\r
+            find_solution(dof_handler_ref, solution_vector);\r
+\r
+            for (unsigned int p=0; p<tracked_vertices_IN.size(); ++p)\r
+            {\r
+                Vector<double> update(dim+1);\r
+                Point<dim> pt_ref;\r
+\r
+                pt_ref[0]= tracked_vertices_IN[p][0];\r
+                pt_ref[1]= tracked_vertices_IN[p][1];\r
+                pt_ref[2]= tracked_vertices_IN[p][2];\r
+\r
+               find_solution.vector_value(pt_ref, update);\r
+\r
+               for (unsigned int d=0; d<(dim+1); ++d)\r
+               {\r
+                   //For values close to zero, set to 0.0\r
+                   if (abs(update[d])<1.5*parameters.tol_u)\r
+                       update[d] = 0.0;\r
+                   solution_vertices[p][d] = update[d];\r
+               }\r
+            }\r
+      // Write the results to the plotting file.\r
+      // Add two blank lines between cycles in the cyclic loading examples so GNUPLOT can detect each cycle as a different block\r
+            if (( (parameters.geom_type == "Budday_cube_tension_compression_fully_fixed")||\r
+                  (parameters.geom_type == "Budday_cube_tension_compression")||\r
+                  (parameters.geom_type == "Budday_cube_shear_fully_fixed")                ) &&\r
+                ( (abs(current_time - parameters.end_time/3.)   <0.9*parameters.delta_t)||\r
+                  (abs(current_time - 2.*parameters.end_time/3.)<0.9*parameters.delta_t)   ) &&\r
+                  parameters.num_cycle_sets == 1 )\r
+            {\r
+                plotpointfile << std::endl<< std::endl;\r
+            }\r
+            if (( (parameters.geom_type == "Budday_cube_tension_compression_fully_fixed")||\r
+                  (parameters.geom_type == "Budday_cube_tension_compression")||\r
+                  (parameters.geom_type == "Budday_cube_shear_fully_fixed")             ) &&\r
+                ( (abs(current_time - parameters.end_time/9.)   <0.9*parameters.delta_t)||\r
+                  (abs(current_time - 2.*parameters.end_time/9.)<0.9*parameters.delta_t)||\r
+                  (abs(current_time - 3.*parameters.end_time/9.)<0.9*parameters.delta_t)||\r
+                  (abs(current_time - 5.*parameters.end_time/9.)<0.9*parameters.delta_t)||\r
+                  (abs(current_time - 7.*parameters.end_time/9.)<0.9*parameters.delta_t) ) &&\r
+                  parameters.num_cycle_sets == 2 )\r
+            {\r
+                plotpointfile << std::endl<< std::endl;\r
+            }\r
+\r
+            plotpointfile <<  std::setprecision(6) << std::scientific;\r
+            plotpointfile << std::setw(16) << current_time        << ","\r
+                          << std::setw(15) << total_vol_reference << ","\r
+                          << std::setw(15) << total_vol_current   << ","\r
+                          << std::setw(15) << total_solid_vol     << ",";\r
+\r
+            if (current_time == 0.0)\r
+            {\r
+                for (unsigned int p=0; p<tracked_vertices_IN.size(); ++p)\r
+                {\r
+                    for (unsigned int d=0; d<dim; ++d)\r
+                        plotpointfile << std::setw(15) << 0.0 << ",";\r
+\r
+                    plotpointfile << std::setw(15) << parameters.drained_pressure << ",";\r
+                }\r
+                for (unsigned int d=0; d<(3*dim+2); ++d)\r
+                    plotpointfile << std::setw(15) << 0.0 << ",";\r
+\r
+                plotpointfile << std::setw(15) << 0.0;\r
+            }\r
+            else\r
+            {\r
+                for (unsigned int p=0; p<tracked_vertices_IN.size(); ++p)\r
+                    for (unsigned int d=0; d<(dim+1); ++d)\r
+                        plotpointfile << std::setw(15) << solution_vertices[p][d]<< ",";\r
+\r
+                for (unsigned int d=0; d<dim; ++d)\r
+                    plotpointfile << std::setw(15) << reaction_force[d] << ",";\r
+\r
+                for (unsigned int d=0; d<dim; ++d)\r
+                    plotpointfile << std::setw(15) << reaction_force_pressure[d] << ",";\r
+\r
+                for (unsigned int d=0; d<dim; ++d)\r
+                    plotpointfile << std::setw(15) << reaction_force_extra[d] << ",";\r
+\r
+                plotpointfile << std::setw(15) << total_fluid_flow << ","\r
+                              << std::setw(15) << total_porous_dissipation<< ","\r
+                              << std::setw(15) << total_viscous_dissipation;\r
+            }\r
+            plotpointfile << std::endl;\r
+        }\r
+      }\r
+\r
+    //Header for console output file\r
+    template <int dim>\r
+    void Solid<dim>::print_console_file_header(std::ofstream &outputfile) const\r
+    {\r
+            outputfile << "/*-----------------------------------------------------------------------------------------";\r
+            outputfile << "\n\n  Poro-viscoelastic formulation to solve nonlinear solid mechanics problems using deal.ii";\r
+            outputfile << "\n\n  Problem setup by E Comellas and J-P Pelteret, University of Erlangen-Nuremberg, 2018";\r
+            outputfile << "\n\n/*-----------------------------------------------------------------------------------------";\r
+            outputfile << "\n\nCONSOLE OUTPUT: \n\n";\r
+    }\r
+\r
+    //Header for plotting output file\r
+    template <int dim>\r
+    void Solid<dim>::print_plot_file_header(std::vector<Point<dim> > &tracked_vertices,\r
+                                            std::ofstream &plotpointfile) const\r
+    {\r
+            plotpointfile << "#\n# *** Solution history for tracked vertices -- DOF: 0 = Ux,  1 = Uy,  2 = Uz,  3 = P ***"\r
+                          << std::endl;\r
+\r
+            for  (unsigned int p=0; p<tracked_vertices.size(); ++p)\r
+            {\r
+                plotpointfile << "#        Point " << p << " coordinates:  ";\r
+                for (unsigned int d=0; d<dim; ++d)\r
+                  {\r
+                    plotpointfile << tracked_vertices[p][d];\r
+                    if (!( (p == tracked_vertices.size()-1) && (d == dim-1) ))\r
+                        plotpointfile << ",        ";\r
+                  }\r
+                plotpointfile << std::endl;\r
+            }\r
+            plotpointfile << "#    The reaction force is the integral over the loaded surfaces in the "\r
+                          << "undeformed configuration of the Cauchy stress times the normal surface unit vector.\n"\r
+                          << "#    reac(p) corresponds to the volumetric part of the Cauchy stress due to the pore fluid pressure"\r
+                          << " and reac(E) corresponds to the extra part of the Cauchy stress due to the solid contribution."\r
+                          << std::endl\r
+                          << "#    The fluid flow is the integral over the drained surfaces in the "\r
+                          << "undeformed configuration of the seepage velocity times the normal surface unit vector."\r
+                          << std::endl\r
+                          << "# Column number:"\r
+                          << std::endl\r
+                          << "#";\r
+\r
+          unsigned int columns = 24;\r
+          for (unsigned int d=1; d<columns; ++d)\r
+              plotpointfile << std::setw(15)<< d <<",";\r
+\r
+            plotpointfile << std::setw(15)<< columns\r
+                          << std::endl\r
+                          << "#"\r
+                          << std::right << std::setw(16) << "Time,"\r
+                          << std::right << std::setw(16) << "ref vol,"\r
+                          << std::right << std::setw(16) << "def vol,"\r
+                          << std::right << std::setw(16) << "solid vol,";\r
+            for (unsigned int p=0; p<tracked_vertices.size(); ++p)\r
+                for (unsigned int d=0; d<(dim+1); ++d)\r
+                    plotpointfile << std::right<< std::setw(11)\r
+                                  <<"P" << p << "[" << d << "],";\r
+\r
+            for (unsigned int d=0; d<dim; ++d)\r
+                plotpointfile << std::right<< std::setw(13)\r
+                              << "reaction [" << d << "],";\r
+\r
+            for (unsigned int d=0; d<dim; ++d)\r
+                plotpointfile << std::right<< std::setw(13)\r
+                              << "reac(p) [" << d << "],";\r
+\r
+            for (unsigned int d=0; d<dim; ++d)\r
+                plotpointfile << std::right<< std::setw(13)\r
+                              << "reac(E) [" << d << "],";\r
+\r
+            plotpointfile << std::right<< std::setw(16)<< "fluid flow,"\r
+                          << std::right<< std::setw(16)<< "porous dissip,"\r
+                          << std::right<< std::setw(15)<< "viscous dissip"\r
+                          << std::endl;\r
+    }\r
+\r
+    //Footer for console output file\r
+    template <int dim>\r
+    void Solid<dim>::print_console_file_footer(std::ofstream &outputfile) const\r
+    {\r
+           //Copy "parameters" file at end of output file.\r
+           std::ifstream infile("parameters.prm");\r
+           std::string content = "";\r
+           int i;\r
+\r
+           for(i=0 ; infile.eof()!=true ; i++)\r
+           {\r
+               char aux = infile.get();\r
+               content += aux;\r
+               if(aux=='\n') content += '#';\r
+           }\r
+\r
+           i--;\r
+           content.erase(content.end()-1);\r
+           infile.close();\r
+\r
+           outputfile << "\n\n\n\n PARAMETERS FILE USED IN THIS COMPUTATION: \n#"\r
+                      << std::endl\r
+                      << content;\r
+    }\r
+\r
+    //Footer for plotting output file\r
+    template <int dim>\r
+    void Solid<dim>::print_plot_file_footer(std::ofstream &plotpointfile) const\r
+    {\r
+           //Copy "parameters" file at end of output file.\r
+           std::ifstream infile("parameters.prm");\r
+           std::string content = "";\r
+           int i;\r
+\r
+           for(i=0 ; infile.eof()!=true ; i++)\r
+           {\r
+               char aux = infile.get();\r
+               content += aux;\r
+               if(aux=='\n') content += '#';\r
+           }\r
+\r
+           i--;\r
+           content.erase(content.end()-1);\r
+           infile.close();\r
+\r
+           plotpointfile << "#"<< std::endl\r
+                         << "#"<< std::endl\r
+                         << "# PARAMETERS FILE USED IN THIS COMPUTATION:" << std::endl\r
+                         << "#"<< std::endl\r
+                         << content;\r
+    }\r
+\r
+\r
+    // @sect3{Verification examples from Ehlers and Eipper 1999}\r
+    // We group the definition of the geometry, boundary and loading conditions specific to\r
+    // the verification examples from Ehlers and Eipper 1999 into specific classes.\r
+\r
+    //@sect4{Base class: Tube geometry and boundary conditions}\r
+    template <int dim>\r
+    class VerificationEhlers1999TubeBase\r
+          : public Solid<dim>\r
+    {\r
+        public:\r
+          VerificationEhlers1999TubeBase (const Parameters::AllParameters &parameters)\r
+            : Solid<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~VerificationEhlers1999TubeBase () {}\r
+\r
+        private:\r
+          virtual void make_grid()\r
+          {\r
+            GridGenerator::cylinder( this->triangulation,\r
+                                     0.1,\r
+                                     0.5);\r
+\r
+            const double rot_angle = 3.0*numbers::PI/2.0;\r
+            GridTools::rotate( rot_angle, 1, this->triangulation);\r
+\r
+            this->triangulation.reset_manifold(0);\r
+            static const CylindricalManifold<dim> manifold_description_3d(2);\r
+            this->triangulation.set_manifold (0, manifold_description_3d);\r
+            GridTools::scale(this->parameters.scale, this->triangulation);\r
+            this->triangulation.refine_global(std::max (1U, this->parameters.global_refinement));\r
+            this->triangulation.reset_manifold(0);\r
+          }\r
+\r
+          virtual void define_tracked_vertices(std::vector<Point<dim> > &tracked_vertices)\r
+          {\r
+            tracked_vertices[0][0] = 0.0*this->parameters.scale;\r
+            tracked_vertices[0][1] = 0.0*this->parameters.scale;\r
+            tracked_vertices[0][2] = 0.5*this->parameters.scale;\r
+\r
+            tracked_vertices[1][0] = 0.0*this->parameters.scale;\r
+            tracked_vertices[1][1] = 0.0*this->parameters.scale;\r
+            tracked_vertices[1][2] = -0.5*this->parameters.scale;\r
+          }\r
+\r
+          virtual void make_dirichlet_constraints(AffineConstraints<double> &constraints)\r
+          {\r
+            if (this->time.get_timestep() < 2)\r
+            {\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       2,\r
+                                                       ConstantFunction<dim>(this->parameters.drained_pressure,this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+            }\r
+            else\r
+            {\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       2,\r
+                                                       ZeroFunction<dim>(this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+            }\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      0,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      (this->fe.component_mask(this->x_displacement)|\r
+                                                       this->fe.component_mask(this->y_displacement)  ) );\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      1,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      (this->fe.component_mask(this->x_displacement) |\r
+                                                       this->fe.component_mask(this->y_displacement) |\r
+                                                       this->fe.component_mask(this->z_displacement) ));\r
+          }\r
+\r
+          virtual double\r
+          get_prescribed_fluid_flow (const types::boundary_id &boundary_id,\r
+                                     const Point<dim>         &pt) const\r
+          {\r
+              (void)pt;\r
+              (void)boundary_id;\r
+              return 0.0;\r
+          }\r
+\r
+          virtual types::boundary_id\r
+          get_reaction_boundary_id_for_output() const\r
+          {\r
+              return 2;\r
+          }\r
+\r
+          virtual  std::pair<types::boundary_id,types::boundary_id>\r
+          get_drained_boundary_id_for_output() const\r
+          {\r
+              return std::make_pair(2,2);\r
+          }\r
+\r
+          virtual std::vector<double>\r
+          get_dirichlet_load(const types::boundary_id   &boundary_id,\r
+                             const int                  &direction) const\r
+          {\r
+              std::vector<double> displ_incr(dim, 0.0);\r
+              (void)boundary_id;\r
+              (void)direction;\r
+              throw std::runtime_error ("Displacement loading not implemented for Ehlers verification examples.");\r
+\r
+              return displ_incr;\r
+          }\r
+    };\r
+\r
+    //@sect4{Derived class: Step load example}\r
+    template <int dim>\r
+    class VerificationEhlers1999StepLoad\r
+          : public VerificationEhlers1999TubeBase<dim>\r
+    {\r
+        public:\r
+          VerificationEhlers1999StepLoad (const Parameters::AllParameters &parameters)\r
+            : VerificationEhlers1999TubeBase<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~VerificationEhlers1999StepLoad () {}\r
+\r
+        private:\r
+            virtual Tensor<1,dim>\r
+            get_neumann_traction (const types::boundary_id &boundary_id,\r
+                                  const Point<dim>         &pt,\r
+                                  const Tensor<1,dim>      &N) const\r
+            {\r
+              if (this->parameters.load_type == "pressure")\r
+              {\r
+                if (boundary_id == 2)\r
+                {\r
+                  return this->parameters.load * N;\r
+                }\r
+              }\r
+\r
+              (void)pt;\r
+\r
+              return Tensor<1,dim>();\r
+            }\r
+    };\r
+\r
+    //@sect4{Derived class: Load increasing example}\r
+    template <int dim>\r
+    class VerificationEhlers1999IncreaseLoad\r
+          : public VerificationEhlers1999TubeBase<dim>\r
+    {\r
+        public:\r
+          VerificationEhlers1999IncreaseLoad (const Parameters::AllParameters &parameters)\r
+            : VerificationEhlers1999TubeBase<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~VerificationEhlers1999IncreaseLoad () {}\r
+\r
+        private:\r
+            virtual Tensor<1,dim>\r
+            get_neumann_traction (const types::boundary_id &boundary_id,\r
+                                  const Point<dim>         &pt,\r
+                                  const Tensor<1,dim>      &N) const\r
+            {\r
+              if (this->parameters.load_type == "pressure")\r
+              {\r
+                if (boundary_id == 2)\r
+                {\r
+                  const double initial_load = this->parameters.load;\r
+                  const double final_load = 20.0*initial_load;\r
+                  const double initial_time = this->time.get_delta_t();\r
+                  const double final_time = this->time.get_end();\r
+                  const double current_time = this->time.get_current();\r
+                  const double load = initial_load + (final_load-initial_load)*(current_time-initial_time)/(final_time-initial_time);\r
+                  return load * N;\r
+                }\r
+              }\r
+\r
+              (void)pt;\r
+\r
+              return Tensor<1,dim>();\r
+            }\r
+    };\r
+\r
+    //@sect4{Class: Consolidation cube}\r
+    template <int dim>\r
+    class VerificationEhlers1999CubeConsolidation\r
+          : public Solid<dim>\r
+    {\r
+        public:\r
+          VerificationEhlers1999CubeConsolidation (const Parameters::AllParameters &parameters)\r
+            : Solid<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~VerificationEhlers1999CubeConsolidation () {}\r
+\r
+        private:\r
+          virtual void\r
+          make_grid()\r
+          {\r
+             GridGenerator::hyper_rectangle(this->triangulation,\r
+                                            Point<dim>(0.0, 0.0, 0.0),\r
+                                            Point<dim>(1.0, 1.0, 1.0),\r
+                                            true);\r
+\r
+             GridTools::scale(this->parameters.scale, this->triangulation);\r
+             this->triangulation.refine_global(std::max (1U, this->parameters.global_refinement));\r
+\r
+             typename Triangulation<dim>::active_cell_iterator cell =\r
+                     this->triangulation.begin_active(), endc = this->triangulation.end();\r
+             for (; cell != endc; ++cell)\r
+             {\r
+               for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)\r
+                 if (cell->face(face)->at_boundary() == true  &&\r
+                     cell->face(face)->center()[2] == 1.0 * this->parameters.scale)\r
+                 {\r
+                   if (cell->face(face)->center()[0] < 0.5 * this->parameters.scale  &&\r
+                       cell->face(face)->center()[1] < 0.5 * this->parameters.scale)\r
+                       cell->face(face)->set_boundary_id(100);\r
+                   else\r
+                       cell->face(face)->set_boundary_id(101);\r
+                 }\r
+             }\r
+          }\r
+\r
+          virtual void\r
+          define_tracked_vertices(std::vector<Point<dim> > &tracked_vertices)\r
+          {\r
+            tracked_vertices[0][0] = 0.0*this->parameters.scale;\r
+            tracked_vertices[0][1] = 0.0*this->parameters.scale;\r
+            tracked_vertices[0][2] = 1.0*this->parameters.scale;\r
+\r
+            tracked_vertices[1][0] = 0.0*this->parameters.scale;\r
+            tracked_vertices[1][1] = 0.0*this->parameters.scale;\r
+            tracked_vertices[1][2] = 0.0*this->parameters.scale;\r
+          }\r
+\r
+          virtual void\r
+          make_dirichlet_constraints(AffineConstraints<double> &constraints)\r
+          {\r
+            if (this->time.get_timestep() < 2)\r
+            {\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       101,\r
+                                                       ConstantFunction<dim>(this->parameters.drained_pressure,this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+            }\r
+            else\r
+            {\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       101,\r
+                                                       ZeroFunction<dim>(this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+            }\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      0,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      this->fe.component_mask(this->x_displacement));\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      1,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      this->fe.component_mask(this->x_displacement));\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      2,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      this->fe.component_mask(this->y_displacement));\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      3,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      this->fe.component_mask(this->y_displacement));\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      4,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      ( this->fe.component_mask(this->x_displacement) |\r
+                                                        this->fe.component_mask(this->y_displacement) |\r
+                                                        this->fe.component_mask(this->z_displacement) ));\r
+          }\r
+\r
+          virtual Tensor<1,dim>\r
+          get_neumann_traction (const types::boundary_id &boundary_id,\r
+                                const Point<dim>         &pt,\r
+                                const Tensor<1,dim>      &N) const\r
+          {\r
+            if (this->parameters.load_type == "pressure")\r
+            {\r
+              if (boundary_id == 100)\r
+              {\r
+                return this->parameters.load * N;\r
+              }\r
+            }\r
+\r
+            (void)pt;\r
+\r
+            return Tensor<1,dim>();\r
+          }\r
+\r
+          virtual double\r
+          get_prescribed_fluid_flow (const types::boundary_id &boundary_id,\r
+                                     const Point<dim>         &pt) const\r
+          {\r
+              (void)pt;\r
+              (void)boundary_id;\r
+              return 0.0;\r
+          }\r
+\r
+          virtual types::boundary_id\r
+          get_reaction_boundary_id_for_output() const\r
+          {\r
+              return 100;\r
+          }\r
+\r
+          virtual  std::pair<types::boundary_id,types::boundary_id>\r
+          get_drained_boundary_id_for_output() const\r
+          {\r
+              return std::make_pair(101,101);\r
+          }\r
+\r
+          virtual std::vector<double>\r
+          get_dirichlet_load(const types::boundary_id   &boundary_id,\r
+                             const int                  &direction) const\r
+          {\r
+              std::vector<double> displ_incr(dim, 0.0);\r
+              (void)boundary_id;\r
+              (void)direction;\r
+              throw std::runtime_error ("Displacement loading not implemented for Ehlers verification examples.");\r
+\r
+              return displ_incr;\r
+          }\r
+    };\r
+\r
+    //@sect4{Franceschini experiments}\r
+    template <int dim>\r
+    class Franceschini2006Consolidation\r
+          : public Solid<dim>\r
+    {\r
+        public:\r
+        Franceschini2006Consolidation (const Parameters::AllParameters &parameters)\r
+            : Solid<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~Franceschini2006Consolidation () {}\r
+\r
+        private:\r
+          virtual void make_grid()\r
+          {\r
+            const Point<dim-1> mesh_center(0.0, 0.0);\r
+            const double radius = 0.5;\r
+            //const double height = 0.27;  //8.1 mm for 30 mm radius\r
+            const double height = 0.23;  //6.9 mm for 30 mm radius\r
+            Triangulation<dim-1> triangulation_in;\r
+            GridGenerator::hyper_ball( triangulation_in,\r
+                                       mesh_center,\r
+                                       radius);\r
+\r
+            GridGenerator::extrude_triangulation(triangulation_in,\r
+                                                  2,\r
+                                                  height,\r
+                                                  this->triangulation);\r
+\r
+            const CylindricalManifold<dim> cylinder_3d(2);\r
+            const types::manifold_id cylinder_id = 0;\r
+\r
+\r
+            this->triangulation.set_manifold(cylinder_id, cylinder_3d);\r
+\r
+            for (auto cell : this->triangulation.active_cell_iterators())\r
+            {\r
+              for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)\r
+              {\r
+                if (cell->face(face)->at_boundary() == true)\r
+                {\r
+                  if (cell->face(face)->center()[2] == 0.0)\r
+                      cell->face(face)->set_boundary_id(1);\r
+\r
+                  else if (cell->face(face)->center()[2] == height)\r
+                      cell->face(face)->set_boundary_id(2);\r
+\r
+                  else\r
+                  {\r
+                      cell->face(face)->set_boundary_id(0);\r
+                      cell->face(face)->set_all_manifold_ids(cylinder_id);\r
+                  }\r
+                }\r
+              }\r
+            }\r
+\r
+            GridTools::scale(this->parameters.scale, this->triangulation);\r
+            this->triangulation.refine_global(std::max (1U, this->parameters.global_refinement));\r
+          }\r
+\r
+          virtual void define_tracked_vertices(std::vector<Point<dim> > &tracked_vertices)\r
+          {\r
+            tracked_vertices[0][0] = 0.0*this->parameters.scale;\r
+            tracked_vertices[0][1] = 0.0*this->parameters.scale;\r
+         //  tracked_vertices[0][2] = 0.27*this->parameters.scale;\r
+            tracked_vertices[0][2] = 0.23*this->parameters.scale;\r
+\r
+            tracked_vertices[1][0] = 0.0*this->parameters.scale;\r
+            tracked_vertices[1][1] = 0.0*this->parameters.scale;\r
+            tracked_vertices[1][2] = 0.0*this->parameters.scale;\r
+          }\r
+\r
+          virtual void make_dirichlet_constraints(AffineConstraints<double> &constraints)\r
+          {\r
+            if (this->time.get_timestep() < 2)\r
+            {\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       1,\r
+                                                       ConstantFunction<dim>(this->parameters.drained_pressure,this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       2,\r
+                                                       ConstantFunction<dim>(this->parameters.drained_pressure,this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+            }\r
+            else\r
+            {\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       1,\r
+                                                       ZeroFunction<dim>(this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+\r
+              VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                       2,\r
+                                                       ZeroFunction<dim>(this->n_components),\r
+                                                       constraints,\r
+                                                       (this->fe.component_mask(this->pressure)));\r
+            }\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      0,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      (this->fe.component_mask(this->x_displacement)|\r
+                                                       this->fe.component_mask(this->y_displacement)  ) );\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      1,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      (this->fe.component_mask(this->x_displacement) |\r
+                                                       this->fe.component_mask(this->y_displacement) |\r
+                                                       this->fe.component_mask(this->z_displacement) ));\r
+\r
+            VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                      2,\r
+                                                      ZeroFunction<dim>(this->n_components),\r
+                                                      constraints,\r
+                                                      (this->fe.component_mask(this->x_displacement) |\r
+                                                       this->fe.component_mask(this->y_displacement) ));\r
+          }\r
+\r
+          virtual double\r
+          get_prescribed_fluid_flow (const types::boundary_id &boundary_id,\r
+                                     const Point<dim>         &pt) const\r
+          {\r
+              (void)pt;\r
+              (void)boundary_id;\r
+              return 0.0;\r
+          }\r
+\r
+          virtual types::boundary_id\r
+          get_reaction_boundary_id_for_output() const\r
+          {\r
+              return 2;\r
+          }\r
+\r
+          virtual  std::pair<types::boundary_id,types::boundary_id>\r
+          get_drained_boundary_id_for_output() const\r
+          {\r
+              return std::make_pair(1,2);\r
+          }\r
+\r
+          virtual std::vector<double>\r
+          get_dirichlet_load(const types::boundary_id   &boundary_id,\r
+                             const int                  &direction) const\r
+          {\r
+              std::vector<double> displ_incr(dim, 0.0);\r
+              (void)boundary_id;\r
+              (void)direction;\r
+              throw std::runtime_error ("Displacement loading not implemented for Franceschini examples.");\r
+\r
+              return displ_incr;\r
+          }\r
+\r
+          virtual Tensor<1,dim>\r
+          get_neumann_traction (const types::boundary_id &boundary_id,\r
+                                const Point<dim>         &pt,\r
+                                const Tensor<1,dim>      &N) const\r
+          {\r
+            if (this->parameters.load_type == "pressure")\r
+            {\r
+              if (boundary_id == 2)\r
+              {\r
+                return (this->parameters.load * N);\r
+                /*\r
+                const double final_load = this->parameters.load;\r
+                const double final_load_time = 10 * this->time.get_delta_t();\r
+                const double current_time = this->time.get_current();\r
+\r
+\r
+                const double c = final_load_time / 2.0;\r
+                const double r = 200.0 * 0.03 / c;\r
+\r
+                const double load = final_load * std::exp(r * current_time)\r
+                                    / ( std::exp(c * current_time) +  std::exp(r * current_time));\r
+                return load * N;\r
+                */\r
+              }\r
+            }\r
+\r
+            (void)pt;\r
+\r
+            return Tensor<1,dim>();\r
+          }\r
+    };\r
+\r
+    // @sect3{Examples to reproduce experiments by Budday et al. 2017}\r
+    // We group the definition of the geometry, boundary and loading conditions specific to\r
+    // the examples to reproduce experiments by Budday et al. 2017 into specific classes.\r
+\r
+    //@sect4{Base class: Cube geometry and loading pattern}\r
+    template <int dim>\r
+    class BrainBudday2017BaseCube\r
+          : public Solid<dim>\r
+    {\r
+        public:\r
+            BrainBudday2017BaseCube (const Parameters::AllParameters &parameters)\r
+            : Solid<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~BrainBudday2017BaseCube () {}\r
+\r
+        private:\r
+          virtual void\r
+          make_grid()\r
+          {\r
+            GridGenerator::hyper_cube(this->triangulation,\r
+                                      0.0,\r
+                                      1.0,\r
+                                      true);\r
+\r
+            typename Triangulation<dim>::active_cell_iterator cell =\r
+                    this->triangulation.begin_active(), endc = this->triangulation.end();\r
+            for (; cell != endc; ++cell)\r
+            {\r
+              for (unsigned int face = 0; face < GeometryInfo<dim>::faces_per_cell; ++face)\r
+                if (cell->face(face)->at_boundary() == true  &&\r
+                    ( cell->face(face)->boundary_id() == 0 ||\r
+                      cell->face(face)->boundary_id() == 1 ||\r
+                      cell->face(face)->boundary_id() == 2 ||\r
+                      cell->face(face)->boundary_id() == 3    ) )\r
+\r
+                      cell->face(face)->set_boundary_id(100);\r
+\r
+            }\r
+\r
+            GridTools::scale(this->parameters.scale, this->triangulation);\r
+            this->triangulation.refine_global(std::max (1U, this->parameters.global_refinement));\r
+          }\r
+\r
+          virtual double\r
+          get_prescribed_fluid_flow (const types::boundary_id &boundary_id,\r
+                                     const Point<dim>         &pt) const\r
+          {\r
+              (void)pt;\r
+              (void)boundary_id;\r
+              return 0.0;\r
+          }\r
+\r
+          virtual  std::pair<types::boundary_id,types::boundary_id>\r
+          get_drained_boundary_id_for_output() const\r
+          {\r
+              return std::make_pair(100,100);\r
+          }\r
+    };\r
+\r
+    //@sect4{Derived class: Uniaxial boundary conditions}\r
+    template <int dim>\r
+    class BrainBudday2017CubeTensionCompression\r
+          : public BrainBudday2017BaseCube<dim>\r
+    {\r
+        public:\r
+          BrainBudday2017CubeTensionCompression (const Parameters::AllParameters &parameters)\r
+            : BrainBudday2017BaseCube<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~BrainBudday2017CubeTensionCompression () {}\r
+\r
+        private:\r
+          virtual void\r
+          define_tracked_vertices(std::vector<Point<dim> > &tracked_vertices)\r
+          {\r
+            tracked_vertices[0][0] = 0.5*this->parameters.scale;\r
+            tracked_vertices[0][1] = 0.5*this->parameters.scale;\r
+            tracked_vertices[0][2] = 1.0*this->parameters.scale;\r
+\r
+            tracked_vertices[1][0] = 0.5*this->parameters.scale;\r
+            tracked_vertices[1][1] = 0.5*this->parameters.scale;\r
+            tracked_vertices[1][2] = 0.5*this->parameters.scale;\r
+          }\r
+\r
+          virtual void\r
+          make_dirichlet_constraints(AffineConstraints<double> &constraints)\r
+          {\r
+              if (this->time.get_timestep() < 2)\r
+              {\r
+                  VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                           100,\r
+                                                           ConstantFunction<dim>(this->parameters.drained_pressure,this->n_components),\r
+                                                           constraints,\r
+                                                           (this->fe.component_mask(this->pressure)));\r
+              }\r
+              else\r
+              {\r
+                  VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                            100,\r
+                                                            ZeroFunction<dim>(this->n_components),\r
+                                                            constraints,\r
+                                                            (this->fe.component_mask(this->pressure)));\r
+              }\r
+              VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                        4,\r
+                                                        ZeroFunction<dim>(this->n_components),\r
+                                                        constraints,\r
+                                                        this->fe.component_mask(this->z_displacement) );\r
+\r
+            Point<dim> fix_node(0.5*this->parameters.scale, 0.5*this->parameters.scale, 0.0);\r
+            typename DoFHandler<dim>::active_cell_iterator\r
+            cell = this->dof_handler_ref.begin_active(), endc = this->dof_handler_ref.end();\r
+            for (; cell != endc; ++cell)\r
+              for (unsigned int node = 0; node < GeometryInfo<dim>::vertices_per_cell; ++node)\r
+              {\r
+                  if (  (abs(cell->vertex(node)[2]-fix_node[2]) < (1e-6 * this->parameters.scale))\r
+                    &&  (abs(cell->vertex(node)[0]-fix_node[0]) < (1e-6 * this->parameters.scale)))\r
+                      constraints.add_line(cell->vertex_dof_index(node, 0));\r
+\r
+                  if (  (abs(cell->vertex(node)[2]-fix_node[2]) < (1e-6 * this->parameters.scale))\r
+                    &&  (abs(cell->vertex(node)[1]-fix_node[1]) < (1e-6 * this->parameters.scale)))\r
+                    constraints.add_line(cell->vertex_dof_index(node, 1));\r
+              }\r
+\r
+            if (this->parameters.load_type == "displacement")\r
+            {\r
+                const std::vector<double> value = get_dirichlet_load(5,2);\r
+                FEValuesExtractors::Scalar direction;\r
+                direction = this->z_displacement;\r
+\r
+                VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                           5,\r
+                                                           ConstantFunction<dim>(value[2],this->n_components),\r
+                                                           constraints,\r
+                                                           this->fe.component_mask(direction));\r
+            }\r
+          }\r
+\r
+          virtual Tensor<1,dim>\r
+          get_neumann_traction (const types::boundary_id &boundary_id,\r
+                                const Point<dim>         &pt,\r
+                                const Tensor<1,dim>      &N) const\r
+          {\r
+              if (this->parameters.load_type == "pressure")\r
+              {\r
+                if (boundary_id ==  5)\r
+                {\r
+                    const double final_load   = this->parameters.load;\r
+                    const double current_time = this->time.get_current();\r
+                    const double final_time   = this->time.get_end();\r
+                    const double num_cycles   = 3.0;\r
+\r
+                    return  final_load/2.0 * (1.0 - std::sin(numbers::PI * (2.0*num_cycles*current_time/final_time + 0.5))) * N;\r
+                }\r
+              }\r
+\r
+              (void)pt;\r
+\r
+              return Tensor<1,dim>();\r
+            }\r
+\r
+          virtual types::boundary_id\r
+          get_reaction_boundary_id_for_output() const\r
+          {\r
+              return 5;\r
+          }\r
+\r
+          virtual std::vector<double>\r
+          get_dirichlet_load(const types::boundary_id   &boundary_id,\r
+                             const int                  &direction) const\r
+          {\r
+                std::vector<double> displ_incr(dim,0.0);\r
+\r
+                if ( (boundary_id == 5) && (direction == 2) )\r
+                {\r
+                    const double final_displ  = this->parameters.load;\r
+                    const double current_time = this->time.get_current();\r
+                    const double final_time   = this->time.get_end();\r
+                    const double delta_time   = this->time.get_delta_t();\r
+                    const double num_cycles   = 3.0;\r
+                    double current_displ = 0.0;\r
+                    double previous_displ = 0.0;\r
+\r
+                    if (this->parameters.num_cycle_sets == 1)\r
+                    {\r
+                        current_displ  = final_displ/2.0 * (1.0\r
+                          - std::sin(numbers::PI * (2.0*num_cycles*current_time/final_time + 0.5)));\r
+                        previous_displ = final_displ/2.0 * (1.0\r
+                          - std::sin(numbers::PI * (2.0*num_cycles*(current_time-delta_time)/final_time + 0.5)));\r
+                    }\r
+                    else\r
+                    {\r
+                        if ( current_time <= (final_time*1.0/3.0) )\r
+                        {\r
+                            current_displ  = final_displ/2.0 * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*current_time/(final_time*1.0/3.0) + 0.5)));\r
+                            previous_displ = final_displ/2.0 * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*(current_time-delta_time)/(final_time*1.0/3.0) + 0.5)));\r
+                        }\r
+                        else\r
+                        {\r
+                            current_displ  = final_displ * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*current_time / (final_time*2.0/3.0)\r
+                                                  - (num_cycles - 0.5) )));\r
+                            previous_displ = final_displ * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*(current_time-delta_time) / (final_time*2.0/3.0)\r
+                                                  - (num_cycles - 0.5))));\r
+                        }\r
+                    }\r
+                    displ_incr[2] = current_displ - previous_displ;\r
+                }\r
+                return displ_incr;\r
+          }\r
+    };\r
+\r
+    //@sect4{Derived class: No lateral displacement in loading surfaces}\r
+    template <int dim>\r
+    class BrainBudday2017CubeTensionCompressionFullyFixed\r
+          : public BrainBudday2017BaseCube<dim>\r
+    {\r
+        public:\r
+          BrainBudday2017CubeTensionCompressionFullyFixed (const Parameters::AllParameters &parameters)\r
+            : BrainBudday2017BaseCube<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~BrainBudday2017CubeTensionCompressionFullyFixed () {}\r
+\r
+        private:\r
+          virtual void\r
+          define_tracked_vertices(std::vector<Point<dim> > &tracked_vertices)\r
+          {\r
+            tracked_vertices[0][0] = 0.5*this->parameters.scale;\r
+            tracked_vertices[0][1] = 0.5*this->parameters.scale;\r
+            tracked_vertices[0][2] = 1.0*this->parameters.scale;\r
+\r
+            tracked_vertices[1][0] = 0.5*this->parameters.scale;\r
+            tracked_vertices[1][1] = 0.5*this->parameters.scale;\r
+            tracked_vertices[1][2] = 0.5*this->parameters.scale;\r
+          }\r
+\r
+          virtual void\r
+          make_dirichlet_constraints(AffineConstraints<double> &constraints)\r
+          {\r
+              if (this->time.get_timestep() < 2)\r
+              {\r
+                  VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                           100,\r
+                                                           ConstantFunction<dim>(this->parameters.drained_pressure,this->n_components),\r
+                                                           constraints,\r
+                                                           (this->fe.component_mask(this->pressure)));\r
+              }\r
+              else\r
+              {\r
+                  VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                            100,\r
+                                                            ZeroFunction<dim>(this->n_components),\r
+                                                            constraints,\r
+                                                            (this->fe.component_mask(this->pressure)));\r
+              }\r
+\r
+              VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                        4,\r
+                                                        ZeroFunction<dim>(this->n_components),\r
+                                                        constraints,\r
+                                                      (this->fe.component_mask(this->x_displacement) |\r
+                                                       this->fe.component_mask(this->y_displacement) |\r
+                                                       this->fe.component_mask(this->z_displacement) ));\r
+\r
+\r
+            if (this->parameters.load_type == "displacement")\r
+            {\r
+                const std::vector<double> value = get_dirichlet_load(5,2);\r
+                FEValuesExtractors::Scalar direction;\r
+                direction = this->z_displacement;\r
+\r
+                VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                           5,\r
+                                                           ConstantFunction<dim>(value[2],this->n_components),\r
+                                                           constraints,\r
+                                                           this->fe.component_mask(direction) );\r
+\r
+               VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                          5,\r
+                                                          ZeroFunction<dim>(this->n_components),\r
+                                                          constraints,\r
+                                                          (this->fe.component_mask(this->x_displacement) |\r
+                                                           this->fe.component_mask(this->y_displacement) ));\r
+            }\r
+          }\r
+\r
+          virtual Tensor<1,dim>\r
+          get_neumann_traction (const types::boundary_id &boundary_id,\r
+                                const Point<dim>         &pt,\r
+                                const Tensor<1,dim>      &N) const\r
+          {\r
+              if (this->parameters.load_type == "pressure")\r
+              {\r
+                if (boundary_id ==  5)\r
+                {\r
+                    const double final_load   = this->parameters.load;\r
+                    const double current_time = this->time.get_current();\r
+                    const double final_time   = this->time.get_end();\r
+                    const double num_cycles   = 3.0;\r
+\r
+                    return  final_load/2.0 * (1.0 - std::sin(numbers::PI * (2.0*num_cycles*current_time/final_time + 0.5))) * N;\r
+                }\r
+              }\r
+\r
+              (void)pt;\r
+\r
+              return Tensor<1,dim>();\r
+            }\r
+\r
+          virtual types::boundary_id\r
+          get_reaction_boundary_id_for_output() const\r
+          {\r
+              return 5;\r
+          }\r
+\r
+          virtual std::vector<double>\r
+          get_dirichlet_load(const types::boundary_id   &boundary_id,\r
+                             const int                  &direction) const\r
+          {\r
+                std::vector<double> displ_incr(dim,0.0);\r
+\r
+                if ( (boundary_id == 5) && (direction == 2) )\r
+                {\r
+                    const double final_displ  = this->parameters.load;\r
+                    const double current_time = this->time.get_current();\r
+                    const double final_time   = this->time.get_end();\r
+                    const double delta_time   = this->time.get_delta_t();\r
+                    const double num_cycles   = 3.0;\r
+                    double current_displ = 0.0;\r
+                    double previous_displ = 0.0;\r
+\r
+                    if (this->parameters.num_cycle_sets == 1)\r
+                    {\r
+                        current_displ  = final_displ/2.0 * (1.0 - std::sin(numbers::PI * (2.0*num_cycles*current_time/final_time + 0.5)));\r
+                        previous_displ = final_displ/2.0 * (1.0 - std::sin(numbers::PI * (2.0*num_cycles*(current_time-delta_time)/final_time + 0.5)));\r
+                    }\r
+                    else\r
+                    {\r
+                        if ( current_time <= (final_time*1.0/3.0) )\r
+                        {\r
+                            current_displ  = final_displ/2.0 * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*current_time/(final_time*1.0/3.0) + 0.5)));\r
+                            previous_displ = final_displ/2.0 * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*(current_time-delta_time)/(final_time*1.0/3.0) + 0.5)));\r
+                        }\r
+                        else\r
+                        {\r
+                            current_displ  = final_displ * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*current_time / (final_time*2.0/3.0)\r
+                                                  - (num_cycles - 0.5) )));\r
+                            previous_displ = final_displ * (1.0 - std::sin(numbers::PI *\r
+                                                 (2.0*num_cycles*(current_time-delta_time) / (final_time*2.0/3.0)\r
+                                                  - (num_cycles - 0.5))));\r
+                        }\r
+                    }\r
+                    displ_incr[2] = current_displ - previous_displ;\r
+                }\r
+                return displ_incr;\r
+          }\r
+    };\r
+\r
+    //@sect4{Derived class: No lateral or vertical displacement in loading surface}\r
+    template <int dim>\r
+    class BrainBudday2017CubeShearFullyFixed\r
+          : public BrainBudday2017BaseCube<dim>\r
+    {\r
+        public:\r
+          BrainBudday2017CubeShearFullyFixed (const Parameters::AllParameters &parameters)\r
+            : BrainBudday2017BaseCube<dim> (parameters)\r
+          {}\r
+\r
+          virtual ~BrainBudday2017CubeShearFullyFixed () {}\r
+\r
+        private:\r
+          virtual void\r
+          define_tracked_vertices(std::vector<Point<dim> > &tracked_vertices)\r
+          {\r
+            tracked_vertices[0][0] = 0.75*this->parameters.scale;\r
+            tracked_vertices[0][1] = 0.5*this->parameters.scale;\r
+            tracked_vertices[0][2] = 0.0*this->parameters.scale;\r
+\r
+            tracked_vertices[1][0] = 0.25*this->parameters.scale;\r
+            tracked_vertices[1][1] = 0.5*this->parameters.scale;\r
+            tracked_vertices[1][2] = 0.0*this->parameters.scale;\r
+          }\r
+\r
+          virtual void\r
+          make_dirichlet_constraints(AffineConstraints<double> &constraints)\r
+          {\r
+              if (this->time.get_timestep() < 2)\r
+              {\r
+                  VectorTools::interpolate_boundary_values(this->dof_handler_ref,\r
+                                                           100,\r
+                                                           ConstantFunction<dim>(this->parameters.drained_pressure,this->n_components),\r
+                                                           constraints,\r
+                                                           (this->fe.component_mask(this->pressure)));\r
+              }\r
+              else\r
+              {\r
+                  VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                            100,\r
+                                                            ZeroFunction<dim>(this->n_components),\r
+                                                            constraints,\r
+                                                            (this->fe.component_mask(this->pressure)));\r
+              }\r
+\r
+              VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                        5,\r
+                                                        ZeroFunction<dim>(this->n_components),\r
+                                                        constraints,\r
+                                                      (this->fe.component_mask(this->x_displacement) |\r
+                                                       this->fe.component_mask(this->y_displacement) |\r
+                                                       this->fe.component_mask(this->z_displacement) ));\r
+\r
+\r
+            if (this->parameters.load_type == "displacement")\r
+            {\r
+                const std::vector<double> value = get_dirichlet_load(4,0);\r
+                FEValuesExtractors::Scalar direction;\r
+                direction = this->x_displacement;\r
+\r
+                VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                           4,\r
+                                                           ConstantFunction<dim>(value[0],this->n_components),\r
+                                                           constraints,\r
+                                                           this->fe.component_mask(direction));\r
+\r
+               VectorTools::interpolate_boundary_values( this->dof_handler_ref,\r
+                                                          4,\r
+                                                          ZeroFunction<dim>(this->n_components),\r
+                                                          constraints,\r
+                                                          (this->fe.component_mask(this->y_displacement) |\r
+                                                           this->fe.component_mask(this->z_displacement) ));\r
+            }\r
+          }\r
+\r
+          virtual Tensor<1,dim>\r
+          get_neumann_traction (const types::boundary_id &boundary_id,\r
+                                const Point<dim>         &pt,\r
+                                const Tensor<1,dim>      &N) const\r
+          {\r
+              if (this->parameters.load_type == "pressure")\r
+              {\r
+                if (boundary_id ==  4)\r
+                {\r
+                    const double final_load   = this->parameters.load;\r
+                    const double current_time = this->time.get_current();\r
+                    const double final_time   = this->time.get_end();\r
+                    const double num_cycles   = 3.0;\r
+                    const Point< 3, double> axis (0.0,1.0,0.0);\r
+                    const double angle = numbers::PI;\r
+                    static const Tensor< 2, dim, double> R(Physics::Transformations::Rotations::rotation_matrix_3d(axis,angle));\r
+\r
+                    return  (final_load * (std::sin(2.0*(numbers::PI)*num_cycles*current_time/final_time)) * (R * N));\r
+                }\r
+              }\r
+\r
+              (void)pt;\r
+\r
+              return Tensor<1,dim>();\r
+            }\r
+\r
+          virtual types::boundary_id\r
+          get_reaction_boundary_id_for_output() const\r
+          {\r
+              return 4;\r
+          }\r
+\r
+          virtual std::vector<double>\r
+          get_dirichlet_load(const types::boundary_id   &boundary_id,\r
+                             const int                  &direction) const\r
+          {\r
+                std::vector<double> displ_incr (dim, 0.0);\r
+\r
+                if ( (boundary_id == 4) && (direction == 0) )\r
+                {\r
+                    const double final_displ  = this->parameters.load;\r
+                    const double current_time = this->time.get_current();\r
+                    const double final_time   = this->time.get_end();\r
+                    const double delta_time   = this->time.get_delta_t();\r
+                    const double num_cycles   = 3.0;\r
+                    double current_displ = 0.0;\r
+                    double previous_displ = 0.0;\r
+\r
+                    if (this->parameters.num_cycle_sets == 1)\r
+                    {\r
+                        current_displ  = final_displ * (std::sin(2.0*(numbers::PI)*num_cycles*current_time/final_time));\r
+                        previous_displ = final_displ * (std::sin(2.0*(numbers::PI)*num_cycles*(current_time-delta_time)/final_time));\r
+                    }\r
+                    else\r
+                    {\r
+                        AssertThrow(false, ExcMessage("Problem type not defined. Budday shear experiments implemented only for one set of cycles."));\r
+                    }\r
+                    displ_incr[0] = current_displ - previous_displ;\r
+                }\r
+                return displ_incr;\r
+          }\r
+    };\r
+\r
+}\r
+\r
+// @sect3{Main function}\r
+// Lastly we provide the main driver function which is similar to the other tutorials.\r
+int main (int argc, char *argv[])\r
+{\r
+  using namespace dealii;\r
+  using namespace NonLinearPoroViscoElasticity;\r
+\r
+  const unsigned int n_tbb_processes = 1;\r
+  Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, n_tbb_processes);\r
+\r
+  try\r
+    {\r
+      Parameters::AllParameters parameters ("parameters.prm");\r
+      if (parameters.geom_type == "Ehlers_tube_step_load")\r
+      {\r
+        VerificationEhlers1999StepLoad<3> solid_3d(parameters);\r
+        solid_3d.run();\r
+      }\r
+      else if (parameters.geom_type == "Ehlers_tube_increase_load")\r
+      {\r
+        VerificationEhlers1999IncreaseLoad<3> solid_3d(parameters);\r
+        solid_3d.run();\r
+      }\r
+      else if (parameters.geom_type == "Ehlers_cube_consolidation")\r
+      {\r
+        VerificationEhlers1999CubeConsolidation<3> solid_3d(parameters);\r
+        solid_3d.run();\r
+      }\r
+      else if (parameters.geom_type == "Franceschini_consolidation")\r
+      {\r
+        Franceschini2006Consolidation<3> solid_3d(parameters);\r
+        solid_3d.run();\r
+      }\r
+      else if (parameters.geom_type == "Budday_cube_tension_compression")\r
+      {\r
+        BrainBudday2017CubeTensionCompression<3> solid_3d(parameters);\r
+        solid_3d.run();\r
+      }\r
+      else if (parameters.geom_type == "Budday_cube_tension_compression_fully_fixed")\r
+      {\r
+        BrainBudday2017CubeTensionCompressionFullyFixed<3> solid_3d(parameters);\r
+        solid_3d.run();\r
+      }\r
+      else if (parameters.geom_type == "Budday_cube_shear_fully_fixed")\r
+      {\r
+        BrainBudday2017CubeShearFullyFixed<3> solid_3d(parameters);\r
+        solid_3d.run();\r
+      }\r
+      else\r
+      {\r
+        AssertThrow(false, ExcMessage("Problem type not defined. Current setting: " + parameters.geom_type));\r
+      }\r
+\r
+    }\r
+  catch (std::exception &exc)\r
+    {\r
+      if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)\r
+      {\r
+          std::cerr << std::endl << std::endl\r
+                    << "----------------------------------------------------"\r
+                    << std::endl;\r
+          std::cerr << "Exception on processing: " << std::endl << exc.what()\r
+                    << std::endl << "Aborting!" << std::endl\r
+                    << "----------------------------------------------------"\r
+                    << std::endl;\r
+\r
+          return 1;\r
+      }\r
+    }\r
+  catch (...)\r
+    {\r
+      if (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)\r
+      {\r
+          std::cerr << std::endl << std::endl\r
+                    << "----------------------------------------------------"\r
+                    << std::endl;\r
+          std::cerr << "Unknown exception!" << std::endl << "Aborting!"\r
+                    << std::endl\r
+                    << "----------------------------------------------------"\r
+                    << std::endl;\r
+          return 1;\r
+      }\r
+    }\r
+  return 0;\r
+}\r
diff --git a/Nonlinear_PoroViscoelasticity/parameters.prm b/Nonlinear_PoroViscoelasticity/parameters.prm
new file mode 100755 (executable)
index 0000000..9fdce22
--- /dev/null
@@ -0,0 +1,197 @@
+#
+# Listing of Parameters
+# ---------------------
+
+
+subsection Finite element system
+  # Displacement system polynomial order
+  set Polynomial degree displ = 2
+
+  # Pore pressure system polynomial order
+  set Polynomial degree pore  = 1
+
+  # Gauss quadrature order (should be at least an order higher than the polynomial order)
+  set Quadrature order        = 3
+end
+
+
+subsection Geometry
+  # Type of geometry:  Ehlers_tube_step_load | Ehlers_tube_increase_load | Ehlers_cube_consolidation
+  #                  | Franceschini_consolidation
+  #                  | Budday_cube_tension_compression | Budday_cube_tension_compression_fully_fixed 
+  #                  | Budday_cube_shear_fully_fixed
+  set Geometry type       = Budday_cube_tension_compression_fully_fixed
+
+  # Global refinement level (higher value means finer mesh)
+  set Global refinement   = 3
+
+  # Global grid scaling factor (scales geometry size)
+  set Grid scale          = 5.0
+
+  #  Type of loading: pressure | displacement | none
+  set Load type           = displacement
+
+  # Value of loading [Pa] for pressure and [mm] for displacements
+  set Load value          = -0.5
+
+  # Number of times each set of 3 cycles is repeated, only for "Budday_cube_tension_compression": 1 or 2
+  # (Load value is doubled in second set, load rate is kept constant. Final time indicates end of second cycle set.)
+  set Number of cycle sets = 1
+
+  # Value of the prescribed fluid flow [mm/s], Q* = w*·N should include + or - sign.
+  set Fluid flow value    = 0
+
+  # Increase of pressure at drained boundary [Pa] w.r.t. atmospheric pressure
+  set Drained pressure    = 0
+end
+
+
+subsection Material properties
+
+  # ------------------------ SOLID ----------------------------------
+
+  # Type of material:  Neo-Hooke, Ogden or visco-Ogden
+  set material        = visco-Ogden
+
+  # First Lame parameter [Pa] (for extension function related to compactation point)
+  set lambda          = 24502
+
+  # ===== Neo-Hooke only =====
+
+  # Shear modulus [Pa] (Second Lame parameter)  -- Neo-Hooke
+  set shear modulus  =  660.0
+
+  # ===== Ogden  + Visco-Ogden only =====
+
+  # Type of eigen solver for Ogden models: QL Implicit Shifts | Jacobi
+  set eigen solver    = QL Implicit Shifts
+
+  # Shear modulus mu1  [Pa]
+  set mu1             = -83.9
+
+  # Shear modulus mu2  [Pa]
+  set mu2             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1          = -11.92
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3          = 1.0
+
+  # ===== Visco-Ogden only =====
+
+  # Shear modulus mu1  [Pa]
+  set mu1_1           = -2100
+
+  # Shear modulus mu2  [Pa]
+  set mu2_1             = 0.0
+
+  # Shear modulus mu3  [Pa]
+  set mu3_1             = 0.0
+
+  # Stiffening parameter alpha 1  [-]
+  set alpha1_1          = -2.2
+
+  # Stiffening parameter alpha 2  [-]
+  set alpha2_1          = 1.0
+
+  # Stiffening parameter alpha 3  [-]
+  set alpha3_1          = 1.0
+
+  # Deformation-independent viscosity parameter [Pa·s]
+  set viscosity_1       = 14000
+
+  # ------------------------ FLUID ----------------------------------
+
+  # Choose between Markert formulation of deformation-dependent intrinsic permeability (Markert)
+  # and Ehlers formulation of deformation-dependent Darcy flow coefficient (Ehlers)
+  # to define the seepage velocity
+  set seepage definition = Markert
+
+  # Initial porosity (solid volume fraction)
+  set initial solid volume fraction    = 0.75
+
+  # Deformation-dependency control parameter for specific permeability [kappa >= 0]
+  set kappa                            = 50
+
+  # ===== Markert only =====
+
+  # Initial intrinsic permeability parameter of the solid (isotropic permeability) [mm²]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set initial intrinsic permeability   = 1.0e-8
+
+  # Effective shear viscosity parameter of the fluid [Pa·s = 1e-6·N·s/mm³]
+  # To be used with Markert formulation of deformation-dependent intrinsic permeability
+  set fluid viscosity                  = 0.89e-3
+
+  # ===== Ehlers only =====
+
+  # Initial Darcy flow coefficient [mm/s]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set initial Darcy coefficient   = 2.42e-7
+
+  # Effective weight of fluid [1e-6·N/mm³]
+  # To be used with Ehlers formulation of deformation-dependent Darcy flow coefficient
+  set fluid weight                = 9.777
+
+  # ------------------------ GRAVITY ----------------------------------
+
+  # Gravity term considered (true) or neglected (false)
+  set gravity term      = false
+
+  # ===== gravity true only =====
+
+  # If gravity term is considered, define the (real or effective) density of the fluid [g/mm³]
+  set fluid density     = 0.997e-3
+
+  # If gravity term is considered, define the (real or effective) density of the solid [g/mm³]
+  set solid density     = 0.997e-3
+
+  # If gravity term is considered, define the direction of gravity (unit vector 0 for x, 1 for y, 2 for z)
+  set gravity direction = 2
+
+  # If gravity term is considered, define the value of gravity ("minus" indicates negative sense of direction) [mm/s²]
+  set gravity value     = -9810
+end
+
+subsection Nonlinear solver
+  # Number of Newton-Raphson iterations allowed
+  set Max iterations Newton-Raphson = 15
+
+  # Force residual tolerance
+  set Tolerance force               = 1.0e-8
+
+  # Displacement error tolerance
+  set Tolerance displacement        = 1.0e-8
+
+  # Pore pressure error tolerance
+  set Tolerance pore pressure       = 1.0e-8
+
+end
+
+
+subsection Time
+  # End time [s]
+  set End time            = 90.0
+
+  # Time step size [s]
+  set Time step size      =  0.1
+end
+
+
+subsection Output parameters
+  # Generate Paraview output files: true | false
+  set Output files               = true
+
+  # Output data every given time step number for Paraview output files
+  set Time step number output    = 1
+
+  # For "solution" file output data associated with integration point values averaged on:  elements | nodes
+  set Averaged results           = nodes
+end
diff --git a/Nonlinear_PoroViscoelasticity/readme.md b/Nonlinear_PoroViscoelasticity/readme.md
new file mode 100644 (file)
index 0000000..4981df8
--- /dev/null
@@ -0,0 +1,89 @@
+Readme file for nonlinear-poro-viscoelasticity
+==============================================
+
+Overview
+--------
+
+We implemented a nonlinear poro-viscoelastic formulation with the aim of characterising brain tissue response to cyclic loading. Our model captures both experimentally observed fluid flow and conditioning aspects of brain tissue behavior in addition to its well-established nonlinear, preconditioning, hysteretic, and tension-compression asymmetric characteristics.
+
+The tissue is modelled as a biphasic material consisting in an immiscible aggregate of a nonlinear viscoelastic solid skeleton saturated with pore fluid. The governing equations are linearised using automatic differentiation and solved monolithically for the unknown solid displacements and fluid pore pressure values. 
+
+A detailed description of the formulation, it's verification, and the results obtained can be found in:
+* E. Comellas, S. Budday, J.-P. Pelteret, G. A. Holzapfel and P. Steinamnn (2020), Modeling the porous and viscous responses of human brain tissue behavior, Computer Methods in Applied Mechanics and Engineering (accepted for publication).
+
+In this paper we show that nonlinear poroelasticity alone can reproduce consolidation experiments, yet it is insufficient to capture stress conditioning due to cyclic loading. We also discuss how the poroelastic response exhibits preconditioning and hysteresis in the fluid flow space, with porous and viscous effects being highly interrelated.
+
+
+Quick facts on the code
+-----------------------
+
+* Biphasic material following the Theory of Porous Media
+* Nonlinear finite viscoelasticity built on Ogden hyperelasticity
+* Darcy-like fluid flow
+* Spatial discretisation with continuous Q2P1 Lagrangian finite elements
+* Temporal discretisation with a stable implicit one-step backward differentiation method
+* Newton-Raphson scheme to solve the nonlinear system of governing equations
+* Forward mode automatic differentiation with the number of derivative components chosen at run-time (Sacado library within Trilinos package) to linearise the equations
+* Trilinos direct solver for the (non-symmetric) linear system of equations using a monolithic scheme
+* Parallelization through Threading Building Blocks and across nodes via MPI (Trilinos package)
+* Based on step-44 and code gallery contributions 'Quasi-Static Finite-Strain Compressible Elasticity' and 'Quasi-Static Finite-Strain Quasi-incompressible Visco-elasticity'
+* Only works in 3D
+
+
+Running the code
+---------------- 
+### Requirements
+* Version 9.1 or greater of deal.II
+* C++11, MPI, Metis and Trilinos with Sacado must be enabled
+
+### Compiling and running
+Similar to the example programs, run
+```
+cmake -DDEAL_II_DIR=/path/to/deal.II .
+```
+in this directory to configure the problem.  
+You can switch between debug and release mode by calling either
+```
+make debug
+```
+or
+```
+make release
+```
+The problem may then be run in serial mode with
+```
+make run
+```
+and in parallel (in this case, on `6` processors) with
+```
+mpirun -np 6 ./nonlinear-poro-viscoelasticity
+```
+
+Alternatively, to keep it a bit more tidy, create a folder, e.g. run and copy the input file in there. Then type:
+```
+mpirun -np 6 -wdir run ../nonlinear-poro-viscoelasticity
+```
+All the input files used to produce the results shown in the paper are provided in in the input-files folder. Simply replace the parameters.prm file in the main directory. For the verification examples, run the python script 'run-multi-calc.py' instead:
+```
+python run-multi-calc.py
+```
+The 'run-multi-calc.py' and 'runPoro.sh' files provided must both be in the main directory. This will automatically generate the required input files and run them in sequence.
+
+
+Reference for this work
+-----------------------
+
+If you use this program as a basis for your own work, please consider citing the paper referenced in the introduction. The initial version of this work was contributed to the deal.II project by E. Comellas and J.-P. Pelteret.
+
+
+
+Recommended literature
+----------------------
+
+* W. Ehlers and G. Eipper (1999), Finite Elastic Deformations in Liquid-Saturated and Empty Porous Solids, Transport in Porous Media 34(1/3):179-191. DOI: [10.1023/A:1006565509095](https://doi.org/10.1023/A:1006565509095);
+* S. Reese and  S. Govindjee (2001), A theory of finite viscoelasticity and numerical aspects, International Journal of Solids and Structures 35(26-27):3455-3482. DOI: [10.1016/S0020-7683(97)00217-5](https://doi.org/10.1016/S0020-7683(97)00217-5);
+* G. Franceschini, D. Bigoni, P. Regitnig and G. A. Holzapfel (2006), Brain tissue deforms similarly to  filled elastomers and follows consolidation theory, Journal of the Mechanics and Physics of Solids 54(12):2592-2620. DOI: [10.1016/j.jmps.2006.05.004](https://doi.org/10.1016/j.jmps.2006.05.004);
+* S. Budday, G. Sommer, J. Haybaeck, P. Steinmann, G. A. Holzapfel and E. Kuhl (2017), Rheological characterization of human brain tissue, Acta Biomaterialia 60:315-329. DOI: [10.1016/j.actbio.2017.06.024](https://doi.org/10.1016/j.actbio.2017.06.024);
+* G.A. Holzapfel (2001), Nonlinear Solid Mechanics. A Continuum Approach for Engineering, John Wiley & Sons. ISBN: [978-0-471-82319-3](http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471823198.html);
+
+

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.