[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) {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r5509 - in /trunk/getfem: src/getfem/getfem_assembling.h tests/laplacian.cc tests/schwarz_additive.cc,
Yves . Renard <=