branch: master commit 1765106029a5aa40aa84435ebd151d460d294a6a Author: Konstantinos Poulios <logar...@gmail.com> AuthorDate: Wed Jan 29 08:57:05 2020 +0100
Fix wrong scaling of coupling matrix in internal variable condensation --- src/getfem_generic_assembly_compile_and_exec.cc | 29 +++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/getfem_generic_assembly_compile_and_exec.cc b/src/getfem_generic_assembly_compile_and_exec.cc index 2b67876..6a21e28 100644 --- a/src/getfem_generic_assembly_compile_and_exec.cc +++ b/src/getfem_generic_assembly_compile_and_exec.cc @@ -4534,6 +4534,7 @@ namespace getfem { protected: const bool false_=false; const size_type zero_=0; + const scalar_type one_=1; }; @@ -4714,6 +4715,18 @@ namespace getfem { (t_, ctx1_, ctx2_, a1, a2, coeff_, zero_, ipt_, false), Kxr(K_), Kxu(K_), I1(&I1_), I2__(&I2_), I2(I2__), imd1(imd1_), mf2__(&mf2_), mf2(mf2__), reduced_mf2(false_) {} + + ga_instruction_matrix_assembly_imd_mf // constructor without coeff (== 1) + (const base_tensor &t_, model_real_sparse_matrix &K_, + const fem_interpolation_context &ctx1_, + const fem_interpolation_context &ctx2_, + const gmm::sub_interval &I1_, const im_data *imd1_, const scalar_type &a1, + const gmm::sub_interval &I2_, const mesh_fem &mf2_, const scalar_type &a2, + const size_type &ipt_) + : ga_instruction_matrix_assembly_base + (t_, ctx1_, ctx2_, a1, a2, one_, zero_, ipt_, false), + Kxr(K_), Kxu(K_), I1(&I1_), I2__(&I2_), I2(I2__), + imd1(imd1_), mf2__(&mf2_), mf2(mf2__), reduced_mf2(false_) {} }; struct ga_instruction_matrix_assembly_mf_imd @@ -4816,6 +4829,17 @@ namespace getfem { : ga_instruction_matrix_assembly_base (t_, ctx1_, ctx2_, a1, a2, coeff_, zero_, ipt_, false), K(K_), I1(I1_), I2(I2_), imd1(imd1_), imd2(imd2_) {} + + ga_instruction_matrix_assembly_imd_imd // constructor without coeff (== 1) + (const base_tensor &t_, model_real_sparse_matrix &K_, + const fem_interpolation_context &ctx1_, + const fem_interpolation_context &ctx2_, + const gmm::sub_interval &I1_, const im_data *imd1_, const scalar_type &a1, + const gmm::sub_interval &I2_, const im_data *imd2_, const scalar_type &a2, + const size_type &ipt_) + : ga_instruction_matrix_assembly_base + (t_, ctx1_, ctx2_, a1, a2, one_, zero_, ipt_, false), + K(K_), I1(I1_), I2(I2_), imd1(imd1_), imd2(imd2_) {} }; @@ -7984,12 +8008,13 @@ namespace getfem { pgai = std::make_shared<ga_instruction_matrix_assembly_imd_mf> (Kq1j2pr, KQJpr, gis.ctx, gis.ctx, - I1, imd1, alpha1, I2, *mf2, alpha2, gis.coeff, gis.ipt); // TODO: name_test2 variable group + I1, imd1, alpha1, I2, *mf2, alpha2, gis.ipt); // constructor without gis.coeff + // TODO: name_test2 variable group else // for global variable imd2 == 0 pgai = std::make_shared<ga_instruction_matrix_assembly_imd_imd> (Kq1j2pr, KQJpr, gis.ctx, gis.ctx, - I1, imd1, alpha1, I2, imd2, alpha2, gis.coeff, gis.ipt); + I1, imd1, alpha1, I2, imd2, alpha2, gis.ipt); // constructor without gis.coeff rmi.instructions.push_back(std::move(pgai)); } const bool initialize = true;