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

walter at geodynamics.org walter at geodynamics.org
Thu Jul 20 20:05:07 PDT 2006


Author: walter
Date: 2006-07-20 20:05:06 -0700 (Thu, 20 Jul 2006)
New Revision: 4049

Modified:
   long/3D/Gale/trunk/src/StgFEM/
   long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
   long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h
Log:
 r698 at earth:  boo | 2006-07-20 20:02:58 -0700
  r691 at earth (orig r609):  RebeccaFarrington | 2006-07-12 22:17:43 -0700
  including functions (Velocity_PartialRotationX and Velocity_PartialRotationY) that allow for rotation in only a specific region of BCs 
  Parameters required are 
  <param name="SolidBodyRotationCentreX">0.5</param>
  <param name="SolidBodyRotationCentreY">0.5</param>
  <param name="SolidBodyRotationCentreZ">1.0</param>
  <param name="SolidBodyRotationOmega">1.0e6</param>
  <param name="RadiusCylinder"> 0.2 </param>
  
 



Property changes on: long/3D/Gale/trunk/src/StgFEM
___________________________________________________________________
Name: svk:merge
   - 38867592-cf10-0410-9e16-a142ea72ac34:/cig:697
db209038-57f2-0310-97fa-b160e0ae9d04:/trunk:608
   + 38867592-cf10-0410-9e16-a142ea72ac34:/cig:698
db209038-57f2-0310-97fa-b160e0ae9d04:/trunk:609

Modified: long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c	2006-07-21 03:05:00 UTC (rev 4048)
+++ long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c	2006-07-21 03:05:06 UTC (rev 4049)
@@ -56,6 +56,12 @@
 	condFunc = ConditionFunction_New( StG_FEM_StandardConditionFunctions_SolidBodyRotation, "Velocity_SolidBodyRotation" );
 	ConditionFunction_Register_Add( context->condFunc_Register, condFunc );
 	
+	condFunc = ConditionFunction_New( StG_FEM_StandardConditionFunctions_PartialRotationX, "Velocity_PartialRotationX" );
+	ConditionFunction_Register_Add( context->condFunc_Register, condFunc );
+		
+	condFunc = ConditionFunction_New( StG_FEM_StandardConditionFunctions_PartialRotationY, "Velocity_PartialRotationY" );
+	ConditionFunction_Register_Add( context->condFunc_Register, condFunc );
+	
 	condFunc = ConditionFunction_New( StG_FEM_StandardConditionFunctions_SimpleShear, "Velocity_SimpleShear" );
 	ConditionFunction_Register_Add( context->condFunc_Register, condFunc );
 	condFunc = ConditionFunction_New( StG_FEM_StandardConditionFunctions_Extension, "Velocity_Extension" );
@@ -144,6 +150,84 @@
 	result[ J_AXIS ] =  omega * vector[ I_AXIS ];
 }
 
+
+void StG_FEM_StandardConditionFunctions_PartialRotationX( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) {
+	DiscretisationContext*	context            = (DiscretisationContext*)_context;
+	Dictionary*             dictionary         = context->dictionary;
+	FeVariable*             feVariable         = NULL;
+	FiniteElement_Mesh*     mesh               = NULL;
+	double*                 result             = (double*) _result;
+	double*                 coord;
+	Coord                   centre;
+	Coord                   vector;
+	double                  omega;
+	double			size;
+
+	feVariable = (FeVariable*)FieldVariable_Register_GetByName( context->fieldVariable_Register, "VelocityField" );
+	mesh       = feVariable->feMesh;
+
+	/* Find Centre of Solid Body Rotation */
+	centre[ I_AXIS ] = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationCentreX", 0.0 );
+	centre[ J_AXIS ] = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationCentreY", 0.0 );
+	centre[ K_AXIS ] = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationCentreZ", 0.0 );
+	size             = Dictionary_GetDouble_WithDefault( dictionary, "RadiusCylinder", 0.0 );
+	size += 0.1;
+	omega            = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationOmega",   1.0 );
+
+	/* Find coordinate of node */
+	coord = Mesh_CoordAt( mesh, node_lI );
+
+	/* Find vector from centre to node */
+	StGermain_VectorSubtraction( vector, coord, centre, 2 );
+
+	/*if (context->currentTime > 1.33e-6)
+		omega=0.0;*/
+	
+	if ((vector[ I_AXIS ]*vector[ I_AXIS ]+vector[ J_AXIS ]*vector[ J_AXIS ])<=size*size)
+		*result = -omega * vector[ J_AXIS ];
+	else
+		*result = 0.0;
+}
+
+void StG_FEM_StandardConditionFunctions_PartialRotationY( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) {
+	DiscretisationContext*	context            = (DiscretisationContext*)_context;
+	Dictionary*             dictionary         = context->dictionary;
+	FeVariable*             feVariable         = NULL;
+	FiniteElement_Mesh*     mesh               = NULL;
+	double*                 result             = (double*) _result;
+	double*                 coord;
+	Coord                   centre;
+	Coord                   vector;
+	double                  omega;
+	double			size;
+
+	feVariable = (FeVariable*)FieldVariable_Register_GetByName( context->fieldVariable_Register, "VelocityField" );
+	mesh       = feVariable->feMesh;
+
+	/* Find Centre of Solid Body Rotation */
+	centre[ I_AXIS ] = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationCentreX", 0.0 );
+	centre[ J_AXIS ] = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationCentreY", 0.0 );
+	centre[ K_AXIS ] = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationCentreZ", 0.0 );
+	size             = Dictionary_GetDouble_WithDefault( dictionary, "RadiusCylinder", 0.0 );
+	size += 0.1;
+	omega            = Dictionary_GetDouble_WithDefault( dictionary, "SolidBodyRotationOmega",   1.0 );
+
+	/* Find coordinate of node */
+	coord = Mesh_CoordAt( mesh, node_lI );
+
+	/* Find vector from centre to node */
+	StGermain_VectorSubtraction( vector, coord, centre, 2 );
+
+	/*if (context->currentTime > 1.33e-6)
+		omega=0.0;*/
+	
+	if ((vector[ I_AXIS ]*vector[ I_AXIS ]+vector[ J_AXIS ]*vector[ J_AXIS ])<=size*size)
+		*result =  omega * vector[ I_AXIS ];
+	else 
+		*result = 0.0;
+}
+
+
 void StG_FEM_StandardConditionFunctions_SimpleShear( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) {
 	DiscretisationContext*	context            = (DiscretisationContext*)_context;
 	Dictionary*             dictionary         = context->dictionary;

Modified: long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h	2006-07-21 03:05:00 UTC (rev 4048)
+++ long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.h	2006-07-21 03:05:06 UTC (rev 4049)
@@ -60,6 +60,8 @@
 Index StG_FEM_StandardConditionFunctions_Register( PluginsManager* pluginsManager );
 
 void StG_FEM_StandardConditionFunctions_SolidBodyRotation( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) ;
+void StG_FEM_StandardConditionFunctions_PartialRotationX( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) ;
+void StG_FEM_StandardConditionFunctions_PartialRotationY( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) ;
 void StG_FEM_StandardConditionFunctions_SimpleShear( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) ;
 void StG_FEM_StandardConditionFunctions_Extension( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) ;
 void StG_FEM_StandardConditionFunctions_PartialLid_TopLayer( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* result ) ;



More information about the cig-commits mailing list