getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r5509 - in /trunk/getfem: src/getfem/getfem_assembling.


From: Yves . Renard
Subject: [Getfem-commits] r5509 - in /trunk/getfem: src/getfem/getfem_assembling.h tests/laplacian.cc tests/schwarz_additive.cc
Date: Wed, 01 Mar 2017 08:53:43 -0000

Author: renard
Date: Wed Mar  1 09:53:41 2017
New Revision: 5509

URL: http://svn.gna.org/viewcvs/getfem?rev=5509&view=rev
Log:
move back assembling_Dirichlet_condition in getfem_assembling.h

Modified:
    trunk/getfem/src/getfem/getfem_assembling.h
    trunk/getfem/tests/laplacian.cc
    trunk/getfem/tests/schwarz_additive.cc

Modified: trunk/getfem/src/getfem/getfem_assembling.h
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem/getfem_assembling.h?rev=5509&r1=5508&r2=5509&view=diff
==============================================================================
--- trunk/getfem/src/getfem/getfem_assembling.h (original)
+++ trunk/getfem/src/getfem/getfem_assembling.h Wed Mar  1 09:53:41 2017
@@ -1447,6 +1447,42 @@
     }
   }
 
+  template<typename MATRM, typename VECT1, typename VECT2>
+  void assembling_Dirichlet_condition
+  (MATRM &RM, VECT1 &B, const getfem::mesh_fem &mf, size_type boundary,
+   const VECT2 &F) {
+    // Works only for Lagrange dofs.
+    size_type Q=mf.get_qdim();
+    GMM_ASSERT1(!(mf.is_reduced()), "This function is not adapted to "
+               "reduced finite element methods"); 
+    dal::bit_vector nndof = mf.basic_dof_on_region(boundary);
+    getfem::pfem pf1;
+    for (dal::bv_visitor cv(mf.convex_index()); !cv.finished(); ++cv) {
+      pf1 = mf.fem_of_element(cv);
+      getfem::pdof_description ldof = getfem::lagrange_dof(pf1->dim());
+      size_type nbd = pf1->nb_dof(cv);
+      for (size_type i = 0; i < nbd; i++) {
+       size_type dof1 = mf.ind_basic_dof_of_element(cv)[i*Q];
+       if (nndof.is_in(dof1) && pf1->dof_types()[i] == ldof) {
+         // cout << "dof : " << i << endl;
+         for (size_type j = 0; j < nbd; j++) {
+           size_type dof2 = mf.ind_basic_dof_of_element(cv)[j*Q];
+           for (size_type k = 0; k < Q; ++k)
+             for (size_type l = 0; l < Q; ++l) {
+               if (!(nndof.is_in(dof2)) &&
+                   getfem::dof_compatibility(pf1->dof_types()[j],
+                                             getfem::lagrange_dof(pf1->dim())))
+                 B[dof2+k] -= RM(dof2+k, dof1+l) * F[dof1+l];
+               RM(dof2+k, dof1+l) = RM(dof1+l, dof2+k) = 0;
+             }
+         }
+         for (size_type k = 0; k < Q; ++k)
+           { RM(dof1+k, dof1+k) = 1; B[dof1+k] = F[dof1+k]; }
+       }
+      }
+    }
+  }
+  
   /**
      Assembly of generalized Dirichlet constraints h(x)u(x) = r(x),
      where h is a QxQ matrix field (Q == mf_u.get_qdim()), outputs a

Modified: trunk/getfem/tests/laplacian.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/tests/laplacian.cc?rev=5509&r1=5508&r2=5509&view=diff
==============================================================================
--- trunk/getfem/tests/laplacian.cc     (original)
+++ trunk/getfem/tests/laplacian.cc     Wed Mar  1 09:53:41 2017
@@ -102,42 +102,6 @@
                            mf_coef(mesh) {}
 };
 
-template<typename MATRM, typename VECT1, typename VECT2>
-void assembling_Dirichlet_condition
-(MATRM &RM, VECT1 &B, const getfem::mesh_fem &mf, size_type boundary,
- const VECT2 &F) {
-  // Marche uniquement pour des ddl de lagrange.
-  size_type Q=mf.get_qdim();
-  GMM_ASSERT1(!(mf.is_reduced()), "This function is not adapted to "
-             "reduced finite element methods"); 
-  dal::bit_vector nndof = mf.basic_dof_on_region(boundary);
-  getfem::pfem pf1;
-  for (dal::bv_visitor cv(mf.convex_index()); !cv.finished(); ++cv) {
-    pf1 = mf.fem_of_element(cv);
-    getfem::pdof_description ldof = getfem::lagrange_dof(pf1->dim());
-    size_type nbd = pf1->nb_dof(cv);
-    for (size_type i = 0; i < nbd; i++) {
-      size_type dof1 = mf.ind_basic_dof_of_element(cv)[i*Q];
-      if (nndof.is_in(dof1) && pf1->dof_types()[i] == ldof) {
-       // cout << "dof : " << i << endl;
-       for (size_type j = 0; j < nbd; j++) {
-         size_type dof2 = mf.ind_basic_dof_of_element(cv)[j*Q];
-         for (size_type k = 0; k < Q; ++k)
-           for (size_type l = 0; l < Q; ++l) {
-             if (!(nndof.is_in(dof2)) &&
-                 getfem::dof_compatibility(pf1->dof_types()[j],
-                                   getfem::lagrange_dof(pf1->dim())))
-               B[dof2+k] -= RM(dof2+k, dof1+l) * F[dof1+l];
-             RM(dof2+k, dof1+l) = RM(dof1+l, dof2+k) = 0;
-           }
-       }
-       for (size_type k = 0; k < Q; ++k)
-         { RM(dof1+k, dof1+k) = 1; B[dof1+k] = F[dof1+k]; }
-      }
-    }
-  }
-}
-
 /* Read parameters from the .param file, build the mesh, set finite element
  * and integration methods and selects the boundaries.
  */
@@ -257,7 +221,8 @@
   if (!gen_dirichlet) {    
     std::vector<scalar_type> D(nb_dof);
     getfem::interpolation_function(mf_u, D, sol_u);
-    assembling_Dirichlet_condition(SM, B, mf_u, DIRICHLET_BOUNDARY_NUM, D);
+    getfem::assembling_Dirichlet_condition(SM, B, mf_u,
+                                          DIRICHLET_BOUNDARY_NUM, D);
   } else {
     gmm::resize(F, nb_dof_rhs);
     getfem::interpolation_function(mf_rhs, F, sol_u);

Modified: trunk/getfem/tests/schwarz_additive.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/tests/schwarz_additive.cc?rev=5509&r1=5508&r2=5509&view=diff
==============================================================================
--- trunk/getfem/tests/schwarz_additive.cc      (original)
+++ trunk/getfem/tests/schwarz_additive.cc      Wed Mar  1 09:53:41 2017
@@ -44,42 +44,6 @@
 using bgeot::dim_type;
 using bgeot::short_type;
 using bgeot::scalar_type;
-
-template<typename MATRM, typename VECT1, typename VECT2>
-void assembling_Dirichlet_condition
-(MATRM &RM, VECT1 &B, const getfem::mesh_fem &mf, size_type boundary,
- const VECT2 &F) {
-  // Marche uniquement pour des ddl de lagrange.
-  size_type Q=mf.get_qdim();
-  GMM_ASSERT1(!(mf.is_reduced()), "This function is not adapted to "
-             "reduced finite element methods"); 
-  dal::bit_vector nndof = mf.basic_dof_on_region(boundary);
-  getfem::pfem pf1;
-  for (dal::bv_visitor cv(mf.convex_index()); !cv.finished(); ++cv) {
-    pf1 = mf.fem_of_element(cv);
-    getfem::pdof_description ldof = getfem::lagrange_dof(pf1->dim());
-    size_type nbd = pf1->nb_dof(cv);
-    for (size_type i = 0; i < nbd; i++) {
-      size_type dof1 = mf.ind_basic_dof_of_element(cv)[i*Q];
-      if (nndof.is_in(dof1) && pf1->dof_types()[i] == ldof) {
-       // cout << "dof : " << i << endl;
-       for (size_type j = 0; j < nbd; j++) {
-         size_type dof2 = mf.ind_basic_dof_of_element(cv)[j*Q];
-         for (size_type k = 0; k < Q; ++k)
-           for (size_type l = 0; l < Q; ++l) {
-             if (!(nndof.is_in(dof2)) &&
-                 getfem::dof_compatibility(pf1->dof_types()[j],
-                                   getfem::lagrange_dof(pf1->dim())))
-               B[dof2+k] -= RM(dof2+k, dof1+l) * F[dof1+l];
-             RM(dof2+k, dof1+l) = RM(dof1+l, dof2+k) = 0;
-           }
-       }
-       for (size_type k = 0; k < Q; ++k)
-         { RM(dof1+k, dof1+k) = 1; B[dof1+k] = F[dof1+k]; }
-      }
-    }
-  }
-}
 
 typedef gmm::row_matrix<gmm::rsvector<scalar_type> > general_sparse_matrix;
 typedef std::vector<scalar_type>                     linalg_vector;
@@ -250,7 +214,7 @@
   linalg_vector UD(nb_dof);
   for (size_type j = 0; j < nb_dof/N; j++)
     for (size_type k = 0; k < size_type(N); k++) UD[j*N + k] = D[k];
-  assembling_Dirichlet_condition(RM, F, mef, 0, UD);
+  getfem::assembling_Dirichlet_condition(RM, F, mef, 0, UD);
 }
 
 int pb_data::solve_cg(void) {




reply via email to

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