[cig-commits] r14231 - long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant

echoi at geodynamics.org echoi at geodynamics.org
Wed Mar 4 15:15:53 PST 2009


Author: echoi
Date: 2009-03-04 15:15:53 -0800 (Wed, 04 Mar 2009)
New Revision: 14231

Added:
   long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/thickCylinder-test.xml
Modified:
   long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Force.c
   long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/InitialConditions.c
   long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Register.c
Log:
* Updated this plugin for the thick cylinder benchmark.
	
	1. Inner pressure can now be given in an input file (in Force.c).
	2. The order of coordinate assignment has been corrected to keep the right-hand rule in the Cartesian system (in InitialConditions.c).
	3. Fixed a function naming error (in Register.c).
	4. An example input file has been added.



Modified: long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Force.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Force.c	2009-03-04 23:00:56 UTC (rev 14230)
+++ long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Force.c	2009-03-04 23:15:53 UTC (rev 14231)
@@ -54,7 +54,7 @@
 	double				area, normal1[3], normal2[3], normal[3];
 	Node_ElementIndex		nodeElement_I, nodeElementCount;
 	const double			factor4 = 1.0f / 4.0f;
-	const double			Pressure = 2.0e+06;
+	const double			Pressure = Dictionary_Entry_Value_AsDouble(Dictionary_GetDefault( context->dictionary, "cylinder_innerP", Dictionary_Entry_Value_FromDouble( 1.0e+06 ) ) );
 
 	/* loop over all the elements surrounding node_dI */
 	HexaMD*			decomp = (HexaMD*)meshLayout->decomp;
@@ -68,30 +68,33 @@
 		for( nodeElement_I = 0; nodeElement_I < nodeElementCount; nodeElement_I++ ) {
 			Element_LocalIndex		element_lI = context->mesh->nodeElementTbl[node_lI][nodeElement_I];
 
-			if( element_lI < context->mesh->elementLocalCount ) {
-
+			if( element_lI < context->mesh->elementDomainCount ) {
 				area = Tetrahedra_SurfaceArea( Snac_Element_NodeCoord( context, element_lI, 0 ),
-							       Snac_Element_NodeCoord( context, element_lI, 1 ),
-							       Snac_Element_NodeCoord( context, element_lI, 2 ) ) +
+											   Snac_Element_NodeCoord( context, element_lI, 1 ),
+											   Snac_Element_NodeCoord( context, element_lI, 2 ) ) +
 					Tetrahedra_SurfaceArea( Snac_Element_NodeCoord( context, element_lI, 0 ),
-								Snac_Element_NodeCoord( context, element_lI, 2 ),
-								Snac_Element_NodeCoord( context, element_lI, 3 ) );
+											Snac_Element_NodeCoord( context, element_lI, 2 ),
+											Snac_Element_NodeCoord( context, element_lI, 3 ) );
 				Tetrahedra_SurfaceNormal( Snac_Element_NodeCoord( context, element_lI, 0 ),
-							  Snac_Element_NodeCoord( context, element_lI, 1 ),
-							  Snac_Element_NodeCoord( context, element_lI, 2 ),
-							  &normal1 );
+										  Snac_Element_NodeCoord( context, element_lI, 1 ),
+										  Snac_Element_NodeCoord( context, element_lI, 2 ),
+										  &normal1 );
 				Tetrahedra_SurfaceNormal( Snac_Element_NodeCoord( context, element_lI, 0 ),
-							  Snac_Element_NodeCoord( context, element_lI, 2 ),
-							  Snac_Element_NodeCoord( context, element_lI, 3 ),
-							  &normal2 );
-
+										  Snac_Element_NodeCoord( context, element_lI, 2 ),
+										  Snac_Element_NodeCoord( context, element_lI, 3 ),
+										  &normal2 );
+				
 				normal[0] = 0.5f * ( normal1[0] + normal2[0] );
 				normal[1] = 0.5f * ( normal1[1] + normal2[1] );
 				normal[2] = 0.5f * ( normal1[2] + normal2[2] );
-
+				
 				(*force)[0] += factor4 * ( Pressure * area * normal[0] );
 				(*force)[1] += factor4 * ( Pressure * area * normal[1] );
 				(*force)[2] += factor4 * ( Pressure * area * normal[2] );
+				
+				(*balance)[0] += fabs( (*force)[0] );
+				(*balance)[1] += fabs( (*force)[1] );
+				(*balance)[2] += fabs( (*force)[2] );
 			}
 		}
 	}

Modified: long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/InitialConditions.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/InitialConditions.c	2009-03-04 23:00:56 UTC (rev 14230)
+++ long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/InitialConditions.c	2009-03-04 23:15:53 UTC (rev 14231)
@@ -91,13 +91,17 @@
 
 		RegularMeshUtils_Node_1DTo3D( decomp, node_gI, &i_gI, &j_gI, &k_gI );
 
+		/*               -----                   */
+		/*         right |    \ front            */
+		/*     z ^       --\   \                 */
+		/*       |     back  |_ |                */
+		/*       -->x       left                 */
 		initialRTZ[0] = ri; // radius
 		if(k_gI>0) rsum = (pow(alpha,k_gI)-1.0)/(alpha-1.0)*d;
 		initialRTZ[0] += rsum;
+		initialRTZ[1] = (90.0f/(decomp->nodeGlobal3DCounts[0]-1)*i_gI)*PI/180.0f; // theta
+		initialRTZ[2] = ztop - (ztop-zbot)/(decomp->nodeGlobal3DCounts[1]-1)*j_gI; // Z
 
-		initialRTZ[1] = (90.0f - 90.0f/(decomp->nodeGlobal3DCounts[2]-1)*i_gI)*PI/180.0f; // theta
-		initialRTZ[2] = (ztop-zbot)/(decomp->nodeGlobal3DCounts[1]-1)*j_gI; // Z
-
 		(*coord)[0] = initialRTZ[0]*cos(initialRTZ[1]);
 		(*coord)[1] = initialRTZ[2];
 		(*coord)[2] = initialRTZ[0]*sin(initialRTZ[1]);

Modified: long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Register.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Register.c	2009-03-04 23:00:56 UTC (rev 14230)
+++ long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/Register.c	2009-03-04 23:15:53 UTC (rev 14231)
@@ -66,7 +66,7 @@
 			     name );
 }
 
-void _SnacCustomCartesian_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
+void _SnacCylinderQuad_Construct( void* component, Stg_ComponentFactory* cf, void* data ) {
 	Snac_Context*	context;
 
 	/* Retrieve context. */

Added: long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/thickCylinder-test.xml
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/thickCylinder-test.xml	                        (rev 0)
+++ long/3D/SNAC/trunk/Snac/plugins/cylinder_quadrant/thickCylinder-test.xml	2009-03-04 23:15:53 UTC (rev 14231)
@@ -0,0 +1,163 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<!-- StGermain-Snac input file -->
+<!-- Role:
+	This is the input file specific for the problem of a thick cylinder with pressure applied on its inner wall.
+	The detailed description and the analytic solutions are given in the manual.
+-->
+	
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+	
+	<!-- StGermain simulation parameters -->
+	<param name="start"> 0 </param>
+	<param name="maxTimeSteps"> 5001 </param>
+	<param name="outputPath">results_thickCylinder</param>
+	<param name="dumpEvery"> 500 </param>
+	
+	<!-- Snac variables -->
+	<param name="gravity"> 0 </param>
+	<param name="demf"> 0.8 </param>
+	<param name="dtType"> constant </param>
+	<param name="timeStep"> 1 </param>
+	<param name="forceCalcType"> complete </param>
+	<param name="decomposedAxis"> 0 </param> <!-- hack: 0=X, 1=Y, 2=Z. Should and will eventually be automatically discovered-->
+	<param name="storeForces"> no </param>
+	<param name="forceCheckSum"> no </param>
+	
+	<!-- Extension modules -->
+	<list name="extensions">
+		<param> SnacPlastic </param>
+		<param> SnacCylinderQuad </param>
+	</list>
+
+	<!-- Usual mesh parameters. The default mesh geometry will be overwritten by the SnacCylinderQuad plugin. -->
+	<struct name="mesh">
+		<param name="shadowDepth"> 1 </param>
+		<param name="decompDims"> 2 </param>
+
+		<!-- Mesh size -->
+		<param name="meshSizeI"> 31 </param>
+		<param name="meshSizeJ"> 2 </param>
+		<param name="meshSizeK"> 29 </param>
+
+ 		<param name="buildNodeNeighbourTbl"> True </param>
+	</struct>
+	
+	<!-- Special parameters for the mesh of a quadrant of cylinder. -->
+	<param name="cylinder_ri"> 3.0 </param>
+	<param name="cylinder_ro"> 10.0 </param>
+	<param name="cylinder_zbot"> 0.0 </param>
+	<param name="cylinder_ztop"> 0.5 </param>
+	<param name="cylinder_alpha"> 1.1 </param>
+	<param name="cylinder_innerP"> 2.0e+06 </param>
+	<!-- Elastic material parameters -->
+	<param name="lambda"> 6.666667e+07 </param>
+	<param name="mu"> 2.0e+08 </param>
+	<!-- Plastic material parameters -->
+	<param name="yieldcriterion"> mohrcoulomb </param>
+	<param name="nsegments"> 1 </param>
+	<param name="plstrain0"> 0.0 </param>
+	<param name="plstrain1"> 1000.0 </param>
+	<param name="frictionAngle0"> 10.0 </param>
+	<param name="frictionAngle1"> 10.0 </param>
+	<param name="dilationAngle0"> 10.0 </param>
+	<param name="dilationAngle1"> 10.0 </param>
+	<param name="cohesion0"> 1.0e+06 </param>
+	<param name="cohesion1"> 1.0e+06 </param>
+	<param name="ten_off"> 5.67e+08 </param>
+
+	<!-- node ICs -->
+	<struct name="nodeICs">
+		<list name="vcList">
+			<struct>
+				<param name="type"> AllNodesVC </param>
+				<list name="variables">
+					<struct>
+						<param name="name">vx</param>
+						<param name="type">double</param>
+						<param name="value"> 0 </param>
+					</struct>
+					<struct>
+						<param name="name">vy</param>
+						<param name="type">double</param>
+						<param name="value"> 0 </param>
+					</struct>
+					<struct>
+						<param name="name">vz</param>
+						<param name="type">double</param>
+						<param name="value"> 0 </param>
+					</struct>
+				</list>
+			</struct>
+		</list>
+	</struct>
+
+	<!-- element ICs -->
+	<struct name="elementICs">
+		<list name="vcList">
+			<struct>
+				<param name="type"> AllElementsVC </param>
+				<list name="variables">
+					<struct>
+						<param name="name">elementMaterial</param>
+						<param name="type">int</param>
+						<param name="value"> 0 </param>
+					</struct>
+				</list>
+			</struct>
+		</list>
+	</struct>
+
+	<!-- Velocity BCs -->
+	<struct name="velocityBCs">
+		<list name="vcList">
+			<!-- Face on the z axis (i.e., normal to the x axis). -->
+			<struct>
+				<param name="type"> WallVC </param>
+				<param name="wall"> right </param>
+				<list name="variables">
+					<struct>
+						<param name="name">vx</param>
+						<param name="type">double</param>
+						<param name="value"> 0.0 </param>
+					</struct>
+				</list>
+			</struct>
+			<!-- Face on the x axis (i.e., normal to the z axis). -->
+			<struct>
+				<param name="type"> WallVC </param>
+				<param name="wall"> left </param>
+				<list name="variables">
+					<struct>
+						<param name="name">vz</param>
+						<param name="type">double</param>
+						<param name="value"> 0.0 </param>
+					</struct>
+				</list>
+			</struct>
+			<struct>
+				<param name="type"> WallVC </param>
+				<param name="wall"> bottom </param>
+				<list name="variables">
+					<struct>
+						<param name="name">vy</param>
+						<param name="type">double</param>
+						<param name="value"> 0.0 </param>
+					</struct>
+				</list>
+			</struct>
+			<struct>
+				<param name="type"> WallVC </param>
+				<param name="wall"> top </param>
+				<list name="variables">
+					<struct>
+						<param name="name">vy</param>
+						<param name="type">double</param>
+						<param name="value"> 0.0 </param>
+					</struct>
+				</list>
+			</struct>
+		</list>
+	</struct>
+</StGermainData>



More information about the CIG-COMMITS mailing list