[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