Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Rightclick on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
From: KIRK, BENJAMIN (JSCEG) (NASA) <benjamin.kirk1@na...>  20050218 21:43:08

Original Message From: Mark Blome [mailto:mblome@...] Sent: Friday, February 18, 2005 3:44 PM To: KIRK, BENJAMIN (JSCEG) (NASA) Subject: hybrid FEMBEM Hi Ben, Sorry for not posting on my hybrid FEMBEM application for a week, I was busy with other programming stuff. In the meantime I figured out how the hybrid FEMTrefftz matrix should look like after the assemblance:  Ke_OO Ke_OG 0   U_O   Fe_O   Ke_GO Ke_GG 0  *  U_G  =  Fe_O + Fe_G   0 Q1 Q2+K2   A   0  where:  Ke_OO Ke_OG  = Ke = FEM stiffness matrix splitted up  Ke_GO Ke_GG  according to gamma and omega of FEM domain Q1 and Q2 are constraint matrices (simply resulting from forcing the boundary potential values on gamma from FEM and Trefftz calculations to equal in a weighted residual sense which results to Q1*U_G=Q2*A) and A is a vector containing the "intensities" of the functions approximating the Treffz domain. K2 is the Trefftz matrix. I introduced the matrix entries of Q1, Q2, K2 directly in the assemblance function using "system.matrix>add()". Now I have no idea how I could tell libmesh that I have additional DOFs and that the sparsity structure of the system matrix has changed. Do I have to change the sparsity structure "by hand" ? If so, where do I get the additional DOFs (in A) from? Can I construct something like a "large virtuell FEM element" with dim(A) Dofs attached to it? Im completely lost here! Is there an elegantly way that doesnt make too much changes in the library necessary ? I would be happy about some hints here, cheers, Mark PS: hope you received my reply to your last email, In case it got lost, here its again (however I gave up the idea of constraint matrices now that I introduced the additional entries directly): ___________________________________________________________ Hi Ben, this sounds like a very reasonable approach for a combined FEMBEM. I read an article where they used GaussSeidelRelaxation to assure the continuity of the potential but didn"t really understand what they where talking about. In the approach that I would like to use, the exterior Region is approximated by a so called "complete TSet" of functions (the method is called Trefftz). Rather than having one DOF per node like in conventional BEM there are only that much DOFs in the exterior region as TSet functions are used to approximate the potential: U(r)=SUM( a_i * f_i (r) ), i=1..N The functions f_i (r) are chosen such that they a priori fullfill the laplace equation in the volume domain and hence only surface integrals have to be evaluated to estimate the unknowns "a_i". For accurate calculations something between 50 and 200 functions should be sufficient. Compared to the surface DOFs I usually have in my calculations (more than 5000) this is rather a small number and my hope is that this approach will allow me to solve the whole matrix in one step. So I would like to use the approach to solve one sytem in one step rather than solving two systems iteratively. If my idea will proof to be a bad one (in terms of speed) I will happily come back to your proposal! But as I am planning to use a direct solver for the whole system (cause I have to solve the same system for about 100 different RHS within each step of an data inversion code) I first want to try it that way (I"ve heard there are very nice direct solvers that make use of the sparsity pattern of a given matrix and hence should not be too wasteful with memory and cpu time). For my approach I need to extend the matrix with additional DOFs. I think the numbering should be quiet easy cause the Trefftz DOFs "a_i" may, as they are not linked to mesh nodes, just go to "the end of the matrix" and RHS. I guess the linking of the FEM boundary DOFs (potential values at nodes) to the DOFs "a_i" such that U_surfnode_fem = U_surfnode_trefftz <=> U_surfnode_fem = SUM( a_i * f_i (surfnode) ), i=1..N will be more difficult. Actually I have to say that I have no idea how to do this in libmesh. I only heard that there are constraint matrices. They seem to be appropriate for this, I guess ?!?! I will be happy to hear more comments from you on this, cheers, Mark 