PorFE is an extension on ParFE to cope with poroelasticity. PorFE is licensed under GPL. The solver is coded in C++ over Trilinos framework. In addition to the requirements listed for ParFE, Belos package should also be activated within Trilinos to able to run PorFE. Currently, test runs are in process on Swiss National Supercomputing Centre.


In order to build porfe, several packages should be installed. Other than MPI and a valid C++ compiler, Trilinos is needed which is the basis of the code that gives the ability to code for parallel environments. Please enable belos package, while configuring Trilinos for which cmake is invoked. ParMETIS 3.x is needed for graph partitioning. Please do not use version 4.x since it is not compatible with Trilinos, yet. HDF5 libraries version 1.8.x are needed to read and write on the mesh files that are used with PorFE.


New command line parameters introduced with PorFE are,

--precdir =[left]/right : to select the preconditioner direction.

--krylov =[gmres]/minres : to use either gmres(100) or minres.

--printmatlab = [no]/yes : to print out the vectors and matrices for matlab.

--totaltime = [1.0] : total transient simulation time.

--deltat = [0.1] : time increment.

--maxtimeiters = [10] : maximum number of time iterations, can be used to limit transient run.

--auutolerance=[1e-5] : PCG tolerance for inner solver on Auu in precB.

--afftolerance=[1e-5] : PCG tolerance for inner solver on Aff in precB.

--spptolerance=[1e-5] : PCG tolerance for inner solver on Spp in precB.

--maxauuiters=[50] : PCG max number of iterations for inner solver on Auu in precB.

--maxaffiters=[10] : PCG max number of iterations for inner solver on Aff in precB.

--maxsppiters=[3] : PCG max number of iterations for inner solver on Spp in precB.

--(no)printresult : [printresult] into the hdf file or noprintresult.

--type=a/[b]/c/d : type of the preconditioner.

--noinitial : prevents the initial condition to be activated.

--test1 : performs matrix-vector product 1000 times on all blocks and stops.

--repart =[none]/parmetis/rcb/poro : to create partitioning.

--uweight =[3]: weight for displacement in graph partitioning.

--fweight =[1]: weight for flux in graph partitioning.

--pweight =[1]: weight for pressure in graph partitioning.

TO-DO List

  • cyclic Force.
  • recomputepreconditioner.
  • initial condition as a class rather than being coded directly in main.
  • new material property path to define. avoid B declaration, calculate.
  • add incompressibility as an extra option.

Latest Configuration

PorFE is successfuly tested with:

  • Trilinos 10.10.3
  • HDF5 1.8.8
  • ParMetis 3.2.0
  • ParaView 3.14.1
  • gcc 4.4.3
  • OpenMPI 1.4.1

Running PorFE

After a successfully building PorFe, one should invoke the following command:

mpirun -np 2 example/pbnew_pfaim.exe --filename=mesh/bench1H_1.mesh.h5 --maxtimeiters=1 --repart=poro


PorFE is released under the GNU Public License reported below.

PorFE: A poroelastic extension on ParFE Copyright (C) 2012, ETH Zurich, Theoretical Computer Science, Erhan Turan, Peter Arbenz, Cyril Flaig. https://bitbucket.org/erhanturan/porfe

ParFE: A Scalable Micro Finite Element Solver for Bone Modeling Copyright (C) 2006 ETH Zurich, Institute of Computational Science, Uche Mennel, Marzio Sala, and all other ParFE developers; see http://parfe.sourceforge.net/developers.php for the complete list.

This library 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.1 of the License, or (at your option) any later version.

This library 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 library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA