|
From: | Domenico Notaro |
Subject: | [Getfem-users] SOLVED: Assembly of 1D Poiseuille term |
Date: | Tue, 4 Aug 2015 16:02:42 +0000 |
Dear Professor Renard,
I tried with GradGT() but I had some issues in reducing the matrix properly. Finally I resolved by computing handy the x-y-z components of the tangent vector lambda and multiplying those for the components of the gradient, within the assembly
procedure. It seems to work properly./// Build the mixed pressure term for 1D mesh /// D = - \int p du/ds ds = = - \int p GRAD(u).lambda template<typename MAT, typename VEC> void asm_poiseuille(MAT & D, const VEC & lambdax, const VEC & lambday, const VEC & lambdaz, const mesh_im & mim, const mesh_fem & mf_u, const mesh_fem & mf_p, const mesh_fem & mf_data, const mesh_region & rg = mesh_region::all_convexes() ) { GMM_ASSERT1(mf_p.get_qdim() == 1 && mf_u.get_qdim() == 1, "invalid data mesh fem (Qdim=1 required)"); generic_assembly assem("l1=data$1(#3); l2=data$2(#3); l3=data$3(#3);" "t=comp(Base(#1).Grad(#2).Base(#3)); M$1(#1,#2)+=-t(:,:,1,i).l1(i)-t(:,:,2,i).l2(i)-t(:,:,3,i).l3(i);"); assem.push_mi(mim); assem.push_mf(mf_p); assem.push_mf(mf_u); assem.push_mf(mf_data); assem.push_data(lambdax); assem.push_data(lambday); assem.push_data(lambdaz); assem.push_mat(D); assem.assembly(rg); } Thank you, domenico_notaro |
[Prev in Thread] | Current Thread | [Next in Thread] |