getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] (no subject)


From: khalil MANSOURI
Subject: [Getfem-commits] (no subject)
Date: Fri, 19 Jul 2019 14:01:09 -0400 (EDT)

branch: origin/devel-khalil-enit
commit a31ead1b2dbfd262d8c958542288b8a7d8a265f5
Author: Khalil MANSOURI <address@hidden>
Date:   Fri Jul 19 18:43:37 2019 +0100

    Work in Progress 3D Crack
---
 contrib/3D_Crack/Makefile.am                |   37 +
 contrib/3D_Crack/crack_3D                   |  Bin 0 -> 10116264 bytes
 contrib/3D_Crack/crack_3D.cc                | 1087 ++++++++++++++++
 contrib/3D_Crack/crack_3D.param             |  133 ++
 contrib/3D_Crack/crack_3D.pl                |   16 +
 contrib/3D_Crack/crack_3D_exact_solution.cc |  306 +++++
 contrib/3D_Crack/crack_3D_exact_solution.h  |   94 ++
 contrib/3D_Crack/getfem_Xfem.cc             |  196 +++
 contrib/3D_Crack/getfem_Xfem.h              |  127 ++
 contrib/3D_Crack/getfem_spider_fem.h        |  255 ++++
 contrib/3D_Crack/untitled.geo               |    9 +
 getfem.config                               |    2 +
 getfem.creator                              |    1 +
 getfem.files                                | 1877 +++++++++++++++++++++++++++
 getfem.includes                             |   20 +
 15 files changed, 4160 insertions(+)

diff --git a/contrib/3D_Crack/Makefile.am b/contrib/3D_Crack/Makefile.am
new file mode 100644
index 0000000..2079a80
--- /dev/null
+++ b/contrib/3D_Crack/Makefile.am
@@ -0,0 +1,37 @@
+#  Copyright (C) 1999-2017 Yves Renard
+#
+#  This file is a part of GetFEM++
+#
+#  GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+#  under  the  terms  of the  GNU  Lesser General Public License as published
+#  by  the  Free Software Foundation;  either version 3 of the License,  or
+#  (at your option) any later version along with the GCC Runtime Library
+#  Exception either version 3.1 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 Lesser General Public
+#  License and GCC Runtime Library Exception for more details.
+#  You  should  have received a copy of the GNU Lesser General Public License
+#  along  with  this program;  if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+# SUBDIRS = 
+
+check_PROGRAMS =                 \
+       crack_3D
+CLEANFILES = 
+
+crack_3D_SOURCES = crack_3D.cc crack_3D_exact_solution.cc 
crack_3D_exact_solution.h getfem_Xfem.cc getfem_spider_fem.h getfem_Xfem.h
+
+
+AM_CPPFLAGS = -I$(top_srcdir)/src -I../../src 
+LDADD    = ../../src/libgetfem.la -lm @SUPLDFLAGS@
+
+TESTS = \
+        crack_3D.pl
+
+EXTRA_DIST = \
+       crack_3D.param                  
+
+
+LOG_COMPILER = perl
diff --git a/contrib/3D_Crack/crack_3D b/contrib/3D_Crack/crack_3D
new file mode 100755
index 0000000..9fc7420
Binary files /dev/null and b/contrib/3D_Crack/crack_3D differ
diff --git a/contrib/3D_Crack/crack_3D.cc b/contrib/3D_Crack/crack_3D.cc
new file mode 100644
index 0000000..ef82eb8
--- /dev/null
+++ b/contrib/3D_Crack/crack_3D.cc
@@ -0,0 +1,1087 @@
+/*===========================================================================
+
+ Copyright (C) 2002-2017 Yves Renard, Julien Pommier.
+
+ This file is a part of GetFEM++
+
+ GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+===========================================================================*/
+
+/**
+ * Linear Elastostatic problem with a crack.
+ *
+ * This program is used to check that getfem++ is working. This is also
+ * a good example of use of GetFEM++.
+ */
+
+#include "getfem/getfem_assembling.h" /* import assembly methods (and norms 
comp.) */
+#include "getfem/getfem_export.h"   /* export functions (save solution in a 
file)  */
+#include "getfem/getfem_derivatives.h"
+#include "getfem/getfem_regular_meshes.h"
+#include "getfem/getfem_model_solvers.h"
+#include "getfem/getfem_mesh_im_level_set.h"
+#include "getfem/getfem_mesh_fem_level_set.h"
+#include "getfem/getfem_mesh_fem_product.h"
+#include "getfem/getfem_mesh_fem_global_function.h"
+#include "getfem_spider_fem.h"
+#include "getfem/getfem_mesh_fem_sum.h"
+#include "gmm/gmm.h"
+#include "gmm/gmm_inoutput.h"
+
+#include "crack_3D_exact_solution.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* definition of some matrix/vector types. These ones are built
+ * using the predefined types in Gmm++
+ */
+typedef getfem::modeling_standard_sparse_vector sparse_vector;
+typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
+typedef getfem::modeling_standard_plain_vector  plain_vector;
+
+/**************************************************************************/
+/*  Structure for the crack problem.                                      */
+/**************************************************************************/
+
+struct crack_problem {
+
+  enum { DIRICHLET_BOUNDARY_NUM = 0, NEUMANN_BOUNDARY_NUM = 1, 
NEUMANN_BOUNDARY_NUM1=2, NEUMANN_HOMOGENE_BOUNDARY_NUM=3, 
MORTAR_BOUNDARY_IN=42, MORTAR_BOUNDARY_OUT=43};
+  getfem::mesh mesh;  /* the mesh */
+  getfem::mesh_level_set mls;       /* the integration methods.              */
+  getfem::mesh_im_level_set mim;    /* the integration methods.              */
+  getfem::mesh_fem mf_pre_u, mf_pre_mortar;
+  getfem::mesh_fem mf_mult;
+  getfem::mesh_fem_level_set mfls_u, mfls_mortar;
+  getfem::mesh_fem_global_function mf_sing_u;
+  getfem::mesh_fem mf_partition_of_unity;
+  getfem::mesh_fem_product mf_product;
+  getfem::mesh_fem_sum mf_u_sum;
+
+  getfem::mesh interpolated_m;
+  getfem::mesh_fem interpolated_mf;
+
+  base_small_vector translation;
+
+  struct spider_param {
+    std::unique_ptr<getfem::spider_fem> fem;
+    scalar_type theta0;
+    scalar_type radius;
+    unsigned Nr;
+    unsigned Ntheta;
+    int K;
+    int bimat_enrichment;
+    scalar_type epsilon;
+  };
+
+  spider_param spider;
+
+  getfem::mesh_fem mf_us;
+
+  getfem::mesh_fem& mf_u() { return mf_u_sum; }
+  // getfem::mesh_fem& mf_u() { return mf_us; }
+
+  scalar_type lambda, mu;    /* Lame coefficients.                */
+  getfem::mesh_fem mf_rhs;   /* mesh_fem for the right hand side (f(x),..)   */
+  getfem::mesh_fem mf_p;     /* mesh_fem for the pressure for mixed form     */
+#ifdef VALIDATE_XFEM
+  crack_exact_solution exact_sol;
+#endif
+
+
+  int bimaterial;           /* For bimaterial interface fracture */
+  double lambda_up, lambda_down, mu_up, mu_down;  /*Lame coeff for bimaterial 
case*/
+  getfem::level_set ls;      /* The two level sets defining the crack.       */
+  getfem::level_set ls2, ls3; /* The two level-sets defining the add. cracks.*/
+
+  scalar_type residual;      /* max residual for the iterative solvers      */
+  bool mixed_pressure, add_crack;
+  unsigned dir_with_mult;
+  scalar_type cutoff_radius, cutoff_radius1, cutoff_radius0, enr_area_radius;
+
+  size_type cutoff_func;
+
+  typedef enum { NO_ENRICHMENT=0,
+                 FIXED_ZONE=1,
+                 GLOBAL_WITH_MORTAR=2,
+                 GLOBAL_WITH_CUTOFF=3,
+                 SPIDER_FEM_ALONE=4,
+                 SPIDER_FEM_ENRICHMENT=5 } enrichment_option_enum;
+  enrichment_option_enum enrichment_option;
+
+  std::string datafilename;
+
+  int reference_test;
+  std::string GLOBAL_FUNCTION_MF, GLOBAL_FUNCTION_U;
+
+  bgeot::md_param PARAM;
+
+  bool solve(plain_vector &U);
+  void init(void);
+  crack_problem(void) : mls(mesh), mim(mls),
+                        mf_pre_u(mesh), mf_pre_mortar(mesh), mf_mult(mesh),
+                        mfls_u(mls, mf_pre_u), mfls_mortar(mls, mf_pre_mortar),
+                        mf_sing_u(mesh),
+                        mf_partition_of_unity(mesh),
+                        mf_product(mf_partition_of_unity, mf_sing_u),
+                        mf_u_sum(mesh), interpolated_mf(interpolated_m),
+                        mf_us(mesh), mf_rhs(mesh), mf_p(mesh),
+#ifdef VALIDATE_XFEM
+                        exact_sol(mesh),
+#endif
+                        ls(mesh, 1, true), ls2(mesh, 1, true),
+                        ls3(mesh, 1, true) {}
+
+};
+
+std::string name_of_dof(getfem::pdof_description dof) {
+  char s[200];
+  sprintf(s, "UnknownDof[%p]", (void*)dof);
+  for (dim_type d = 0; d < 4; ++d) {
+    if (dof == getfem::lagrange_dof(d)) {
+      sprintf(s, "Lagrange[%d]", d); goto found;
+    }
+    if (dof == getfem::normal_derivative_dof(d)) {
+      sprintf(s, "D_n[%d]", d); goto found;
+    }
+    if (dof == getfem::global_dof(d)) {
+      sprintf(s, "GlobalDof[%d]", d);
+    }
+    if (dof == getfem::mean_value_dof(d)) {
+      sprintf(s, "MeanValue[%d]", d);
+    }
+    if (getfem::dof_xfem_index(dof) != 0) {
+      sprintf(s, "Xfem[idx:%d]", int(dof_xfem_index(dof)));
+    }
+
+    for (dim_type r = 0; r < d; ++r) {
+      if (dof == getfem::derivative_dof(d, r)) {
+        sprintf(s, "D_%c[%d]", "xyzuvw"[r], d); goto found;
+      }
+      for (dim_type t = 0; t < d; ++t) {
+        if (dof == getfem::second_derivative_dof(d, r, t)) {
+          sprintf(s, "D2%c%c[%d]", "xyzuvw"[r], "xyzuvw"[t], d);
+          goto found;
+        }
+      }
+    }
+  }
+ found:
+  return s;
+}
+
+
+/* Read parameters from the .param file, build the mesh, set finite element
+ * and integration methods and selects the boundaries.
+ */
+void crack_problem::init(void) {
+  std::string MESH_TYPE = PARAM.string_value("MESH_TYPE","Mesh type ");
+  std::string FEM_TYPE  = PARAM.string_value("FEM_TYPE","FEM name");
+  std::string INTEGRATION = PARAM.string_value("INTEGRATION",
+                                               "Name of integration method");
+  std::string SIMPLEX_INTEGRATION = PARAM.string_value("SIMPLEX_INTEGRATION",
+                                         "Name of simplex integration method");
+  std::string SINGULAR_INTEGRATION = 
PARAM.string_value("SINGULAR_INTEGRATION");
+
+  add_crack = (PARAM.int_value("ADDITIONAL_CRACK", "An additional crack ?") != 
0);
+  enrichment_option = 
enrichment_option_enum(PARAM.int_value("ENRICHMENT_OPTION",
+                                                             "Enrichment 
option"));
+  cout << "MESH_TYPE=" << MESH_TYPE << "\n";
+  cout << "FEM_TYPE="  << FEM_TYPE << "\n";
+  cout << "INTEGRATION=" << INTEGRATION << "\n";
+
+  bimaterial = int(PARAM.int_value("BIMATERIAL", "bimaterial interface 
crack"));
+
+  if (bimaterial == 1){
+    mu = PARAM.real_value("MU", "Lame coefficient mu");
+    mu_up = PARAM.real_value("MU_UP", "Lame coefficient mu");
+    mu_down = PARAM.real_value("MU_DOWN", "Lame coefficient mu");
+    lambda_up = PARAM.real_value("LAMBDA_UP", "Lame Coef");
+    lambda_down = PARAM.real_value("LAMBDA_DOWN", "Lame Coef");
+    lambda = PARAM.real_value("LAMBDA", "Lame coefficient lambda");
+  }
+  else{
+
+    mu = PARAM.real_value("MU", "Lame coefficient mu");
+    lambda = PARAM.real_value("LAMBDA", "Lame coefficient lambda");
+  }
+
+
+  spider.radius = PARAM.real_value("SPIDER_RADIUS","spider_radius");
+  spider.Nr = unsigned(PARAM.int_value("SPIDER_NR","Spider_Nr "));
+  spider.Ntheta = unsigned(PARAM.int_value("SPIDER_NTHETA","Ntheta "));
+  spider.K = int(PARAM.int_value("SPIDER_K","K "));
+  spider.theta0 = 0;
+  spider.bimat_enrichment = 
int(PARAM.int_value("SPIDER_BIMAT_ENRICHMENT","spider_bimat_enrichment"));
+
+  /* The following constants are taken from the Chang and Xu paper of 2007
+     titled The singular stress field and stress intensity factors of a crack
+     terminating at a bimaterial interface published in IJMECSCI. epsilon
+     being the constant present in the asymptotic displacement analytic 
solution:
+     r^{1/2} * cos (\epsilon Ln(r)) * f(\theta) and  r^{1/2} * sin (\epsilon 
Ln(r)) * f(\theta).
+  */
+
+  if (spider.bimat_enrichment == 1){
+    scalar_type nu1 = (lambda_up) / (2.*lambda_up + mu_up);
+    scalar_type nu2 = (lambda_down) / (2.*lambda_down + mu_down);
+    scalar_type kappa1 = 3. - 4. * nu1;
+    scalar_type kappa2 = 3. - 4. * nu2;
+    if (lambda_up == lambda_down && mu_up == mu_down)
+      cout << "ERROR... Connot use the spider bimaterial enrichment with an 
isotropic homogenuous material (beta = 0/0!!!)... You should either use a 
bimaterial or disable the spider bimaterial enrichment" << endl;
+
+    scalar_type beta = (mu_up*(kappa2-1.) - mu_down*(kappa1-1.)) / 
(mu_up*(kappa2+1.) - mu_down*(kappa1+1.));
+      spider.epsilon = 1./(2.*M_PI) * log( (1.-beta) / (1.+beta) );
+
+
+    //spider.epsilon = 
PARAM.real_value("SPIDER_BIMAT_ENRICHMENT","spider_bimat_enrichment");
+  }
+
+  translation.resize(2);
+  translation[0] =0.5;
+  translation[1] =0.;
+
+  /* First step : build the mesh */
+  bgeot::pgeometric_trans pgt =
+    bgeot::geometric_trans_descriptor(MESH_TYPE);
+  size_type N = pgt->dim();
+  std::vector<size_type> nsubdiv(N);
+  std::fill(nsubdiv.begin(),nsubdiv.end(),
+            PARAM.int_value("NX", "Nomber of space steps "));
+  getfem::regular_unit_mesh(mesh, nsubdiv, pgt,
+                            PARAM.int_value("MESH_NOISED") != 0);
+  base_small_vector tt(N); tt[1] = -0.5;
+  mesh.translation(tt);
+
+
+  scalar_type refinement_radius;
+  refinement_radius = PARAM.real_value("REFINEMENT_RADIUS","Refinement 
Radius");
+  size_type refinement_process;
+  refinement_process = PARAM.int_value("REFINEMENT_PROCESS","Refinement 
process");
+  dal::bit_vector conv_to_refine;
+  size_type ref = 1;
+  if (refinement_radius > 0){
+    while(ref <= refinement_process){
+      conv_to_refine.clear();
+      for(dal::bv_visitor i(mesh.convex_index()); !i.finished(); ++i){
+      for(size_type j=0; j < 3; ++j)
+        
if(fabs(mesh.points()[mesh.ind_points_of_convex(i)[j]][0])<refinement_radius
+           && 
fabs(mesh.points()[mesh.ind_points_of_convex(i)[j]][1])<refinement_radius){
+          conv_to_refine.add(i);
+        }
+      }
+      mesh.Bank_refine(conv_to_refine);
+
+      ref = ref + 1;
+      refinement_radius = refinement_radius/3.;
+      if(refinement_radius > 1e-16 )
+        cout<<"refining process step " << ref << "... refining "<< 
conv_to_refine.size() <<" convexes..." << endl ;
+
+    }
+  cout<<"refining process complete." << endl ;
+  }
+
+
+
+  datafilename = PARAM.string_value("ROOTFILENAME","Base name of data files.");
+  residual = PARAM.real_value("RESIDUAL");
+  if (residual == 0.) residual = 1e-10;
+  enr_area_radius = PARAM.real_value("RADIUS_ENR_AREA",
+                                     "radius of the enrichment area");
+
+  GLOBAL_FUNCTION_MF = PARAM.string_value("GLOBAL_FUNCTION_MF");
+  GLOBAL_FUNCTION_U = PARAM.string_value("GLOBAL_FUNCTION_U");
+
+  reference_test = int(PARAM.int_value("REFERENCE_TEST", "Reference test"));
+
+  unsigned EXACT_SOL_NUM = unsigned(PARAM.int_value("EXACT_SOL_NUM", "Exact 
solution function number"));
+
+
+  cutoff_func = PARAM.int_value("CUTOFF_FUNC", "cutoff function");
+
+  cutoff_radius = PARAM.real_value("CUTOFF", "Cutoff");
+  cutoff_radius1 = PARAM.real_value("CUTOFF1", "Cutoff1");
+  cutoff_radius0 = PARAM.real_value("CUTOFF0", "Cutoff0");
+  mf_u().set_qdim(dim_type(N));
+
+  /* set the finite element on the mf_u */
+  getfem::pfem pf_u =
+    getfem::fem_descriptor(FEM_TYPE);
+  getfem::pintegration_method ppi =
+    getfem::int_method_descriptor(INTEGRATION);
+  getfem::pintegration_method simp_ppi =
+    getfem::int_method_descriptor(SIMPLEX_INTEGRATION);
+  getfem::pintegration_method sing_ppi = (SINGULAR_INTEGRATION.size() ?
+                getfem::int_method_descriptor(SINGULAR_INTEGRATION) : 0);
+
+  mim.set_integration_method(mesh.convex_index(), ppi);
+  mls.add_level_set(ls);
+  if (add_crack) { mls.add_level_set(ls2); mls.add_level_set(ls3); }
+
+  mim.set_simplex_im(simp_ppi, sing_ppi);
+  mf_pre_u.set_finite_element(mesh.convex_index(), pf_u);
+  mf_pre_mortar.set_finite_element(mesh.convex_index(),
+                                   
getfem::fem_descriptor(PARAM.string_value("MORTAR_FEM_TYPE")));
+  mf_mult.set_finite_element(mesh.convex_index(), pf_u);
+  mf_mult.set_qdim(dim_type(N));
+  mf_partition_of_unity.set_classical_finite_element(1);
+
+  mixed_pressure =
+    (PARAM.int_value("MIXED_PRESSURE","Mixed version or not.") != 0);
+  dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSINO"));
+  if (mixed_pressure) {
+    std::string FEM_TYPE_P  = PARAM.string_value("FEM_TYPE_P","FEM name P");
+    mf_p.set_finite_element(mesh.convex_index(),
+                            getfem::fem_descriptor(FEM_TYPE_P));
+  }
+
+  /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
+     not used in the .param file */
+  std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
+  if (data_fem_name.size() == 0) {
+    GMM_ASSERT1(pf_u->is_lagrange(), "You are using a non-lagrange FEM. "
+                << "In that case you need to set "
+                << "DATA_FEM_TYPE in the .param file");
+    mf_rhs.set_finite_element(mesh.convex_index(), pf_u);
+  } else {
+    mf_rhs.set_finite_element(mesh.convex_index(),
+                              getfem::fem_descriptor(data_fem_name));
+  }
+
+  /* set boundary conditions
+   * (Neuman on the upper face, Dirichlet elsewhere) */
+  cout << "Selecting Neumann and Dirichlet boundaries\n";
+  getfem::mesh_region border_faces;
+  getfem::outer_faces_of_mesh(mesh, border_faces);
+  for (getfem::mr_visitor i(border_faces); !i.finished(); ++i) {
+
+    base_node un = mesh.normal_of_face_of_convex(i.cv(), i.f());
+    un /= gmm::vect_norm2(un);
+    if(bimaterial == 1) {
+
+      if (un[0]  > 1.0E-7 ) { // new Neumann face
+        mesh.region(DIRICHLET_BOUNDARY_NUM).add(i.cv(), i.f());
+      } else {
+        if (un[1]  > 1.0E-7 ) {
+          cout << "normal = " << un << endl;
+          mesh.region(NEUMANN_BOUNDARY_NUM1).add(i.cv(), i.f());
+        }
+        else {
+          if (un[1]  < -1.0E-7 ) {
+            cout << "normal = " << un << endl;
+            mesh.region(NEUMANN_BOUNDARY_NUM).add(i.cv(), i.f());
+          }
+          else {
+            if (un[0]  < -1.0E-7 ) {
+              cout << "normal = " << un << endl;
+              mesh.region(NEUMANN_HOMOGENE_BOUNDARY_NUM).add(i.cv(), i.f());
+            }
+          }
+        }
+      }
+    }
+    else {
+
+#ifdef VALIDATE_XFEM
+      mesh.region(DIRICHLET_BOUNDARY_NUM).add(i.cv(), i.f());
+#else
+      base_node un = mesh.normal_of_face_of_convex(i.cv(), i.f());
+      un /= gmm::vect_norm2(un);
+      if (un[0] - 1.0 < -1.0E-7) { // new Neumann face
+        mesh.region(NEUMANN_BOUNDARY_NUM).add(i.cv(), i.f());
+      } else {
+        cout << "normal = " << un << endl;
+        mesh.region(DIRICHLET_BOUNDARY_NUM).add(i.cv(), i.f());
+      }
+#endif
+    }
+  }
+
+
+
+#ifdef VALIDATE_XFEM
+  exact_sol.init(EXACT_SOL_NUM, lambda, mu, ls);
+#endif
+}
+
+
+base_small_vector ls_function(const base_node P, int num = 0) {
+  scalar_type x = P[0], y = P[1];
+  base_small_vector res(2);
+  switch (num) {
+    case 0: {
+      res[0] = y;
+      res[1] = -.5 + x;
+    } break;
+    case 1: {
+      res[0] = gmm::vect_dist2(P, base_node(0.5, 0.)) - .25;
+      res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.27;
+    } break;
+    case 2: {
+      res[0] = x - 0.25;
+      res[1] = gmm::vect_dist2(P, base_node(0.25, 0.0)) - 0.35;
+    } break;
+    default: assert(0);
+  }
+  return res;
+}
+
+bool crack_problem::solve(plain_vector &U) {
+  size_type nb_dof_rhs = mf_rhs.nb_dof();
+  size_type N = mesh.dim();
+  ls.reinit();
+  cout << "ls.get_mesh_fem().nb_dof() = " << ls.get_mesh_fem().nb_dof() << 
"\n";
+  for (size_type d = 0; d < ls.get_mesh_fem().nb_dof(); ++d) {
+    ls.values(0)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 
0)[0];
+    ls.values(1)[d] = ls_function(ls.get_mesh_fem().point_of_basic_dof(d), 
0)[1];
+  }
+  ls.touch();
+
+  if (add_crack) {
+    ls2.reinit();
+    for (size_type d = 0; d < ls2.get_mesh_fem().nb_dof(); ++d) {
+      ls2.values(0)[d] = ls_function(ls2.get_mesh_fem().point_of_basic_dof(d), 
1)[0];
+      ls2.values(1)[d] = ls_function(ls2.get_mesh_fem().point_of_basic_dof(d), 
1)[1];
+    }
+    ls2.touch();
+
+    ls3.reinit();
+    for (size_type d = 0; d < ls3.get_mesh_fem().nb_dof(); ++d) {
+      ls3.values(0)[d] = ls_function(ls2.get_mesh_fem().point_of_basic_dof(d), 
2)[0];
+      ls3.values(1)[d] = ls_function(ls2.get_mesh_fem().point_of_basic_dof(d), 
2)[1];
+    }
+    ls3.touch();
+  }
+
+  mls.adapt();
+  mim.adapt();
+  mfls_u.adapt();
+  mfls_mortar.adapt(); mfls_mortar.set_qdim(2);
+
+  bool load_global_fun = GLOBAL_FUNCTION_MF.size() != 0;
+
+  cout << "Setting up the singular functions for the enrichment\n";
+
+  std::vector<getfem::pglobal_function> vfunc(4);
+  if (!load_global_fun) {
+    cout << "Using default singular functions\n";
+    for (unsigned i = 0; i < vfunc.size(); ++i){
+      /* use the singularity */
+      getfem::pxy_function
+        s = std::make_shared<getfem::crack_singular_xy_function>(i);
+      if (enrichment_option != FIXED_ZONE &&
+          enrichment_option != GLOBAL_WITH_MORTAR) {
+        /* use the product of the singularity function
+           with a cutoff */
+        getfem::pxy_function c = std::make_shared<getfem::cutoff_xy_function>
+          (int(cutoff_func), cutoff_radius, cutoff_radius1,cutoff_radius0);
+        s = std::make_shared<getfem::product_of_xy_functions>(s, c);
+      }
+      vfunc[i] = getfem::global_function_on_level_set(ls, s);
+    }
+  } else {
+    cout << "Load singular functions from " << GLOBAL_FUNCTION_MF << " and " 
<< GLOBAL_FUNCTION_U << "\n";
+    interpolated_m.clear();
+    interpolated_m.read_from_file(GLOBAL_FUNCTION_MF);
+    interpolated_mf.read_from_file(GLOBAL_FUNCTION_MF);
+    std::fstream f(GLOBAL_FUNCTION_U.c_str(), std::ios::in);
+    plain_vector W(interpolated_mf.nb_dof());
+
+
+
+    for (unsigned i=0; i < interpolated_mf.nb_dof(); ++i) {
+      f >> W[i];
+      GMM_ASSERT1(f.good(), "problem while reading " << GLOBAL_FUNCTION_U);
+    }
+    unsigned nb_func = interpolated_mf.get_qdim();
+    cout << "read " << nb_func << " global functions OK.\n";
+    vfunc.resize(nb_func);
+    auto global_interp
+      = std::make_shared<getfem::interpolator_on_mesh_fem>(interpolated_mf, W);
+    for (size_type i=0; i < nb_func; ++i) {
+      /* use the precalculated function for the enrichment*/
+      getfem::pxy_function
+        s = 
std::make_shared<getfem::interpolated_xy_function>(global_interp,i);
+      if (enrichment_option != FIXED_ZONE &&
+          enrichment_option != GLOBAL_WITH_MORTAR) {
+
+        /* use the product of the enrichment function
+           with a cutoff */
+        getfem::pxy_function c = std::make_shared<getfem::cutoff_xy_function>
+        (int(cutoff_func), cutoff_radius, cutoff_radius1,cutoff_radius0);
+        s = std::make_shared<getfem::product_of_xy_functions>(s, c);
+      }
+      vfunc[i] = getfem::global_function_on_level_set(ls, s);
+    }
+  }
+
+
+  mf_sing_u.set_functions(vfunc);
+
+
+  if (enrichment_option == SPIDER_FEM_ALONE ||
+      enrichment_option == SPIDER_FEM_ENRICHMENT) {
+    spider.fem = std::make_unique<getfem::spider_fem>
+      (spider.radius, mim, spider.Nr, spider.Ntheta, spider.K, translation,
+       spider.theta0, spider.bimat_enrichment, spider.epsilon);
+    mf_us.set_finite_element(mesh.convex_index(),spider.fem->get_pfem());
+    for (dal::bv_visitor_c i(mf_us.convex_index()); !i.finished(); ++i) {
+      if (mf_us.fem_of_element(i)->nb_dof(i) == 0) {
+        mf_us.set_finite_element(i,0);
+      }
+    }
+    spider.fem->check();
+  }
+
+  switch (enrichment_option) {
+
+  case FIXED_ZONE :
+    {
+      dal::bit_vector enriched_dofs;
+      plain_vector X(mf_partition_of_unity.nb_dof());
+      plain_vector Y(mf_partition_of_unity.nb_dof());
+      getfem::interpolation(ls.get_mesh_fem(), mf_partition_of_unity,
+                            ls.values(1), X);
+      getfem::interpolation(ls.get_mesh_fem(), mf_partition_of_unity,
+                            ls.values(0), Y);
+      for (size_type j = 0; j < mf_partition_of_unity.nb_dof(); ++j) {
+        if (gmm::sqr(X[j]) + gmm::sqr(Y[j]) <= gmm::sqr(enr_area_radius))
+          enriched_dofs.add(j);
+      }
+      if (enriched_dofs.card() < 3)
+        GMM_WARNING0("There is " << enriched_dofs.card() <<
+                     " enriched dofs for the crack tip");
+      mf_product.set_enrichment(enriched_dofs);
+      mf_u_sum.set_mesh_fems(mf_product, mfls_u);
+    }
+    break;
+
+
+    case GLOBAL_WITH_MORTAR: {
+      // Selecting the element in the enriched domain
+
+      dal::bit_vector cvlist_in_area;
+      dal::bit_vector cvlist_out_area;
+      for (dal::bv_visitor cv(mesh.convex_index());
+           !cv.finished(); ++cv) {
+        bool in_area = true;
+        /* For each element, we test all of its nodes.
+           If all the nodes are inside the enrichment area,
+           then the element is completly inside the area too */
+        for (unsigned j=0; j < mesh.nb_points_of_convex(cv); ++j) {
+          if (gmm::sqr(mesh.points_of_convex(cv)[j][0] - translation[0]) +
+              gmm::sqr(mesh.points_of_convex(cv)[j][1] - translation[1]) >
+              gmm::sqr(enr_area_radius)) {
+            in_area = false; break;
+          }
+        }
+
+        /* "remove" the global function on convexes outside the enrichment
+           area */
+        if (!in_area) {
+          cvlist_out_area.add(cv);
+          mf_sing_u.set_finite_element(cv, 0);
+          mf_u().set_dof_partition(cv, 1);
+        } else cvlist_in_area.add(cv);
+      }
+
+      /* extract the boundary of the enrichment area, from the
+         "inside" point-of-view, and from the "outside"
+         point-of-view */
+      getfem::mesh_region r_border, r_enr_out;
+      getfem::outer_faces_of_mesh(mesh, r_border);
+
+      getfem::outer_faces_of_mesh(mesh, cvlist_in_area,
+                                  mesh.region(MORTAR_BOUNDARY_IN));
+      getfem::outer_faces_of_mesh(mesh, cvlist_out_area,
+                                  mesh.region(MORTAR_BOUNDARY_OUT));
+      for (getfem::mr_visitor v(r_border); !v.finished(); ++v) {
+        mesh.region(MORTAR_BOUNDARY_OUT).sup(v.cv(), v.f());
+      }
+      mf_u_sum.set_mesh_fems(mf_sing_u, mfls_u);
+    } break;
+
+  case GLOBAL_WITH_CUTOFF :{
+    if(cutoff_func == 0)
+      cout<<"Using exponential Cutoff..."<<endl;
+    else
+      cout<<"Using Polynomial Cutoff..."<<endl;
+    mf_u_sum.set_mesh_fems(mf_sing_u, mfls_u);
+  } break;
+
+  case SPIDER_FEM_ALONE : {
+    mf_u_sum.set_mesh_fems(mf_us);
+  } break;
+
+  case SPIDER_FEM_ENRICHMENT : {
+    mf_u_sum.set_mesh_fems(mf_us, mfls_u);
+  } break;
+
+  case NO_ENRICHMENT: {
+    mf_u_sum.set_mesh_fems(mfls_u);
+  } break;
+
+  }
+
+
+  U.resize(mf_u().nb_dof());
+
+
+  if (mixed_pressure) cout << "Number of dof for P: " << mf_p.nb_dof() << endl;
+  cout << "Number of dof for u: " << mf_u().nb_dof() << endl;
+
+  getfem::model model;
+
+  // Linearized elasticity brick.
+  model.add_fem_variable("u", mf_u());
+  if (mixed_pressure) model.add_fem_variable("p", mf_p);
+  plain_vector lambda_(mf_rhs.nb_dof(), mixed_pressure ? 0. : lambda);
+  model.add_initialized_fem_data("lambda", mf_rhs, lambda_);
+  plain_vector mu_(mf_rhs.nb_dof(), mu);
+  model.add_initialized_fem_data("mu", mf_rhs, mu_);
+  getfem::add_isotropic_linearized_elasticity_brick
+    (model, mim, "u", "lambda", "mu");
+
+
+  if(bimaterial == 1){
+    GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
+    
cout<<"______________________________________________________________________________"<<endl;
+    cout<<"CASE OF BIMATERIAL CRACK  with lambda_up = "<<lambda_up<<" and 
lambda_down = "<<lambda_down<<endl;
+    
cout<<"______________________________________________________________________________"<<endl;
+    plain_vector bi_lambda(mf_rhs.nb_dof());
+    plain_vector bi_mu(mf_rhs.nb_dof());
+
+    for (size_type ite = 0; ite < mf_rhs.nb_dof(); ite++) {
+      if (mf_rhs.point_of_basic_dof(ite)[1] > 0){
+        bi_lambda[ite] = lambda_up;
+        bi_mu[ite] = mu_up;
+      }
+      else{
+        bi_lambda[ite] = lambda_down;
+        bi_mu[ite] = mu_down;
+      }
+    }
+
+    gmm::copy(bi_lambda, model.set_real_variable("lambda"));
+    gmm::copy(bi_mu, model.set_real_variable("mu"));
+  }
+
+  if (mixed_pressure)
+    getfem::add_linear_incompressibility(model, mim, "u", "p");
+
+
+  // Defining the volumic source term.
+  plain_vector F(nb_dof_rhs * N);
+  getfem::interpolation_function(mf_rhs, F, sol_f);
+  model.add_initialized_fem_data("VolumicData", mf_rhs, F);
+  getfem::add_source_term_brick(model, mim, "u", "VolumicData");
+
+  // Defining the Neumann condition right hand side.
+  gmm::clear(F);
+
+  // Neumann condition brick.
+  if (bimaterial == 1) {
+
+    gmm::clear(F);
+    for(size_type i = 1; i<F.size(); i=i+2) F[i] = 0.4;
+    for(size_type i = 0; i<F.size(); i=i+2) F[i] = 0.;
+    model.add_initialized_fem_data("NeumannData_up", mf_rhs, F);
+    getfem::add_source_term_brick
+      (model, mim, "u", "NeumannData_up", NEUMANN_BOUNDARY_NUM1);
+  }
+
+  // Dirichlet condition brick.
+  if (bimaterial == 1) {
+    getfem::add_Dirichlet_condition_with_multipliers
+      (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM);
+  } else {
+#ifdef VALIDATE_XFEM
+    model.add_initialized_fem_data("DirichletData", exact_sol.mf,
+                                   exact_sol.U);
+    getfem::add_Dirichlet_condition_with_multipliers
+      (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM, "DirichletData");
+#else
+    getfem::add_Dirichlet_condition_with_multipliers
+      (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM);
+#endif
+  }
+
+  if (enrichment_option == GLOBAL_WITH_MORTAR) {
+    /* add a constraint brick for the mortar junction between
+       the enriched area and the rest of the mesh */
+    /* we use mfls_u as the space of lagrange multipliers */
+    getfem::mesh_fem &mf_mortar = mfls_mortar;
+    /* adjust its qdim.. this is just evil and dangerous
+       since mf_u() is built upon mfls_u.. it would be better
+       to use a copy. */
+    mf_mortar.set_qdim(2);
+
+    cout << "Handling mortar junction\n";
+
+    /* list of dof of mf_mortar for the mortar condition */
+    std::vector<size_type> ind_mortar;
+    /* unfortunately , dof_on_region sometimes returns too much dof
+       when mf_mortar is an enriched one so we have to filter them */
+    GMM_ASSERT1(!mf_mortar.is_reduced(), "To be adapted");
+    sparse_matrix M(mf_mortar.nb_dof(), mf_mortar.nb_dof());
+    getfem::asm_mass_matrix(M, mim, mf_mortar, MORTAR_BOUNDARY_OUT);
+    for (dal::bv_visitor_c 
d(mf_mortar.basic_dof_on_region(MORTAR_BOUNDARY_OUT));
+         !d.finished(); ++d) {
+      if (M(d,d) > 1e-8) ind_mortar.push_back(d);
+      else cout << "  removing non mortar dof" << d << "\n";
+    }
+
+    cout << ind_mortar.size() << " dof for the lagrange multiplier)\n";
+
+    sparse_matrix H0(mf_mortar.nb_dof(), mf_u().nb_dof()),
+      H(ind_mortar.size(), mf_u().nb_dof());
+
+
+    gmm::sub_index sub_i(ind_mortar);
+    gmm::sub_interval sub_j(0, mf_u().nb_dof());
+
+    /* build the mortar constraint matrix -- note that the integration
+       method is conformal to the crack
+     */
+    getfem::asm_mass_matrix(H0, mim, mf_mortar, mf_u(),
+                            MORTAR_BOUNDARY_OUT);
+    gmm::copy(gmm::sub_matrix(H0, sub_i, sub_j), H);
+
+    gmm::clear(H0);
+    getfem::asm_mass_matrix(H0, mim, mf_mortar, mf_u(),
+                            MORTAR_BOUNDARY_IN);
+    gmm::add(gmm::scaled(gmm::sub_matrix(H0, sub_i, sub_j), -1), H);
+
+
+    /* because of the discontinuous partition of mf_u(), some levelset
+       enriched functions do not contribute any more to the
+       mass-matrix (the ones which are null on one side of the
+       levelset, when split in two by the mortar partition, may create
+       a "null" dof whose base function is all zero..
+    */
+    sparse_matrix M2(mf_u().nb_dof(), mf_u().nb_dof());
+    getfem::asm_mass_matrix(M2, mim, mf_u(), mf_u());
+
+    for (size_type d = 0; d < mf_u().nb_dof(); ++d) {
+      if (M2(d,d) < 1e-10) {
+        cout << "  removing null mf_u() dof " << d << "\n";
+        size_type n = gmm::mat_nrows(H);
+        gmm::resize(H, n+1, gmm::mat_ncols(H));
+        H(n, d) = 1;
+      }
+    }
+
+    getfem::base_vector R(gmm::mat_nrows(H));
+    model.add_fixed_size_variable("mult_mo", gmm::mat_nrows(H));
+    getfem::add_constraint_with_multipliers(model, "u", "mult_mo", H, R);
+  }
+
+  // Generic solve.
+  cout << "Total number of variables : " << model.nb_dof() << endl;
+  gmm::iteration iter(residual, 1, 40000);
+  getfem::standard_solve(model, iter);
+  cout << "Solving... done" << endl;
+  // Solution extraction
+  gmm::copy(model.real_variable("u"), U);
+
+  if(reference_test)
+    {
+      cout << "Exporting reference solution...";
+      GMM_ASSERT1(!mf_u().is_reduced(), "To be adapted");
+      dal::bit_vector blocked_dof = mf_u().basic_dof_on_region(5);
+      getfem::mesh_fem mf_refined(mesh, dim_type(N));
+      std::string FEM_DISC = PARAM.string_value("FEM_DISC","fem disc ");
+      mf_refined.set_finite_element(mesh.convex_index(),
+                                    getfem::fem_descriptor(FEM_DISC));
+
+      plain_vector W(mf_refined.nb_dof());
+      getfem::interpolation(mf_u(), mf_refined, U, W);
+
+
+      mf_refined.write_to_file(datafilename + "_refined_test.meshfem", true);
+      gmm::vecsave(datafilename + "_refined_test.U", W);
+      cout << "done" << endl;
+    }
+
+
+  return (iter.converged());
+}
+
+void export_interpolated_on_line(const getfem::mesh_fem &mf,
+                                 const getfem::base_vector &U,
+                                 const base_node &x0,
+                                 const base_small_vector &dir,
+                                 const int nb_points,
+                                 const std::string &filename) {
+  getfem::mesh_trans_inv mti(mf.linked_mesh());
+  scalar_type h = 1.0/(2*nb_points);
+  for (int i=-nb_points; i <= nb_points; ++i) {
+    mti.add_point(x0 + 2*(i*h)*dir);
+  }
+
+   getfem::base_vector V(mti.nb_points() * mf.get_qdim());
+  getfem::base_matrix M;
+  getfem::interpolation(mf, mti, U, V, M, 0, false);
+
+  std::ofstream f(filename.c_str()); f.precision(16);
+
+  for (size_type i=0; i < mti.nb_points(); ++i) {
+    for (unsigned q=0; q < mf.get_qdim(); ++q) {
+      f << V[i*mf.get_qdim()+q] << " ";
+    }
+    f << "\n";
+  }
+}
+
+
+/**************************************************************************/
+/*  main program.                                                         */
+/**************************************************************************/
+
+int main(int argc, char *argv[]) {
+
+  GMM_SET_EXCEPTION_DEBUG; // Exceptions make a memory fault, to debug.
+  FE_ENABLE_EXCEPT;        // Enable floating point exception for Nan.
+
+  //getfem::getfem_mesh_level_set_noisy();
+
+
+  try {
+    crack_problem p;
+    p.PARAM.read_command_line(argc, argv);
+    p.init();
+    p.mesh.write_to_file(p.datafilename + ".mesh");
+
+    plain_vector U(p.mf_u().nb_dof());
+    if (!p.solve(U)) GMM_ASSERT1(false,"Solve has failed");
+
+    //        for (size_type i = 4; i < U.size(); ++i)
+    //U[i] = 0;
+    //cout << "The solution" << U ;
+     gmm::vecsave("crack.U", U);
+     cout << "vecsave done"<<endl;
+    {
+      getfem::mesh mcut;
+      p.mls.global_cut_mesh(mcut);
+      unsigned Q = p.mf_u().get_qdim();
+      getfem::mesh_fem mf(mcut, dim_type(Q));
+      mf.set_classical_discontinuous_finite_element(2, 0.001);
+      // mf.set_finite_element
+      //        (getfem::fem_descriptor("FEM_PK_DISCONTINUOUS(2, 2, 0.0001)"));
+      plain_vector V(mf.nb_dof());
+
+      getfem::interpolation(p.mf_u(), mf, U, V);
+
+      getfem::stored_mesh_slice sl;
+      getfem::mesh mcut_refined;
+
+      unsigned NX = unsigned(p.PARAM.int_value("NX")), nn;
+//  unsigned NX = (unsigned)sqrt(p.mesh.convex_index().card());
+//    unsigned nn;
+      if (NX < 6) nn = 24;
+      else if (NX < 12) nn = 6;
+      else if (NX < 30) nn = 3;
+      else nn = 3;
+
+      /* choose an adequate slice refinement based on the distance to the 
crack tip */
+      std::vector<bgeot::short_type> 
nrefine(mcut.convex_index().last_true()+1);
+      for (dal::bv_visitor cv(mcut.convex_index()); !cv.finished(); ++cv) {
+        scalar_type dmin=0, d;
+        base_node Pmin,P;
+        for (unsigned i=0; i < mcut.nb_points_of_convex(cv); ++i) {
+          P = mcut.points_of_convex(cv)[i];
+          d = gmm::vect_norm2(ls_function(P));
+          if (d < dmin || i == 0) { dmin = d; Pmin = P; }
+        }
+
+        if (dmin < 1e-5)
+          nrefine[cv] = short_type(nn*8);
+        else if (dmin < .1)
+          nrefine[cv] = short_type(nn*2);
+        else nrefine[cv] = short_type(nn);
+        if (dmin < .01)
+          cout << "cv: "<< cv << ", dmin = " << dmin << "Pmin=" << Pmin << " " 
<< nrefine[cv] << "\n";
+      }
+
+      {
+        getfem::mesh_slicer slicer(mcut);
+        getfem::slicer_build_mesh bmesh(mcut_refined);
+        slicer.push_back_action(bmesh);
+        slicer.exec(nrefine, getfem::mesh_region::all_convexes());
+      }
+      /*
+      sl.build(mcut,
+      getfem::slicer_build_mesh(mcut_refined), nrefine);*/
+
+      getfem::mesh_im mim_refined(mcut_refined);
+      mim_refined.set_integration_method(getfem::int_method_descriptor
+                                         ("IM_TRIANGLE(6)"));
+
+      getfem::mesh_fem mf_refined(mcut_refined, dim_type(Q));
+      mf_refined.set_classical_discontinuous_finite_element(2, 0.001);
+      plain_vector W(mf_refined.nb_dof());
+
+      getfem::interpolation(p.mf_u(), mf_refined, U, W);
+
+
+#ifdef VALIDATE_XFEM
+      p.exact_sol.mf.set_qdim(dim_type(Q));
+      assert(p.exact_sol.mf.nb_dof() == p.exact_sol.U.size());
+      plain_vector EXACT(mf_refined.nb_dof());
+      getfem::interpolation(p.exact_sol.mf, mf_refined,
+                            p.exact_sol.U, EXACT);
+
+      plain_vector DIFF(EXACT); gmm::add(gmm::scaled(W,-1),DIFF);
+#endif
+
+      if (p.PARAM.int_value("VTK_EXPORT")) {
+        getfem::mesh_fem mf_refined_vm(mcut_refined, 1);
+        mf_refined_vm.set_classical_discontinuous_finite_element(1, 0.001);
+        cerr << "mf_refined_vm.nb_dof=" << mf_refined_vm.nb_dof() << "\n";
+        plain_vector VM(mf_refined_vm.nb_dof());
+
+        cout << "computing von mises\n";
+        getfem::interpolation_von_mises(mf_refined, mf_refined_vm, W, VM);
+
+        plain_vector D(mf_refined_vm.nb_dof() * Q),
+          DN(mf_refined_vm.nb_dof());
+
+#ifdef VALIDATE_XFEM
+        getfem::interpolation(mf_refined, mf_refined_vm, DIFF, D);
+        for (unsigned i=0; i < DN.size(); ++i) {
+          DN[i] = gmm::vect_norm2(gmm::sub_vector(D, gmm::sub_interval(i*Q, 
Q)));
+        }
+#endif
+
+        cout << "export to " << p.datafilename + ".vtk" << "..\n";
+        getfem::vtk_export exp(p.datafilename + ".vtk",
+                               p.PARAM.int_value("VTK_EXPORT")==1);
+
+        exp.exporting(mf_refined);
+        //exp.write_point_data(mf_refined_vm, DN, "error");
+        exp.write_point_data(mf_refined_vm, VM, "von mises stress");
+
+        exp.write_point_data(mf_refined, W, "elastostatic_displacement");
+
+        base_node line_x0(0.70001,0);
+        base_small_vector line_dir(0, 0.5001);
+        unsigned line_nb_points = 1000;
+        export_interpolated_on_line(mf_refined_vm, VM,
+                                    line_x0, line_dir, line_nb_points,
+                                    "von_mises_on_line.data");
+
+#ifdef VALIDATE_XFEM
+
+        plain_vector VM_EXACT(mf_refined_vm.nb_dof());
+
+
+        /* getfem::mesh_fem_global_function mf(mcut_refined,Q);
+           std::vector<getfem::pglobal_function> cfun(4);
+           for (unsigned j=0; j < 4; ++j)
+           cfun[j] = getfem::isotropic_crack_singular_2D(j, p.ls);
+           mf.set_functions(cfun);
+           getfem::interpolation_von_mises(mf, mf_refined_vm, p.exact_sol.U,
+           VM_EXACT);
+        */
+
+
+        getfem::interpolation_von_mises(mf_refined, mf_refined_vm, EXACT, 
VM_EXACT);
+        getfem::vtk_export exp2("crack_exact.vtk");
+        exp2.exporting(mf_refined);
+        exp2.write_point_data(mf_refined_vm, VM_EXACT, "exact von mises 
stress");
+        exp2.write_point_data(mf_refined, EXACT, "reference solution");
+
+        export_interpolated_on_line(mf_refined_vm, VM_EXACT,
+                                    line_x0, line_dir, line_nb_points,
+                                    "von_mises_on_line_exact.data");
+#endif
+
+        cout << "export done, you can view the data file with (for example)\n"
+          "mayavi -d " << p.datafilename << ".vtk -f  "
+          "WarpVector -m BandedSurfaceMap -m Outline\n";
+      }
+
+      //bool error_to_ref_sol = 0;
+
+      if(p.PARAM.int_value("ERROR_TO_REF_SOL") == 1){
+        cout << "Coputing error with respect to a reference solution..." << 
endl;
+        std::string REFERENCE_MF = "crack_refined_test.meshfem";
+        std::string REFERENCE_U = "crack_refined_test.U";
+
+        cout << "Load reference meshfem and solution from " << REFERENCE_MF << 
" and " << REFERENCE_U << "\n";
+        getfem::mesh ref_m;
+        ref_m.read_from_file(REFERENCE_MF);
+        getfem::mesh_fem ref_mf(ref_m);
+        ref_mf.read_from_file(REFERENCE_MF);
+        std::fstream f(REFERENCE_U.c_str(), std::ios::in);
+        plain_vector ref_U(ref_mf.nb_dof());
+
+        for (unsigned i=0; i < ref_mf.nb_dof(); ++i) {
+          f >> ref_U[i]; if (!f.good()) GMM_ASSERT1(f.good(), "problem while 
reading " << REFERENCE_U);
+        }
+
+        getfem::mesh_im ref_mim(ref_m);
+        getfem::pintegration_method ppi =
+          getfem::int_method_descriptor("IM_TRIANGLE(6)");
+        ref_mim.set_integration_method(ref_m.convex_index(), ppi);
+        plain_vector interp_U(ref_mf.nb_dof());
+        getfem::interpolation(p.mf_u(), ref_mf, U, interp_U);
+
+        //gmm::add(gmm::scaled(interp_U, -1), ref_U);
+
+
+        cout << "To ref L2 ERROR:" << getfem::asm_L2_dist(ref_mim, ref_mf, 
interp_U,
+                                                          ref_mf, ref_U) << 
endl;
+
+        cout << "To ref H1 ERROR:" << getfem::asm_H1_dist(ref_mim, ref_mf, 
interp_U,
+                                                          ref_mf, ref_U) << 
endl;
+
+        //cout << "L2 ERROR:"<< getfem::asm_L2_norm(ref_mim, ref_mf, ref_U)
+        //     << endl << "H1 ERROR:"
+        //     << getfem::asm_H1_norm(ref_mim, ref_mf, ref_U) << "\n";
+
+      }
+
+#ifdef VALIDATE_XFEM
+
+      else {
+        cout << "L2 ERROR:"<< getfem::asm_L2_dist(p.mim, p.mf_u(), U,
+                                                  p.exact_sol.mf, 
p.exact_sol.U)
+             << endl << "H1 ERROR:"
+             << getfem::asm_H1_dist(p.mim, p.mf_u(), U,
+                                    p.exact_sol.mf, p.exact_sol.U) << "\n";
+
+      }
+
+      cout << "L2 norm of the solution:"  << 
getfem::asm_L2_norm(p.mim,p.mf_u(),U)<<endl;
+      cout << "H1 norm of the solution:"  << 
getfem::asm_H1_norm(p.mim,p.mf_u(),U)<<endl;
+
+
+
+      /* cout << "OLD ERROR L2:"
+         << getfem::asm_L2_norm(mim_refined,mf_refined,DIFF)
+         << " H1:" << getfem::asm_H1_dist(mim_refined,mf_refined,
+         EXACT,mf_refined,W)  << "\n";
+
+         cout << "ex = " << p.exact_sol.U << "\n";
+         cout << "U  = " << gmm::sub_vector(U, gmm::sub_interval(0,8)) << "\n";
+      */
+#endif
+    }
+
+  }
+  GMM_STANDARD_CATCH_ERROR;
+
+  return 0;
+}
diff --git a/contrib/3D_Crack/crack_3D.param b/contrib/3D_Crack/crack_3D.param
new file mode 100644
index 0000000..9c97a2c
--- /dev/null
+++ b/contrib/3D_Crack/crack_3D.param
@@ -0,0 +1,133 @@
+% Copyright (C) 2017-2017 Yves Renard.
+%
+% This file is a part of GetFEM++
+%
+% GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+% under  the  terms  of the  GNU  Lesser General Public License as published
+% by  the  Free Software Foundation;  either version 3 of the License,  or
+% (at your option) any later version along with the GCC Runtime Library
+% Exception either version 3.1 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 Lesser General Public
+% License and GCC Runtime Library Exception for more details.
+% You  should  have received a copy of the GNU Lesser General Public License
+% along  with  this program;  if not, write to the Free Software Foundation,
+% Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+% -*- mat-lab -*- (enables emacs matlab mode)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% parameters for program crack                                            %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%% pde parameters :                                               %%%%%
+% MU = 77.0;           % Lam� coefficient.
+% LAMBDA = 107.0;      % Lam� coefficient.
+
+MU = 1.0;              % Lam� coefficient.
+LAMBDA = 1.0;           % Lam� coefficient.
+
+
+QUAD = 0;
+
+
+BIMATERIAL = 1;         % 1 : To enable the bimaterial case
+
+if BIMATERIAL
+  LAMBDA_UP = 10.0;
+  LAMBDA_DOWN = 1.0;
+  MU_UP = 10.0;        
+  MU_DOWN = 1.0;
+end
+
+REFINEMENT_RADIUS = 0.; %REF: 0.3;  % 0 for no refinement
+REFINEMENT_PROCESS = 3;  % nb of desired refinement steps
+
+REFERENCE_TEST = 0; % 1 to compute a reference solution to be exported into 
files
+ERROR_TO_REF_SOL = 1; % 1 to compute errors with respect to the reference 
solution
+
+%%%%%   discretisation parameters  :                                 %%%%%
+
+if (~QUAD) 
+  MESH_TYPE = 'GT_PK(2,1)';         % linear triangles
+else
+  % MESH_TYPE = 'GT_LINEAR_QK(2)';
+  MESH_TYPE = 'GT_QK(2, 1)';
+end;
+
+NX =    10;              % space step.
+
+
+
+MESH_NOISED = 0; % Set to one if you want to "shake" the mesh
+
+
+
+if (~QUAD)
+  %FEM_TYPE = 'FEM_PK_WITH_CUBIC_BUBBLE(2, 2)';
+  FEM_TYPE = 'FEM_PK(2, 1)';  % PK element %REF: P3
+  DATA_FEM_TYPE = 'FEM_PK(2,1)';
+  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6), 5)';
+  FEM_TYPE_P = 'FEM_PK(2,1)'; 
+  MORTAR_FEM_TYPE = FEM_TYPE;
+else
+  FEM_TYPE = 'FEM_QK(2,1)';  % Q1 fem for quadrangles
+  DATA_FEM_TYPE = 'FEM_QK(2,1)';
+  INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 1), 5)';
+  FEM_TYPE_P = 'FEM_QK(2,1)'; 
+  MORTAR_FEM_TYPE = FEM_TYPE;
+end;
+
+FEM_DISC = 'FEM_PK_DISCONTINUOUS(2,3,0.0001)';  % Discontinuous P1 for 
triangles
+
+MIXED_PRESSURE=0;       % Mixed version or not.
+DIRICHLET_VERSION = 2;
+
+% integration meth. for sub-simplexe of elements crossed by the level-set
+SIMPLEX_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_TRIANGLE(6),3)';
+
+% integration meth. for quasi-polar integration of sub-simplexes adjascent to 
the level-set
+% (comment it to disable quasipolar integration). Should be a
+% method defined on a square for 2D, or defined on a prism for 3D.
+% SINGULAR_INTEGRATION = 'IM_GAUSS_PARALLELEPIPED(2, 10)';
+SINGULAR_INTEGRATION = 'IM_STRUCTURED_COMPOSITE(IM_GAUSS_PARALLELEPIPED(2, 6), 
9)';
+
+ADDITIONAL_CRACK = 0;
+
+%Enable the following two lines to use the precalculated solution as 
enrichement 
+%GLOBAL_FUNCTION_MF = "bimaterial_crack12.meshfem"
+%GLOBAL_FUNCTION_U  = "bimaterial_crack12.U"
+
+
+ENRICHMENT_OPTION = 5;  % 0 = Pas d'enrichissement
+                       % 1 = standard XFEM on a fixed zone
+                       % 2 = global functions with mortar junction
+                       % 3 = global functions with cutoff
+                       % 4 = spider fem alone
+                       % 5 = spider fem enrichment
+
+
+RADIUS_ENR_AREA = 0.2;  % For XFEM and the mortar junction
+
+CUTOFF_FUNC = 2; % 0 for the exponential cutoff. 
+                 % 1 for a 3rd degree polynomial cutoff
+                 % 2 for a 5th degree polynomial cutoff
+CUTOFF = 0.2;
+CUTOFF1 = 0.01;
+CUTOFF0 = 0.49;
+
+SPIDER_RADIUS =  0.4;
+SPIDER_NR = 10;               % size of the cartesian mesh in r for spider fem
+SPIDER_NTHETA = 10;           % size of the cartesian mesh in theta for spider 
fem
+SPIDER_K=1;                   % order of the  spider fem 
+SPIDER_BIMAT_ENRICHMENT = 1;  % 0 for a sqrt spider enrichment
+                              % 1 for sqrt(r)cos(ln(r)) and sqrt(r)sin(ln(r)) 
spider enrichment
+                              
+
+RESIDUAL = 1E-9;       % residual for iterative methods if any.
+
+%%%%%   saving parameters                                             %%%%%
+ROOTFILENAME = 'crack';     % Root of data files.
+VTK_EXPORT = 2 % export solution to a .vtk file ?
+
+EXACT_SOL_NUM=1 % 1 for mode I, 2 for mode II, 6 for a combination
+                % of modes
\ No newline at end of file
diff --git a/contrib/3D_Crack/crack_3D.pl b/contrib/3D_Crack/crack_3D.pl
new file mode 100644
index 0000000..602a8bb
--- /dev/null
+++ b/contrib/3D_Crack/crack_3D.pl
@@ -0,0 +1,16 @@
+# Copyright (C) 2001-2017 Yves Renard
+#
+# This file is a part of GetFEM++
+#
+# GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+# under  the  terms  of the  GNU  Lesser General Public License as published
+# by  the  Free Software Foundation;  either version 3 of the License,  or
+# (at your option) any later version along with the GCC Runtime Library
+# Exception either version 3.1 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 Lesser General Public
+# License and GCC Runtime Library Exception for more details.
+# You  should  have received a copy of the GNU Lesser General Public License
+# along  with  this program;  if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
diff --git a/contrib/3D_Crack/crack_3D_exact_solution.cc 
b/contrib/3D_Crack/crack_3D_exact_solution.cc
new file mode 100644
index 0000000..dc71623
--- /dev/null
+++ b/contrib/3D_Crack/crack_3D_exact_solution.cc
@@ -0,0 +1,306 @@
+/*===========================================================================
+
+ Copyright (C) 2007-2017 Yves Renard, Julien Pommier.
+
+ This file is a part of GetFEM++
+
+ GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+===========================================================================*/
+
+#include "crack_3D_exact_solution.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+/* returns sin(theta/2) where theta is the angle
+   of 0-(x,y) with the axis Ox */
+/* static scalar_type sint2(scalar_type x, scalar_type y) { */
+/*   scalar_type r = sqrt(x*x+y*y); */
+/*   if (r == 0) return 0; */
+/*   else return (y<0 ? -1:1) * sqrt(gmm::abs(r-x)/(2*r)); */
+/*   // sometimes (gcc3.3.2 -O3), r-x < 0 .... */
+/* } */
+/* static scalar_type cost2(scalar_type x, scalar_type y) { */
+/*   scalar_type r = sqrt(x*x+y*y); */
+/*   if (r == 0) return 0; */
+/*   else return sqrt(gmm::abs(r+x)/(2*r)); */
+/* } */
+/* analytical solution for a semi-infinite crack [-inf,a] in an
+   infinite plane submitted to +sigma above the crack
+   and -sigma under the crack. (The crack is directed along the x axis).
+   
+   nu and E are the poisson ratio and young modulus
+   
+   solution taken from "an extended finite elt method with high order
+   elts for curved cracks", Stazi, Budyn,Chessa, Belytschko
+*/
+
+/*static void elasticite2lame(const scalar_type young_modulus,
+                           const scalar_type poisson_ratio, 
+                           scalar_type& lambda, scalar_type& mu) {
+  mu = young_modulus/(2*(1+poisson_ratio));
+  lambda = 2*mu*poisson_ratio/(1-poisson_ratio);
+}
+*/
+
+/* solution reguliere pour une fracture en y=0 */
+static base_small_vector solution_P2(double lambda, double mu, const 
base_node& pos, base_matrix* pgrad = 0) {
+  double x=pos[0], y = pos[1];
+  base_small_vector v(2);
+  double c[6] = {0, 0, 0., 0., 0., 0.01};
+  double d[6] = {0, .2, .1, 0.05, -.03, 0.06};
+  v[0] = 
c[0]-1/lambda*(lambda+2.0*mu)*d[2]*x-d[1]*y-1/lambda*(lambda+2.0*mu)*d[4]*x*x/2.0-2.0*(lambda+2.0*mu)*d[5]/lambda*x*y+(3.0*lambda+4.0*mu)*d[4]/lambda*y*y/2.0;
+  v[1]= d[0]+d[1]*x+d[2]*y+1/lambda*(lambda+2.0*mu)*d[5]*x*x+d[4]*x*y+d[5]*y*y;
+  if (pgrad) {
+    (*pgrad).resize(2,2);
+    (*pgrad)(0,0) = 
-1/lambda*(lambda+2.0*mu)*d[2]-1/lambda*(lambda+2.0*mu)*d[4]*x-2.0*(lambda+2.0*mu)*d[5]/lambda*y;
+    (*pgrad)(1,0) = 
-d[1]-2.0*(lambda+2.0*mu)*d[5]/lambda*x+(3.0*lambda+4.0*mu)*d[4]/lambda*y;
+    (*pgrad)(0,1) = d[1]+d[4]*y+2/lambda*(lambda+2.0*mu)*d[5]*x;
+    (*pgrad)(1,1) = d[2]+d[4]*x+2*d[5]*y;
+  }
+  return v;
+}
+
+static void sol_ref_infinite_plane(scalar_type lambda, scalar_type mu, 
+                                  scalar_type x, scalar_type y,
+                                  base_small_vector& U, int mode,
+                                  base_matrix *pgrad) {
+  //scalar_type KI = sigma*sqrt(M_PI*a);
+  scalar_type r = std::max(sqrt(x*x+y*y),1e-16);
+  scalar_type sqrtr = sqrt(r), sqrtr3 = sqrtr*sqrtr*sqrtr;
+  scalar_type cost = x/r, sint = y/r;
+  scalar_type theta = atan2(y,x);
+  scalar_type s2 = sin(theta/2); //sint2(x,y);
+  scalar_type c2 = cos(theta/2); //cost2(x,y);
+  // scalar_type c3 = cos(3*theta/2); //4*c2*c2*c2-3*c2; /* cos(3*theta/2) */
+  // scalar_type s3 = sin(3*theta/2); //4*s2*c2*c2-s2;  /* sin(3*theta/2) */
+
+  U.resize(2);
+  if (pgrad) (*pgrad).resize(2,2);
+  scalar_type C=1; //1./E * (mode == 1 ? 1. : (1+nu));
+  if (mode == 1) {
+    scalar_type A=2+2*mu/(lambda+2*mu);
+    scalar_type B=-2*(lambda+mu)/(lambda+2*mu);
+    U[0] = sqrtr/sqrt(2*M_PI) * C * c2 * (A + B*cost);
+    U[1] = sqrtr/sqrt(2*M_PI) * C * s2 * (A + B*cost);
+    if (pgrad) {
+      (*pgrad)(0,0) = C/(2.*sqrt(2*M_PI)*sqrtr)
+       * (cost*c2*A-cost*cost*c2*B+sint*s2*A+sint*s2*B*cost+2*c2*B);
+      (*pgrad)(1,0) = -C/(2*sqrt(2*M_PI)*sqrtr)
+       * (-sint*c2*A+sint*c2*B*cost+cost*s2*A+cost*cost*s2*B);
+      (*pgrad)(0,1) = C/(2.*sqrt(2*M_PI)*sqrtr)
+       * (cost*s2*A-cost*cost*s2*B-sint*c2*A-sint*c2*B*cost+2*s2*B);
+      (*pgrad)(1,1) = C/(2.*sqrt(2*M_PI)*sqrtr)
+       * (sint*s2*A-sint*s2*B*cost+cost*c2*A+cost*cost*c2*B);
+    }
+  } else if (mode == 2) {
+    scalar_type C1 = (lambda+3*mu)/(lambda+mu);
+    U[0] = sqrtr/sqrt(2*M_PI) * C * s2 * (C1 + 2 + cost);
+    U[1] = sqrtr/sqrt(2*M_PI) * C * c2 * (C1 - 2 + cost) * (-1.);
+    if (pgrad) {
+      (*pgrad)(0,0) = C/(2.*sqrt(2*M_PI)*sqrtr)
+       * (cost*s2*C1+2*cost*s2-cost*cost*s2-sint*c2*C1
+          -2*sint*c2-sint*cost*c2+2*s2);
+      (*pgrad)(1,0) = C/(2.*sqrt(2*M_PI)*sqrtr)
+       * (sint*s2*C1+2*sint*s2-sint*s2*cost+cost*c2*C1
+          +2*cost*c2+cost*cost*c2);
+      (*pgrad)(0,1) = -C/(2.*sqrt(2*M_PI)*sqrtr)
+       * (cost*c2*C1-2*cost*c2-cost*cost*c2+sint*s2*C1
+          -2*sint*s2+sint*s2*cost+2*c2);
+      (*pgrad)(1,1) =  C/(2.*sqrt(2*M_PI)*sqrtr)
+       * (-sint*c2*C1+2*sint*c2+sint*cost*c2+cost*s2*C1
+          -2*cost*s2+cost*cost*s2);
+    }
+  } else if (mode == 100) {
+    U[0] = - sqrtr3 * (c2 + 4./3 *(7*mu+3*lambda)/(lambda+mu)*c2*s2*s2
+                      -1./3*(7*mu+3*lambda)/(lambda+mu)*c2);
+    U[1] = - sqrtr3 * (s2+4./3*(lambda+5*mu)/(lambda+mu)*s2*s2*s2
+                      -(lambda+5*mu)/(lambda+mu)*s2);
+    if (pgrad) {
+      (*pgrad)(0,0) = 2*sqrtr*(-6*cost*c2*mu+7*cost*c2*c2*c2*mu
+                              -3*cost*c2*lambda+3*cost*c2*c2*c2*lambda
+                              -2*sint*s2*mu
+                              +7*sint*s2*c2*c2*mu-sint*s2*lambda
+                              +3*sint*s2*c2*c2*lambda)/(lambda+mu);
+      (*pgrad)(1,0) = -2*sqrtr*(6*sint*c2*mu-7*sint*c2*c2*c2*mu
+                               +3*sint*c2*lambda-3*sint*c2*c2*c2*lambda
+                               -2*cost*s2*mu
+                               +7*cost*s2*c2*c2*mu-cost*s2*lambda
+                               +3*cost*s2*c2*c2*lambda)/(lambda+mu);
+      (*pgrad)(0,1) = 2*sqrtr*(-2*cost*s2*mu-cost*s2*lambda
+                              +cost*s2*c2*c2*lambda+5*cost*s2*c2*c2*mu
+                              +4*sint*c2*mu
+                              +sint*c2*lambda-sint*c2*c2*c2*lambda
+                              -5*sint*c2*c2*c2*mu)/(lambda+mu);
+      (*pgrad)(1,1) = 2*sqrtr*(-2*sint*s2*mu-sint*s2*lambda
+                              +sint*s2*c2*c2*lambda+5*sint*s2*c2*c2*mu
+                              -4*cost*c2*mu
+                              -cost*c2*lambda+cost*c2*c2*c2*lambda
+                              +5*cost*c2*c2*c2*mu)/(lambda+mu);
+    }
+  } else if (mode == 101) {
+    U[0] = -4*sqrtr3*s2*(-lambda-2*mu+7*lambda*c2*c2
+                        +11*mu*c2*c2)/(3*lambda-mu);
+    U[1] = -4*sqrtr3*c2*(-3*lambda+3*lambda*c2*c2-mu*c2*c2)/(3*lambda-mu);
+    if (pgrad) {
+      (*pgrad)(0,0) = -6*sqrtr*(-cost*s2*lambda-2*cost*s2*mu
+                               +7*cost*s2*lambda*c2*c2
+                               +11*cost*s2*mu*c2*c2+5*sint*c2*lambda
+                               +8*sint*c2*mu-7*sint*c2*c2*c2*lambda
+                               -11*sint*c2*c2*c2*mu)/(3*lambda-mu);
+      (*pgrad)(1,0) = -6*sqrtr*(-sint*s2*lambda-2*sint*s2*mu
+                               +7*sint*s2*lambda*c2*c2
+                               +11*sint*s2*mu*c2*c2-5*cost*c2*lambda
+                               -8*cost*c2*mu+7*cost*c2*c2*c2*lambda
+                               +11*cost*c2*c2*c2*mu)/(3*lambda-mu);
+      (*pgrad)(0,1) = -6*sqrtr*(-3*cost*c2*lambda+3*cost*c2*c2*c2*lambda
+                               -cost*c2*c2*c2*mu-sint*s2*lambda
+                               +3*sint*s2*lambda*c2*c2
+                               -sint*s2*mu*c2*c2)/(3*lambda-mu);
+      (*pgrad)(1,1) = 6*sqrtr*(3*sint*c2*lambda
+                              -3*sint*c2*c2*c2*lambda+sint*c2*c2*c2*mu
+                              -cost*s2*lambda+3*cost*s2*lambda*c2*c2
+                              -cost*s2*mu*c2*c2)/(3*lambda-mu);
+    }
+
+  } else if (mode == 10166666) {
+
+    U[0] = 4*sqrtr3*s2*(-lambda+lambda*c2*c2-3*mu*c2*c2)/(lambda-3*mu);
+    U[1] = 
4*sqrtr3*c2*(-3*lambda-6*mu+5*lambda*c2*c2+9*mu*c2*c2)/(lambda-3*mu);
+    if (pgrad) {
+      (*pgrad)(0,0) = 6*sqrtr*(-cost*s2*lambda+cost*s2*lambda*c2*c2-
+                              3*cost*s2*mu*c2*c2-2*sint*c2*mu+sint*c2*lambda-
+                              sint*c2*c2*c2*lambda
+                              +3*sint*c2*c2*c2*mu)/(lambda-3*mu);
+      (*pgrad)(1,0) = 6*sqrtr*(-sint*s2*lambda+sint*s2*lambda*c2*c2-
+                              3*sint*s2*mu*c2*c2+2*cost*c2*mu-cost*c2*lambda+
+                              cost*c2*c2*c2*lambda
+                              -3*cost*c2*c2*c2*mu)/(lambda-3*mu);
+      (*pgrad)(0,1) = 6*sqrtr*(-3*cost*c2*lambda-6*cost*c2*mu
+                              +5*cost*c2*c2*c2*lambda+
+                              9*cost*c2*c2*c2*mu-sint*s2*lambda-2*sint*s2*mu+
+                              5*sint*s2*lambda*c2*c2
+                              +9*sint*s2*mu*c2*c2)/(lambda-3*mu);
+      (*pgrad)(1,1) = -6*sqrtr*(3*sint*c2*lambda+6*sint*c2*mu
+                               -5*sint*c2*c2*c2*lambda-
+                               9*sint*c2*c2*c2*mu-cost*s2*lambda-2*cost*s2*mu+
+                               5*cost*s2*lambda*c2*c2
+                               +9*cost*s2*mu*c2*c2)/(lambda-3*mu);
+    }
+  } else assert(0);
+  if (std::isnan(U[0]))
+    cerr << "raaah not a number ...\n";
+  assert(!std::isnan(U[0]));
+  assert(!std::isnan(U[1]));
+}
+
+
+base_small_vector crack_exact_solution_function::eval(const base_node &x, 
base_matrix *pgrad) const {
+  int N = x.size(); base_small_vector res(N); res.fill(0.);
+  gmm::clear(res); if (pgrad) gmm::clear(*pgrad);
+  if (function_num == 1) {
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], res, 1, pgrad);
+  } else if (function_num == 2) {
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], res, 2, pgrad);
+  } else if (function_num == 3) {
+    //res[0] = (x[1]+2.5)/10;
+    res[1] = x[1]/4;
+  } else if (function_num == 4) {
+    base_small_vector modeI(2), modeII(2);
+    base_matrix gradI, gradII;
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeI, 1, (pgrad) ? &gradI 
: 0);
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeII, 2, (pgrad) ? 
&gradII : 0);
+    res = solution_P2(lambda, mu, x, pgrad);
+    res += modeI*4. - modeII*3.;
+    if (pgrad) { 
+      gmm::add(gmm::scaled(gradI,4.),*pgrad);
+      gmm::add(gmm::scaled(gradII,-3.),*pgrad); 
+    }
+  } else if (function_num == 5) {
+    base_small_vector modeI(2), modeII(2), modeZ(2);
+    base_matrix gradI, gradII, gradZ;
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeI, 1, (pgrad) ? &gradI 
: 0);
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeII, 2, (pgrad) ? 
&gradII : 0);
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeZ, 100, (pgrad) ? 
&gradZ : 0);
+    res = solution_P2(lambda, mu, x, pgrad); 
+    res = -1. * res; if (pgrad) { for (size_type k=0; k < (*pgrad).size(); 
++k) (*pgrad)[k] = -(*pgrad)[k]; }
+    res += modeI*(1.) - modeII*3. - modeZ*.5;
+    if (pgrad) { 
+      gmm::add(gmm::scaled(gradI,(1.)),*pgrad);
+      gmm::add(gmm::scaled(gradII,-3.),*pgrad); 
+      gmm::add(gmm::scaled(gradZ,-.5),*pgrad);
+    }
+  } else if (function_num == 6) {
+    base_small_vector modeI(2), modeII(2), modeZI(2), modeZII(2);
+    base_matrix gradI, gradII, gradZI, gradZII;
+    scalar_type coef[5] = {0.5,1,1.5,1,0};
+    res = solution_P2(lambda, mu, x, pgrad); 
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeI, 1, (pgrad) ? &gradI 
: 0);
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeII, 2, (pgrad) ? 
&gradII : 0);
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeZI, 100, (pgrad) ? 
&gradZI : 0);
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], modeZII, 101, (pgrad) ? 
&gradZII : 0);
+    //res = -1. * res; if (pgrad) { for (size_type k=0; k < (*pgrad).size(); 
++k) (*pgrad)[k] = -(*pgrad)[k]; }
+    res = res*coef[0] + modeI*coef[1] + modeII*coef[2] + modeZI*coef[3] + 
modeZII*coef[4];
+    
+    if (pgrad) { 
+      if (pgrad) { for (size_type k=0; k < (*pgrad).size(); ++k) (*pgrad)[k] 
*= coef[0]; }
+      gmm::add(gmm::scaled(gradI,coef[1]),*pgrad);
+      gmm::add(gmm::scaled(gradII,coef[2]),*pgrad);
+      gmm::add(gmm::scaled(gradZI,coef[3]),*pgrad);
+      gmm::add(gmm::scaled(gradZII,coef[4]),*pgrad);
+    }
+  } else if (function_num == 7) {
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], res, 100, pgrad);
+    res /= -40; if (pgrad) gmm::scale(*pgrad, -1./40);
+  } else if (function_num == 8) {
+    sol_ref_infinite_plane(lambda, mu, x[0], x[1], res, 101, pgrad);
+    res /= 200; if (pgrad) gmm::scale(*pgrad, 1./200);
+  }
+  return res;
+}
+
+scalar_type crack_exact_solution_function::val(scalar_type x, scalar_type y) 
const {
+  return eval(base_node(x,y), 0)[component_num];
+}
+
+base_small_vector crack_exact_solution_function::grad(scalar_type x, 
scalar_type y) const {
+  base_matrix gr(2,2);
+  eval(base_node(x,y), &gr);
+  base_small_vector v(2);
+  for (unsigned i=0; i < 2; ++i) v[i] = gr(i,component_num);
+  return v;
+}
+
+
+
+void crack_exact_solution::init(int function_num, scalar_type lambda, 
scalar_type mu,
+                               getfem::level_set &ls) {
+  std::vector<getfem::pglobal_function> cfun(2);
+  for (unsigned i = 0; i < 2; ++i) {
+    /* use the singularity */
+    getfem::pxy_function
+      s = std::make_shared<crack_exact_solution_function>
+      (function_num, i, lambda, mu);
+    cfun[i] = getfem::global_function_on_level_set(ls, s);
+  }
+  
+  mf.set_functions(cfun);
+  
+  mf.set_qdim(1);
+  
+  U.resize(4); assert(mf.nb_dof() == 2);
+  U[0] = 1; U[1] = 0;
+  U[2] = 0; U[3] = 1;
+}
diff --git a/contrib/3D_Crack/crack_3D_exact_solution.h 
b/contrib/3D_Crack/crack_3D_exact_solution.h
new file mode 100644
index 0000000..1ce5132
--- /dev/null
+++ b/contrib/3D_Crack/crack_3D_exact_solution.h
@@ -0,0 +1,94 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2007-2017 Yves Renard, Julien Pommier.
+
+ This file is a part of GetFEM++
+
+ GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+#include "getfem/getfem_mesh_fem_global_function.h"
+
+using std::endl; using std::cout; using std::cerr;
+using std::ends; using std::cin;
+
+
+/* some GetFEM++ types that we will be using */
+using bgeot::base_small_vector; /* special class for small (dim<16) vectors */
+using bgeot::base_node;  /* geometrical nodes(derived from base_small_vector)*/
+using bgeot::scalar_type; /* = double */
+using bgeot::size_type;   /* = unsigned long */
+using bgeot::dim_type; 
+using bgeot::short_type;
+using bgeot::base_matrix; /* small dense matrix. */
+
+#define VALIDATE_XFEM
+
+#ifdef VALIDATE_XFEM
+
+struct crack_exact_solution_function : public getfem::abstract_xy_function {
+  unsigned function_num;
+  unsigned component_num; /* 0 -> x component, 1 -> y component */
+  scalar_type lambda, mu;
+  virtual scalar_type val(scalar_type x, scalar_type y) const;
+  virtual base_small_vector grad(scalar_type x, scalar_type y) const;
+  virtual base_matrix hess(scalar_type, scalar_type) const
+  { GMM_ASSERT1(false, "Sorry, to be done ..."); }
+  crack_exact_solution_function(unsigned fnum, 
+                               unsigned cnum,
+                               scalar_type l, scalar_type m) {
+    function_num = fnum; 
+    component_num = cnum;
+    lambda = l; mu = m;
+  }
+  base_small_vector eval(const base_node &x, base_matrix *pgrad) const;
+};
+
+
+struct crack_exact_solution {
+  getfem::mesh_fem_global_function mf;
+  getfem::base_vector U;
+
+  crack_exact_solution(getfem::mesh &me) : mf(me) {}
+  
+  void init(int function_num, scalar_type lambda, scalar_type mu,
+           getfem::level_set &ls);
+};
+
+inline base_small_vector sol_f(const base_node &x) {
+  int N = x.size();
+  base_small_vector res(N);
+  return res;
+}
+
+#else
+
+inline base_small_vector sol_f(const base_node &x) {
+  int N = x.size();
+  base_small_vector res(N); res[N-1] = x[N-1];
+  return res;
+}
+
+#endif
diff --git a/contrib/3D_Crack/getfem_Xfem.cc b/contrib/3D_Crack/getfem_Xfem.cc
new file mode 100644
index 0000000..639477c
--- /dev/null
+++ b/contrib/3D_Crack/getfem_Xfem.cc
@@ -0,0 +1,196 @@
+/*===========================================================================
+
+ Copyright (C) 2003-2017 Yves Renard
+
+ This file is a part of GetFEM++
+
+ GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+===========================================================================*/
+
+#include "getfem_Xfem.h"
+
+namespace getfem
+{
+  void Xfem::valid(void) {
+    init_cvs_node();
+    /* setup nodes of the base fem */
+    if (pfb)
+      for (size_type k = 0; k < pfb->nb_base(0); ++k)
+       add_node(pfb->dof_types()[k], pfb->node_of_dof(0,k));
+    
+    /* setup nodes of the enriched fems */
+    for (size_type k = 0; k < nb_func; ++k) {
+      for (size_type j = 0; j < pfe(k)->nb_base(0); ++j) {
+       add_node(xfem_dof(pfe(k)->dof_types()[j], func_indices[k]),
+                pfe(k)->node_of_dof(0,j));
+      }
+    }
+    is_valid = true;
+  }
+  
+  size_type Xfem::nb_dof(size_type) const {
+    GMM_ASSERT1(is_valid, "Valid the Xfem element before using it");
+    return dof_types_.size();
+  }
+
+  void Xfem::add_func(pfem pf, pXfem_func pXf, size_type ind) {
+    if (!pfb) init(pf);
+    nb_func ++;
+    if (ind == size_type(-1)) ind = nb_func;
+    funcs.resize(nb_func);
+    func_indices.resize(nb_func);
+    funcs[nb_func-1] = pXf;
+    if (cvr != pf->ref_convex(0) || (pfb && pfb->target_dim() != 
pf->target_dim()))
+      GMM_ASSERT1(false, "Incompatible Xfem fems");
+
+    /* insert the new fem in the list */
+    std::vector<pfem>::const_iterator it;
+    if ((it=std::find(uniq_pfe.begin(), uniq_pfe.end(), pf)) == 
uniq_pfe.end()) {
+      uniq_pfe.push_back(pf); func_pf.push_back(uniq_pfe.size()-1);
+    } else {
+      func_pf.push_back(it - uniq_pfe.begin());
+    }
+
+    func_indices[nb_func-1] = ind;
+    is_valid = false;
+  }
+  
+  /* create an interpolation_context array based on
+     c0, for each fem of the Xfem. */
+  void Xfem::get_fem_interpolation_context_tab(const 
fem_interpolation_context& c0,
+                                              
std::vector<fem_interpolation_context>& vc) const {
+    vc.resize(uniq_pfe.size());
+    for (size_type k=0; k < uniq_pfe.size(); ++k) {
+      vc[k] = c0; 
+      if (c0.have_pfp()) {
+       vc[k].set_pfp(fem_precomp(uniq_pfe[k], c0.pfp()->get_ppoint_tab(),
+                                 c0.pfp()));
+      } else { vc[k].set_pf(uniq_pfe[k]); }
+    }
+  }
+  
+  void Xfem::base_value(const base_node &, base_tensor &) const
+  { GMM_ASSERT1(false, "No base values, real only element.");  }
+  void Xfem::grad_base_value(const base_node &, base_tensor &) const
+  { GMM_ASSERT1(false, "No base values, real only element.");  }
+  void Xfem::hess_base_value(const base_node &, base_tensor &) const
+  { GMM_ASSERT1(false, "No base values, real only element.");  }
+
+  void Xfem::real_base_value(const fem_interpolation_context &c,
+                            base_tensor &t, bool) const {
+    bgeot::multi_index mi(2);
+    mi[1] = target_dim(); mi[0] = short_type(nb_base(0));
+    t.adjust_sizes(mi);
+    scalar_type a;
+    Xfem_func_context ctx(c);
+    base_tensor::iterator it = t.begin();
+    fem_interpolation_context c0 = c;
+    base_tensor tt; 
+    if (pfb) {
+      if (c0.have_pfp())
+       c0.set_pfp(fem_precomp(pfb, c0.pfp()->get_ppoint_tab(), c0.pfp()));
+      else  c0.set_pf(pfb); 
+      c0.base_value(tt);
+    }
+    base_tensor::const_iterator itf = tt.begin();
+    std::vector<fem_interpolation_context> vc; 
get_fem_interpolation_context_tab(c, vc);
+    for (dim_type q = 0; q < target_dim(); ++q) {
+      for (size_type i = 0; i < (pfb ? pfb->nb_base(0) : 0); ++i, ++itf, ++it)
+          *it = *itf;
+      for (size_type k = 0; k < nb_func; ++k) {
+       base_tensor val_e; vc[func_pf[k]].base_value(val_e);
+       ctx.pf = pfe(k);
+       for (size_type i = 0; i < pfe(k)->nb_base(0); ++i, ++it) {
+         ctx.base_num = i; a = funcs[k]->val(ctx);
+         *it = val_e[i + q*pfe(k)->nb_base(0)] * a;
+       }
+      }
+    }
+  }
+
+  void Xfem::real_grad_base_value(const fem_interpolation_context &c,
+                                 base_tensor &t, bool) const {
+    bgeot::multi_index mi(3);
+    mi[2] = short_type(c.N()); mi[1] = target_dim();
+    mi[0] = short_type(nb_base(0));
+    t.adjust_sizes(mi);
+    
+    Xfem_func_context ctx(c);
+    fem_interpolation_context c0 = c;
+    base_tensor tt; 
+    if (pfb) {
+      if (c0.have_pfp())
+       c0.set_pfp(fem_precomp(pfb, c0.pfp()->get_ppoint_tab(), c0.pfp()));
+      else  c0.set_pf(pfb); 
+      c0.grad_base_value(tt);
+    }
+
+    base_tensor::iterator it = t.begin();
+    base_tensor::const_iterator itvf = tt.begin();
+    std::vector<fem_interpolation_context> vc; 
get_fem_interpolation_context_tab(c, vc);
+    std::vector<base_tensor> val_e(nb_func);
+    std::vector<base_tensor> grad_e(nb_func);
+    for (size_type i=0; i < uniq_pfe.size(); ++i) {
+      vc[i].base_value(val_e[i]); vc[i].grad_base_value(grad_e[i]);
+    }
+    std::vector<std::vector<scalar_type> > vf(nb_func);
+    std::vector<std::vector<base_small_vector> > gvf(nb_func);
+    for (size_type f = 0; f < nb_func; ++f) {
+      vf[f].resize(pfe(f)->nb_base(0));
+      gvf[f].resize(pfe(f)->nb_base(0));
+      ctx.pf = pfe(f);
+      for (ctx.base_num=0; ctx.base_num < pfe(f)->nb_base(0); ++ctx.base_num) {
+       vf[f][ctx.base_num] = funcs[f]->val(ctx); 
+       gvf[f][ctx.base_num] = funcs[f]->grad(ctx); 
+      }
+    }
+
+    //    cerr << "pfp->val(ii)={"; 
+    //    for (size_type i=0; i < pfp->val(ii).size(); ++i) cerr << 
pfp->val(ii)[i] << " "; cerr << "}\n";
+    
+    for (dim_type k = 0; k < c.N() ; ++k) {
+      for (dim_type q = 0; q < target_dim(); ++q) {
+       for (size_type i = 0; i < (pfb ? pfb->nb_base(0) : 0); ++i, ++it)
+           *it = *itvf++;
+       for (size_type f = 0; f < nb_func; ++f) {
+          size_type posg = pfe(f)->nb_base(0)*(q + k*target_dim());
+          size_type posv = pfe(f)->nb_base(0)*q;
+         for (size_type i = 0; i < pfe(f)->nb_base(0); ++i, ++it) {
+           *it = grad_e[func_pf[f]][i + posg] * vf[f][i];
+           *it += gvf[f][i][k] * (val_e[func_pf[f]])[i + posv];
+         }
+       }
+      }
+    }
+  }
+  
+  void Xfem::real_hess_base_value(const fem_interpolation_context &,
+                                 base_tensor &, bool) const
+  { GMM_ASSERT1(false, "Sorry order 2 derivatives for Xfem to be done."); }
+
+  void Xfem::init(pfem pf) {
+    cvr = pf->ref_convex(0);
+    dim_ = cvr->structure()->dim();
+    is_equiv = real_element_defined = true;
+    is_polycomp = is_pol = is_lag = false;
+    es_degree = 5; /* humm ... */
+    ntarget_dim = pf->target_dim();
+  }
+  
+  Xfem::Xfem(pfem pf) : pfb(pf), is_valid(false), nb_func(0) {
+    if (pf) init(pfb);
+  }
+
+}  /* end of namespace getfem.                                            */
diff --git a/contrib/3D_Crack/getfem_Xfem.h b/contrib/3D_Crack/getfem_Xfem.h
new file mode 100644
index 0000000..da17ec3
--- /dev/null
+++ b/contrib/3D_Crack/getfem_Xfem.h
@@ -0,0 +1,127 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2003-2017 Yves Renard
+
+ This file is a part of GetFEM++
+
+ GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/**@file getfem_Xfem.h
+   @author  Yves Renard <address@hidden>
+   @date April 8, 2003.
+   @brief eXtended Finite Element Method.
+
+   what is an Xfem ?
+
+   It is a "base" fem (for example PK(2,2)), with additional base
+   functions.
+   These additionnal base functions are the product of:
+   - a global function (the virtual_Xfem_func)
+   - base functions of another fem (for example PK(2,1))
+
+   The Xfem is built using the add_func member function, which takes
+   as parameters, a global function and a fem.
+
+   example of use: enrichment of the finite elements space with
+   particular functions, which may represent discontinuities of the
+   field in some elements, or singularities in the field (crack tip
+   functions..)
+*/
+
+#include "getfem/getfem_fem.h"
+#include "getfem/getfem_mesh_fem.h"
+/* Works only for tau-equivalent elements                                  */
+
+namespace getfem
+{
+  struct Xfem_func_context {
+    base_node xreal, xref;
+    pfem pf;
+    bgeot::pgeometric_trans pgt;
+    size_type base_num; /* number of the current base function of pf */
+    const base_matrix& G;
+    Xfem_func_context(const fem_interpolation_context &c) :
+      xreal(c.xreal()), xref(c.xref()), pgt(c.pgt()), G(c.G()) {}
+  };
+
+  // Object representing global functions. To be derived.
+
+  struct virtual_Xfem_func {
+    /*
+    */
+    virtual scalar_type val(const Xfem_func_context&)
+    { GMM_ASSERT1(false, "this Xfem_func has no value"); }
+    virtual base_small_vector grad(const Xfem_func_context&)
+    { GMM_ASSERT1(false, "this Xfem_func has no gradient"); }  
+    virtual base_matrix hess(const Xfem_func_context&)
+    { GMM_ASSERT1(false, "this Xfem_func has no hessian"); }
+    virtual ~virtual_Xfem_func() {}
+  };
+  typedef virtual_Xfem_func *pXfem_func;
+  
+  // Xfem definition
+  
+  class Xfem : public virtual_fem {
+  
+  protected:
+    pfem pfb; // base fem
+    std::vector<pfem> uniq_pfe; 
+    std::vector<size_type> func_pf; // nb_func fems which are enriched 
(indexes in the array uniq_pfe)
+    bool is_valid;
+    size_type nb_func;
+    std::vector<pXfem_func> funcs; // List of functions to be added
+    std::vector<size_type> func_indices;
+
+    void get_fem_interpolation_context_tab(
+                const fem_interpolation_context& c0,
+                std::vector<fem_interpolation_context>& vc) const;
+    pfem pfe(size_type k) const { return uniq_pfe[func_pf[k]]; }
+  public:
+
+    void valid(void);
+
+    virtual size_type nb_dof(size_type) const;
+
+    /* ind should be > 0 */
+    void add_func(pfem pf, pXfem_func pXf,
+                 size_type ind = size_type(-1));
+    
+    void base_value(const base_node &x, base_tensor &t) const;
+    void grad_base_value(const base_node &x, base_tensor &t) const;
+    void hess_base_value(const base_node &x, base_tensor &t) const;
+
+    void real_base_value(const fem_interpolation_context& c, 
+                        base_tensor &t, bool = true) const;    
+    void real_grad_base_value(const fem_interpolation_context& c, 
+                             base_tensor &t, bool = true) const;
+    void real_hess_base_value(const fem_interpolation_context& c, 
+                             base_tensor &t, bool = true) const;
+    void init(pfem pf);
+    Xfem(pfem pf);
+  };
+
+
+}  /* end of namespace getfem.                                            */
diff --git a/contrib/3D_Crack/getfem_spider_fem.h 
b/contrib/3D_Crack/getfem_spider_fem.h
new file mode 100644
index 0000000..797c839
--- /dev/null
+++ b/contrib/3D_Crack/getfem_spider_fem.h
@@ -0,0 +1,255 @@
+/* -*- c++ -*- (enables emacs c++ mode) */
+/*===========================================================================
+
+ Copyright (C) 2004-2017 Yves Renard
+
+ This file is a part of GetFEM++
+
+ GetFEM++  is  free software;  you  can  redistribute  it  and/or modify it
+ under  the  terms  of the  GNU  Lesser General Public License as published
+ by  the  Free Software Foundation;  either version 3 of the License,  or
+ (at your option) any later version along with the GCC Runtime Library
+ Exception either version 3.1 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 Lesser General Public
+ License and GCC Runtime Library Exception for more details.
+ You  should  have received a copy of the GNU Lesser General Public License
+ along  with  this program;  if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ As a special exception, you  may use  this file  as it is a part of a free
+ software  library  without  restriction.  Specifically,  if   other  files
+ instantiate  templates  or  use macros or inline functions from this file,
+ or  you compile this  file  and  link  it  with other files  to produce an
+ executable, this file  does  not  by itself cause the resulting executable
+ to be covered  by the GNU Lesser General Public License.  This   exception
+ does not  however  invalidate  any  other  reasons why the executable file
+ might be covered by the GNU Lesser General Public License.
+
+===========================================================================*/
+
+/**@file getfem_spider_fem.h
+   @author Yves Renard <address@hidden>
+   @date October 29, 2004.
+   @brief work in progress...
+*/
+
+#ifndef GETFEM_SPIDER_FEM_H__
+#define GETFEM_SPIDER_FEM_H__
+
+#include "getfem/getfem_interpolated_fem.h"
+#include "getfem_Xfem.h"
+#include "getfem/getfem_regular_meshes.h"
+
+namespace getfem {
+  
+  
+  struct Xfem_sqrtr : public virtual_Xfem_func {
+    
+    
+    virtual scalar_type val(const Xfem_func_context &c)
+    { return ::sqrt(c.xreal[0]); }
+    //   { return ::sqrt(c.xreal[0])*cos(log(c.xreal[0])); }
+    virtual base_small_vector grad(const Xfem_func_context &c)
+    { base_small_vector V(2); 
+      V[0] = 1. / (2.* ::sqrt(c.xreal[0])); return V; }
+    // V[0] =  (1./::sqrt(c.xreal[0]))( (cos(log(::sqrt(c.xreal[0])^2)))/2. - 
sin(log(::sqrt(c.xreal[0])^2)) ); return V; }
+    virtual base_matrix hess(const Xfem_func_context &c) {
+      base_matrix m(2,2); 
+      m(0,0) = 1. / (4.* ::sqrt(c.xreal[0])*c.xreal[0]);
+      //m(0,0) = ((1./::sqrt(c.xreal[0]))^(3))( (3. * 
cos(log(::sqrt(c.xreal[0])^2)))/4. - sin(log(::sqrt(c.xreal[0])^2)));
+      return m;
+    }
+  };
+  
+  
+  struct Xfem_sqrtrcos : public virtual_Xfem_func {
+    
+    scalar_type eps;
+    virtual scalar_type val(const Xfem_func_context &c) {
+      return ::sqrt(c.xreal[0]) * cos( eps*log(c.xreal[0]) ); 
+    }
+    
+    virtual base_small_vector grad(const Xfem_func_context &c) {
+      base_small_vector V(2); 
+      V[0] =  ( 1./::sqrt( c.xreal[0]) ) * ( cos( eps*log(c.xreal[0]) )/2. - 
eps*sin( eps*log(c.xreal[0]) ) ); 
+      return V; 
+    }
+    
+    virtual base_matrix hess(const Xfem_func_context &c) {
+      base_matrix m(2,2); 
+      m(0,0) = (1./::pow(sqrt(c.xreal[0]),3.)) * (  ((-1./4.) - ::pow(eps,2.)) 
*  cos( eps*log(c.xreal[0]) ) );
+      return m;
+    }
+  };
+  
+
+  struct Xfem_sqrtrsin : public virtual_Xfem_func {
+    
+    scalar_type eps; 
+    virtual scalar_type val(const Xfem_func_context &c) {
+      return ::sqrt(c.xreal[0]) * sin( eps*log(c.xreal[0]) );  
+    }
+      
+    virtual base_small_vector grad(const Xfem_func_context &c) {
+      base_small_vector V(2); 
+      V[0] =  ( 1./::sqrt(c.xreal[0]) ) * ( sin( eps*log(c.xreal[0]) )/2. + 
eps*cos( eps*log(c.xreal[0]) ) );
+      return V;
+    }
+      
+    virtual base_matrix hess(const Xfem_func_context &c) {
+      base_matrix m(2,2); 
+      m(0,0) = (1./::pow(sqrt(c.xreal[0]),3.)) * (  ((-1./4.) - ::pow(eps,2.)) 
*  sin( eps*log(c.xreal[0]) ) );
+      return m;
+    }
+  };
+
+
+  
+  /*
+    struct Xfem_sqrtr : public virtual_Xfem_func {
+    virtual scalar_type val(const Xfem_func_context &c)
+    { return 1; }
+    virtual base_small_vector grad(const Xfem_func_context &c)
+    { base_small_vector V(2); return V; }
+    virtual base_matrix hess(const Xfem_func_context &c) {
+    base_matrix m(2,2); return m;
+    }
+    };
+  */
+  
+  struct interpolated_transformation : public virtual_interpolated_func{
+    /* Polar transformation and its gradient. */
+    base_small_vector trans;
+    scalar_type theta0;
+    
+    virtual void val(const base_node &xreal, base_node &v) const {
+      base_node w =  xreal - trans;
+      v[0] = gmm::vect_norm2(w);
+      v[1] = atan2(w[1], w[0]) - theta0;
+    }
+    virtual void grad(const base_small_vector &xreal, base_matrix &m) const {
+      base_node w =  xreal - trans;
+      scalar_type r = gmm::vect_norm2(w); assert(gmm::abs(r)>1e-30);
+      m(0,0) = w[0] / r; m(0,1) = w[1] / r;
+      m(1,0) = -w[1] / gmm::sqr(r); m(1,1) = w[0] / gmm::sqr(r);
+    }
+    virtual void hess(const base_node &, base_matrix &) const
+    { GMM_ASSERT1(false, "this interpolated_func has no hessian"); }
+    
+    
+    virtual ~interpolated_transformation() {}
+  };
+
+  DAL_SIMPLE_KEY(special_cartesianfem_key, pfem);
+
+  class spider_fem {
+    
+  protected :
+    
+    mesh cartesian;
+    mesh_fem cartesian_fem;
+    pfem Qk;
+    std::shared_ptr<Xfem> penriched_Qk;
+    scalar_type R;
+    unsigned Nr, Ntheta, K;
+    Xfem_sqrtr Sqrtr;
+    Xfem_sqrtrcos Sqrtrcos;
+    Xfem_sqrtrsin Sqrtrsin;
+    int bimat_enrichment;
+    scalar_type epsilon;
+    pfem final_fem;
+    interpolated_transformation itt;
+
+  public :
+    
+    pfem get_pfem(void) { return final_fem; }
+    
+    ~spider_fem () {
+      pfem pf(penriched_Qk);
+      dal::del_stored_object(pf);
+      if (final_fem) del_interpolated_fem(final_fem);
+    }
+    spider_fem(scalar_type R_, mesh_im &mim, unsigned Nr_, unsigned Ntheta_,
+              unsigned K_, base_small_vector translation, scalar_type theta0,
+              int bimat_enrichment_ = 0, scalar_type epsilon_ = scalar_type(0))
+        : cartesian_fem(cartesian), R(R_), Nr(Nr_),
+         Ntheta(Ntheta_), K(K_), bimat_enrichment(bimat_enrichment_), 
epsilon(epsilon_), final_fem(0) {
+        
+       itt.trans = translation;
+       itt.theta0 = theta0;
+
+        /* make the cartesian mesh */
+        bgeot::pgeometric_trans pgt = 
+         bgeot::geometric_trans_descriptor("GT_LINEAR_QK(2)");
+        std::vector<size_type> nsubdiv(2);
+       nsubdiv[0] = Nr; nsubdiv[1] = Ntheta;
+        getfem::regular_unit_mesh(cartesian, nsubdiv, pgt, false);
+       bgeot::base_matrix M(2,2);
+       M(0,0) = R;   
+       M(1,1) = 2. *  M_PI;
+       cartesian.transformation(M);
+       bgeot::base_small_vector V(2);
+       V[1] = -M_PI;
+       cartesian.translation(V); 
+
+       getfem::mesh_region border_faces;
+       getfem::outer_faces_of_mesh(cartesian, border_faces);
+       for (getfem::mr_visitor it(border_faces); !it.finished(); ++it) {
+         base_node un = cartesian.normal_of_face_of_convex(it.cv(), it.f());
+         un /= gmm::vect_norm2(un);
+         if (un[0] >= 0.8) cartesian.region(0).add(it.cv(), it.f());
+       }
+
+       std::stringstream Qkname;
+       Qkname << "FEM_QK(2," << K << ")";
+       Qk = fem_descriptor(Qkname.str());
+       penriched_Qk = std::make_shared<Xfem>(pfem());
+       if(bimat_enrichment == 0){
+         cout << "Using SpiderFem homogenuous isotropic enrichment 
[sqrt(r)]..." << endl;
+         penriched_Qk->add_func(Qk, &Sqrtr);
+       }
+       else {
+         cout << "Using SpiderFem bimaterial enrichement..." << endl;
+         Sqrtrcos.eps = epsilon;
+         Sqrtrsin.eps = epsilon;
+         //cout << "epsilon = " << epsilon << endl;
+         penriched_Qk->add_func(Qk, &Sqrtrcos);
+         penriched_Qk->add_func(Qk, &Sqrtrsin);
+       }
+       penriched_Qk->valid();
+       pfem pf(penriched_Qk);
+       dal::pstatic_stored_object_key
+         pk = std::make_shared<special_cartesianfem_key>(pf);
+       dal::add_stored_object(pk, pf, pf->ref_convex(0), pf->node_tab(0));
+
+       cartesian_fem.set_finite_element(cartesian.convex_index(), pf);  
+       GMM_ASSERT1(!cartesian_fem.is_reduced(), "To be adapted");
+       dal::bit_vector blocked_dof = cartesian_fem.basic_dof_on_region(0);
+       //      cout << "blocked dofs = " <<  blocked_dof << endl;
+
+       final_fem = new_interpolated_fem(cartesian_fem, mim,&itt,blocked_dof, 
false);
+      }
+    void check() {
+      const interpolated_fem &ife = dynamic_cast<const 
interpolated_fem&>(*final_fem);
+      dal::bit_vector bv = ife.interpolated_convexes();
+      cerr << "interpolated_convexes: nb=" << bv.card() << "; " << bv << "\n";
+      unsigned ming, maxg;
+      scalar_type meang;
+      ife.gauss_pts_stats(ming,maxg,meang);
+      cerr << " gauss pts in interpolated mesh_fem convexes: min=" << ming << 
", max=" << maxg << ", meang=" << meang << "\n";
+      if (bv.card() != cartesian.convex_index().card()) {
+       cerr << cartesian.convex_index().card() - bv.card() << 
+         "convexes missed by interpolated_fem, increase the "
+         "number of integration points";
+       GMM_ASSERT3(false, "");
+      }
+    }
+  };
+
+
+
+}  /* end of namespace getfem.                                            */
+
+#endif
diff --git a/contrib/3D_Crack/untitled.geo b/contrib/3D_Crack/untitled.geo
new file mode 100644
index 0000000..a3a6f26
--- /dev/null
+++ b/contrib/3D_Crack/untitled.geo
@@ -0,0 +1,9 @@
+//+
+SetFactory("OpenCASCADE");
+Box(1) = {-0.5, -0.5, 0, 1, 1, 1};
+//+
+Box(2) = {-0.5, -0.5, 0, 1, 1, 1};
+//+
+Box(3) = {0.6, -0.5, 0, 1, 1, 1};
+//+
+Compound Volume(4) = {3};
diff --git a/getfem.config b/getfem.config
new file mode 100644
index 0000000..e0284f4
--- /dev/null
+++ b/getfem.config
@@ -0,0 +1,2 @@
+// Add predefined macros for your project here. For example:
+// #define THE_ANSWER 42
diff --git a/getfem.creator b/getfem.creator
new file mode 100644
index 0000000..e94cbbd
--- /dev/null
+++ b/getfem.creator
@@ -0,0 +1 @@
+[General]
diff --git a/getfem.files b/getfem.files
new file mode 100644
index 0000000..95b9db9
--- /dev/null
+++ b/getfem.files
@@ -0,0 +1,1877 @@
+AUTHORS
+COPYING
+ChangeLog
+GNU_FDL_V3
+GNU_GCC_RUNTIME_EXCEPTION
+GNU_GPL_V3
+GNU_LGPL_V3
+INSTALL
+NEWS
+README
+autogen.sh
+bin/ansys2getfem_mesh
+bin/createmp
+bin/dr2dgnuplot
+bin/extract_doc
+bin/fig2eps
+bin/file_dependencies
+bin/makeheadfile
+bin/mesh_matlab_to_getfem
+bin/rst_to_xml.py
+bin/sc2dgnuplot
+bin/split_cmdref
+bin/test_dist
+bin/upload_documentation
+bin/upload_html
+bin/upload_misc
+bin/upload_version
+bin/word_count
+configure.ac
+contrib/aposteriori/aposteriori.cc
+contrib/aposteriori/aposteriori.m
+contrib/aposteriori/aposteriori.param
+contrib/aposteriori/aposteriori.pl
+contrib/aposteriori/aposteriori_laplacian.cc
+contrib/aposteriori/aposteriori_laplacian.param
+contrib/aposteriori/aposteriori_laplacian.pl
+contrib/aposteriori/bimaterial_crack_test.param
+contrib/bimaterial_crack_test/bimaterial_crack_test.cc
+contrib/bimaterial_crack_test/bimaterial_crack_test.param
+contrib/bimaterial_crack_test/bimaterial_crack_test.pl
+contrib/bimaterial_crack_test/crack.cc
+contrib/bimaterial_crack_test/crack.param
+contrib/bimaterial_crack_test/crack.pl
+contrib/bimaterial_crack_test/crack_exact_solution.cc
+contrib/bimaterial_crack_test/crack_exact_solution.h
+contrib/bimaterial_crack_test/getfem_Xfem.cc
+contrib/bimaterial_crack_test/getfem_Xfem.h
+contrib/bimaterial_crack_test/getfem_spider_fem.h
+contrib/crack_plate/crack_bilaplacian.cc
+contrib/crack_plate/crack_bilaplacian.h
+contrib/crack_plate/crack_bilaplacian.param
+contrib/crack_plate/crack_bilaplacian_mixed.param
+contrib/crack_plate/crack_bilaplacian_moment.cc
+contrib/crack_plate/crack_bilaplacian_problem.cc
+contrib/crack_plate/crack_bilaplacian_sif.cc
+contrib/crack_plate/crack_bilaplacian_singularities.cc
+contrib/crack_plate/crack_bilaplacian_tools.cc
+contrib/crack_plate/crack_mindlin.cc
+contrib/crack_plate/crack_mindlin.param
+contrib/crack_plate/crack_mindlin.pl
+contrib/crack_plate/crack_panel.cc
+contrib/crack_plate/crack_panel.param
+contrib/crack_plate/demi_plaque.mesh
+contrib/crack_plate/serie.pl
+contrib/delaminated_crack/delaminated_crack.cc
+contrib/delaminated_crack/delaminated_crack.param
+contrib/delaminated_crack/delaminated_crack.pl
+contrib/icare/icare.cc
+contrib/icare/icare.h
+contrib/icare/icare.param
+contrib/icare/icare.pl
+contrib/icare/icareplot.m
+contrib/icare/navier_stokes.net
+contrib/icare/navier_stokes_cylinder1.mesh
+contrib/icare/navier_stokes_cylinder2.mesh
+contrib/icare/tralala_3D.geo
+contrib/icare/tralala_3D.msh
+contrib/icare/triangular.msh
+contrib/level_set_contact/contact_2D.param
+contrib/level_set_contact/contact_3D.param
+contrib/level_set_contact/contact_problem.cpp
+contrib/level_set_contact/contact_problem.h
+contrib/level_set_contact/contact_problem.pl
+contrib/level_set_contact/test_contact.cpp
+contrib/mixed_elastostatic/mixed_elastostatic.cc
+contrib/mixed_elastostatic/mixed_elastostatic.param
+contrib/mixed_elastostatic/mixed_elastostatic.pl
+contrib/opt_assembly/opt_assembly.cc
+contrib/opt_assembly/opt_assembly.pl
+contrib/static_contact_gears/gear1.msh
+contrib/static_contact_gears/gear1_2D.msh
+contrib/static_contact_gears/gear1_2teeth.msh
+contrib/static_contact_gears/gear2.msh
+contrib/static_contact_gears/gear2_2D.msh
+contrib/static_contact_gears/gear2_2teeth.msh
+contrib/static_contact_gears/static_contact_gears.cc
+contrib/static_contact_gears/static_contact_gears.param
+contrib/static_contact_gears/static_contact_gears.pl
+contrib/static_contact_gears/static_contact_gears_2D.param
+contrib/static_contact_gears/static_contact_gears_2teeth.param
+contrib/static_contact_gears/static_contact_gears_u1_u2.cc
+contrib/static_contact_gears/static_contact_planetary.py
+contrib/static_contact_gears/static_contact_planetary_1.msh
+contrib/static_contact_gears/static_contact_planetary_2.msh
+contrib/static_contact_gears/static_contact_planetary_3.msh
+contrib/static_contact_gears/static_contact_planetary_4.msh
+contrib/static_contact_gears/static_contact_planetary_5.msh
+contrib/test_plasticity/conv_test_small_strain_plasticity.py
+contrib/test_plasticity/test_plasticity.py
+contrib/test_plasticity/test_small_strain_plasticity.m
+contrib/test_plasticity/test_small_strain_plasticity.py
+contrib/tests_newton/punch2D_h1.mesh
+contrib/tests_newton/punch2D_h4.mesh
+contrib/tests_newton/static_contact_1.m
+contrib/tests_newton/static_contact_2.m
+contrib/tests_newton/static_contact_3.m
+contrib/xfem_contact/plot_xfem_dirichlet.m
+contrib/xfem_contact/xfem_contact.cc
+contrib/xfem_contact/xfem_contact.param
+contrib/xfem_contact/xfem_contact.pl
+contrib/xfem_contact/xfem_dirichlet.cc
+contrib/xfem_contact/xfem_dirichlet.param
+contrib/xfem_contact/xfem_stokes.cc
+contrib/xfem_contact/xfem_stokes.param
+contrib/xfem_stab_unilat_contact/deformer.m
+contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.cc
+contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.m
+contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.param
+contrib/xfem_stab_unilat_contact/xfem_stab_unilat_contact.pl
+cubature/CUBE4D_5.IM
+cubature/CUBE4D_9.IM
+cubature/GAUSSLOBATTO1D1.IM
+cubature/GAUSSLOBATTO1D11.IM
+cubature/GAUSSLOBATTO1D13.IM
+cubature/GAUSSLOBATTO1D15.IM
+cubature/GAUSSLOBATTO1D17.IM
+cubature/GAUSSLOBATTO1D19.IM
+cubature/GAUSSLOBATTO1D21.IM
+cubature/GAUSSLOBATTO1D23.IM
+cubature/GAUSSLOBATTO1D25.IM
+cubature/GAUSSLOBATTO1D27.IM
+cubature/GAUSSLOBATTO1D29.IM
+cubature/GAUSSLOBATTO1D3.IM
+cubature/GAUSSLOBATTO1D31.IM
+cubature/GAUSSLOBATTO1D33.IM
+cubature/GAUSSLOBATTO1D35.IM
+cubature/GAUSSLOBATTO1D37.IM
+cubature/GAUSSLOBATTO1D39.IM
+cubature/GAUSSLOBATTO1D41.IM
+cubature/GAUSSLOBATTO1D43.IM
+cubature/GAUSSLOBATTO1D45.IM
+cubature/GAUSSLOBATTO1D47.IM
+cubature/GAUSSLOBATTO1D49.IM
+cubature/GAUSSLOBATTO1D5.IM
+cubature/GAUSSLOBATTO1D51.IM
+cubature/GAUSSLOBATTO1D53.IM
+cubature/GAUSSLOBATTO1D55.IM
+cubature/GAUSSLOBATTO1D57.IM
+cubature/GAUSSLOBATTO1D59.IM
+cubature/GAUSSLOBATTO1D61.IM
+cubature/GAUSSLOBATTO1D63.IM
+cubature/GAUSSLOBATTO1D65.IM
+cubature/GAUSSLOBATTO1D67.IM
+cubature/GAUSSLOBATTO1D69.IM
+cubature/GAUSSLOBATTO1D7.IM
+cubature/GAUSSLOBATTO1D71.IM
+cubature/GAUSSLOBATTO1D73.IM
+cubature/GAUSSLOBATTO1D75.IM
+cubature/GAUSSLOBATTO1D77.IM
+cubature/GAUSSLOBATTO1D79.IM
+cubature/GAUSSLOBATTO1D81.IM
+cubature/GAUSSLOBATTO1D83.IM
+cubature/GAUSSLOBATTO1D85.IM
+cubature/GAUSSLOBATTO1D87.IM
+cubature/GAUSSLOBATTO1D89.IM
+cubature/GAUSSLOBATTO1D9.IM
+cubature/GAUSSLOBATTO1D91.IM
+cubature/GAUSSLOBATTO1D93.IM
+cubature/GAUSSLOBATTO1D95.IM
+cubature/GAUSSLOBATTO1D97.IM
+cubature/GAUSSLOBATTO1D99.IM
+cubature/Gauss1D1.IM
+cubature/Gauss1D11.IM
+cubature/Gauss1D13.IM
+cubature/Gauss1D15.IM
+cubature/Gauss1D17.IM
+cubature/Gauss1D19.IM
+cubature/Gauss1D21.IM
+cubature/Gauss1D23.IM
+cubature/Gauss1D25.IM
+cubature/Gauss1D27.IM
+cubature/Gauss1D29.IM
+cubature/Gauss1D3.IM
+cubature/Gauss1D31.IM
+cubature/Gauss1D33.IM
+cubature/Gauss1D35.IM
+cubature/Gauss1D37.IM
+cubature/Gauss1D39.IM
+cubature/Gauss1D41.IM
+cubature/Gauss1D43.IM
+cubature/Gauss1D45.IM
+cubature/Gauss1D47.IM
+cubature/Gauss1D49.IM
+cubature/Gauss1D5.IM
+cubature/Gauss1D51.IM
+cubature/Gauss1D53.IM
+cubature/Gauss1D55.IM
+cubature/Gauss1D57.IM
+cubature/Gauss1D59.IM
+cubature/Gauss1D61.IM
+cubature/Gauss1D63.IM
+cubature/Gauss1D65.IM
+cubature/Gauss1D67.IM
+cubature/Gauss1D69.IM
+cubature/Gauss1D7.IM
+cubature/Gauss1D71.IM
+cubature/Gauss1D73.IM
+cubature/Gauss1D75.IM
+cubature/Gauss1D77.IM
+cubature/Gauss1D79.IM
+cubature/Gauss1D81.IM
+cubature/Gauss1D83.IM
+cubature/Gauss1D85.IM
+cubature/Gauss1D87.IM
+cubature/Gauss1D89.IM
+cubature/Gauss1D9.IM
+cubature/Gauss1D91.IM
+cubature/Gauss1D93.IM
+cubature/Gauss1D95.IM
+cubature/Gauss1D97.IM
+cubature/Gauss1D99.IM
+cubature/HEXAHEDRON_11.IM
+cubature/HEXAHEDRON_5.IM
+cubature/HEXAHEDRON_9.IM
+cubature/NC_0_0.IM
+cubature/QUAD_17.IM
+cubature/QUAD_2.IM
+cubature/QUAD_3.IM
+cubature/QUAD_5.IM
+cubature/QUAD_7.IM
+cubature/QUAD_9.IM
+cubature/SIMPLEX4D_3.IM
+cubature/TETRA_1.IM
+cubature/TETRA_2.IM
+cubature/TETRA_3.IM
+cubature/TETRA_5.IM
+cubature/TETRA_6.IM
+cubature/TETRA_8.IM
+cubature/TRIANGLE_1.IM
+cubature/TRIANGLE_10.IM
+cubature/TRIANGLE_13.IM
+cubature/TRIANGLE_17.IM
+cubature/TRIANGLE_19.IM
+cubature/TRIANGLE_2.IM
+cubature/TRIANGLE_3.IM
+cubature/TRIANGLE_4.IM
+cubature/TRIANGLE_5.IM
+cubature/TRIANGLE_6.IM
+cubature/TRIANGLE_7.IM
+cubature/TRIANGLE_8.IM
+cubature/TRIANGLE_9.IM
+cubature/getFemIntGLetGLL.mws
+cubature/make_getfem_im_list
+doc/doxygen/Doxyfile
+doc/license.tex
+doc/sphinx/patch_tools.diff
+doc/sphinx/source/ACKS.txt
+doc/sphinx/source/about.rst
+doc/sphinx/source/biblio.bib
+doc/sphinx/source/biblio.rst
+doc/sphinx/source/bugs.rst
+doc/sphinx/source/conf.py
+doc/sphinx/source/contents.rst
+doc/sphinx/source/copyright.rst
+doc/sphinx/source/documenting/fromlatex.rst
+doc/sphinx/source/documenting/index.rst
+doc/sphinx/source/documenting/markup.rst
+doc/sphinx/source/documenting/rest.rst
+doc/sphinx/source/documenting/style.rst
+doc/sphinx/source/glossary.rst
+doc/sphinx/source/gmm/blas.rst
+doc/sphinx/source/gmm/blas_interface.rst
+doc/sphinx/source/gmm/catch.rst
+doc/sphinx/source/gmm/denselu.rst
+doc/sphinx/source/gmm/denseqr.rst
+doc/sphinx/source/gmm/export.rst
+doc/sphinx/source/gmm/first-step.rst
+doc/sphinx/source/gmm/images/gmmlogo.png
+doc/sphinx/source/gmm/index.rst
+doc/sphinx/source/gmm/inside.rst
+doc/sphinx/source/gmm/install.rst
+doc/sphinx/source/gmm/intro.rst
+doc/sphinx/source/gmm/iter.rst
+doc/sphinx/source/gmm/matrix.rst
+doc/sphinx/source/gmm/misc.rst
+doc/sphinx/source/gmm/noverif.rst
+doc/sphinx/source/gmm/qd.rst
+doc/sphinx/source/gmm/sub-matrix.rst
+doc/sphinx/source/gmm/superlu.rst
+doc/sphinx/source/gmm/triangular.rst
+doc/sphinx/source/install/install_linux.rst
+doc/sphinx/source/install/install_mac.rst
+doc/sphinx/source/install/install_windows.rst
+doc/sphinx/source/license.rst
+doc/sphinx/source/license.txt
+doc/sphinx/source/links.rst
+doc/sphinx/source/lists.rst
+doc/sphinx/source/matlab/code_samples/demo_laplacian.m
+doc/sphinx/source/matlab/code_samples/demo_step_by_step.m
+doc/sphinx/source/matlab/code_samples/demo_tripod.m
+doc/sphinx/source/matlab/examples.rst
+doc/sphinx/source/matlab/images/hierarchy.fig
+doc/sphinx/source/matlab/images/tripodvonmiseswithmesh.png
+doc/sphinx/source/matlab/index.rst
+doc/sphinx/source/matlab/install.rst
+doc/sphinx/source/matlab/intro.rst
+doc/sphinx/source/matlab/mlabgf.rst
+doc/sphinx/source/matlab/oocmd.rst
+doc/sphinx/source/matlab/plotcmdref.rst
+doc/sphinx/source/matlab/pre.rst
+doc/sphinx/source/project/appendixA.rst
+doc/sphinx/source/project/contribute.rst
+doc/sphinx/source/project/femdesc.rst
+doc/sphinx/source/project/images/diagram.fig
+doc/sphinx/source/project/images/getfem_structure.png
+doc/sphinx/source/project/images/getfem_structure.svg
+doc/sphinx/source/project/images/getfemelemelem.fig
+doc/sphinx/source/project/images/getfemtransgeo.fig
+doc/sphinx/source/project/images/tree_simple_laplace_tan.fig
+doc/sphinx/source/project/index.rst
+doc/sphinx/source/project/intro.rst
+doc/sphinx/source/project/libdesc.rst
+doc/sphinx/source/project/libdesc_cont.rst
+doc/sphinx/source/project/libdesc_dal.rst
+doc/sphinx/source/project/libdesc_event.rst
+doc/sphinx/source/project/libdesc_fem.rst
+doc/sphinx/source/project/libdesc_gmm.rst
+doc/sphinx/source/project/libdesc_high_gen_assemb.rst
+doc/sphinx/source/project/libdesc_im.rst
+doc/sphinx/source/project/libdesc_interface.rst
+doc/sphinx/source/project/libdesc_levelset.rst
+doc/sphinx/source/project/libdesc_low_gen_assemb.rst
+doc/sphinx/source/project/libdesc_mesh.rst
+doc/sphinx/source/project/libdesc_meshfem.rst
+doc/sphinx/source/project/libdesc_mim.rst
+doc/sphinx/source/project/libdesc_misc.rst
+doc/sphinx/source/project/libdesc_model.rst
+doc/sphinx/source/python/code_samples/demo_crack.py
+doc/sphinx/source/python/code_samples/demo_fictitious_domains.py
+doc/sphinx/source/python/code_samples/demo_laplacian.py
+doc/sphinx/source/python/code_samples/demo_step_by_step.py
+doc/sphinx/source/python/code_samples/demo_tripod.py
+doc/sphinx/source/python/code_samples/demo_tripod_alt.py
+doc/sphinx/source/python/code_samples/quad.geo
+doc/sphinx/source/python/code_samples/quad.msh
+doc/sphinx/source/python/code_samples/tripod.GiD.msh
+doc/sphinx/source/python/examples.rst
+doc/sphinx/source/python/howtos.rst
+doc/sphinx/source/python/images/hierarchy.fig
+doc/sphinx/source/python/images/laplacian.png
+doc/sphinx/source/python/images/step_by_step.png
+doc/sphinx/source/python/images/tripod.png
+doc/sphinx/source/python/index.rst
+doc/sphinx/source/python/install.rst
+doc/sphinx/source/python/intro.rst
+doc/sphinx/source/python/license.txt
+doc/sphinx/source/python/pre.rst
+doc/sphinx/source/python/pygf.rst
+doc/sphinx/source/replaces.txt
+doc/sphinx/source/scilab/images/hierarchy.fig
+doc/sphinx/source/scilab/index.rst
+doc/sphinx/source/scilab/install.rst
+doc/sphinx/source/scilab/intro.rst
+doc/sphinx/source/scilab/plotcmdref.rst
+doc/sphinx/source/scilab/scilabgf.rst
+doc/sphinx/source/screenshots/code_samples/demo_stokes_2D_tube.m
+doc/sphinx/source/screenshots/code_samples/demo_tripod.m
+doc/sphinx/source/screenshots/code_samples/demo_wave2D.m
+doc/sphinx/source/screenshots/helmholtz_source.rst
+doc/sphinx/source/screenshots/images/cuve_3D_streamlines_small.png
+doc/sphinx/source/screenshots/images/fissure_3d_de_traviole.png
+doc/sphinx/source/screenshots/images/gear.png
+doc/sphinx/source/screenshots/images/helm_k7_P10_gt6.png
+doc/sphinx/source/screenshots/images/helm_mesh_k7_P10_gt6.png
+doc/sphinx/source/screenshots/images/modestructure_paolo_small.png
+doc/sphinx/source/screenshots/images/pneu_Q2_vonmises_small.png
+doc/sphinx/source/screenshots/images/shape1.png
+doc/sphinx/source/screenshots/images/shape2.png
+doc/sphinx/source/screenshots/images/shape3.png
+doc/sphinx/source/screenshots/images/shape4.png
+doc/sphinx/source/screenshots/images/strangemesh_small.png
+doc/sphinx/source/screenshots/images/strangernd_small.png
+doc/sphinx/source/screenshots/images/torsion034.png
+doc/sphinx/source/screenshots/images/tripodvonmiseswithmesh_small.png
+doc/sphinx/source/screenshots/images/tube_small.png
+doc/sphinx/source/screenshots/images/xfembeam.png
+doc/sphinx/source/screenshots/images/xfembeammesh.png
+doc/sphinx/source/screenshots/shots.rst
+doc/sphinx/source/screenshots/stokes-source.rst
+doc/sphinx/source/screenshots/strange.mesh_fem
+doc/sphinx/source/screenshots/tripod_source.rst
+doc/sphinx/source/tutorial/basic_usage.rst
+doc/sphinx/source/tutorial/images/getfem_structure.png
+doc/sphinx/source/tutorial/images/mesh_thermo.png
+doc/sphinx/source/tutorial/images/solution_thermo.png
+doc/sphinx/source/tutorial/images/wheel.png
+doc/sphinx/source/tutorial/images/wheel_mesh.png
+doc/sphinx/source/tutorial/index.rst
+doc/sphinx/source/tutorial/install.rst
+doc/sphinx/source/tutorial/intro.rst
+doc/sphinx/source/tutorial/thermo_coupling.rst
+doc/sphinx/source/tutorial/wheel.rst
+doc/sphinx/source/userdoc/appendixA.rst
+doc/sphinx/source/userdoc/appendixB.rst
+doc/sphinx/source/userdoc/asm.rst
+doc/sphinx/source/userdoc/bfem.rst
+doc/sphinx/source/userdoc/binteg.rst
+doc/sphinx/source/userdoc/bmesh.rst
+doc/sphinx/source/userdoc/catch.rst
+doc/sphinx/source/userdoc/computeD.rst
+doc/sphinx/source/userdoc/computeL2H1.rst
+doc/sphinx/source/userdoc/convect.rst
+doc/sphinx/source/userdoc/export.rst
+doc/sphinx/source/userdoc/gasm_high.rst
+doc/sphinx/source/userdoc/gasm_low.rst
+doc/sphinx/source/userdoc/ifem.rst
+doc/sphinx/source/userdoc/iinteg.rst
+doc/sphinx/source/userdoc/images/ALE_rotating_body.fig
+doc/sphinx/source/userdoc/images/ALE_rotating_conf.fig
+doc/sphinx/source/userdoc/images/ALE_translation_body.fig
+doc/sphinx/source/userdoc/images/getfemlistHCT.fig
+doc/sphinx/source/userdoc/images/getfemlistRT0.fig
+doc/sphinx/source/userdoc/images/getfemlistargyris.fig
+doc/sphinx/source/userdoc/images/getfemlistcubeQ1.fig
+doc/sphinx/source/userdoc/images/getfemlistcubeQ3.fig
+doc/sphinx/source/userdoc/images/getfemlistincomplete.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodquad2.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodquad3.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodquad5.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtetrahedron1.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtetrahedron2.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtetrahedron3.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtetrahedron5.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle1.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle2.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle2comp.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle3.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle4.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle5.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle6.fig
+doc/sphinx/source/userdoc/images/getfemlistintmethodtriangle7.fig
+doc/sphinx/source/userdoc/images/getfemlistmorley.fig
+doc/sphinx/source/userdoc/images/getfemlistnedelec.fig
+doc/sphinx/source/userdoc/images/getfemlistprismP1.fig
+doc/sphinx/source/userdoc/images/getfemlistprismP2P1.fig
+doc/sphinx/source/userdoc/images/getfemlistprismP3.fig
+doc/sphinx/source/userdoc/images/getfemlistpyramidP0.fig
+doc/sphinx/source/userdoc/images/getfemlistpyramidP1.fig
+doc/sphinx/source/userdoc/images/getfemlistpyramidP2.fig
+doc/sphinx/source/userdoc/images/getfemlistquadQ1.fig
+doc/sphinx/source/userdoc/images/getfemlistquadQ3.fig
+doc/sphinx/source/userdoc/images/getfemlistquadc1composite.fig
+doc/sphinx/source/userdoc/images/getfemlistreducedHCT.fig
+doc/sphinx/source/userdoc/images/getfemlistreducedquadc1composite.fig
+doc/sphinx/source/userdoc/images/getfemlistsegmentPk.fig
+doc/sphinx/source/userdoc/images/getfemlistsegmentbubble.fig
+doc/sphinx/source/userdoc/images/getfemlistsegmenthermite.fig
+doc/sphinx/source/userdoc/images/getfemlistsegmenthier.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols00.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols01.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols02.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols03.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols04.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols05.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols06.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols07.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols08.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols09.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols10.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols11.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols12.fig
+doc/sphinx/source/userdoc/images/getfemlistsymbols13.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronP1.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronP1bubble.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronP1bubbleface.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronP2.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronP2bubble.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronP3bubble.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronP4.fig
+doc/sphinx/source/userdoc/images/getfemlisttetrahedronhermite.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1bubble.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1bubbleface.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1comp.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1comphier.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1linbubble.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1nonconforming.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP1withP2face.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP2.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP2bubble.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP3.fig
+doc/sphinx/source/userdoc/images/getfemlisttriangleP6.fig
+doc/sphinx/source/userdoc/images/getfemlisttrianglehermite.fig
+doc/sphinx/source/userdoc/images/getfemusercorrection.png
+doc/sphinx/source/userdoc/images/getfemuserelem.fig
+doc/sphinx/source/userdoc/images/getfemuserelemf.fig
+doc/sphinx/source/userdoc/images/getfemuserfrictionlaw.png
+doc/sphinx/source/userdoc/images/getfemuserfrictionlaw.svg
+doc/sphinx/source/userdoc/images/getfemuserlimitpoint.png
+doc/sphinx/source/userdoc/images/getfemuserlinearsys.fig
+doc/sphinx/source/userdoc/images/getfemuserlinsysDir.fig
+doc/sphinx/source/userdoc/images/getfemusermodeldetectcontact.fig
+doc/sphinx/source/userdoc/images/getfemusermodelfalsecontact1.fig
+doc/sphinx/source/userdoc/images/getfemusermodelfalsecontact2.fig
+doc/sphinx/source/userdoc/images/getfemusermodelmasterslave.fig
+doc/sphinx/source/userdoc/images/getfemuserrefine.fig
+doc/sphinx/source/userdoc/images/getfemusertransition.png
+doc/sphinx/source/userdoc/index.rst
+doc/sphinx/source/userdoc/install.rst
+doc/sphinx/source/userdoc/interMM.rst
+doc/sphinx/source/userdoc/interNMM.rst
+doc/sphinx/source/userdoc/intro.rst
+doc/sphinx/source/userdoc/linalg.rst
+doc/sphinx/source/userdoc/model.rst
+doc/sphinx/source/userdoc/model_ALE_rotating.rst
+doc/sphinx/source/userdoc/model_Mindlin_plate.rst
+doc/sphinx/source/userdoc/model_Nitsche.rst
+doc/sphinx/source/userdoc/model_bilaplacian.rst
+doc/sphinx/source/userdoc/model_constraint.rst
+doc/sphinx/source/userdoc/model_contact_friction.rst
+doc/sphinx/source/userdoc/model_contact_friction_large_sliding.rst
+doc/sphinx/source/userdoc/model_continuation.rst
+doc/sphinx/source/userdoc/model_dirichlet.rst
+doc/sphinx/source/userdoc/model_explicit.rst
+doc/sphinx/source/userdoc/model_fourier_robin.rst
+doc/sphinx/source/userdoc/model_generic_assembly.rst
+doc/sphinx/source/userdoc/model_generic_elliptic.rst
+doc/sphinx/source/userdoc/model_helmholtz.rst
+doc/sphinx/source/userdoc/model_linear_elasticity.rst
+doc/sphinx/source/userdoc/model_mass.rst
+doc/sphinx/source/userdoc/model_nonlinear_elasticity.rst
+doc/sphinx/source/userdoc/model_object.rst
+doc/sphinx/source/userdoc/model_plasticity_small_strain.rst
+doc/sphinx/source/userdoc/model_poisson.rst
+doc/sphinx/source/userdoc/model_solvers.rst
+doc/sphinx/source/userdoc/model_source_term.rst
+doc/sphinx/source/userdoc/model_time_integration.rst
+doc/sphinx/source/userdoc/parallel.rst
+doc/sphinx/source/userdoc/rmesh.rst
+doc/sphinx/source/userdoc/xfem.rst
+doc/sphinx/source/whatsnew/1.0.rst
+doc/sphinx/source/whatsnew/1.1.rst
+doc/sphinx/source/whatsnew/1.2.rst
+doc/sphinx/source/whatsnew/1.3.rst
+doc/sphinx/source/whatsnew/1.4.rst
+doc/sphinx/source/whatsnew/1.5.rst
+doc/sphinx/source/whatsnew/1.6.rst
+doc/sphinx/source/whatsnew/1.7.rst
+doc/sphinx/source/whatsnew/2.0.1.rst
+doc/sphinx/source/whatsnew/2.0.2.rst
+doc/sphinx/source/whatsnew/2.0.rst
+doc/sphinx/source/whatsnew/3.0.1.rst
+doc/sphinx/source/whatsnew/3.0.rst
+doc/sphinx/source/whatsnew/3.1.rst
+doc/sphinx/source/whatsnew/4.0.rst
+doc/sphinx/source/whatsnew/4.1.1.rst
+doc/sphinx/source/whatsnew/4.1.rst
+doc/sphinx/source/whatsnew/4.2.rst
+doc/sphinx/source/whatsnew/4.3.rst
+doc/sphinx/source/whatsnew/5.0.rst
+doc/sphinx/source/whatsnew/5.1.rst
+doc/sphinx/source/whatsnew/5.2.rst
+doc/sphinx/source/whatsnew/5.3.rst
+doc/sphinx/source/whatsnew/index.rst
+doc/web/doc.php
+doc/web/download.php
+doc/web/footer.inc
+doc/web/getfem_faq.php
+doc/web/getfem_intro.php
+doc/web/getfempython.php
+doc/web/gmm_faq.php
+doc/web/gmm_intro.php
+doc/web/header.inc
+doc/web/index.php
+doc/web/links.php
+doc/web/news.php
+doc/web/roadmap.php
+doc/web/shots.php
+doc/web/support.php
+doc/web/update_website.sh
+extract_gmm++
+getfem-config-notinstalled.in
+getfem-config.in
+gmm-config.in
+interface/README.txt
+interface/gnumex
+interface/src/getfem_interface.cc
+interface/src/getfem_interface.h
+interface/src/getfemint.cc
+interface/src/getfemint.h
+interface/src/getfemint_gsparse.cc
+interface/src/getfemint_gsparse.h
+interface/src/getfemint_levelset.cc
+interface/src/getfemint_levelset.h
+interface/src/getfemint_misc.cc
+interface/src/getfemint_misc.h
+interface/src/getfemint_precond.h
+interface/src/getfemint_std.h
+interface/src/getfemint_workspace.cc
+interface/src/getfemint_workspace.h
+interface/src/gf_asm.cc
+interface/src/gf_compute.cc
+interface/src/gf_cont_struct.cc
+interface/src/gf_cont_struct_get.cc
+interface/src/gf_cvstruct_get.cc
+interface/src/gf_delete.cc
+interface/src/gf_eltm.cc
+interface/src/gf_fem.cc
+interface/src/gf_fem_get.cc
+interface/src/gf_geotrans.cc
+interface/src/gf_geotrans_get.cc
+interface/src/gf_global_function.cc
+interface/src/gf_global_function_get.cc
+interface/src/gf_integ.cc
+interface/src/gf_integ_get.cc
+interface/src/gf_levelset.cc
+interface/src/gf_levelset_get.cc
+interface/src/gf_levelset_set.cc
+interface/src/gf_linsolve.cc
+interface/src/gf_mesh.cc
+interface/src/gf_mesh_fem.cc
+interface/src/gf_mesh_fem_get.cc
+interface/src/gf_mesh_fem_set.cc
+interface/src/gf_mesh_get.cc
+interface/src/gf_mesh_im.cc
+interface/src/gf_mesh_im_data.cc
+interface/src/gf_mesh_im_data_get.cc
+interface/src/gf_mesh_im_data_set.cc
+interface/src/gf_mesh_im_get.cc
+interface/src/gf_mesh_im_set.cc
+interface/src/gf_mesh_levelset.cc
+interface/src/gf_mesh_levelset_get.cc
+interface/src/gf_mesh_levelset_set.cc
+interface/src/gf_mesh_set.cc
+interface/src/gf_mesher_object.cc
+interface/src/gf_mesher_object_get.cc
+interface/src/gf_model.cc
+interface/src/gf_model_get.cc
+interface/src/gf_model_set.cc
+interface/src/gf_poly.cc
+interface/src/gf_precond.cc
+interface/src/gf_precond_get.cc
+interface/src/gf_slice.cc
+interface/src/gf_slice_get.cc
+interface/src/gf_slice_set.cc
+interface/src/gf_spmat.cc
+interface/src/gf_spmat_get.cc
+interface/src/gf_spmat_set.cc
+interface/src/gf_util.cc
+interface/src/gf_workspace.cc
+interface/src/gfi_array.c
+interface/src/gfi_array.h
+interface/src/gfi_rpc.h
+interface/src/gfi_rpc_clnt.c
+interface/src/gfi_rpc_server.c
+interface/src/gfi_rpc_svc.c
+interface/src/gfi_rpc_xdr.c
+interface/src/matlab/gfObject.m
+interface/src/matlab/gf_asm_pdetoolbc.m
+interface/src/matlab/gf_colormap.m
+interface/src/matlab/gf_compute_Q1grid_interp.m
+interface/src/matlab/gf_interpolate_on_grid.m
+interface/src/matlab/gf_mesh_fem_get_eval.m
+interface/src/matlab/gf_plot.m
+interface/src/matlab/gf_plot_1D.m
+interface/src/matlab/gf_plot_mesh.m
+interface/src/matlab/gf_plot_slice.m
+interface/src/matlab/gfm_common.c
+interface/src/matlab/gfm_common.h
+interface/src/matlab/gfm_mex.c
+interface/src/matlab/gfm_rpc.x
+interface/src/matlab/gfm_rpc_mexint.c
+interface/src/matlab/private/getopt.m
+interface/src/python/__init__.py
+interface/src/python/getfem_python.c
+interface/src/python/setup.py.in
+interface/src/scilab/builddoc.sce
+interface/src/scilab/builder.sce
+interface/src/scilab/changelog.txt
+interface/src/scilab/demos/axrot_matrix.sci
+interface/src/scilab/demos/data/disc_2D_degree3.mesh
+interface/src/scilab/demos/data/disc_P2_h0.5.mesh
+interface/src/scilab/demos/data/disc_P2_h0_3.mesh
+interface/src/scilab/demos/data/disc_P2_h0_5.mesh
+interface/src/scilab/demos/data/disc_P2_h1.mesh
+interface/src/scilab/demos/data/disc_P2_h10.mesh
+interface/src/scilab/demos/data/disc_P2_h2.mesh
+interface/src/scilab/demos/data/disc_P2_h4.mesh
+interface/src/scilab/demos/data/disc_P2_h6.mesh
+interface/src/scilab/demos/data/disc_P2_h8.mesh
+interface/src/scilab/demos/data/donut_regulier.mesh
+interface/src/scilab/demos/data/donut_regulier_32_elements.mesh
+interface/src/scilab/demos/data/donut_regulier_512_elements.mesh
+interface/src/scilab/demos/data/donut_regulier_72_elements.mesh
+interface/src/scilab/demos/data/donut_regulier_8_elements_288ddl.mesh
+interface/src/scilab/demos/data/donut_with_quadratic_tetra_1100_elements.msh
+interface/src/scilab/demos/data/holed_disc_with_quadratic_2D_triangles.msh
+interface/src/scilab/demos/data/quad.geo
+interface/src/scilab/demos/data/quad.msh
+interface/src/scilab/demos/data/sphere_with_quadratic_tetra_16000_elts.mesh
+interface/src/scilab/demos/data/sphere_with_quadratic_tetra_2000_elts.mesh
+interface/src/scilab/demos/data/sphere_with_quadratic_tetra_400_elts.mesh
+interface/src/scilab/demos/data/sphere_with_quadratic_tetra_80_elts.mesh
+interface/src/scilab/demos/data/sphere_with_quadratic_tetra_8_elts.mesh
+interface/src/scilab/demos/data/tank_quadratic_2500.GiD.msh
+interface/src/scilab/demos/data/tripod.GiD.msh
+interface/src/scilab/demos/data/tripod.mesh
+interface/src/scilab/demos/data/tube_2D_spline.GiD.msh
+interface/src/scilab/demos/data/vee_h_0.03.mesh
+interface/src/scilab/demos/demo_Navier_Stokes.sce
+interface/src/scilab/demos/demo_bilaplacian.sce
+interface/src/scilab/demos/demo_continuation.sce
+interface/src/scilab/demos/demo_continuation_block.sce
+interface/src/scilab/demos/demo_continuation_vee.sce
+interface/src/scilab/demos/demo_convection_rotating_cavity.sce
+interface/src/scilab/demos/demo_crack.sce
+interface/src/scilab/demos/demo_fictitious_domains.sce
+interface/src/scilab/demos/demo_fictitious_domains_laplacian.sce
+interface/src/scilab/demos/demo_laplacian.sce
+interface/src/scilab/demos/demo_mesh_generation.sce
+interface/src/scilab/demos/demo_mortar.sce
+interface/src/scilab/demos/demo_nonlinear_elasticity.sce
+interface/src/scilab/demos/demo_nonlinear_elasticity_anim.sce
+interface/src/scilab/demos/demo_plasticity.sce
+interface/src/scilab/demos/demo_plate.sce
+interface/src/scilab/demos/demo_refine.sce
+interface/src/scilab/demos/demo_static_contact.sce
+interface/src/scilab/demos/demo_step_by_step.sce
+interface/src/scilab/demos/demo_stokes_3D_tank.sce
+interface/src/scilab/demos/demo_stokes_3D_tank_draw.sce
+interface/src/scilab/demos/demo_structural_optimization.sce
+interface/src/scilab/demos/demo_thermo_elasticity_electrical_coupling.sce
+interface/src/scilab/demos/demo_topological_optimization.sce
+interface/src/scilab/demos/demo_tripod.sce
+interface/src/scilab/demos/demo_tripod_alt.sce
+interface/src/scilab/demos/demo_tripod_anim.sce
+interface/src/scilab/demos/demo_tripod_slice_anim.sce
+interface/src/scilab/demos/demo_wave2D.sce
+interface/src/scilab/demos/demo_wave2D_alt.sce
+interface/src/scilab/demos/demo_wave2D_animate.sce
+interface/src/scilab/demos/demo_wave_equation.sce
+interface/src/scilab/demos/sci_getfem.dem.gateway.sce
+interface/src/scilab/demos/tutorial1.sce
+interface/src/scilab/etc/sci_getfem.quit
+interface/src/scilab/etc/sci_getfem.start
+interface/src/scilab/help/builder_help.sce
+interface/src/scilab/help/en_US/build_help.sce
+interface/src/scilab/help/en_US/examples/CHAPTER
+interface/src/scilab/help/en_US/examples/another_laplacian.xml
+interface/src/scilab/help/en_US/examples/avoiding_bricks.xml
+interface/src/scilab/help/en_US/examples/linear_nonlinear_elast.xml
+interface/src/scilab/help/en_US/examples/step_by_step_example.xml
+interface/src/scilab/help/en_US/getfem_types.xml
+interface/src/scilab/help/en_US/gf_asm.xml
+interface/src/scilab/help/en_US/gf_asm_pdetoolbc.xml
+interface/src/scilab/help/en_US/gf_colormap.xml
+interface/src/scilab/help/en_US/gf_compute.xml
+interface/src/scilab/help/en_US/gf_compute_Q1grid_interp.xml
+interface/src/scilab/help/en_US/gf_cont_struct.xml
+interface/src/scilab/help/en_US/gf_cont_struct_get.xml
+interface/src/scilab/help/en_US/gf_cvstruct_get.xml
+interface/src/scilab/help/en_US/gf_delete.xml
+interface/src/scilab/help/en_US/gf_eltm.xml
+interface/src/scilab/help/en_US/gf_fem.xml
+interface/src/scilab/help/en_US/gf_fem_get.xml
+interface/src/scilab/help/en_US/gf_geotrans.xml
+interface/src/scilab/help/en_US/gf_geotrans_get.xml
+interface/src/scilab/help/en_US/gf_global_function.xml
+interface/src/scilab/help/en_US/gf_global_function_get.xml
+interface/src/scilab/help/en_US/gf_integ.xml
+interface/src/scilab/help/en_US/gf_integ_get.xml
+interface/src/scilab/help/en_US/gf_interpolate_on_grid.xml
+interface/src/scilab/help/en_US/gf_levelset.xml
+interface/src/scilab/help/en_US/gf_levelset_get.xml
+interface/src/scilab/help/en_US/gf_levelset_set.xml
+interface/src/scilab/help/en_US/gf_linsolve.xml
+interface/src/scilab/help/en_US/gf_mesh.xml
+interface/src/scilab/help/en_US/gf_mesh_fem.xml
+interface/src/scilab/help/en_US/gf_mesh_fem_get.xml
+interface/src/scilab/help/en_US/gf_mesh_fem_get_eval.xml
+interface/src/scilab/help/en_US/gf_mesh_fem_set.xml
+interface/src/scilab/help/en_US/gf_mesh_get.xml
+interface/src/scilab/help/en_US/gf_mesh_im.xml
+interface/src/scilab/help/en_US/gf_mesh_im_data.xml
+interface/src/scilab/help/en_US/gf_mesh_im_data_get.xml
+interface/src/scilab/help/en_US/gf_mesh_im_data_set.xml
+interface/src/scilab/help/en_US/gf_mesh_im_get.xml
+interface/src/scilab/help/en_US/gf_mesh_im_set.xml
+interface/src/scilab/help/en_US/gf_mesh_levelset.xml
+interface/src/scilab/help/en_US/gf_mesh_levelset_get.xml
+interface/src/scilab/help/en_US/gf_mesh_levelset_set.xml
+interface/src/scilab/help/en_US/gf_mesh_set.xml
+interface/src/scilab/help/en_US/gf_mesher_object.xml
+interface/src/scilab/help/en_US/gf_mesher_object_get.xml
+interface/src/scilab/help/en_US/gf_model.xml
+interface/src/scilab/help/en_US/gf_model_get.xml
+interface/src/scilab/help/en_US/gf_model_set.xml
+interface/src/scilab/help/en_US/gf_multi_contact_frame.xml
+interface/src/scilab/help/en_US/gf_multi_contact_frame_get.xml
+interface/src/scilab/help/en_US/gf_multi_contact_frame_set.xml
+interface/src/scilab/help/en_US/gf_plot.xml
+interface/src/scilab/help/en_US/gf_plot_1D.xml
+interface/src/scilab/help/en_US/gf_plot_mesh.xml
+interface/src/scilab/help/en_US/gf_plot_slice.xml
+interface/src/scilab/help/en_US/gf_poly.xml
+interface/src/scilab/help/en_US/gf_precond.xml
+interface/src/scilab/help/en_US/gf_precond_get.xml
+interface/src/scilab/help/en_US/gf_slice.xml
+interface/src/scilab/help/en_US/gf_slice_get.xml
+interface/src/scilab/help/en_US/gf_slice_set.xml
+interface/src/scilab/help/en_US/gf_solve.xml
+interface/src/scilab/help/en_US/gf_spmat.xml
+interface/src/scilab/help/en_US/gf_spmat_get.xml
+interface/src/scilab/help/en_US/gf_spmat_set.xml
+interface/src/scilab/help/en_US/gf_typeof.xml
+interface/src/scilab/help/en_US/gf_undelete.xml
+interface/src/scilab/help/en_US/gf_util.xml
+interface/src/scilab/help/en_US/gf_workspace.xml
+interface/src/scilab/help/en_US/objects.xml
+interface/src/scilab/help/en_US/preliminary.xml
+interface/src/scilab/help/en_US/sparses/CHAPTER
+interface/src/scilab/help/en_US/sparses/sp_cgne.xml
+interface/src/scilab/help/en_US/sparses/sp_cgs.xml
+interface/src/scilab/help/en_US/sparses/sp_chol.xml
+interface/src/scilab/help/en_US/sparses/sp_cholinc.xml
+interface/src/scilab/help/en_US/sparses/sp_chsolve.xml
+interface/src/scilab/help/en_US/sparses/sp_gmres.xml
+interface/src/scilab/help/en_US/sparses/sp_lu.xml
+interface/src/scilab/help/en_US/sparses/sp_luinc.xml
+interface/src/scilab/help/en_US/sparses/sp_lusolve.xml
+interface/src/scilab/help/en_US/sparses/sp_mgcr.xml
+interface/src/scilab/help/fig/gf_fem_get_fig_1.png
+interface/src/scilab/help/fig/gf_plot_mesh_fig_1.png
+interface/src/scilab/help/fig/hierarchy.png
+interface/src/scilab/help/fig/tripodvonmiseswithmesh_small.png
+interface/src/scilab/help/fr_FR/build_help.sce
+interface/src/scilab/help/latex/cuve3Dstreamlines.png
+interface/src/scilab/help/latex/cuve3Dstreamlinessmall.png
+interface/src/scilab/help/latex/docstyle.css
+interface/src/scilab/help/latex/donut.png
+interface/src/scilab/help/latex/donut_small.png
+interface/src/scilab/help/latex/fempk51.eps
+interface/src/scilab/help/latex/getfemmatlab.lyx
+interface/src/scilab/help/latex/getfemmatlab.tex
+interface/src/scilab/help/latex/hierarchy.eps
+interface/src/scilab/help/latex/hierarchy.fig
+interface/src/scilab/help/latex/license.lyx
+interface/src/scilab/help/latex/license.tex
+interface/src/scilab/help/latex/logo_getfem_small.png
+interface/src/scilab/help/latex/logogetfem.png
+interface/src/scilab/help/latex/logogetfemwhitebg.png
+interface/src/scilab/help/latex/next.gif
+interface/src/scilab/help/latex/previous.gif
+interface/src/scilab/help/latex/tripodvonmises.png
+interface/src/scilab/help/latex/tripodvonmiseswithmesh.png
+interface/src/scilab/help/latex/tripodvonmiseswithmesh_small.png
+interface/src/scilab/help/latex/underscore.sty
+interface/src/scilab/help/latex/up.gif
+interface/src/scilab/help/mml/avoiding_eq1.mml
+interface/src/scilab/help/mml/gf_asm_eq1.mml
+interface/src/scilab/help/mml/gf_asm_eq2.mml
+interface/src/scilab/help/mml/gf_asm_eq3.mml
+interface/src/scilab/help/mml/gf_asm_eq4.mml
+interface/src/scilab/help/mml/gf_asm_eq5.mml
+interface/src/scilab/help/mml/gf_asm_eq6.mml
+interface/src/scilab/help/mml/gf_model_set_eq1.mml
+interface/src/scilab/help/mml/gf_model_set_eq2.mml
+interface/src/scilab/help/mml/gf_model_set_eq3.mml
+interface/src/scilab/help/mml/gf_model_set_eq4.mml
+interface/src/scilab/help/mml/preliminary_eq1.mml
+interface/src/scilab/help/mml/step_by_step_eq1.mml
+interface/src/scilab/help/mml/step_by_step_eq2.mml
+interface/src/scilab/help/mml/step_by_step_eq3.mml
+interface/src/scilab/help/mml/step_by_step_eq4.mml
+interface/src/scilab/help/mml/step_by_step_eq5.mml
+interface/src/scilab/license.txt
+interface/src/scilab/macros/_setdiff.sci
+interface/src/scilab/macros/add_empty_bound.sci
+interface/src/scilab/macros/assert.sci
+interface/src/scilab/macros/assert_field.sci
+interface/src/scilab/macros/asserterr.sci
+interface/src/scilab/macros/build_options_list.sci
+interface/src/scilab/macros/buildmacros.sce
+interface/src/scilab/macros/cart2pol.sci
+interface/src/scilab/macros/champ3.sci
+interface/src/scilab/macros/cross.sci
+interface/src/scilab/macros/dot.sci
+interface/src/scilab/macros/gf_asm_pdetoolbc.sci
+interface/src/scilab/macros/gf_colormap.sci
+interface/src/scilab/macros/gf_compute_Q1grid_interp.sci
+interface/src/scilab/macros/gf_interpolate_on_grid.sci
+interface/src/scilab/macros/gf_mesh_fem_get_eval.sci
+interface/src/scilab/macros/gf_plot.sci
+interface/src/scilab/macros/gf_plot_1D.sci
+interface/src/scilab/macros/gf_plot_mesh.sci
+interface/src/scilab/macros/gf_plot_slice.sci
+interface/src/scilab/macros/gf_solve.sci
+interface/src/scilab/macros/gfassert.sci
+interface/src/scilab/macros/has_field.sci
+interface/src/scilab/macros/init_pde.sci
+interface/src/scilab/macros/isauto.sci
+interface/src/scilab/macros/isnumeric.sci
+interface/src/scilab/macros/ison.sci
+interface/src/scilab/macros/isscalar.sci
+interface/src/scilab/macros/null_space.sci
+interface/src/scilab/macros/overload/%objid_e.sci
+interface/src/scilab/macros/overload/%objid_get.sci
+interface/src/scilab/macros/overload/%objid_set.sci
+interface/src/scilab/macros/overload/gf_typeof.sci
+interface/src/scilab/macros/overload/init_gf_types.sce
+interface/src/scilab/macros/repmat.sci
+interface/src/scilab/macros/spdiags.sci
+interface/src/scilab/macros/surfnorm.sci
+interface/src/scilab/macros/test_champ3.sce
+interface/src/scilab/macros/test_spdiags.sce
+interface/src/scilab/readme.txt
+interface/src/scilab/sci_gateway/builder_gateway.sce
+interface/src/scilab/sci_gateway/c/builder_gateway_c.sce.in
+interface/src/scilab/sci_gateway/c/gfm_common.c
+interface/src/scilab/sci_gateway/c/gfm_common.h
+interface/src/scilab/sci_gateway/c/gfm_scilab.cpp
+interface/src/scilab/sci_gateway/c/rebuild_lib_windows.sci
+interface/src/scilab/sci_gateway/c/sci_cgne.c
+interface/src/scilab/sci_gateway/c/sci_cgs.c
+interface/src/scilab/sci_gateway/c/sci_gmres.c
+interface/src/scilab/sci_gateway/c/sci_mgcr.c
+interface/src/scilab/sci_gateway/c/sci_spchol.c
+interface/src/scilab/sci_gateway/c/sci_spcholinc.c
+interface/src/scilab/sci_gateway/c/sci_spchsolve.c
+interface/src/scilab/sci_gateway/c/sci_splu.c
+interface/src/scilab/sci_gateway/c/sci_spluinc.c
+interface/src/scilab/sci_gateway/c/sci_splusolve.c
+interface/src/scilab/sci_gateway/c/stream_redirect.h
+interface/src/scilab/sci_getfem.iss
+interface/src/scilab/src/builder_src.sce
+interface/src/scilab/src/c/DOC/fnindex.txt
+interface/src/scilab/src/c/DOC/tutorial.txt
+interface/src/scilab/src/c/FILELIST
+interface/src/scilab/src/c/MACHINES/Cray/machine.h
+interface/src/scilab/src/c/MACHINES/Cray/patch.1
+interface/src/scilab/src/c/MACHINES/Cray/patch.2
+interface/src/scilab/src/c/MACHINES/Cray/patch.3
+interface/src/scilab/src/c/MACHINES/GCC/machine.h
+interface/src/scilab/src/c/MACHINES/Linux/machine.h
+interface/src/scilab/src/c/MACHINES/RS6000/machine.c
+interface/src/scilab/src/c/MACHINES/RS6000/machine.h
+interface/src/scilab/src/c/MACHINES/SGI/machine.h
+interface/src/scilab/src/c/MACHINES/SPARC/machine.h
+interface/src/scilab/src/c/README
+interface/src/scilab/src/c/bdfactor.c
+interface/src/scilab/src/c/bkpfacto.c
+interface/src/scilab/src/c/builder_c.sce
+interface/src/scilab/src/c/chfactor.c
+interface/src/scilab/src/c/configure
+interface/src/scilab/src/c/configure.in
+interface/src/scilab/src/c/copy.c
+interface/src/scilab/src/c/copyright
+interface/src/scilab/src/c/err.c
+interface/src/scilab/src/c/err.h
+interface/src/scilab/src/c/extras.c
+interface/src/scilab/src/c/fft.c
+interface/src/scilab/src/c/givens.c
+interface/src/scilab/src/c/hessen.c
+interface/src/scilab/src/c/hsehldr.c
+interface/src/scilab/src/c/init.c
+interface/src/scilab/src/c/iter.h
+interface/src/scilab/src/c/iter0.c
+interface/src/scilab/src/c/iternsym.c
+interface/src/scilab/src/c/itersym.c
+interface/src/scilab/src/c/ivecop.c
+interface/src/scilab/src/c/ls.dat
+interface/src/scilab/src/c/lufactor.c
+interface/src/scilab/src/c/machine.c
+interface/src/scilab/src/c/machine.h
+interface/src/scilab/src/c/machine.h.in
+interface/src/scilab/src/c/matlab.c
+interface/src/scilab/src/c/matlab.h
+interface/src/scilab/src/c/matop.c
+interface/src/scilab/src/c/matrix.h
+interface/src/scilab/src/c/matrix2.h
+interface/src/scilab/src/c/matrixio.c
+interface/src/scilab/src/c/meminfo.c
+interface/src/scilab/src/c/meminfo.h
+interface/src/scilab/src/c/memory.c
+interface/src/scilab/src/c/memstat.c
+interface/src/scilab/src/c/mfunc.c
+interface/src/scilab/src/c/norm.c
+interface/src/scilab/src/c/oldnames.h
+interface/src/scilab/src/c/otherio.c
+interface/src/scilab/src/c/pxop.c
+interface/src/scilab/src/c/qrfactor.c
+interface/src/scilab/src/c/rk4.dat
+interface/src/scilab/src/c/schur.c
+interface/src/scilab/src/c/solve.c
+interface/src/scilab/src/c/sparse.c
+interface/src/scilab/src/c/sparse.h
+interface/src/scilab/src/c/sparse2.h
+interface/src/scilab/src/c/sparseio.c
+interface/src/scilab/src/c/spbkp.c
+interface/src/scilab/src/c/spchfctr.c
+interface/src/scilab/src/c/splufctr.c
+interface/src/scilab/src/c/sprow.c
+interface/src/scilab/src/c/spswap.c
+interface/src/scilab/src/c/submat.c
+interface/src/scilab/src/c/svd.c
+interface/src/scilab/src/c/symmeig.c
+interface/src/scilab/src/c/update.c
+interface/src/scilab/src/c/vecop.c
+interface/src/scilab/src/c/version.c
+interface/src/scilab/src/c/zcopy.c
+interface/src/scilab/src/c/zfunc.c
+interface/src/scilab/src/c/zgivens.c
+interface/src/scilab/src/c/zhessen.c
+interface/src/scilab/src/c/zhsehldr.c
+interface/src/scilab/src/c/zlufctr.c
+interface/src/scilab/src/c/zmachine.c
+interface/src/scilab/src/c/zmatio.c
+interface/src/scilab/src/c/zmatlab.c
+interface/src/scilab/src/c/zmatop.c
+interface/src/scilab/src/c/zmatrix.h
+interface/src/scilab/src/c/zmatrix2.h
+interface/src/scilab/src/c/zmemory.c
+interface/src/scilab/src/c/znorm.c
+interface/src/scilab/src/c/zqrfctr.c
+interface/src/scilab/src/c/zschur.c
+interface/src/scilab/src/c/zsolve.c
+interface/src/scilab/src/c/zvecop.c
+interface/src/scilab/tests/unit_tests/check_all.sce
+interface/src/scilab/tests/unit_tests/check_asm.sce
+interface/src/scilab/tests/unit_tests/check_fem.sce
+interface/src/scilab/tests/unit_tests/check_geotrans.sce
+interface/src/scilab/tests/unit_tests/check_integ.sce
+interface/src/scilab/tests/unit_tests/check_interpolated_fem.sce
+interface/src/scilab/tests/unit_tests/check_levelset.sce
+interface/src/scilab/tests/unit_tests/check_mesh_fem.sce
+interface/src/scilab/tests/unit_tests/check_oo.sce
+interface/src/scilab/tests/unit_tests/check_plot.sce
+interface/src/scilab/tests/unit_tests/check_slices.sce
+interface/src/scilab/tests/unit_tests/check_spmat.sce
+interface/src/scilab/tests/unit_tests/check_workspace.sce
+interface/src/scilab/tests/unit_tests/test_argyris.sce
+interface/src/scilab/tests/unit_tests/test_plasticity_new_brick.sce
+interface/tests/matlab/axrot_matrix.m
+interface/tests/matlab/check_all.m
+interface/tests/matlab/check_all.sh
+interface/tests/matlab/check_asm.m
+interface/tests/matlab/check_fem.m
+interface/tests/matlab/check_geotrans.m
+interface/tests/matlab/check_integ.m
+interface/tests/matlab/check_interpolated_fem.m
+interface/tests/matlab/check_levelset.m
+interface/tests/matlab/check_mesh_fem.m
+interface/tests/matlab/check_oo.m
+interface/tests/matlab/check_plasticity.m
+interface/tests/matlab/check_plot.m
+interface/tests/matlab/check_slices.m
+interface/tests/matlab/check_spmat.m
+interface/tests/matlab/check_workspace.m
+interface/tests/matlab/demo_Mindlin_Reissner_plate.m
+interface/tests/matlab/demo_Navier_Stokes.m
+interface/tests/matlab/demo_Nitsche_contact_by_hand.m
+interface/tests/matlab/demo_bilaplacian.m
+interface/tests/matlab/demo_contact_fictitious_domain_nitsche.m
+interface/tests/matlab/demo_continuation.m
+interface/tests/matlab/demo_convection_rotating_cavity.m
+interface/tests/matlab/demo_crack.m
+interface/tests/matlab/demo_dynamic_contact.m
+interface/tests/matlab/demo_dynamic_plasticity.m
+interface/tests/matlab/demo_dynamic_plasticity_with_contact.m
+interface/tests/matlab/demo_elasticity.m
+interface/tests/matlab/demo_fictitious_domains.m
+interface/tests/matlab/demo_fictitious_domains_laplacian.m
+interface/tests/matlab/demo_laplacian.m
+interface/tests/matlab/demo_laplacian_DG.m
+interface/tests/matlab/demo_laplacian_pyramid.m
+interface/tests/matlab/demo_large_sliding_contact.m
+interface/tests/matlab/demo_mesh_generation.m
+interface/tests/matlab/demo_mortar.m
+interface/tests/matlab/demo_nonlinear_elasticity.m
+interface/tests/matlab/demo_nonlinear_elasticity_anim.m
+interface/tests/matlab/demo_periodic_laplacian.m
+interface/tests/matlab/demo_plasticity.m
+interface/tests/matlab/demo_refine.m
+interface/tests/matlab/demo_static_contact.m
+interface/tests/matlab/demo_step_by_step.m
+interface/tests/matlab/demo_stokes_3D_tank.m
+interface/tests/matlab/demo_stokes_3D_tank_draw.m
+interface/tests/matlab/demo_structural_optimization.m
+interface/tests/matlab/demo_thermo_elasticity_electrical_coupling.m
+interface/tests/matlab/demo_topological_optimization.m
+interface/tests/matlab/demo_tripod.m
+interface/tests/matlab/demo_tripod_alt.m
+interface/tests/matlab/demo_tripod_slice_anim.m
+interface/tests/matlab/demo_wave2D.m
+interface/tests/matlab/demo_wave2D_alt.m
+interface/tests/matlab/demo_wave2D_animate.m
+interface/tests/matlab/demo_wave_equation.m
+interface/tests/matlab/demo_wheel_contact.m
+interface/tests/matlab/plate_Impact.m
+interface/tests/matlab/private/asserterr.m
+interface/tests/matlab/private/gfassert.m
+interface/tests/matlab/test1_nitsche_large_sliding.m
+interface/tests/matlab/test2_nitsche_large_sliding.m
+interface/tests/matlab/test_argyris.m
+interface/tests/matlab/tripod_anim.m
+interface/tests/matlab/tutorial1.m
+interface/tests/matlab/uAnalytic.m
+interface/tests/meshes/cuve_linear_2400.GiD.msh
+interface/tests/meshes/cuve_quadratic_2400.GiD.msh
+interface/tests/meshes/cuve_quadratic_2500.GiD.msh
+interface/tests/meshes/donut_regulier.mesh
+interface/tests/meshes/donut_with_quadratic_tetra_1100_elements.msh
+interface/tests/meshes/holed_bar.mesh
+interface/tests/meshes/holed_disc_with_quadratic_2D_triangles.msh
+interface/tests/meshes/ladder.mesh
+interface/tests/meshes/ladder_1500.mesh
+interface/tests/meshes/ladder_370.mesh
+interface/tests/meshes/mixed_mesh.gmf
+interface/tests/meshes/sphere_with_quadratic_tetra.msh
+interface/tests/meshes/tank_quadratic_2500.GiD.msh
+interface/tests/meshes/tripod.GiD.msh
+interface/tests/meshes/tripod.mesh
+interface/tests/meshes/tube_2D_spline.GiD.msh
+interface/tests/python/check_asm.py
+interface/tests/python/check_export.py
+interface/tests/python/check_global_functions.py
+interface/tests/python/check_levelset.py
+interface/tests/python/check_mixed_mesh.py
+interface/tests/python/check_secondary_domain.py
+interface/tests/python/demo_Mindlin_Reissner_plate.py
+interface/tests/python/demo_crack.py
+interface/tests/python/demo_cracked_thermo_elastic_body.py
+interface/tests/python/demo_dynamic_contact_1D.py
+interface/tests/python/demo_elastic_ring_contact.py
+interface/tests/python/demo_fictitious_domains.py
+interface/tests/python/demo_finite_strain_plasticity.py
+interface/tests/python/demo_finite_strain_plasticity_3D.py
+interface/tests/python/demo_laplacian.py
+interface/tests/python/demo_laplacian_DG.py
+interface/tests/python/demo_laplacian_aposteriori.py
+interface/tests/python/demo_laplacian_pyramid.py
+interface/tests/python/demo_large_sliding_contact.py
+interface/tests/python/demo_mortar.py
+interface/tests/python/demo_navier_stokes.py
+interface/tests/python/demo_nonlinear_elasticity.py
+interface/tests/python/demo_parallel_laplacian.py
+interface/tests/python/demo_phase_field.py
+interface/tests/python/demo_plasticity.py
+interface/tests/python/demo_plate.py
+interface/tests/python/demo_static_contact.py
+interface/tests/python/demo_step_by_step.py
+interface/tests/python/demo_stokes_3D_tank.py
+interface/tests/python/demo_stokes_3D_tank_draw.py
+interface/tests/python/demo_thermo_elasticity_electrical_coupling.py
+interface/tests/python/demo_tresca.py
+interface/tests/python/demo_tripod.py
+interface/tests/python/demo_tripod_alt.py
+interface/tests/python/demo_unit_disk.py
+interface/tests/python/demo_wave.py
+interface/tests/python/demo_wave_equation.py
+interface/tests/python/demo_wheel_contact.py
+interface/tests/python/getfem_tvtk.py
+interface/tests/python/quad.geo
+interface/tests/python/tutorial1.py
+internal_tools/HCT_reduced_triangle_base.cc
+internal_tools/HCT_triangle_base.cc
+internal_tools/argyris_base.cc
+internal_tools/c1_piecep3_quad.cc
+internal_tools/getfem-matlab-interface-script.iss
+internal_tools/getfem-python-interface-script.iss
+internal_tools/hermite_tetrahedron_base.cc
+internal_tools/make_donut.C
+internal_tools/morley_base.cc
+internal_tools/simplexification_refelt.cc
+m4/ac_python_devel.m4
+m4/acx_blas.m4
+m4/acx_getfem.m4
+m4/ax_boost_base.m4
+m4/ax_boost_system.m4
+m4/ax_boost_thread.m4
+m4/ax_check_cxx_flag.m4
+m4/ax_prefix_config_h.m4
+m4/ax_prog_cc_mpi.m4
+m4/ax_prog_cxx_mpi.m4
+m4/ax_prog_fc_mpi.m4
+m4/matlab.m4
+m4/matlabver.m4
+m4/scilab.m4
+mkinstalldirs
+msvc/BUILDING_GETFEM.txt
+msvc/bilaplacian/bilaplacian.vcxproj
+msvc/common_debug_settings.props
+msvc/common_release_settings.props
+msvc/elastostatic/elastostatic.vcxproj
+msvc/getfem.sln
+msvc/getfem.suo
+msvc/getfem/getfem_arch_config.h
+msvc/gmm/gmm_arch_config.h
+msvc/libgetfem/libgetfem.vcxproj
+msvc/libgetfemint/libgetfemint.vcxproj
+msvc/makebindist.sh
+msvc/matlab_interface/matlab_interface.vcxproj
+msvc/poly/poly.vcxproj
+msvc/superlu/superlu.vcxproj
+msvc/test_assembly/test_assembly.vcxproj
+msvc/test_contact/contact_problem.cpp
+msvc/test_contact/contact_problem.h
+msvc/test_contact/run/2Dresults/Final_step.png
+msvc/test_contact/run/2Dresults/LS_contact.wmv
+msvc/test_contact/run/2Dresults/contact.param
+msvc/test_contact/run/3Dresults/Final_step3D.png
+msvc/test_contact/run/3Dresults/LS_contact_3D.wmv
+msvc/test_contact/run/3Dresults/contact.param
+msvc/test_contact/test_contact.cpp
+msvc/test_kdtree/test_kdtree.vcxproj
+msvc/test_laplacian_with_bricks/test_laplacian_with_bricks.vcxproj
+msvc/test_laplacian_with_bricks/test_laplacian_with_bricks.vcxproj.filters
+msvc/test_level_set_contact/test_level_set_contact.vcxproj
+msvc/test_level_set_contact/test_level_set_contact.vcxproj.filters
+src/bgeot_convex_ref.cc
+src/bgeot_convex_ref_simplexified.cc
+src/bgeot_convex_structure.cc
+src/bgeot_ftool.cc
+src/bgeot_geometric_trans.cc
+src/bgeot_geotrans_inv.cc
+src/bgeot_kdtree.cc
+src/bgeot_mesh_structure.cc
+src/bgeot_node_tab.cc
+src/bgeot_poly.cc
+src/bgeot_poly_composite.cc
+src/bgeot_rtree.cc
+src/bgeot_small_vector.cc
+src/bgeot_sparse_tensors.cc
+src/bgeot_torus.cc
+src/dal_backtrace.cc
+src/dal_bit_vector.cc
+src/dal_singleton.cc
+src/dal_static_stored_objects.cc
+src/getfem/bgeot_comma_init.h
+src/getfem/bgeot_config.h
+src/getfem/bgeot_convex.h
+src/getfem/bgeot_convex_ref.h
+src/getfem/bgeot_convex_structure.h
+src/getfem/bgeot_ftool.h
+src/getfem/bgeot_geometric_trans.h
+src/getfem/bgeot_geotrans_inv.h
+src/getfem/bgeot_kdtree.h
+src/getfem/bgeot_mesh.h
+src/getfem/bgeot_mesh_structure.h
+src/getfem/bgeot_node_tab.h
+src/getfem/bgeot_permutations.h
+src/getfem/bgeot_poly.h
+src/getfem/bgeot_poly_composite.h
+src/getfem/bgeot_rtree.h
+src/getfem/bgeot_small_vector.h
+src/getfem/bgeot_sparse_tensors.h
+src/getfem/bgeot_tensor.h
+src/getfem/bgeot_torus.h
+src/getfem/dal_backtrace.h
+src/getfem/dal_basic.h
+src/getfem/dal_bit_vector.h
+src/getfem/dal_config.h
+src/getfem/dal_naming_system.h
+src/getfem/dal_singleton.h
+src/getfem/dal_static_stored_objects.h
+src/getfem/dal_tas.h
+src/getfem/dal_tree_sorted.h
+src/getfem/getfem_Navier_Stokes.h
+src/getfem/getfem_accumulated_distro.h
+src/getfem/getfem_assembling.h
+src/getfem/getfem_assembling_tensors.h
+src/getfem/getfem_config.h
+src/getfem/getfem_contact_and_friction_common.h
+src/getfem/getfem_contact_and_friction_integral.h
+src/getfem/getfem_contact_and_friction_large_sliding.h
+src/getfem/getfem_contact_and_friction_nodal.h
+src/getfem/getfem_context.h
+src/getfem/getfem_continuation.h
+src/getfem/getfem_convect.h
+src/getfem/getfem_copyable_ptr.h
+src/getfem/getfem_crack_sif.h
+src/getfem/getfem_deformable_mesh.h
+src/getfem/getfem_derivatives.h
+src/getfem/getfem_error_estimate.h
+src/getfem/getfem_export.h
+src/getfem/getfem_fem.h
+src/getfem/getfem_fem_global_function.h
+src/getfem/getfem_fem_level_set.h
+src/getfem/getfem_fourth_order.h
+src/getfem/getfem_generic_assembly.h
+src/getfem/getfem_generic_assembly_compile_and_exec.h
+src/getfem/getfem_generic_assembly_functions_and_operators.h
+src/getfem/getfem_generic_assembly_semantic.h
+src/getfem/getfem_generic_assembly_tree.h
+src/getfem/getfem_global_function.h
+src/getfem/getfem_im_data.h
+src/getfem/getfem_im_list.h
+src/getfem/getfem_import.h
+src/getfem/getfem_integration.h
+src/getfem/getfem_interpolated_fem.h
+src/getfem/getfem_interpolation.h
+src/getfem/getfem_level_set.h
+src/getfem/getfem_level_set_contact.h
+src/getfem/getfem_linearized_plates.h
+src/getfem/getfem_locale.h
+src/getfem/getfem_mat_elem.h
+src/getfem/getfem_mat_elem_type.h
+src/getfem/getfem_mesh.h
+src/getfem/getfem_mesh_fem.h
+src/getfem/getfem_mesh_fem_global_function.h
+src/getfem/getfem_mesh_fem_level_set.h
+src/getfem/getfem_mesh_fem_product.h
+src/getfem/getfem_mesh_fem_sum.h
+src/getfem/getfem_mesh_im.h
+src/getfem/getfem_mesh_im_level_set.h
+src/getfem/getfem_mesh_level_set.h
+src/getfem/getfem_mesh_region.h
+src/getfem/getfem_mesh_slice.h
+src/getfem/getfem_mesh_slicers.h
+src/getfem/getfem_mesher.h
+src/getfem/getfem_model_solvers.h
+src/getfem/getfem_models.h
+src/getfem/getfem_nonlinear_elasticity.h
+src/getfem/getfem_omp.h
+src/getfem/getfem_partial_mesh_fem.h
+src/getfem/getfem_plasticity.h
+src/getfem/getfem_projected_fem.h
+src/getfem/getfem_regular_meshes.h
+src/getfem/getfem_superlu.h
+src/getfem/getfem_torus.h
+src/getfem_assembling_tensors.cc
+src/getfem_contact_and_friction_common.cc
+src/getfem_contact_and_friction_integral.cc
+src/getfem_contact_and_friction_large_sliding.cc
+src/getfem_contact_and_friction_nodal.cc
+src/getfem_context.cc
+src/getfem_continuation.cc
+src/getfem_enumeration_dof_para.cc
+src/getfem_error_estimate.cc
+src/getfem_export.cc
+src/getfem_fem.cc
+src/getfem_fem_composite.cc
+src/getfem_fem_global_function.cc
+src/getfem_fem_level_set.cc
+src/getfem_fourth_order.cc
+src/getfem_generic_assembly_compile_and_exec.cc
+src/getfem_generic_assembly_functions_and_operators.cc
+src/getfem_generic_assembly_interpolation.cc
+src/getfem_generic_assembly_semantic.cc
+src/getfem_generic_assembly_tree.cc
+src/getfem_generic_assembly_workspace.cc
+src/getfem_global_function.cc
+src/getfem_im_data.cc
+src/getfem_import.cc
+src/getfem_integration.cc
+src/getfem_integration_composite.cc
+src/getfem_interpolated_fem.cc
+src/getfem_interpolation.cc
+src/getfem_interpolation_on_deformed_domains.cc
+src/getfem_level_set.cc
+src/getfem_level_set_contact.cc
+src/getfem_linearized_plates.cc
+src/getfem_locale.cc
+src/getfem_mat_elem.cc
+src/getfem_mat_elem_type.cc
+src/getfem_mesh.cc
+src/getfem_mesh_fem.cc
+src/getfem_mesh_fem_global_function.cc
+src/getfem_mesh_fem_level_set.cc
+src/getfem_mesh_fem_product.cc
+src/getfem_mesh_fem_sum.cc
+src/getfem_mesh_im.cc
+src/getfem_mesh_im_level_set.cc
+src/getfem_mesh_level_set.cc
+src/getfem_mesh_region.cc
+src/getfem_mesh_slice.cc
+src/getfem_mesh_slicers.cc
+src/getfem_mesher.cc
+src/getfem_model_solvers.cc
+src/getfem_models.cc
+src/getfem_nonlinear_elasticity.cc
+src/getfem_omp.cc
+src/getfem_partial_mesh_fem.cc
+src/getfem_plasticity.cc
+src/getfem_projected_fem.cc
+src/getfem_regular_meshes.cc
+src/getfem_superlu.cc
+src/getfem_torus.cc
+src/gmm/gmm.h
+src/gmm/gmm_MUMPS_interface.h
+src/gmm/gmm_algobase.h
+src/gmm/gmm_blas.h
+src/gmm/gmm_blas_interface.h
+src/gmm/gmm_condition_number.h
+src/gmm/gmm_conjugated.h
+src/gmm/gmm_def.h
+src/gmm/gmm_dense_Householder.h
+src/gmm/gmm_dense_lu.h
+src/gmm/gmm_dense_matrix_functions.h
+src/gmm/gmm_dense_qr.h
+src/gmm/gmm_dense_sylvester.h
+src/gmm/gmm_domain_decomp.h
+src/gmm/gmm_except.h
+src/gmm/gmm_feedback_management.h
+src/gmm/gmm_inoutput.h
+src/gmm/gmm_interface.h
+src/gmm/gmm_interface_bgeot.h
+src/gmm/gmm_iter.h
+src/gmm/gmm_iter_solvers.h
+src/gmm/gmm_kernel.h
+src/gmm/gmm_lapack_interface.h
+src/gmm/gmm_least_squares_cg.h
+src/gmm/gmm_matrix.h
+src/gmm/gmm_modified_gram_schmidt.h
+src/gmm/gmm_opt.h
+src/gmm/gmm_precond.h
+src/gmm/gmm_precond_diagonal.h
+src/gmm/gmm_precond_ildlt.h
+src/gmm/gmm_precond_ildltt.h
+src/gmm/gmm_precond_ilu.h
+src/gmm/gmm_precond_ilut.h
+src/gmm/gmm_precond_ilutp.h
+src/gmm/gmm_precond_mr_approx_inverse.h
+src/gmm/gmm_range_basis.h
+src/gmm/gmm_real_part.h
+src/gmm/gmm_ref.h
+src/gmm/gmm_scaled.h
+src/gmm/gmm_solver_Schwarz_additive.h
+src/gmm/gmm_solver_bfgs.h
+src/gmm/gmm_solver_bicgstab.h
+src/gmm/gmm_solver_cg.h
+src/gmm/gmm_solver_constrained_cg.h
+src/gmm/gmm_solver_gmres.h
+src/gmm/gmm_solver_idgmres.h
+src/gmm/gmm_solver_qmr.h
+src/gmm/gmm_std.h
+src/gmm/gmm_sub_index.h
+src/gmm/gmm_sub_matrix.h
+src/gmm/gmm_sub_vector.h
+src/gmm/gmm_superlu_interface.h
+src/gmm/gmm_transposed.h
+src/gmm/gmm_tri_solve.h
+src/gmm/gmm_vector.h
+src/gmm/gmm_vector_to_matrix.h
+superlu/BLAS.c
+superlu/BLAS/License.txt
+superlu/BLAS/caxpy.f
+superlu/BLAS/ccopy.f
+superlu/BLAS/cdotc.f
+superlu/BLAS/cdotu.f
+superlu/BLAS/cgbmv.f
+superlu/BLAS/cgemm.f
+superlu/BLAS/cgemv.f
+superlu/BLAS/cgerc.f
+superlu/BLAS/cgeru.f
+superlu/BLAS/chbmv.f
+superlu/BLAS/chemm.f
+superlu/BLAS/chemv.f
+superlu/BLAS/cher.f
+superlu/BLAS/cher2.f
+superlu/BLAS/cher2k.f
+superlu/BLAS/cherk.f
+superlu/BLAS/chpmv.f
+superlu/BLAS/chpr.f
+superlu/BLAS/chpr2.f
+superlu/BLAS/crotg.f
+superlu/BLAS/cscal.f
+superlu/BLAS/csrot.f
+superlu/BLAS/csscal.f
+superlu/BLAS/cswap.f
+superlu/BLAS/csymm.f
+superlu/BLAS/csyr2k.f
+superlu/BLAS/csyrk.f
+superlu/BLAS/ctbmv.f
+superlu/BLAS/ctbsv.f
+superlu/BLAS/ctpmv.f
+superlu/BLAS/ctpsv.f
+superlu/BLAS/ctrmm.f
+superlu/BLAS/ctrmv.f
+superlu/BLAS/ctrsm.f
+superlu/BLAS/ctrsv.f
+superlu/BLAS/dasum.f
+superlu/BLAS/daxpy.f
+superlu/BLAS/dcabs1.f
+superlu/BLAS/dcopy.f
+superlu/BLAS/ddot.f
+superlu/BLAS/dgbmv.f
+superlu/BLAS/dgemm.f
+superlu/BLAS/dgemv.f
+superlu/BLAS/dger.f
+superlu/BLAS/dnrm2.f
+superlu/BLAS/drot.f
+superlu/BLAS/drotg.f
+superlu/BLAS/drotm.f
+superlu/BLAS/drotmg.f
+superlu/BLAS/dsbmv.f
+superlu/BLAS/dscal.f
+superlu/BLAS/dsdot.f
+superlu/BLAS/dspmv.f
+superlu/BLAS/dspr.f
+superlu/BLAS/dspr2.f
+superlu/BLAS/dswap.f
+superlu/BLAS/dsymm.f
+superlu/BLAS/dsymv.f
+superlu/BLAS/dsyr.f
+superlu/BLAS/dsyr2.f
+superlu/BLAS/dsyr2k.f
+superlu/BLAS/dsyrk.f
+superlu/BLAS/dtbmv.f
+superlu/BLAS/dtbsv.f
+superlu/BLAS/dtpmv.f
+superlu/BLAS/dtpsv.f
+superlu/BLAS/dtrmm.f
+superlu/BLAS/dtrmv.f
+superlu/BLAS/dtrsm.f
+superlu/BLAS/dtrsv.f
+superlu/BLAS/dzasum.f
+superlu/BLAS/dznrm2.f
+superlu/BLAS/icamax.f
+superlu/BLAS/idamax.f
+superlu/BLAS/isamax.f
+superlu/BLAS/izamax.f
+superlu/BLAS/lsame.f
+superlu/BLAS/sasum.f
+superlu/BLAS/saxpy.f
+superlu/BLAS/scabs1.f
+superlu/BLAS/scasum.f
+superlu/BLAS/scnrm2.f
+superlu/BLAS/scopy.f
+superlu/BLAS/sdot.f
+superlu/BLAS/sdsdot.f
+superlu/BLAS/sgbmv.f
+superlu/BLAS/sgemm.f
+superlu/BLAS/sgemv.f
+superlu/BLAS/sger.f
+superlu/BLAS/snrm2.f
+superlu/BLAS/srot.f
+superlu/BLAS/srotg.f
+superlu/BLAS/srotm.f
+superlu/BLAS/srotmg.f
+superlu/BLAS/ssbmv.f
+superlu/BLAS/sscal.f
+superlu/BLAS/sspmv.f
+superlu/BLAS/sspr.f
+superlu/BLAS/sspr2.f
+superlu/BLAS/sswap.f
+superlu/BLAS/ssymm.f
+superlu/BLAS/ssymv.f
+superlu/BLAS/ssyr.f
+superlu/BLAS/ssyr2.f
+superlu/BLAS/ssyr2k.f
+superlu/BLAS/ssyrk.f
+superlu/BLAS/stbmv.f
+superlu/BLAS/stbsv.f
+superlu/BLAS/stpmv.f
+superlu/BLAS/stpsv.f
+superlu/BLAS/strmm.f
+superlu/BLAS/strmv.f
+superlu/BLAS/strsm.f
+superlu/BLAS/strsv.f
+superlu/BLAS/xerbla.f
+superlu/BLAS/xerbla_array.f
+superlu/BLAS/zaxpy.f
+superlu/BLAS/zcopy.f
+superlu/BLAS/zdotc.f
+superlu/BLAS/zdotu.f
+superlu/BLAS/zdrot.f
+superlu/BLAS/zdscal.f
+superlu/BLAS/zgbmv.f
+superlu/BLAS/zgemm.f
+superlu/BLAS/zgemv.f
+superlu/BLAS/zgerc.f
+superlu/BLAS/zgeru.f
+superlu/BLAS/zhbmv.f
+superlu/BLAS/zhemm.f
+superlu/BLAS/zhemv.f
+superlu/BLAS/zher.f
+superlu/BLAS/zher2.f
+superlu/BLAS/zher2k.f
+superlu/BLAS/zherk.f
+superlu/BLAS/zhpmv.f
+superlu/BLAS/zhpr.f
+superlu/BLAS/zhpr2.f
+superlu/BLAS/zrotg.f
+superlu/BLAS/zscal.f
+superlu/BLAS/zswap.f
+superlu/BLAS/zsymm.f
+superlu/BLAS/zsyr2k.f
+superlu/BLAS/zsyrk.f
+superlu/BLAS/ztbmv.f
+superlu/BLAS/ztbsv.f
+superlu/BLAS/ztpmv.f
+superlu/BLAS/ztpsv.f
+superlu/BLAS/ztrmm.f
+superlu/BLAS/ztrmv.f
+superlu/BLAS/ztrsm.f
+superlu/BLAS/ztrsv.f
+superlu/BLAS_f2c.h
+superlu/License.txt
+superlu/ccolumn_bmod.c
+superlu/ccolumn_dfs.c
+superlu/ccopy_to_ucol.c
+superlu/cgscon.c
+superlu/cgsequ.c
+superlu/cgsrfs.c
+superlu/cgssv.c
+superlu/cgssvx.c
+superlu/cgstrf.c
+superlu/cgstrs.c
+superlu/clacon.c
+superlu/clangs.c
+superlu/claqgs.c
+superlu/cmemory.c
+superlu/cmyblas2.c
+superlu/colamd.c
+superlu/colamd.h
+superlu/cpanel_bmod.c
+superlu/cpanel_dfs.c
+superlu/cpivotL.c
+superlu/cpivotgrowth.c
+superlu/cpruneL.c
+superlu/creadhb.c
+superlu/csnode_bmod.c
+superlu/csnode_dfs.c
+superlu/csp_blas2.c
+superlu/csp_blas3.c
+superlu/cutil.c
+superlu/dcolumn_bmod.c
+superlu/dcolumn_dfs.c
+superlu/dcomplex.c
+superlu/dcopy_to_ucol.c
+superlu/dgscon.c
+superlu/dgsequ.c
+superlu/dgsrfs.c
+superlu/dgssv.c
+superlu/dgssvx.c
+superlu/dgstrf.c
+superlu/dgstrs.c
+superlu/dgstrsL.c
+superlu/dlacon.c
+superlu/dlamch.c
+superlu/dlangs.c
+superlu/dlaqgs.c
+superlu/dmemory.c
+superlu/dmyblas2.c
+superlu/dpanel_bmod.c
+superlu/dpanel_dfs.c
+superlu/dpivotL.c
+superlu/dpivotgrowth.c
+superlu/dpruneL.c
+superlu/dreadhb.c
+superlu/dsnode_bmod.c
+superlu/dsnode_dfs.c
+superlu/dsp_blas2.c
+superlu/dsp_blas3.c
+superlu/dutil.c
+superlu/dzsum1.c
+superlu/f2c_lite.c
+superlu/get_perm_c.c
+superlu/heap_relax_snode.c
+superlu/icmax1.c
+superlu/izmax1.c
+superlu/lsame.c
+superlu/memory.c
+superlu/mmd.c
+superlu/relax_snode.c
+superlu/scolumn_bmod.c
+superlu/scolumn_dfs.c
+superlu/scomplex.c
+superlu/scopy_to_ucol.c
+superlu/scsum1.c
+superlu/sgscon.c
+superlu/sgsequ.c
+superlu/sgsrfs.c
+superlu/sgssv.c
+superlu/sgssvx.c
+superlu/sgstrf.c
+superlu/sgstrs.c
+superlu/slacon.c
+superlu/slamch.c
+superlu/slangs.c
+superlu/slaqgs.c
+superlu/slu_Cnames.h
+superlu/slu_cdefs.h
+superlu/slu_dcomplex.h
+superlu/slu_ddefs.h
+superlu/slu_scomplex.h
+superlu/slu_sdefs.h
+superlu/slu_util.h
+superlu/slu_zdefs.h
+superlu/smemory.c
+superlu/smyblas2.c
+superlu/sp_coletree.c
+superlu/sp_ienv.c
+superlu/sp_preorder.c
+superlu/spanel_bmod.c
+superlu/spanel_dfs.c
+superlu/spivotL.c
+superlu/spivotgrowth.c
+superlu/spruneL.c
+superlu/sreadhb.c
+superlu/ssnode_bmod.c
+superlu/ssnode_dfs.c
+superlu/ssp_blas2.c
+superlu/ssp_blas3.c
+superlu/superlu_timer.c
+superlu/supermatrix.h
+superlu/sutil.c
+superlu/util.c
+superlu/xerbla.c
+superlu/zcolumn_bmod.c
+superlu/zcolumn_dfs.c
+superlu/zcopy_to_ucol.c
+superlu/zgscon.c
+superlu/zgsequ.c
+superlu/zgsrfs.c
+superlu/zgssv.c
+superlu/zgssvx.c
+superlu/zgstrf.c
+superlu/zgstrs.c
+superlu/zlacon.c
+superlu/zlangs.c
+superlu/zlaqgs.c
+superlu/zmemory.c
+superlu/zmyblas2.c
+superlu/zpanel_bmod.c
+superlu/zpanel_dfs.c
+superlu/zpivotL.c
+superlu/zpivotgrowth.c
+superlu/zpruneL.c
+superlu/zreadhb.c
+superlu/zsnode_bmod.c
+superlu/zsnode_dfs.c
+superlu/zsp_blas2.c
+superlu/zsp_blas3.c
+superlu/zutil.c
+tests/bilaplacian.cc
+tests/bilaplacian.param
+tests/bilaplacian.pl
+tests/crack.cc
+tests/crack.param
+tests/crack.pl
+tests/cyl_slicer.cc
+tests/cyl_slicer.pl
+tests/dynamic_array.cc
+tests/dynamic_array.pl
+tests/dynamic_friction.net
+tests/dynamic_friction_anim.net
+tests/dynamic_tas.cc
+tests/dynamic_tas.pl
+tests/elastostatic.cc
+tests/elastostatic.param
+tests/elastostatic.pl
+tests/geo_trans_inv.cc
+tests/geo_trans_inv.param
+tests/geo_trans_inv.pl
+tests/gmm_torture01_lusolve.cc
+tests/gmm_torture02_baseop.cc
+tests/gmm_torture05_mult.cc
+tests/gmm_torture06_mat_mult.cc
+tests/gmm_torture10_qr.cc
+tests/gmm_torture15_sub.cc
+tests/gmm_torture20_iterative_solvers.cc
+tests/heat_equation.cc
+tests/heat_equation.param
+tests/heat_equation.pl
+tests/helmholtz.cc
+tests/helmholtz.param
+tests/helmholtz.pl
+tests/integration.cc
+tests/integration.pl
+tests/laplacian.cc
+tests/laplacian.param
+tests/laplacian.pl
+tests/laplacian_conv_pk.pl
+tests/laplacian_with_bricks.cc
+tests/laplacian_with_bricks.param
+tests/laplacian_with_bricks.pl
+tests/make_gmm_test.pl
+tests/meshes/disc_2D_degree3.mesh
+tests/meshes/disc_P2_h0_3.mesh
+tests/meshes/disc_P2_h0_5.mesh
+tests/meshes/disc_P2_h1.mesh
+tests/meshes/disc_P2_h10.mesh
+tests/meshes/disc_P2_h2.mesh
+tests/meshes/disc_P2_h4.mesh
+tests/meshes/disc_P2_h6.mesh
+tests/meshes/disc_P2_h8.mesh
+tests/meshes/disc_with_a_hole.mesh
+tests/meshes/donut_regulier_32_elements.mesh
+tests/meshes/donut_regulier_512_elements.mesh
+tests/meshes/donut_regulier_72_elements.mesh
+tests/meshes/donut_regulier_8_elements_288ddl.mesh
+tests/meshes/multi_body.mesh
+tests/meshes/punch2D_1.mesh
+tests/meshes/punch2D_2.mesh
+tests/meshes/sphere_with_quadratic_tetra_16000_elts.mesh
+tests/meshes/sphere_with_quadratic_tetra_2000_elts.mesh
+tests/meshes/sphere_with_quadratic_tetra_400_elts.mesh
+tests/meshes/sphere_with_quadratic_tetra_80_elts.mesh
+tests/meshes/sphere_with_quadratic_tetra_8_elts.mesh
+tests/nonlinear_elastostatic.cc
+tests/nonlinear_elastostatic.param
+tests/nonlinear_elastostatic.pl
+tests/nonlinear_membrane.cc
+tests/nonlinear_membrane.param
+tests/nonlinear_membrane.pl
+tests/plasticity.cc
+tests/plasticity.param
+tests/plasticity.pl
+tests/plate.cc
+tests/plate.param
+tests/plate.pl
+tests/poly.cc
+tests/poly.pl
+tests/schwarz_additive.cc
+tests/schwarz_additive.param
+tests/schwarz_additive.pl
+tests/stokes.cc
+tests/stokes.param
+tests/stokes.pl
+tests/test_assembly.cc
+tests/test_assembly.pl
+tests/test_assembly_assignment.cc
+tests/test_assembly_assignment.pl
+tests/test_continuation.cc
+tests/test_continuation.param
+tests/test_continuation.pl
+tests/test_gmm_matrix_functions.cc
+tests/test_gmm_matrix_functions.pl
+tests/test_int_set.cc
+tests/test_int_set.pl
+tests/test_internal_variables.cc
+tests/test_internal_variables.pl
+tests/test_interpolated_fem.cc
+tests/test_interpolated_fem.param
+tests/test_interpolated_fem.pl
+tests/test_interpolation.cc
+tests/test_interpolation.pl
+tests/test_kdtree.cc
+tests/test_kdtree.pl
+tests/test_mat_elem.cc
+tests/test_mat_elem.param
+tests/test_mat_elem.pl
+tests/test_mesh.cc
+tests/test_mesh.pl
+tests/test_mesh_generation.cc
+tests/test_mesh_generation.pl
+tests/test_mesh_im_level_set.cc
+tests/test_mesh_im_level_set.pl
+tests/test_range_basis.cc
+tests/test_range_basis.param
+tests/test_range_basis.pl
+tests/test_rtree.cc
+tests/test_rtree.pl
+tests/test_slice.cc
+tests/test_slice.pl
+tests/test_small_vector.cc
+tests/test_small_vector.pl
+tests/test_tree_sorted.cc
+tests/test_tree_sorted.pl
+tests/thermo_elasticity_electrical_coupling.cc
+tests/thermo_elasticity_electrical_coupling.param
+tests/thermo_elasticity_electrical_coupling.pl
+tests/wave_equation.cc
+tests/wave_equation.param
+tests/wave_equation.pl
diff --git a/getfem.includes b/getfem.includes
new file mode 100644
index 0000000..d18b78a
--- /dev/null
+++ b/getfem.includes
@@ -0,0 +1,20 @@
+contrib/bimaterial_crack_test
+contrib/crack_plate
+contrib/icare
+contrib/level_set_contact
+interface/src
+interface/src/matlab
+interface/src/scilab/sci_gateway/c
+interface/src/scilab/src/c
+interface/src/scilab/src/c/MACHINES/Cray
+interface/src/scilab/src/c/MACHINES/GCC
+interface/src/scilab/src/c/MACHINES/Linux
+interface/src/scilab/src/c/MACHINES/RS6000
+interface/src/scilab/src/c/MACHINES/SGI
+interface/src/scilab/src/c/MACHINES/SPARC
+msvc/getfem
+msvc/gmm
+msvc/test_contact
+src/getfem
+src/gmm
+superlu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]