[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