getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r5415 - in /trunk/getfem/src: getfem/getfem_global_func


From: logari81
Subject: [Getfem-commits] r5415 - in /trunk/getfem/src: getfem/getfem_global_function.h getfem_global_function.cc
Date: Wed, 12 Oct 2016 20:20:18 -0000

Author: logari81
Date: Wed Oct 12 22:20:16 2016
New Revision: 5415

URL: http://svn.gna.org/viewcvs/getfem?rev=5415&view=rev
Log:
implement function support info for global_function_sum and 
global_function_product

Modified:
    trunk/getfem/src/getfem/getfem_global_function.h
    trunk/getfem/src/getfem_global_function.cc

Modified: trunk/getfem/src/getfem/getfem_global_function.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_global_function.h?rev=5415&r1=5414&r2=5415&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_global_function.h    (original)
+++ trunk/getfem/src/getfem/getfem_global_function.h    Wed Oct 12 22:20:16 2016
@@ -118,6 +118,8 @@
     virtual scalar_type val(const fem_interpolation_context&) const;
     virtual void grad(const fem_interpolation_context&, base_small_vector&) 
const;
     virtual void hess(const fem_interpolation_context&, base_matrix&) const;
+    virtual bool is_in_support(const base_node &p) const;
+    virtual void bounding_box(base_node &bmin_, base_node &bmax_) const;
     global_function_sum(const std::vector<pglobal_function> &funcs);
     global_function_sum(pglobal_function f1, pglobal_function f2);
     global_function_sum(pglobal_function f1, pglobal_function f2,
@@ -134,6 +136,8 @@
     virtual scalar_type val(const fem_interpolation_context&) const;
     virtual void grad(const fem_interpolation_context&, base_small_vector&) 
const;
     virtual void hess(const fem_interpolation_context&, base_matrix&) const;
+    virtual bool is_in_support(const base_node &p) const;
+    virtual void bounding_box(base_node &bmin_, base_node &bmax_) const;
     global_function_product(pglobal_function f1_, pglobal_function f2_);
     virtual ~global_function_product()
     { DAL_STORED_OBJECT_DEBUG_DESTROYED(this, "Global function product"); }

Modified: trunk/getfem/src/getfem_global_function.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_global_function.cc?rev=5415&r1=5414&r2=5415&view=diff
==============================================================================
--- trunk/getfem/src/getfem_global_function.cc  (original)
+++ trunk/getfem/src/getfem_global_function.cc  Wed Oct 12 22:20:16 2016
@@ -135,6 +135,26 @@
     for (const auto &f : functions) {
       f->hess(c, hh);
       gmm::add(hh.as_vector(), h.as_vector());
+    }
+  }
+
+  bool global_function_sum::is_in_support(const base_node &p) const {
+    for (const auto &f : functions)
+      if (f->is_in_support(p)) return true;
+    return false;
+  }
+
+  void global_function_sum::bounding_box
+  (base_node &bmin_, base_node &bmax_) const {
+    if (functions.size() > 0)
+      functions[0]->bounding_box(bmin_, bmax_);
+    base_node bmin0(dim()), bmax0(dim());
+    for (const auto &f : functions) {
+      f->bounding_box(bmin0, bmax0);
+      for (size_type i=0; i < dim(); ++i) {
+        if (bmin0[i] < bmin_[i]) bmin_[i] = bmin0[i];
+        if (bmax0[i] > bmax_[i]) bmax_[i] = bmax0[i];
+      }
     }
   }
 
@@ -206,6 +226,23 @@
     f2->grad(c, g2);
     gmm::rank_one_update(h, g1, g2);
     gmm::rank_one_update(h, g2, g1);
+  }
+
+  bool global_function_product::is_in_support(const base_node &p) const {
+    return f1->is_in_support(p) && f2->is_in_support(p);
+  }
+
+  void global_function_product::bounding_box
+  (base_node &bmin_, base_node &bmax_) const {
+    base_node bmin0(dim()), bmax0(dim());
+    f1->bounding_box(bmin0, bmax0);
+    f2->bounding_box(bmin_, bmax_);
+    for (size_type i=0; i < dim(); ++i) {
+      if (bmin0[i] > bmin_[i]) bmin_[i] = bmin0[i];
+      if (bmax0[i] < bmax_[i]) bmax_[i] = bmax0[i];
+      if (bmin_[i] > bmax_[i])
+        GMM_WARNING1("Global function product with vanishing basis function");
+    }
   }
 
   global_function_product::global_function_product(pglobal_function f1_, 
pglobal_function f2_)




reply via email to

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