[cig-commits] r12992 - in long/3D/Gale/trunk: . src/StgFEM/plugins/StandardConditionFunctions

walter at geodynamics.org walter at geodynamics.org
Sat Oct 4 11:44:03 PDT 2008


Author: walter
Date: 2008-10-04 11:44:03 -0700 (Sat, 04 Oct 2008)
New Revision: 12992

Modified:
   long/3D/Gale/trunk/
   long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
Log:
 r2350 at earth:  boo | 2008-09-23 06:47:56 -0700
 Make it possible to specify the initial guess of the boundary friction velocity



Property changes on: long/3D/Gale/trunk
___________________________________________________________________
Name: svk:merge
   - 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:2347
   + 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:2350

Modified: long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c	2008-10-03 17:11:55 UTC (rev 12991)
+++ long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c	2008-10-04 18:44:03 UTC (rev 12992)
@@ -1542,7 +1542,8 @@
 
 void StgFEM_StandardConditionFunctions_StaticFriction_Internal
 (Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result,
- double boundary_v, double boundary_upper_v, double boundary_lower_v,
+ double boundary_v, double boundary_initial_v,
+ double boundary_upper_v, double boundary_lower_v,
  Bool set_upper_boundary_v, Bool set_lower_boundary_v,
  double coefficient, unsigned normal_dim, unsigned tangent_dim) {
   FiniteElementContext * context = (FiniteElementContext*)_context;
@@ -1594,22 +1595,30 @@
   if(set_lower_boundary_v==True && inds[tangent_dim]==0)
     {
       *result=boundary_lower_v;
+
+      printf("friction %d %d %g fixed\n",tangent_dim,inds[tangent_dim],*result);
     }
   else if(set_upper_boundary_v==True
           && inds[tangent_dim]==(grid->sizes[tangent_dim]-1))
     {
       *result=boundary_upper_v;
+
+      printf("friction %d %d %g fixed\n",tangent_dim,inds[tangent_dim],*result);
     }
   else if(context->nonLinearIteration_I==NULL
           || (context->timeStep < 2 && *(context->nonLinearIteration_I)==0)
           || p==0)
     {
-      *result=boundary_v;
+      *result=boundary_initial_v;
+
+      printf("friction %d %d %g initial\n",tangent_dim,inds[tangent_dim],*result);
     }      
   else if(*(context->nonLinearIteration_I)==0
           || (fabs(tangent_stress)<yield_stress && v[tangent_dim]==boundary_v))
     {
       *result=v[tangent_dim];
+
+      printf("friction %d %d old\n",tangent_dim,inds[tangent_dim]);
     }      
   else
     {
@@ -1632,23 +1641,35 @@
       /* Make sure that we always make the velocity closer to the
          boundary velocity */
       if(v_off[tangent_dim]>boundary_v)
-        *result=v_off[tangent_dim]-delta*yield_stress/viscosity;
+        *result=v_off[tangent_dim]-delta*yield_stress/(2*viscosity);
       else
-        *result=v_off[tangent_dim]+delta*yield_stress/viscosity;
+        *result=v_off[tangent_dim]+delta*yield_stress/(2*viscosity);
       
+      /* Average the results so that we don't oscillate a lot, looking
+         for a solution. */
+      *result=(*result+v[tangent_dim])/2;
+      
       /* If the yield stress is negative (e.g. the pressure is
          negative), then the boundary moves in lockstep with the
          element above it. */
       if(yield_stress<0)
-        *result=v_off[tangent_dim];
-      
-      /* Average the results so that we don't oscillate a lot, looking
-         for a solution. */
-      *result=(*result+v[tangent_dim])/2;
+        {
+          *result=v_off[tangent_dim];
+          
+          printf("friction %d %d %g %g set\n",tangent_dim,inds[tangent_dim],
+                 *result, v_off[tangent_dim]);
+        }
 
       /* If we overshot, make the node stick */
       if((*result-boundary_v)*(v_off[tangent_dim]-boundary_v)<0)
         *result=boundary_v;
+
+      printf("friction %d %d %g %g %g %g %g %g slide\n",
+             tangent_dim, inds[tangent_dim],
+             *result,delta,
+             yield_stress,normal_stress,p,v_off[tangent_dim]);
+
+
     }
 }
 
@@ -1660,7 +1681,7 @@
   Dictionary* dictionary = context->dictionary;
   unsigned normal_dim, tangent_dim;
   double boundary_v,boundary_upper_v,boundary_lower_v,coefficient,
-    nonsense_number;
+    nonsense_number, boundary_initial_v;
   Bool set_upper_boundary_v, set_lower_boundary_v;
   set_upper_boundary_v=True;
   set_lower_boundary_v=True;
@@ -1685,6 +1706,11 @@
       boundary_lower_v=boundary_v;
       set_lower_boundary_v=False;
     }
+  boundary_initial_v =
+    Dictionary_GetDouble_WithDefault(dictionary,
+                                     "StaticFrictionInitialV",nonsense_number);
+  if(boundary_initial_v==nonsense_number)
+    boundary_initial_v=boundary_v;
 
   coefficient =
     Dictionary_GetDouble_WithDefault(dictionary,
@@ -1697,7 +1723,8 @@
                                           "StaticFrictionTangentDim",0);
 
   StgFEM_StandardConditionFunctions_StaticFriction_Internal
-    (node_lI,var_I,_context,_result,boundary_v,boundary_upper_v,
+    (node_lI,var_I,_context,_result,boundary_v,boundary_initial_v,
+     boundary_upper_v,
      boundary_lower_v,set_upper_boundary_v,set_lower_boundary_v,
      coefficient,normal_dim,tangent_dim);
 }
@@ -1711,7 +1738,7 @@
   Dictionary* dictionary = context->dictionary;
   unsigned normal_dim, tangent_dim;
   double boundary_v,boundary_upper_v,boundary_lower_v,coefficient,
-    nonsense_number;
+    nonsense_number, boundary_initial_v;
   Bool set_upper_boundary_v, set_lower_boundary_v;
   set_upper_boundary_v=True;
   set_lower_boundary_v=True;
@@ -1740,6 +1767,11 @@
       boundary_lower_v=boundary_v;
       set_lower_boundary_v=False;
     }
+  boundary_initial_v =
+    Dictionary_GetDouble_WithDefault(dictionary,
+                                     "StaticFriction2InitialV",nonsense_number);
+  if(boundary_initial_v==nonsense_number)
+    boundary_initial_v=boundary_v;
 
   coefficient =
     Dictionary_GetDouble_WithDefault(dictionary,
@@ -1752,7 +1784,8 @@
                                           "StaticFriction2TangentDim",0);
 
   StgFEM_StandardConditionFunctions_StaticFriction_Internal
-    (node_lI,var_I,_context,_result,boundary_v,boundary_upper_v,
+    (node_lI,var_I,_context,_result,boundary_v,boundary_initial_v,
+     boundary_upper_v,
      boundary_lower_v,set_upper_boundary_v,set_lower_boundary_v,
      coefficient,normal_dim,tangent_dim);
 }



More information about the cig-commits mailing list