Commit 8c450823 authored by Bernd Flemisch's avatar Bernd Flemisch
Browse files

[el2p] parallelize the el2p model

So far, the el2p model did not run in parallel, since our parallel
solvers assume a certain ordering of the degrees of freedom. This patch
mainly introduces an AMG backend that is tailored to the el2p model. It
simply reorders the linear system by copying from the original system,
passes the reordered system to the original AMG backend, and
reorders/copies the result back. This could be achieved more
efficiently and with less memory usage by already reordering the dofs
inside the el2p model or by adapting the AMG backend. Since the
performance impact appears to be minimal, we decided to keep the current
simple solution and try a better one once we need it.

Reviewed by Martin B.



git-svn-id: svn://svn.iws.uni-stuttgart.de/DUMUX/dumux/trunk@14235 2fb0f335-1f38-0410-981e-8018bf24f1b0
parent e0370fc0
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
// vi: set et ts=4 sw=4 sts=4:
/*****************************************************************************
* See the file COPYING for full copying permissions. *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*****************************************************************************/
/*!
* \file
* \ingroup Linear
*
* \brief Wraps the AMG backend such that it can be used for the el2p model.
*/
#ifndef DUMUX_EL2P_AMGBACKEND_HH
#define DUMUX_EL2P_AMGBACKEND_HH
#include <dumux/linear/amgbackend.hh>
namespace Dumux {
/*!
* \brief Wraps the AMG backend such that it can be used for the el2p model.
*/
template <class TypeTag>
class El2PAMGBackend : public AMGBackend<TypeTag>
{
typedef AMGBackend<TypeTag> ParentType;
typedef typename GET_PROP_TYPE(TypeTag, Problem) Problem;
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) };
typedef typename Dune::FieldMatrix<Scalar, numEq, numEq> MatrixBlock;
typedef typename Dune::BCRSMatrix<MatrixBlock> BlockMatrix;
typedef typename Dune::FieldVector<Scalar, numEq> VectorBlock;
typedef typename Dune::BlockVector<VectorBlock> BlockVector;
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
enum { dim = GridView::dimension };
public:
/*!
* \copydoc AMGBackend::AMGBackend()
*/
El2PAMGBackend(const Problem& problem)
: ParentType(problem)
{
#if HAVE_MPI
createBlockMatrixAndVectors_();
#endif
}
/*!
* \copydoc AMGBackend::solve()
*/
template<class Matrix, class Vector>
bool solve(Matrix& A, Vector& x, Vector& b)
{
#if HAVE_MPI
flatToBlocked_(A, x, b);
int converged = ParentType::solve(*aBlocked_, *xBlocked_, *bBlocked_);
blockedToFlat_(x, b);
return converged;
#else
return ParentType::solve(A, x, b);
#endif
}
private:
void createBlockMatrixAndVectors_()
{
int numVertices = this->problem().gridView().size(dim);
aBlocked_ = Dune::make_shared<BlockMatrix>(numVertices, numVertices, BlockMatrix::random);
xBlocked_ = Dune::make_shared<BlockVector>(numVertices);
bBlocked_ = Dune::make_shared<BlockVector>(numVertices);
// find out the global indices of the neighboring vertices of
// each vertex
typedef std::set<int> NeighborSet;
std::vector<NeighborSet> neighbors(numVertices);
auto eIt = this->problem().gridView().template begin<0>();
const auto& eEndIt = this->problem().gridView().template end<0>();
for (; eIt != eEndIt; ++eIt) {
const auto& element = *eIt;
// loop over all element vertices
int n = element.template count<dim>();
for (int i = 0; i < n - 1; ++i) {
int globalI = this->problem().vertexMapper().map(*eIt, i, dim);
for (int j = i + 1; j < n; ++j) {
int globalJ = this->problem().vertexMapper().map(*eIt, j, dim);
// make sure that vertex j is in the neighbor set
// of vertex i and vice-versa
neighbors[globalI].insert(globalJ);
neighbors[globalJ].insert(globalI);
}
}
};
// make vertices neighbors to themselfs
for (int i = 0; i < numVertices; ++i)
neighbors[i].insert(i);
// allocate space for the rows of the matrix
for (int i = 0; i < numVertices; ++i) {
aBlocked_->setrowsize(i, neighbors[i].size());
}
aBlocked_->endrowsizes();
// fill the rows with indices. each vertex talks to all of its
// neighbors. (it also talks to itself since vertices are
// sometimes quite egocentric.)
for (int i = 0; i < numVertices; ++i) {
auto nIt = neighbors[i].begin();
const auto& nEndIt = neighbors[i].end();
for (; nIt != nEndIt; ++nIt) {
aBlocked_->addindex(i, *nIt);
}
}
aBlocked_->endindices();
}
template <class FlatMatrix, class FlatVector>
void flatToBlocked_(const FlatMatrix& aFlat,
const FlatVector& xFlat,
const FlatVector& bFlat)
{
unsigned numBlocks = xBlocked_->size();
static const unsigned numMassEq = numEq - dim;
for (unsigned rowBlockIdx = 0; rowBlockIdx < numBlocks; ++rowBlockIdx)
{
for (unsigned rowEqIdx = 0; rowEqIdx < numEq; ++rowEqIdx)
{
unsigned rowFlatIdx;
if (rowEqIdx < numMassEq)
rowFlatIdx = rowBlockIdx*numMassEq + rowEqIdx;
else
rowFlatIdx = numBlocks*numMassEq + rowBlockIdx*dim + rowEqIdx - numMassEq;
(*xBlocked_)[rowBlockIdx][rowEqIdx] = xFlat[rowFlatIdx];
(*bBlocked_)[rowBlockIdx][rowEqIdx] = bFlat[rowFlatIdx];
for (auto colBlockIt = (*aBlocked_)[rowBlockIdx].begin();
colBlockIt != (*aBlocked_)[rowBlockIdx].end(); ++colBlockIt)
{
unsigned colBlockIdx = colBlockIt.index();
auto& aBlock = (*aBlocked_)[rowBlockIdx][colBlockIdx];
for (unsigned colEqIdx = 0; colEqIdx < numEq; ++colEqIdx)
{
unsigned colFlatIdx;
if (colEqIdx < numMassEq)
colFlatIdx = colBlockIdx*numMassEq + colEqIdx;
else
colFlatIdx = numBlocks*numMassEq + colBlockIdx*dim + colEqIdx - numMassEq;
aBlock[rowEqIdx][colEqIdx] = aFlat[rowFlatIdx][colFlatIdx];
}
}
}
}
}
template <class FlatVector>
void blockedToFlat_(FlatVector& xFlat,
FlatVector& bFlat)
{
unsigned numBlocks = xBlocked_->size();
static const unsigned numMassEq = numEq - dim;
for (unsigned rowBlockIdx = 0; rowBlockIdx < numBlocks; ++rowBlockIdx)
{
for (unsigned rowEqIdx = 0; rowEqIdx < numEq; ++rowEqIdx)
{
unsigned rowFlatIdx;
if (rowEqIdx < numMassEq)
rowFlatIdx = rowBlockIdx*numMassEq + rowEqIdx;
else
rowFlatIdx = numBlocks*numMassEq + rowBlockIdx*dim + rowEqIdx - numMassEq;
xFlat[rowFlatIdx] = (*xBlocked_)[rowBlockIdx][rowEqIdx];
bFlat[rowFlatIdx] = (*bBlocked_)[rowBlockIdx][rowEqIdx];
}
}
}
std::shared_ptr<BlockMatrix> aBlocked_;
std::shared_ptr<BlockVector> xBlocked_;
std::shared_ptr<BlockVector> bBlocked_;
};
} // namespace Dumux
#endif // DUMUX_EL2P_AMGBACKEND_HH
......@@ -93,6 +93,8 @@ NEW_PROP_TAG(LocalFEMSpace);
//! Specifies the local operator
NEW_PROP_TAG(LocalOperator);
//! The type traits required for using the AMG backend
NEW_PROP_TAG(AmgTraits);
}
}
......
......@@ -28,6 +28,12 @@
#ifndef DUMUX_ELASTIC2P_PROPERTY_DEFAULTS_HH
#define DUMUX_ELASTIC2P_PROPERTY_DEFAULTS_HH
#include <dune/istl/schwarz.hh>
#include <dune/istl/novlpschwarz.hh>
#include <dune/istl/owneroverlapcopy.hh>
#include <dune/istl/paamg/pinfo.hh>
#include <dune/istl/preconditioners.hh>
#include <dune/pdelab/backend/istlmatrixbackend.hh>
#include <dune/pdelab/gridfunctionspace/gridfunctionspace.hh>
#include <dune/pdelab/backend/istlvectorbackend.hh>
......@@ -360,6 +366,38 @@ public:
typedef Dune::FieldVector<Scalar, numEq> type;
};
//! the AMG backend will use the BCRS matrix directly
SET_PROP(BoxElasticTwoP, AmgTraits)
{
public:
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
enum {
dofCodim = GridView::dimension,
isNonOverlapping = true
};
#if HAVE_MPI
enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) };
#else
typedef typename GET_PROP_TYPE(TypeTag, JacobianMatrix) JacobianMatrix;
enum { numEq = JacobianMatrix::block_type::rows};
#endif
typedef Dune::BCRSMatrix<Dune::FieldMatrix<Scalar,numEq,numEq> > MType;
typedef Dune::BlockVector<Dune::FieldVector<Scalar,numEq> > VType;
#if HAVE_MPI
typedef MType JacobianMatrix;
typedef Dune::OwnerOverlapCopyCommunication<Dune::bigunsignedint<96>,int> Comm;
typedef Dune::NonoverlappingSchwarzOperator<MType,VType, VType,Comm> LinearOperator;
typedef Dune::NonoverlappingSchwarzScalarProduct<VType,Comm> ScalarProduct;
typedef Dune::NonoverlappingBlockPreconditioner<Comm,Dune::SeqSSOR<MType,VType, VType> > Smoother;
#else
typedef Dune::Amg::SequentialInformation Comm;
typedef Dune::MatrixAdapter<MType,VType,VType> LinearOperator;
typedef Dune::SeqScalarProduct<VType> ScalarProduct;
typedef Dune::SeqSSOR<MType,VType, VType> Smoother;
#endif
};
//! The local jacobian operator
SET_TYPE_PROP(BoxElasticTwoP, LocalJacobian, Dumux::ElTwoPLocalJacobian<TypeTag>);
......
......@@ -177,7 +177,11 @@ public:
{
return result_;
}
const Problem& problem() const
{
return problem_;
}
private:
const Problem& problem_;
ParallelISTLHelper<TypeTag> phelper_;
......
......@@ -5,3 +5,13 @@ add_dumux_test(test_el2p test_el2p test_el2p.cc
${CMAKE_CURRENT_BINARY_DIR}/el2p-00003.vtu
${CMAKE_CURRENT_BINARY_DIR}/test_el2p
${CMAKE_CURRENT_SOURCE_DIR}/grids/test_el2p.dgf 100 200 100)
if(MPI_FOUND)
add_dumux_test(test_el2p_parallel test_el2p_parallel test_el2p.cc
${CMAKE_SOURCE_DIR}/bin/runTest.sh
${CMAKE_SOURCE_DIR}/bin/fuzzycomparevtu.py
${CMAKE_SOURCE_DIR}/test/references/el2p-parallel-reference.vtu
${CMAKE_CURRENT_BINARY_DIR}/s0004-p0001-el2p-00003.vtu
"${MPIEXEC} -np 4 ${CMAKE_CURRENT_BINARY_DIR}/test_el2p_parallel"
${CMAKE_CURRENT_SOURCE_DIR}/grids/test_el2p.dgf 100 200 100)
endif(MPI_FOUND)
......@@ -31,7 +31,7 @@
#include <dumux/material/fluidsystems/brineco2fluidsystem.hh>
#include <dumux/implicit/common/implicitporousmediaproblem.hh>
#include <dumux/geomechanics/el2p/el2pmodel.hh>
#include <dumux/linear/amgbackend.hh>
#include <dumux/geomechanics/el2p/el2pamgbackend.hh>
#include "el2pco2tables.hh"
#include "el2pspatialparams.hh"
......@@ -55,11 +55,8 @@ NEW_TYPE_TAG(El2P_TestProblem, INHERITS_FROM(BoxModel, BoxElasticTwoP, El2PSpati
NEW_PROP_TAG(InitialDisplacement); //!< The initial displacement function
NEW_PROP_TAG(InitialPressSat); //!< The initial pressure and saturation function
// Set the grid type
SET_PROP(El2P_TestProblem, Grid) {
typedef Dune::YaspGrid<3> type;
};
SET_TYPE_PROP(El2P_TestProblem, Grid, Dune::YaspGrid<3>);
SET_PROP(El2P_TestProblem, PressureFEM)
{
......@@ -80,10 +77,7 @@ public:
};
// Set the problem property
SET_PROP(El2P_TestProblem, Problem)
{
typedef Dumux::El2P_TestProblem<TypeTag> type;
};
SET_TYPE_PROP(El2P_TestProblem, Problem, El2P_TestProblem<TypeTag>);
// Set fluid configuration
SET_PROP(El2P_TestProblem, FluidSystem)
......@@ -97,10 +91,7 @@ SET_TYPE_PROP(El2P_TestProblem, CO2Table, Dumux::El2P::CO2Tables);
SET_SCALAR_PROP(El2P_TestProblem, ProblemSalinity, 1e-1);
// Set the soil properties
SET_PROP(El2P_TestProblem, SpatialParams)
{
typedef Dumux::El2PSpatialParams<TypeTag> type;
};
SET_TYPE_PROP(El2P_TestProblem, SpatialParams, El2PSpatialParams<TypeTag>);
// Set the initial displacement function
SET_PROP(El2P_TestProblem, InitialDisplacement)
......@@ -135,7 +126,7 @@ SET_BOOL_PROP(El2P_TestProblem, ImplicitEnablePartialReassemble, false);
SET_BOOL_PROP(El2P_TestProblem, ProblemEnableGravity, true);
// use the algebraic multigrid
SET_TYPE_PROP(El2P_TestProblem, LinearSolver, Dumux::AMGBackend<TypeTag> );
SET_TYPE_PROP(El2P_TestProblem, LinearSolver, Dumux::El2PAMGBackend<TypeTag>);
// central differences to calculate the jacobian by default
SET_INT_PROP(El2P_TestProblem, ImplicitNumericDifferenceMethod, 0);
......
<?xml version="1.0"?>
<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
<UnstructuredGrid>
<Piece NumberOfCells="16" NumberOfPoints="50">
<PointData Scalars="T" Vectors="u">
<DataArray type="Float32" Name="T" NumberOfComponents="1" format="ascii">
343.15 343.15 343.15 343.15 335.65 335.65 335.65 335.65 343.15 343.15 335.65 335.65
343.15 343.15 335.65 335.65 343.15 343.15 335.65 335.65 328.15 328.15 328.15 328.15
328.15 328.15 328.15 328.15 328.15 328.15 320.65 320.65 320.65 320.65 320.65 320.65
320.65 320.65 320.65 320.65 313.15 313.15 313.15 313.15 313.15 313.15 313.15 313.15
313.15 313.15
</DataArray>
<DataArray type="Float32" Name="pW" NumberOfComponents="1" format="ascii">
2.08787e+07 2.08787e+07 2.08786e+07 2.08789e+07 1.82821e+07 1.82821e+07 1.82818e+07 1.82815e+07 2.08789e+07 2.08807e+07 1.82815e+07 1.82797e+07
2.08786e+07 2.08789e+07 1.82818e+07 1.82815e+07 2.08787e+07 2.08787e+07 1.82821e+07 1.82821e+07 1.56848e+07 1.56848e+07 1.56843e+07 1.56827e+07
1.56827e+07 1.57146e+07 1.56843e+07 1.56827e+07 1.56848e+07 1.56848e+07 1.30875e+07 1.30875e+07 1.30873e+07 1.30869e+07 1.30869e+07 1.30853e+07
1.30873e+07 1.30869e+07 1.30875e+07 1.30875e+07 1.04901e+07 1.04901e+07 1.04901e+07 1.04901e+07 1.04901e+07 1.04901e+07 1.04901e+07 1.04901e+07
1.04901e+07 1.04901e+07
</DataArray>
<DataArray type="Float32" Name="pN" NumberOfComponents="1" format="ascii">
2.08962e+07 2.08962e+07 2.08961e+07 2.08965e+07 1.82997e+07 1.82997e+07 1.82994e+07 1.82991e+07 2.08965e+07 2.08982e+07 1.82991e+07 1.82973e+07
2.08961e+07 2.08965e+07 1.82994e+07 1.82991e+07 2.08962e+07 2.08962e+07 1.82997e+07 1.82997e+07 1.57024e+07 1.57024e+07 1.57019e+07 1.57003e+07
1.57003e+07 1.57322e+07 1.57019e+07 1.57003e+07 1.57024e+07 1.57024e+07 1.31051e+07 1.31051e+07 1.31048e+07 1.31045e+07 1.31045e+07 1.31029e+07
1.31048e+07 1.31045e+07 1.31051e+07 1.31051e+07 1.05077e+07 1.05077e+07 1.05077e+07 1.05077e+07 1.05077e+07 1.05077e+07 1.05077e+07 1.05077e+07
1.05077e+07 1.05077e+07
</DataArray>
<DataArray type="Float32" Name="pC" NumberOfComponents="1" format="ascii">
17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9
17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9
17569.9 17570.6 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9
17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9 17569.9
17569.9 17569.9
</DataArray>
<DataArray type="Float32" Name="SW" NumberOfComponents="1" format="ascii">
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
1 0.999985 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
1 1
</DataArray>
<DataArray type="Float32" Name="SN" NumberOfComponents="1" format="ascii">
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 5.53686e-20 1.50343e-12
1.50343e-12 1.48314e-05 5.53671e-20 1.50343e-12 0 0 0 0 3.13428e-27 1.3241e-19 1.32409e-19 2.19497e-12
3.13427e-27 1.3241e-19 0 0 0 0 0 0 0 0 0 0
0 0
</DataArray>
<DataArray type="Float32" Name="rhoW" NumberOfComponents="1" format="ascii">
1056.55 1056.55 1056.55 1056.55 1059.66 1059.66 1059.66 1059.66 1056.55 1056.55 1059.66 1059.66
1056.55 1056.55 1059.66 1059.66 1056.55 1056.55 1059.66 1059.66 1062.49 1062.49 1062.49 1062.49
1062.49 1062.5 1062.49 1062.49 1062.49 1062.49 1064.99 1064.99 1064.99 1064.99 1064.99 1064.98
1064.99 1064.99 1064.99 1064.99 1067.12 1067.12 1067.12 1067.12 1067.12 1067.12 1067.12 1067.12
1067.12 1067.12
</DataArray>
<DataArray type="Float32" Name="rhoN" NumberOfComponents="1" format="ascii">
695.737 695.737 695.736 695.742 675.355 675.355 675.349 675.342 695.742 695.772 675.342 675.303
695.736 695.742 675.349 675.342 695.737 695.737 675.355 675.355 673.471 673.471 673.457 673.415
673.415 674.245 673.457 673.415 673.471 673.471 669.582 669.582 669.573 669.562 669.562 669.506
669.573 669.562 669.582 669.582 660.265 660.265 660.265 660.265 660.265 660.265 660.265 660.265
660.265 660.265
</DataArray>
<DataArray type="Float32" Name="u" NumberOfComponents="3" format="ascii">
-1.97296e-06 0 0 -4.07123e-14 0 0 -3.93317e-06 -3.93317e-06 0 -3.40134e-14 -1.34961e-05 0
-1.7081e-06 0 4.2673e-06 -8.21726e-14 0 1.20408e-06 -1.54798e-06 -1.54798e-06 4.59428e-06 -2.67261e-13 -1.03498e-05 -1.74234e-06
-1.34961e-05 -8.72173e-14 0 1.32216e-13 -1.0052e-13 0 -1.03498e-05 -2.77762e-13 -1.74234e-06 4.97113e-13 -2.31617e-13 -9.89639e-05
-3.93317e-06 3.93317e-06 0 7.1976e-14 1.34961e-05 0 -1.54798e-06 1.54798e-06 4.59428e-06 1.08941e-13 1.03498e-05 -1.74234e-06
-1.97296e-06 0 0 6.90176e-14 0 0 -1.7081e-06 0 4.2673e-06 9.1342e-14 0 1.20408e-06
-5.26212e-06 0 1.06304e-05 1.28886e-14 0 1.1194e-05 -9.87207e-06 -9.87207e-06 1.1028e-05 1.18437e-13 -0.000113413 1.17761e-05
-0.000113413 -1.04943e-13 1.17761e-05 -1.8588e-13 -5.74986e-13 1.21934e-05 -9.87207e-06 9.87207e-06 1.1028e-05 2.01963e-13 0.000113413 1.17761e-05
-5.26212e-06 0 1.06304e-05 8.77731e-14 0 1.1194e-05 -1.15664e-06 0 1.59192e-05 -1.66614e-14 0 2.10784e-05
-5.44738e-07 -5.44738e-07 1.74412e-05 -2.46879e-14 -8.99169e-06 2.73609e-05 -8.99169e-06 -2.45514e-13 2.73609e-05 -1.43423e-13 -9.52702e-14 0.000132764
-5.44738e-07 5.44738e-07 1.74412e-05 7.85512e-14 8.99169e-06 2.73609e-05 -1.15664e-06 0 1.59192e-05 4.31436e-14 0 2.10784e-05
-1.64153e-06 0 1.66183e-05 -2.7253e-14 0 1.83931e-05 -2.37623e-06 -2.37623e-06 1.93307e-05 -3.61824e-14 -6.26453e-06 2.64385e-05
-6.26453e-06 -2.31283e-13 2.64385e-05 -8.6403e-14 -1.66826e-13 2.75843e-05 -2.37623e-06 2.37623e-06 1.93307e-05 3.90133e-14 6.26453e-06 2.64385e-05
-1.64153e-06 0 1.66183e-05 5.16667e-14 0 1.83931e-05
</DataArray>
</PointData>
<CellData Scalars="principal stress 1" Vectors="effective stress changes X">
<DataArray type="Float32" Name="effective stress changes X" NumberOfComponents="3" format="ascii">
-26.0752 50.4121 16.8745 -81.3016 91.8238 245.067 -81.3016 -91.8238 245.067 -26.0752 -50.4121 16.8745
42.1948 291.982 49.9157 -1367.57 561.716 534.451 -1367.57 -561.716 534.451 42.1948 -291.982 49.9157
47.181 289.966 -74.5584 -1370.44 559.941 -575.594 -1370.44 -559.941 -575.594 47.181 -289.966 -74.5584
-6.13386 31.1451 -54.113 23.7489 61.6763 -311.181 23.7489 -61.6763 -311.181 -6.13387 -31.1451 -54.113
</DataArray>
<DataArray type="Float32" Name="effective stress changes Y" NumberOfComponents="3" format="ascii">
50.4121 166.371 -7.28027 91.8238 -81.3016 245.067 -91.8238 -81.3016 -245.067 -50.4121 166.371 7.28027
291.982 810.062 282.568 561.716 -1367.57 534.451 -561.716 -1367.57 -534.451 -291.982 810.062 -282.568
289.966 795.468 -306.333 559.941 -1370.44 -575.594 -559.941 -1370.44 575.594 -289.966 795.468 306.333
31.1451 113.348 -48.6447 61.6763 23.749 -311.181 -61.6763 23.7489 311.181 -31.1451 113.348 48.6447
</DataArray>
<DataArray type="Float32" Name="effective stress changes Z" NumberOfComponents="3" format="ascii">
16.8745 -7.28027 -21.8807 245.067 245.067 554.605 245.067 -245.067 554.605 16.8745 7.28027 -21.8807
49.9157 282.568 -47.3803 534.451 534.451 -1414.8 534.451 -534.451 -1414.8 49.9157 -282.568 -47.3803
-74.5584 -306.333 -54.4964 -575.594 -575.594 -1497.1 -575.594 575.594 -1497.1 -74.5584 306.333 -54.4964
-54.113 -48.6447 27.557 -311.181 -311.181 640.311 -311.181 311.181 640.311 -54.113 48.6447 27.557
</DataArray>
<DataArray type="Float32" Name="principal stress 1" NumberOfComponents="1" format="ascii">
4.28906e+07 4.28909e+07 4.28909e+07 4.28906e+07 3.71722e+07 3.71731e+07 3.71731e+07 3.71722e+07 3.14534e+07 3.14544e+07 3.14544e+07 3.14534e+07
2.57343e+07 2.57345e+07 2.57345e+07 2.57343e+07
</DataArray>
<DataArray type="Float32" Name="principal stress 2" NumberOfComponents="1" format="ascii">
4.28904e+07 4.28903e+07 4.28903e+07 4.28904e+07 3.71714e+07 3.71731e+07 3.71731e+07 3.71714e+07 3.14527e+07 3.14544e+07 3.14544e+07 3.14527e+07
2.57343e+07 2.57339e+07 2.57339e+07 2.57343e+07
</DataArray>
<DataArray type="Float32" Name="principal stress 3" NumberOfComponents="1" format="ascii">
4.28904e+07 4.28903e+07 4.28903e+07 4.28904e+07 3.71713e+07 3.7173e+07 3.7173e+07 3.71713e+07 3.14526e+07 3.14542e+07 3.14542e+07 3.14526e+07
2.57342e+07 2.57339e+07 2.57339e+07 2.57342e+07
</DataArray>
<DataArray type="Float32" Name="total stresses X" NumberOfComponents="3" format="ascii">
4.28904e+07 50.4121 16.8745 4.28903e+07 91.8238 245.067 4.28903e+07 -91.8238 245.067 4.28904e+07 -50.4121 16.8745
3.71714e+07 291.982 49.9157 3.71731e+07 561.716 534.451 3.71731e+07 -561.716 534.451 3.71714e+07 -291.982 49.9157
3.14527e+07 289.966 -74.5584 3.14544e+07 559.941 -575.594 3.14544e+07 -559.941 -575.594 3.14527e+07 -289.966 -74.5584
2.57342e+07 31.1451 -54.113 2.57339e+07 61.6763 -311.181 2.57339e+07 -61.6763 -311.181 2.57342e+07 -31.1451 -54.113
</DataArray>
<DataArray type="Float32" Name="total stresses Y" NumberOfComponents="3" format="ascii">
50.4121 4.28906e+07 -7.28027 91.8238 4.28903e+07 245.067 -91.8238 4.28903e+07 -245.067 -50.4121 4.28906e+07 7.28027
291.982 3.71722e+07 282.568 561.716 3.71731e+07 534.451 -561.716 3.71731e+07 -534.451 -291.982 3.71722e+07 -282.568
289.966 3.14534e+07 -306.333 559.941 3.14544e+07 -575.594 -559.941 3.14544e+07 575.594 -289.966 3.14534e+07 306.333
31.1451 2.57343e+07 -48.6447 61.6763 2.57339e+07 -311.181 -61.6763 2.57339e+07 311.181 -31.1451 2.57343e+07 48.6447
</DataArray>
<DataArray type="Float32" Name="total stresses Z" NumberOfComponents="3" format="ascii">
16.8745 -7.28027 4.28904e+07 245.067 245.067 4.28909e+07 245.067 -245.067 4.28909e+07 16.8745 7.28027 4.28904e+07
49.9157 282.568 3.71713e+07 534.451 534.451 3.7173e+07 534.451 -534.451 3.7173e+07 49.9157 -282.568 3.71713e+07
-74.5584 -306.333 3.14526e+07 -575.594 -575.594 3.14542e+07 -575.594 575.594 3.14542e+07 -74.5584 306.333 3.14526e+07
-54.113 -48.6447 2.57343e+07 -311.181 -311.181 2.57345e+07 -311.181 311.181 2.57345e+07 -54.113 48.6447 2.57343e+07
</DataArray>
<DataArray type="Float32" Name="initial stresses X" NumberOfComponents="3" format="ascii">
4.28905e+07 0 0 4.28905e+07 0 0 4.28905e+07 0 0 4.28905e+07 0 0
3.71718e+07 0 0 3.71718e+07 0 0 3.71718e+07 0 0 3.71718e+07 0 0
3.14531e+07 0 0 3.14531e+07 0 0 3.14531e+07 0 0 3.14531e+07 0 0
2.57343e+07 0 0 2.57343e+07 0 0 2.57343e+07 0 0 2.57343e+07 0 0
</DataArray>
<DataArray type="Float32" Name="initial stresses Y" NumberOfComponents="3" format="ascii">
0 4.28905e+07 0 0 4.28905e+07 0 0 4.28905e+07 0 0 4.28905e+07 0
0 3.71718e+07 0 0 3.71718e+07 0 0 3.71718e+07 0 0 3.71718e+07 0
0 3.14531e+07 0 0 3.14531e+07 0 0 3.14531e+07 0 0 3.14531e+07 0
0 2.57343e+07 0 0 2.57343e+07 0 0 2.57343e+07 0 0 2.57343e+07 0
</DataArray>
<DataArray type="Float32" Name="initial stresses Z" NumberOfComponents="3" format="ascii">
0 0 4.28905e+07 0 0 4.28905e+07 0 0 4.28905e+07 0 0 4.28905e+07
0 0 3.71718e+07 0 0 3.71718e+07 0 0 3.71718e+07 0 0 3.71718e+07
0 0 3.14531e+07 0 0 3.14531e+07 0 0 3.14531e+07 0 0 3.14531e+07
0 0 2.57343e+07 0 0 2.57343e+07 0 0 2.57343e+07 0 0 2.57343e+07
</DataArray>
<DataArray type="Float32" Name="delta pEff" NumberOfComponents="1" format="ascii">
-93.4588 -185.879 -185.879 -93.4588 -451.051 2620.35 2620.35 -451.051 -437.656 2663.34 2663.34 -437.656
-102.047 -450.662 -450.662 -102.047
</DataArray>
<DataArray type="Float32" Name="effectivePressure" NumberOfComponents="1" format="ascii">
1.95803e+07 1.95802e+07 1.95802e+07 1.95803e+07 1.6983e+07 1.69861e+07 1.69861e+07 1.6983e+07 1.43857e+07 1.43888e+07 1.43888e+07 1.43857e+07
1.17887e+07 1.17884e+07 1.17884e+07 1.17887e+07
</DataArray>
<DataArray type="Float32" Name="Pcr_tensile" NumberOfComponents="1" format="ascii">
-2.33101e+07 -2.33101e+07 -2.33101e+07 -2.33101e+07 -2.01883e+07 -2.01869e+07 -2.01869e+07 -2.01883e+07 -1.70668e+07 -1.70654e+07 -1.70654e+07 -1.70668e+07
-1.39455e+07 -1.39455e+07 -1.39455e+07 -1.39455e+07
</DataArray>
<DataArray type="Float32" Name="Pcr_shear" NumberOfComponents="1" format="ascii">
-2.331e+07 -2.33098e+07 -2.33098e+07 -2.331e+07 -2.01878e+07 -2.01869e+07 -2.01869e+07 -2.01878e+07 -1.70664e+07 -1.70653e+07 -1.70653e+07 -1.70664e+07
-1.39455e+07 -1.39452e+07 -1.39452e+07 -1.39455e+07
</DataArray>
<DataArray type="Float32" Name="effective Kxx" NumberOfComponents="1" format="ascii">
9.99999e-15 9.99997e-15 9.99997e-15 9.99999e-15 9.99993e-15 1.00004e-14 1.00004e-14 9.99993e-15 9.99993e-15 1.00004e-14 1.00004e-14 9.99993e-15
9.99999e-15 9.99994e-15 9.99994e-15 9.99999e-15
</DataArray>
<DataArray type="Float32" Name="effective Porosity" NumberOfComponents="1" format="ascii">
0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2 0.2
0.2 0.2 0.2 0.2
</DataArray>
</CellData>
<Points>
<DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii">
250 0 0 500 0 0 250 250 0 500 250 0
250 0 250 500 0 250 250 250 250 500 250 250
250 500 0 500 500 0 250 500 250 500 500 250
250 750 0 500 750 0 250 750 250 500 750 250
250 1000 0 500 1000 0 250 1000 250 500 1000 250
250 0 500 500 0 500 250 250 500 500 250 500
250 500 500 500 500 500 250 750 500 500 750 500
250 1000 500 500 1000 500 250 0 750 500 0 750
250 250 750 500 250 750 250 500 750 500 500 750
250 750 750 500 750 750 250 1000 750 500 1000 750
250 0 1000 500 0 1000 250 250 1000 500 250 1000
250 500 1000 500 500 1000 250 750 1000 500 750 1000
250 1000 1000 500 1000 1000
</DataArray>
</Points>
<Cells>
<DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii">
0 1 3 2 4 5 7 6 2 3 9 8
6 7 11 10 8 9 13 12 10 11 15 14
12 13 17 16 14 15 19 18 4 5 7 6
20 21 23 22 6 7 11 10 22 23 25 24
10 11 15 14 24 25 27 26 14 15 19 18
26 27 29 28 20 21 23 22 30 31 33 32
22 23 25 24 32 33 35 34 24 25 27 26
34 35 37 36 26 27 29 28 36 37 39 38
30 31 33 32 40 41 43 42 32 33 35 34
42 43 45 44 34 35 37 36 44 45 47 46
36 37 39 38 46 47 49 48
</DataArray>
<DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii">
8 16 24 32 40 48 56 64 72 80 88 96
104 112 120 128
</DataArray>
<DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii">
12 12 12 12 12 12 12 12 12 12 12 12
12 12 12 12
</DataArray>
</Cells>
</Piece>
</UnstructuredGrid>
</VTKFile>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment