[cig-commits] r7663 - in long/3D/Gale/trunk: . src/Gale/Utils/src

walter at geodynamics.org walter at geodynamics.org
Fri Jul 13 16:15:07 PDT 2007


Author: walter
Date: 2007-07-13 16:15:07 -0700 (Fri, 13 Jul 2007)
New Revision: 7663

Modified:
   long/3D/Gale/trunk/
   long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.c
   long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.h
Log:
 r1870 at earth:  boo | 2007-07-13 15:22:15 -0700
 Make it possible for FrictionVC to not set the velocity on a boundary



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

Modified: long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.c
===================================================================
--- long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.c	2007-07-13 23:15:00 UTC (rev 7662)
+++ long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.c	2007-07-13 23:15:07 UTC (rev 7663)
@@ -252,6 +252,7 @@
 	void*						_mesh )
 {
 	FrictionVC*			self = (FrictionVC*)frictionVC;
+        int i;
 
 	self->isConstructed = True;
 	self->_dictionaryEntryName = _dictionaryEntryName;
@@ -262,6 +263,11 @@
         self->context=NULL;
         self->pressure=NULL;
         self->deviatoric_stress=NULL;
+        for(i=0;i<3;++i)
+          {
+            self->include_lower_boundary[i]=True;
+            self->include_upper_boundary[i]=True;
+          }
         self->friction=0;
 }
 
@@ -314,6 +320,12 @@
 		self->_entryTbl = Memory_Alloc_Array( FrictionVC_Entry, self->_entryCount, "FrictionVC->_entryTbl" );
 		varsVal = Dictionary_Entry_Value_GetMember(vcDictVal, "variables");
 
+                self->include_lower_boundary[I_AXIS]=Dictionary_Entry_Value_AsBool_with_Default(Dictionary_Entry_Value_GetMember(vcDictVal, "includeLowerX"),True);
+                self->include_lower_boundary[J_AXIS]=Dictionary_Entry_Value_AsBool_with_Default(Dictionary_Entry_Value_GetMember(vcDictVal, "includeLowerY"),True);
+                self->include_lower_boundary[K_AXIS]=Dictionary_Entry_Value_AsBool_with_Default(Dictionary_Entry_Value_GetMember(vcDictVal, "includeLowerZ"),True);
+                self->include_upper_boundary[I_AXIS]=Dictionary_Entry_Value_AsBool_with_Default(Dictionary_Entry_Value_GetMember(vcDictVal, "includeUpperX"),True);
+                self->include_upper_boundary[J_AXIS]=Dictionary_Entry_Value_AsBool_with_Default(Dictionary_Entry_Value_GetMember(vcDictVal, "includeUpperY"),True);
+                self->include_upper_boundary[K_AXIS]=Dictionary_Entry_Value_AsBool_with_Default(Dictionary_Entry_Value_GetMember(vcDictVal, "includeUpperZ"),True);
 		self->friction = Dictionary_Entry_Value_AsDouble(Dictionary_Entry_Value_GetMember(vcDictVal, "StaticFriction"));
 
 		for (entry_I = 0; entry_I < self->_entryCount; entry_I++)
@@ -402,12 +414,18 @@
 	}
 	else
 	{
+                int i;
 		self->_wall = FrictionVC_Wall_Size;
 		self->_entryCount = 0;
 		self->_entryTbl = NULL;
                 self->context=NULL;
                 self->pressure=NULL;
                 self->deviatoric_stress=NULL;
+                for(i=0;i<3;++i)
+                  {
+                    self->include_lower_boundary[i]=True;
+                    self->include_upper_boundary[i]=True;
+                  }
                 self->friction=0;
 	}
 }
@@ -513,6 +531,7 @@
 	FrictionVC*		newFrictionVC;
 	PtrMap*		map = ptrMap;
 	Bool		ownMap = False;
+        int i;
 	
 	if( !map ) {
 		map = PtrMap_New( 10 );
@@ -527,6 +546,11 @@
 	newFrictionVC->context = self->context;
 	newFrictionVC->pressure = self->pressure;
 	newFrictionVC->deviatoric_stress = self->deviatoric_stress;
+        for(i=0;i<3;++i)
+          {
+            newFrictionVC->include_lower_boundary[i]=self->include_lower_boundary[i];
+            newFrictionVC->include_upper_boundary[i]=self->include_upper_boundary[i];
+          }
 	newFrictionVC->friction = self->friction;
 	
 	if( deep ) {
@@ -617,7 +641,8 @@
             unsigned	nNodes, direction, boundary, basis[2];
             IJK		ijk;
             
-            /* Note that we select the order of the basis vectors to point inwards */
+            /* Note that we select the order of the basis vectors to
+               point inwards */
             switch (self->_wall) {
             case FrictionVC_Wall_Front:
               direction=K_AXIS;
@@ -690,8 +715,13 @@
                       /* Get x1 */
                       if(ijk[basis[0]]==0)
                         {
-                          x1[0]=self->_mesh->verts[n_i][0];
-                          x1[1]=self->_mesh->verts[n_i][1];
+                          if(self->include_lower_boundary[basis[0]]==True)
+                            {
+                              x1[0]=self->_mesh->verts[n_i][0];
+                              x1[1]=self->_mesh->verts[n_i][1];
+                            }
+                          else
+                            continue;
                         }
                       else
                         {
@@ -705,8 +735,13 @@
                       /* Get x2 */
                       if(ijk[basis[0]]==grid->sizes[basis[0]]-1)
                         {
-                          x2[0]=self->_mesh->verts[n_i][0];
-                          x2[1]=self->_mesh->verts[n_i][1];
+                          if(self->include_upper_boundary[basis[0]]==True)
+                            {
+                              x2[0]=self->_mesh->verts[n_i][0];
+                              x2[1]=self->_mesh->verts[n_i][1];
+                            }
+                          else
+                            continue;
                         }
                       else
                         {
@@ -753,8 +788,13 @@
                       /* Get x1 */
                       if(ijk[basis[0]]==0)
                         {
-                          x1[0]=self->_mesh->verts[n_i][0];
-                          x1[1]=self->_mesh->verts[n_i][1];
+                          if(self->include_lower_boundary[basis[0]]==True)
+                            {
+                              x1[0]=self->_mesh->verts[n_i][0];
+                              x1[1]=self->_mesh->verts[n_i][1];
+                            }
+                          else
+                            continue;
                         }
                       else
                         {
@@ -768,8 +808,13 @@
                       /* Get x2 */
                       if(ijk[basis[0]]==grid->sizes[basis[0]]-1)
                         {
-                          x2[0]=self->_mesh->verts[n_i][0];
-                          x2[1]=self->_mesh->verts[n_i][1];
+                          if(self->include_upper_boundary[basis[0]]==True)
+                            {
+                              x2[0]=self->_mesh->verts[n_i][0];
+                              x2[1]=self->_mesh->verts[n_i][1];
+                            }
+                          else
+                            continue;
                         }
                       else
                         {
@@ -784,8 +829,13 @@
                       /* Get x3 */
                       if(ijk[basis[1]]==0)
                         {
-                          x3[0]=self->_mesh->verts[n_i][0];
-                          x3[1]=self->_mesh->verts[n_i][1];
+                          if(self->include_lower_boundary[basis[1]]==True)
+                            {
+                              x3[0]=self->_mesh->verts[n_i][0];
+                              x3[1]=self->_mesh->verts[n_i][1];
+                            }
+                          else
+                            continue;
                         }
                       else
                         {
@@ -799,8 +849,13 @@
                       /* Get x4 */
                       if(ijk[basis[1]]==grid->sizes[basis[1]]-1)
                         {
-                          x4[0]=self->_mesh->verts[n_i][0];
-                          x4[1]=self->_mesh->verts[n_i][1];
+                          if(self->include_upper_boundary[basis[1]]==True)
+                            {
+                              x4[0]=self->_mesh->verts[n_i][0];
+                              x4[1]=self->_mesh->verts[n_i][1];
+                            }
+                          else
+                            continue;
                         }
                       else
                         {
@@ -848,8 +903,11 @@
 
                   /* Finally, add in the point if the frictional force
                      keeps the material pinned to the boundary. */
+/*                   printf("Adding %d %d %lf %lf %lf\n",ijk[0],ijk[1],p,normal_stress,tangential_norm); */
                   if(self->friction*(p-normal_stress)>=tangential_norm)
-                    IndexSet_Add(set,n_i);
+                    {
+                      IndexSet_Add(set,n_i);
+                    }
                 }
             }
           }

Modified: long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.h
===================================================================
--- long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.h	2007-07-13 23:15:00 UTC (rev 7662)
+++ long/3D/Gale/trunk/src/Gale/Utils/src/FrictionVC.h	2007-07-13 23:15:07 UTC (rev 7663)
@@ -62,6 +62,8 @@
                 /* StGermain, and we do not have access to StgFEM yet. */ \
                 FiniteElementContext*           context; \
                 FeVariable *deviatoric_stress, *pressure; \
+                Bool include_lower_boundary[3]; \
+                Bool include_upper_boundary[3]; \
                 double friction;
 
 	struct _FrictionVC { __FrictionVC };



More information about the cig-commits mailing list