[cig-commits] r15314 - short/3D/PyLith/trunk/pylith/problems

brad at geodynamics.org brad at geodynamics.org
Wed Jun 17 08:44:00 PDT 2009


Author: brad
Date: 2009-06-17 08:43:57 -0700 (Wed, 17 Jun 2009)
New Revision: 15314

Modified:
   short/3D/PyLith/trunk/pylith/problems/Implicit.py
Log:
Improved description of how the system is solved using a displacement increment formulation.

Modified: short/3D/PyLith/trunk/pylith/problems/Implicit.py
===================================================================
--- short/3D/PyLith/trunk/pylith/problems/Implicit.py	2009-06-17 06:07:50 UTC (rev 15313)
+++ short/3D/PyLith/trunk/pylith/problems/Implicit.py	2009-06-17 15:43:57 UTC (rev 15314)
@@ -26,20 +26,39 @@
   Python Implicit object for solving equations using an implicit
   formulation.
 
-  The formulation has the general form, [A(t+dt)] {u(t+dt)} = {b(t+dt)},
-  where we want to solve for {u(t+dt)}. [A(t+dt)] generally
-  depends on {u(t+dt)} as well as the current stresses and additional
-  state variables.  For linear elastic or viscoelastic problems with
-  constant time step size, A is a constant (after the elastic solution).
-  {b(t+dt)} generally depends on the loads applied for time step t+dt
-  (including the contributions to the internal force vector from
-  displacement/velocity BC) as well as the internal force vector computed
-  from the current stresses.
+  The formulation has the general form,
 
-  Jacobian: A(t+dt)
-  solution: u(t+dt)
-  residual: bextern(t+dt) - bintern(t+dt)
+  [A(t+dt)] {u(t+dt)} = {b(t+dt)}. 
 
+  We know the solution at time t, so we write {u(t+dt)} as {u(t)} +
+  {du(t)}, where {du(t)} is the increment in the solution from time t
+  to time t+dt. Thus, we solve
+
+  [A(t+dt)] {du(t)} = {b(t+dt)} - [A(t+dt)]{u(t)}.
+
+  We solve this system by forming the Jacobian, A, and the residual
+
+  {r(t+dt)} = {b(t+dt)} - [A(t+dt)]{u(t)} - [A(t+dt)]{du(t)}
+
+  which we combine into
+
+  {r(t+dt)} = {b(t+dt)} - [A(t+dt)]{u(t)+du(t)}.
+
+  The method reformJacobian() computes [A(t+dt)] and the method
+  reformResidual computes {r(t+dt)}. Note that in forming the residual
+  we compute the action [A(t+dt)]{u(t)+du(t)} and do not perform a
+  matrix-vector multiplication.
+
+  [A(t+dt)] generally depends on {u(t+dt)} as well as the current
+  stresses and additional state variables.  
+
+  For linear elastic or viscoelastic problems with constant time step
+  size, A is a constant (after the elastic solution).  {b(t+dt)}
+  generally depends on the loads applied for time step t+dt (including
+  the contributions to the internal force vector from
+  displacement/velocity BC) as well as the internal force vector
+  computed from the current stresses.
+
   Factory: pde_formulation.
   """
 
@@ -192,8 +211,7 @@
     self._eventLogger.stagePush("Solve")
     self.solver.solve(dispIncr, self.jacobian, residual)
 
-    # DEBUGGING
-    # Verify solution makes residual 0
+    # DEBUGGING Verify solution makes residual 0
     #self._reformResidual(t+dt, dt)
     #residual.view("RESIDUAL")
     



More information about the CIG-COMMITS mailing list