getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r5087 - in /trunk/getfem: doc/sphinx/source/biblio.rst


From: Yves . Renard
Subject: [Getfem-commits] r5087 - in /trunk/getfem: doc/sphinx/source/biblio.rst doc/sphinx/source/userdoc/xfem.rst src/getfem_omp.cc
Date: Sun, 13 Sep 2015 15:07:08 -0000

Author: renard
Date: Sun Sep 13 17:07:07 2015
New Revision: 5087

URL: http://svn.gna.org/viewcvs/getfem?rev=5087&view=rev
Log:
minor corrections

Modified:
    trunk/getfem/doc/sphinx/source/biblio.rst
    trunk/getfem/doc/sphinx/source/userdoc/xfem.rst
    trunk/getfem/src/getfem_omp.cc

Modified: trunk/getfem/doc/sphinx/source/biblio.rst
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/doc/sphinx/source/biblio.rst?rev=5087&r1=5086&r2=5087&view=diff
==============================================================================
--- trunk/getfem/doc/sphinx/source/biblio.rst   (original)
+++ trunk/getfem/doc/sphinx/source/biblio.rst   Sun Sep 13 17:07:07 2015
@@ -11,6 +11,12 @@
 .. [Al-Ge1997] E.L. Allgower and K. Georg,
    *Numerical Path Following*, Handbook of Numerical Analysis, Vol. V (P.G. 
Ciarlet and J.L. Lions, eds.), Elsevier, pp. 3-207, 1997.
 
+.. [AM-MO-RE2014] S. Amdouni, M. Moakher, Y. Renard,
+   *A local projection stabilization of fictitious domain method for elliptic 
boundary value problems*, Appl. Numer. Math., 76:60-75, 2014.
+
+.. [AM-MO-RE2014b] S. Amdouni, M. Moakher, Y. Renard,
+   *A stabilized Lagrange multiplier method for the enriched finite element 
approximation of Tresca contact problems of cracked elastic bodies*, Comp. 
Meth. Appl. Mech. Engng., 270:178-200, 2014.
+
 .. [bank1983] R.E. Bank, A.H. Sherman, A. Weiser,
    *Refinement algorithms and data structures for regular local mesh 
refinement*, in Scientific Computing IMACS, Amsterdam, North-Holland, pp 3-17, 
1983.
 
@@ -20,9 +26,14 @@
 .. [br-ba-fo1989] F. Brezzi, K.J. Bathe, M. Fortin,
    *Mixed-interpolated element for Reissner-Mindlin plates*, Internat. J. 
Numer. Methods Engrg., 28, 1787-1801, 1989.
 
+.. [bu-ha2010] E. Burman, P. Hansbo,
+   *Fictitious domain finite element methods using cut elements: I. A 
stabilized Lagrange multiplier method*, Computer Methods in Applied Mechanics, 
199:41-44, 2680-2686, 2010. 
 
 .. [ca-re-so1994] D. Calvetti, L. Reichel and D.C. Sorensen.
    *An implicitely restarted Lanczos method for large symmetric eigenvalue 
problems*. Electronic Transaction on Numerical Analysis}. 2:1-21, 1994.
+
+.. [CH-LA-RE2011] E. Chahine, P. Laborde, Y. Renard,
+   *A non-conformal eXtended Finite Element approach: Integral matching Xfem*, 
Applied Numerical Mathematics, 61:322-343, 2011. 
 
 .. [ciarlet1978] P.G. Ciarlet,
    *The finite element method for elliptic problems*, Studies in Mathematics 
and its Applications vol. 4, North-Holland, 1978.
@@ -55,6 +66,9 @@
 .. [HA-HA2004] A Hansbo, P Hansbo,
    *A finite element method for the simulation of strong and weak 
discontinuities in solid mechanics*, Computer methods in applied mechanics and 
engineering 193 (33-35), 3523-3540, 2004.
 
+.. [HA-RE2009] J. Haslinger, Y. Renard,
+   *A new fictitious domain approach inspired by the extended finite element 
method*, Siam J. on Numer. Anal., 47(2):1474-1499, 2009.
+
 .. [HI-RE2010] Hild P., Renard Y.
    *Stabilized lagrange multiplier method for the finite element approximation 
of contact problems in elastostatics.* Numer. Math. 15:1, 101--129, 2010.
 
@@ -65,7 +79,10 @@
    *Contact problems in elasticity*, SIAM, 1988.
 
 .. [LA-PO-RE-SA2005] Laborde P., Pommier J., Renard Y., Salaun M.
-   *High order extended finite element method for cracked domains*. Int. J. 
Numer. Meth. Engng., 64:354-381, 2005. 
+   *High order extended finite element method for cracked domains*. Int. J. 
Numer. Meth. Engng., 64:354-381, 2005.
+
+.. [LA-RE-SA2010] J. Lasry, Y. Renard, M. Salaun.
+   *eXtended Finite Element Method for thin cracked plates with Kirchhoff-Love 
theory*, Int. J. Numer. Meth. Engng., 84(9):1115-1138, 2010.
 
 .. [KO-RE2014] Poulios K., Renard Y.,
    *An unconstrained integral approximation of large sliding frictional 
contact between deformable solids*. Computers and Structures, 153:75-90, 2015.
@@ -90,6 +107,9 @@
 
 .. [nedelec1991] J.-C. Nedelec.
    *Notions sur les techniques d'elements finis*, Ellipses, SMAI, 
Mathematiques & Applications no 7, 1991.
+
+.. [NI-RE-CH2011] S. Nicaise, Y. Renard, E. Chahine,
+   *Optimal convergence analysis for the eXtended Finite Element Method*, Int. 
J. Numer. Meth. Engng., 86:528-548, 2011.
 
 .. [Pantz2008] O. Pantz
    *The Modeling of Deformable Bodies with Frictionless (Self-)Contacts*, 
Archive for Rational Mechanics and Analysis, Volume 188, Issue 2, pp 183-212, 
2008.

Modified: trunk/getfem/doc/sphinx/source/userdoc/xfem.rst
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/doc/sphinx/source/userdoc/xfem.rst?rev=5087&r1=5086&r2=5087&view=diff
==============================================================================
--- trunk/getfem/doc/sphinx/source/userdoc/xfem.rst     (original)
+++ trunk/getfem/doc/sphinx/source/userdoc/xfem.rst     Sun Sep 13 17:07:07 2015
@@ -9,11 +9,15 @@
 Level-sets, Xfem, fictitious domains, Cut-fem
 =============================================
 
-Since v2.0, |gf| offers a certain number of facilities to support Xfem and 
fictitious domain methods with a cut-fem strategy. Most of these tools have 
been initially developed by Julien Pommier for the study published in 
[LA-PO-RE-SA2005]_.
+Since v2.0, |gf| offers a certain number of facilities to support Xfem and 
fictitious domain methods with a cut-fem strategy. Most of these tools have 
been initially mainly developed by Julien Pommier for the study published in 
[LA-PO-RE-SA2005]_.
 
 The implementation is a fairly large generality, based on the use of 
level-sets, as suggested in [SU-CH-MO-BE2001]_ and allows simultaneous use of a 
large number of level-sets which can cross.
 
 The Xfem implementation for the discretization of the jump follows the 
strategy of [HA-HA2004]_ although we had no knowledge of this work during 
implementation. This means that there is no degree of freedom representing the 
jump across the level-set. Instead, the degrees of freedom represent the 
displacement of each side of the level-set. This is essential in any way in the 
presence of level-set that intersect each other because it may exist more than 
two different zones of continuity inside a single element.
+
+The cut fem strategy for fictitious domain method has been used for the first 
time with |gf| for the study published in [HA-RE2009]_ where a quite simple 
stabilization strategy is proposed. Here also, before knowing the existence of 
the Work of E. Burman and P. Hanbo [bu-ha2010]_ on that topic.
+
+The tools for Xfem have been then enriched by the PhD works of J. Larsy (see 
for instance [LA-RE-SA2010]_) the one of E. Chahine (see for instance 
[CH-LA-RE2011]_, [NI-RE-CH2011]_), and of S. Amdouni  (see for instance 
[AM-MO-RE2014]_, [AM-MO-RE2014b]_).
 
 
 .. important::
@@ -28,8 +32,8 @@
 Representation of level-sets
 ----------------------------
 
-|gf| deals with level-set defined by piecewise polynomial function on a mesh. 
It
-will be defined as the zero of this function. In the file
+Some structure are defined to manipulate level-set functions defined by
+piecewise polynomial function on a mesh. In the file
 :file:`getfem/getfem_levelset.h` a level-set is represented by a function 
defined
 on a lagrange fem of a certain degree on a mesh. The constructor to define a 
new
 |gf_ls| is the following::
@@ -50,6 +54,8 @@
 method ``ls.value(1)`` returns the dof vector for the secondary level-set 
function
 if any. The method ``ls.get_mesh_fem()`` returns a reference on the |gf_mf|
 object.
+
+Not that often in applications, the level-set function evolves thanks to an 
Hamilton-Jacobi equation (for its re-initialization for instance). See the 
:ref:`ud-convect` which can be used in the approximation of a Hamilton-Jacobi 
equation.
 
 
 Mesh cut by level-sets

Modified: trunk/getfem/src/getfem_omp.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_omp.cc?rev=5087&r1=5086&r2=5087&view=diff
==============================================================================
--- trunk/getfem/src/getfem_omp.cc      (original)
+++ trunk/getfem/src/getfem_omp.cc      Sun Sep 13 17:07:07 2015
@@ -18,148 +18,148 @@
  Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA.
 
 ===========================================================================*/
-
-#include "getfem/getfem_omp.h"
-#include "getfem/getfem_omp.h"
-#include "getfem/getfem_level_set_contact.h"
-
-namespace getfem{
-
-#ifdef GETFEM_HAVE_OPENMP
-
-  boost::recursive_mutex omp_guard::boost_mutex;
-
-  omp_guard::omp_guard()
-    : boost::lock_guard<boost::recursive_mutex>(boost_mutex)
-  {}
-
-  local_guard::local_guard(boost::recursive_mutex& m) :
-    mutex_(m),
-    plock_(new boost::lock_guard<boost::recursive_mutex>(m))
-  { }
-
-  local_guard::local_guard(const local_guard& guard)
-    : mutex_(guard.mutex_), plock_(guard.plock_)
-  { }
-
-  lock_factory::lock_factory() : mutex_() {}
-  local_guard lock_factory::get_lock() const
-  {
-    return local_guard(mutex_);
-  }
-#endif
-
-  omp_distribute<bool> open_mp_is_running_properly::answer = false;
-  open_mp_is_running_properly::open_mp_is_running_properly()
-  {answer.all_threads()=true;}
-  open_mp_is_running_properly::~open_mp_is_running_properly()
-  {answer.all_threads()=false;}
-  bool open_mp_is_running_properly::is_it(){return answer;}
-
-  region_partition::region_partition(const region_partition& rp) :
-    pparent_mesh(rp.pparent_mesh),
-    original_region(rp.original_region),
-    partitions(rp.partitions)  {   }
-
-  void region_partition::operator=(const region_partition& rp)
-  {
-    partitions.clear();
-
-    if (!rp.pparent_mesh) return;
-    pparent_mesh->copy_from(*rp.pparent_mesh);
-    original_region = rp.original_region;
-    partitions.resize(rp.partitions.size());
-    gmm::copy(rp.partitions,partitions);
-  }
-
-
-  region_partition::region_partition(mesh* pm, size_type id) :
-    pparent_mesh(pm),original_region(0),
-    partitions(num_threads())
-  {
-    scalar_type time = gmm::uclock_sec();
-    // in case of serial Getfem nothing to partition
-    if (num_threads()==1) {partitions[0]=id; return;}
-
-    //in case mesh is not provided, also don't do anything
-    if (!pm) return;
-
-    if (id == size_type(-1)) {
-      original_region.reset(new mesh_region(pm->convex_index()));
-      original_region->set_parent_mesh(pm);
-    } else{
-      GMM_ASSERT1(pm->has_region(id),"Improper region number");
-      original_region.reset(new mesh_region(pm->region(id)));
-    }
-    if (me_is_multithreaded_now())
-      GMM_WARNING0("building partitions inside parallel region");
-
-    omp_guard scoped_lock;
-    GMM_NOPERATION(scoped_lock);
-    size_type Nelems = original_region->size();
-    size_type psize = static_cast<size_type>
-      (std::ceil(static_cast<scalar_type >(Nelems)/
-       static_cast<scalar_type >(num_threads())));
-    mr_visitor mr(*original_region);
-    for(size_type thread = 0; thread<num_threads();thread++)
-    {
-      partitions[thread] =
-        
getfem::mesh_region::free_region_id(*(original_region->get_parent_mesh()));
-      mesh_region partition;
-      for(size_type i=thread*psize;i<(thread+1)*psize && 
!mr.finished();i++,++mr)
-      {
-        if (mr.is_face()) partition.add(mr.cv(),mr.f());
-        else partition.add(mr.cv());
-      }
-      pparent_mesh->region(partitions[thread]) = partition;
-    }
-    GMM_TRACE2("Partitioning time: "<<gmm::uclock_sec()-time<<" s.");
-  }
-
-  size_type region_partition::
-    thread_local_partition() const {
-      if (pparent_mesh==0 && num_threads() >1 ){
-        GMM_WARNING1("partition is empty and cannot be used \
-                     this means that the brick that created it should 
partition \
-                     its domain by himself");
-        return -10;
-      }
-      return partitions[this_thread()];
-  }
-
-  void omp_distribute<bool>::all_values_proxy::operator=(const bool& x)
-  {
-    for(std::vector<BOOL>::iterator it=distro.thread_values.begin();
-      it!=distro.thread_values.end();it++) *it=x;
-
-  }
-
-  thread_exception::thread_exception(): exceptions_(num_threads(), nullptr)
-  {}
-
-  thread_exception::~thread_exception() {rethrow();}
-
-  std::vector<std::exception_ptr> thread_exception::caughtExceptions() const
-  {
-    std::vector<std::exception_ptr> exceptions;
-    for (auto &&pException : exceptions_)
-    {
-      if (pException != nullptr) exceptions.push_back(pException);
-    }
-    return exceptions;
-  }
-
-  void thread_exception::rethrow()
-  {
-    for (auto &&pException : exceptions_)
-    {
-      if (pException != nullptr) std::rethrow_exception(pException);
-    }
-  }
-
-  void thread_exception::captureException()
-  {
-    exceptions_[omp_get_thread_num()] = std::current_exception();
-  }
-
-}
+
+#include "getfem/getfem_omp.h"
+#include "getfem/getfem_omp.h"
+#include "getfem/getfem_level_set_contact.h"
+
+namespace getfem{
+
+#ifdef GETFEM_HAVE_OPENMP
+
+  boost::recursive_mutex omp_guard::boost_mutex;
+
+  omp_guard::omp_guard()
+    : boost::lock_guard<boost::recursive_mutex>(boost_mutex)
+  {}
+
+  local_guard::local_guard(boost::recursive_mutex& m) :
+    mutex_(m),
+    plock_(new boost::lock_guard<boost::recursive_mutex>(m))
+  { }
+
+  local_guard::local_guard(const local_guard& guard)
+    : mutex_(guard.mutex_), plock_(guard.plock_)
+  { }
+
+  lock_factory::lock_factory() : mutex_() {}
+  local_guard lock_factory::get_lock() const
+  {
+    return local_guard(mutex_);
+  }
+#endif
+
+  omp_distribute<bool> open_mp_is_running_properly::answer = false;
+  open_mp_is_running_properly::open_mp_is_running_properly()
+  {answer.all_threads()=true;}
+  open_mp_is_running_properly::~open_mp_is_running_properly()
+  {answer.all_threads()=false;}
+  bool open_mp_is_running_properly::is_it(){return answer;}
+
+  region_partition::region_partition(const region_partition& rp) :
+    pparent_mesh(rp.pparent_mesh),
+    original_region(rp.original_region),
+    partitions(rp.partitions)  {   }
+
+  void region_partition::operator=(const region_partition& rp)
+  {
+    partitions.clear();
+
+    if (!rp.pparent_mesh) return;
+    pparent_mesh->copy_from(*rp.pparent_mesh);
+    original_region = rp.original_region;
+    partitions.resize(rp.partitions.size());
+    gmm::copy(rp.partitions,partitions);
+  }
+
+
+  region_partition::region_partition(mesh* pm, size_type id) :
+    pparent_mesh(pm),original_region(0),
+    partitions(num_threads())
+  {
+    scalar_type time = gmm::uclock_sec();
+    // in case of serial Getfem nothing to partition
+    if (num_threads()==1) {partitions[0]=id; return;}
+
+    //in case mesh is not provided, also don't do anything
+    if (!pm) return;
+
+    if (id == size_type(-1)) {
+      original_region.reset(new mesh_region(pm->convex_index()));
+      original_region->set_parent_mesh(pm);
+    } else{
+      GMM_ASSERT1(pm->has_region(id),"Improper region number");
+      original_region.reset(new mesh_region(pm->region(id)));
+    }
+    if (me_is_multithreaded_now())
+      GMM_WARNING0("building partitions inside parallel region");
+
+    omp_guard scoped_lock;
+    GMM_NOPERATION(scoped_lock);
+    size_type Nelems = original_region->size();
+    size_type psize = static_cast<size_type>
+      (std::ceil(static_cast<scalar_type >(Nelems)/
+       static_cast<scalar_type >(num_threads())));
+    mr_visitor mr(*original_region);
+    for(size_type thread = 0; thread<num_threads();thread++)
+    {
+      partitions[thread] =
+        
getfem::mesh_region::free_region_id(*(original_region->get_parent_mesh()));
+      mesh_region partition;
+      for(size_type i=thread*psize;i<(thread+1)*psize && 
!mr.finished();i++,++mr)
+      {
+        if (mr.is_face()) partition.add(mr.cv(),mr.f());
+        else partition.add(mr.cv());
+      }
+      pparent_mesh->region(partitions[thread]) = partition;
+    }
+    GMM_TRACE2("Partitioning time: "<<gmm::uclock_sec()-time<<" s.");
+  }
+
+  size_type region_partition::
+    thread_local_partition() const {
+      if (pparent_mesh==0 && num_threads() >1 ){
+        GMM_WARNING1("partition is empty and cannot be used \
+                     this means that the brick that created it should 
partition \
+                     its domain by himself");
+        return -10;
+      }
+      return partitions[this_thread()];
+  }
+
+  void omp_distribute<bool>::all_values_proxy::operator=(const bool& x)
+  {
+    for(std::vector<BOOL>::iterator it=distro.thread_values.begin();
+      it!=distro.thread_values.end();it++) *it=x;
+
+  }
+
+  thread_exception::thread_exception(): exceptions_(num_threads(), nullptr)
+  {}
+
+  thread_exception::~thread_exception() {rethrow();}
+
+  std::vector<std::exception_ptr> thread_exception::caughtExceptions() const
+  {
+    std::vector<std::exception_ptr> exceptions;
+    for (auto &&pException : exceptions_)
+    {
+      if (pException != nullptr) exceptions.push_back(pException);
+    }
+    return exceptions;
+  }
+
+  void thread_exception::rethrow()
+  {
+    for (auto &&pException : exceptions_)
+    {
+      if (pException != nullptr) std::rethrow_exception(pException);
+    }
+  }
+
+  void thread_exception::captureException()
+  {
+    exceptions_[this_thread()] = std::current_exception();
+  }
+
+}




reply via email to

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