[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] r4913 - /trunk/getfem/src/getfem_generic_assembly.cc
From: |
logari81 |
Subject: |
[Getfem-commits] r4913 - /trunk/getfem/src/getfem_generic_assembly.cc |
Date: |
Thu, 26 Mar 2015 14:38:32 -0000 |
Author: logari81
Date: Thu Mar 26 15:38:32 2015
New Revision: 4913
URL: http://svn.gna.org/viewcvs/getfem?rev=4913&view=rev
Log:
some further code refactoring and small fixes
Modified:
trunk/getfem/src/getfem_generic_assembly.cc
Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL:
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=4913&r1=4912&r2=4913&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Thu Mar 26 15:38:32 2015
@@ -2808,32 +2808,29 @@
};
- struct ga_instruction_interpolate_val : public ga_instruction {
+ struct ga_instruction_interpolate : public ga_instruction {
base_tensor &t;
const mesh **m;
const mesh_fem *mfn, **mfg;
const base_vector *Un, **Ug;
fem_interpolation_context &ctx;
+ base_vector coeff;
size_type qdim;
virtual int exec(void) {
- GA_DEBUG_INFO("Instruction: interpolated variable value");
GMM_ASSERT1(ctx.is_convex_num_valid(), "No valid element for the "
"transformation. Probably transformation failed");
const mesh_fem &mf = *(mfg ? *mfg : mfn);
const base_vector &U = *(Ug ? *Ug : Un);
- base_vector coeff;
GMM_ASSERT1(&(mf.linked_mesh()) == *m, "Interpolation of a variable "
"on another mesh than the one it is defined on");
slice_vector_on_basic_dof_of_element(mf, U, ctx.convex_num(), coeff);
ctx.set_pf(mf.fem_of_element(ctx.convex_num()));
GMM_ASSERT1(ctx.pf(), "Undefined finite element method");
- ctx.pf()->interpolation(ctx, coeff, t.as_vector(), dim_type(qdim));
- // cout << "interpolate " << &U << " result : " << t.as_vector() << endl;
return 0;
}
- ga_instruction_interpolate_val
+ ga_instruction_interpolate
(base_tensor &tt, const mesh **m_, const mesh_fem *mfn_,
const mesh_fem **mfg_,
const base_vector *Un_, const base_vector **Ug_,
@@ -2842,70 +2839,42 @@
ctx(ctx_), qdim(q) {}
};
- struct ga_instruction_interpolate_grad : public ga_instruction {
- base_tensor &t;
- const mesh **m;
- const mesh_fem *mfn, **mfg;
- const base_vector *Un, **Ug;
- fem_interpolation_context &ctx;
- size_type qdim;
+ struct ga_instruction_interpolate_val : public ga_instruction_interpolate {
+ virtual int exec(void) {
+ GA_DEBUG_INFO("Instruction: interpolated variable value");
+ ga_instruction_interpolate::exec();
+ ctx.pf()->interpolation(ctx, coeff, t.as_vector(), dim_type(qdim));
+ // cout << "interpolate " << &U << " result : " << t.as_vector() << endl;
+ return 0;
+ }
+
+ using ga_instruction_interpolate::ga_instruction_interpolate;
+ };
+
+ struct ga_instruction_interpolate_grad : public ga_instruction_interpolate {
virtual int exec(void) {
GA_DEBUG_INFO("Instruction: interpolated variable grad");
- GMM_ASSERT1(ctx.is_convex_num_valid(), "No valid element for the "
- "transformation. Probably transformation failed");
- const mesh_fem &mf = *(mfg ? *mfg : mfn);
- const base_vector &U = *(Ug ? *Ug : Un);
- base_vector coeff;
- GMM_ASSERT1(&(mf.linked_mesh()) == *m, "Interpolatation of a variable "
- "on another mesh than the one it is defined on");
- slice_vector_on_basic_dof_of_element(mf, U, ctx.convex_num(), coeff);
- ctx.set_pf(mf.fem_of_element(ctx.convex_num()));
- GMM_ASSERT1(ctx.pf(), "Undefined finite element method");
+ ga_instruction_interpolate::exec();
base_matrix v(qdim, ctx.N());
ctx.pf()->interpolation_grad(ctx, coeff, v, dim_type(qdim));
gmm::copy(v.as_vector(), t.as_vector());
return 0;
}
- ga_instruction_interpolate_grad
- (base_tensor &tt, const mesh **m_, const mesh_fem *mfn_,
- const mesh_fem **mfg_,
- const base_vector *Un_, const base_vector **Ug_,
- fem_interpolation_context &ctx_, size_type q)
- : t(tt), m(m_), mfn(mfn_), mfg(mfg_), Un(Un_), Ug(Ug_),
- ctx(ctx_), qdim(q) {}
- };
-
- struct ga_instruction_interpolate_hess : public ga_instruction {
- base_tensor &t;
- const mesh **m;
- const mesh_fem *mfn, **mfg;
- const base_vector *Un, **Ug;
- fem_interpolation_context &ctx;
- size_type qdim;
+
+ using ga_instruction_interpolate::ga_instruction_interpolate;
+ };
+
+ struct ga_instruction_interpolate_hess : public ga_instruction_interpolate {
virtual int exec(void) {
GA_DEBUG_INFO("Instruction: interpolated variable hessian");
- GMM_ASSERT1(ctx.is_convex_num_valid(), "No valid element for the "
- "transformation. Probably transformation failed");
- const mesh_fem &mf = *(mfg ? *mfg : mfn);
- const base_vector &U = *(Ug ? *Ug : Un);
- base_vector coeff;
- GMM_ASSERT1(&(mf.linked_mesh()) == *m, "Interpolatation of a variable "
- "on another mesh than the one it is defined on");
- slice_vector_on_basic_dof_of_element(mf, U, ctx.convex_num(), coeff);
- ctx.set_pf(mf.fem_of_element(ctx.convex_num()));
- GMM_ASSERT1(ctx.pf(), "Undefined finite element method");
+ ga_instruction_interpolate::exec();
base_matrix v(qdim, ctx.N()*ctx.N());
ctx.pf()->interpolation_hess(ctx, coeff, v, dim_type(qdim));
gmm::copy(v.as_vector(), t.as_vector());
return 0;
}
- ga_instruction_interpolate_hess
- (base_tensor &tt, const mesh **m_, const mesh_fem *mfn_,
- const mesh_fem **mfg_,
- const base_vector *Un_, const base_vector **Ug_,
- fem_interpolation_context &ctx_, size_type q)
- : t(tt), m(m_), mfn(mfn_), mfg(mfg_), Un(Un_), Ug(Ug_),
- ctx(ctx_), qdim(q) {}
+
+ using ga_instruction_interpolate::ga_instruction_interpolate;
};
struct ga_instruction_interpolate_val_base : public ga_instruction {
@@ -2920,7 +2889,7 @@
GMM_ASSERT1(ctx.is_convex_num_valid(), "No valid element for the "
"transformation. Probably transformation failed");
const mesh_fem &mf = *(mfg ? *mfg : mfn);
- GMM_ASSERT1(&(mf.linked_mesh()) == *m, "Interpolataion of a variable "
+ GMM_ASSERT1(&(mf.linked_mesh()) == *m, "Interpolation of a variable "
"on another mesh than the one it is defined on");
ctx.set_pf(mf.fem_of_element(ctx.convex_num()));
GMM_ASSERT1(ctx.pf(), "Undefined finite element method");
@@ -3100,6 +3069,7 @@
"transformation");
size_type ndof = Z.sizes()[0];
size_type Qmult = qdim / Z.sizes()[1];
+ t_in.adjust_sizes(t_out.sizes());
ga_instruction_copy_val_base::exec();
do_transformation(ndof*Qmult);
return 0;
@@ -3122,6 +3092,7 @@
"transformation");
size_type ndof = Z.sizes()[0];
size_type Qmult = qdim / Z.sizes()[1];
+ t_in.adjust_sizes(t_out.sizes());
ga_instruction_copy_grad_base::exec();
do_transformation(ndof*Qmult);
return 0;
@@ -3138,15 +3109,18 @@
struct ga_instruction_elementary_transformation_hess_base
: public ga_instruction_copy_hess_base,
ga_instruction_elementary_transformation_base {
+
virtual int exec(void) {
GA_DEBUG_INFO("Instruction: Hessian of test functions with elementary "
"transformation");
size_type ndof = Z.sizes()[0];
size_type Qmult = qdim / Z.sizes()[1];
+ t_in.adjust_sizes(t_out.sizes());
ga_instruction_copy_hess_base::exec();
do_transformation(ndof*Qmult);
return 0;
}
+
ga_instruction_elementary_transformation_hess_base
(base_tensor &t_, base_tensor &Z_, size_type q,
pelementary_transformation e, const mesh_fem &mf_,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] r4913 - /trunk/getfem/src/getfem_generic_assembly.cc,
logari81 <=