From: KIRK, B. (JSC-E. (NASA) <ben...@na...> - 2004-12-09 18:46:24
|
The constraint matrix is typically used to enforce continuity constraints in the case of AMR, but the idea is general and can be employed for other uses... The idea is as follows: express local (element) degrees of freedom, u_e, as some linear combination of other degrees of freedom (which may or may not be local) u_o: u_e = C u_o where C is the constraint matrix. When an element matrix and vector are built, this is typically done in terms of local DOFs. If these DOFs are constrained then the local matrix/vector must be modified: K_e u_e = f_e becomes C^T K_e u_e = C^T f_e C^T K_e C u_o = C^T f_e The C u_o term above replaces the local degrees of freedom u_e with their constrained values, effectively constraining your trial space. The C^T imposes the same constraints on your test space. (see "Computational Grids" by Graham Carey, published by Taylor & Francis for more details To be more specific: o----o---- c ---------o | | | | | | | | o----o---- b | | | | | | | | | o----o---- a ---------o For the "hanging node" b, the constraint (assuming linear basis functions) is u_b = 0.5*(u_a + u_c) It is precisely this scenario that the constraint matrix addresses The approach used in libMesh is to handle "recursive constraints" (consider u_e = C1 u_o1, u_o1 = C2 u_o2). So, from the library's perspective, it is perfectly acceptable to constrain degrees of freedom in terms of other degrees of freedom which are themselves constrained... There are other approaches that may be used to enforce continuity (lagrange multipliers, penalty) but I like this one. Hope this helps... -Ben -----Original Message----- From: lib...@li... [mailto:lib...@li...] On Behalf Of Manav Bhatia Sent: Thursday, December 09, 2004 11:09 AM To: lib...@li... Subject: [Libmesh-users] Constraint matrix Hi, Could anyone please tell me about the basic idea behind the purpose of constraint matrix and how it works? Thanks in advance, Manav |