[cig-commits] r16735 - short/3D/PyLith/trunk/libsrc/problems

brad at geodynamics.org brad at geodynamics.org
Mon May 17 17:30:19 PDT 2010


Author: brad
Date: 2010-05-17 17:30:19 -0700 (Mon, 17 May 2010)
New Revision: 16735

Modified:
   short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc
Log:
Added comments on fault preconditioner.

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc	2010-05-17 09:07:25 UTC (rev 16734)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc	2010-05-18 00:30:19 UTC (rev 16735)
@@ -23,7 +23,7 @@
 
 #include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
 
-#define FIELD_SPLIT
+//#define FIELD_SPLIT
 #define NEW_FAULT_PRECONDITIONER
 
 #if defined(FIELD_SPLIT)
@@ -113,6 +113,45 @@
       // Create a mapping to indices for that space (might be in FS)
       err = PetscFree(ksps); CHECK_PETSC_ERROR(err);
     } // if
+
+    /** We have J = [A C^T]
+     *              [C   0]
+     *
+     * We want to approximate C A^(-1) C^T.
+     *
+     * Consider Lagrange vertex L that constrains the relative
+     * displacement between vertex N on the negative side of the fault
+     * and vertex P on the positive side of the fault.
+     *
+     * If we approximate A(-1) by 1/diag(A), then we can write 
+     * C A^(-1) C^T for a 2-D case as
+     *
+     * [-R00 -R01  R00 R01][Ai_nx 0      0     0    ][-R00 -R10]
+     * [-R10 -R11  R10 R11][      Ai_ny  0     0    ][-R01 -R11]
+     *                     [      0      Ai_px 0    ][ R00  R10]
+     *                     [                   Ai_py][ R01  R11]
+     *
+     * where
+     *
+     * Ai_nx is the inverse of the diag(A) for DOF x of vertex N
+     * Ai_ny is the inverse of the diag(A) for DOF y of vertex N
+     * Ai_px is the inverse of the diag(A) for DOF x of vertex P
+     * Ai_py is the inverse of the diag(A) for DOF y of vertex P
+     *
+     * If Ai_nx == Ai_ny and Ai_px == Ai_py, then the result is
+     * diagonal. Otherwise, the off-diagonal terms will be nonzero,
+     * but we expect them to be small. Since we already approximate
+     * the inverse of A by the inverse of the diagonal, we drop the
+     * off-diagonal terms of C A^(-1) C^T:
+     *
+     * Term for DOF x of vertex L is: 
+     * R00^2 (Ai_nx + Ai_px) + R01^2 (Ai_ny + Ai_py)
+     *
+     * Term for DOF y of vertex L is: 
+     * R10^2 (Ai_nx + Ai_px) + R11^2 (Ai_ny + Ai_py)
+     *
+     */
+
 #endif
 #endif
   }



More information about the CIG-COMMITS mailing list