[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