[cig-commits] r4935 - in long/3D/Gale/trunk/src/Underworld: .
Rheology/src Rheology/tests
walter at geodynamics.org
walter at geodynamics.org
Wed Oct 11 13:54:19 PDT 2006
Author: walter
Date: 2006-10-11 13:54:18 -0700 (Wed, 11 Oct 2006)
New Revision: 4935
Added:
long/3D/Gale/trunk/src/Underworld/Rheology/tests/testDirectorPerMaterial2.xml
Modified:
long/3D/Gale/trunk/src/Underworld/
long/3D/Gale/trunk/src/Underworld/Rheology/src/Director.c
Log:
r595 at earth: boo | 2006-10-11 13:52:10 -0700
r557 at earth (orig r334): KathleenHumble | 1970-01-01 16:40:04 -0800
altered Director.c
to allow for random materials per material.
if the tag initialDirectorType = perMaterial
then on each material, the code will search for a
flag,
randomInitialDirection, if this is set to True,
then that material will be set as random,
and a randomInitialDirectionSeed can be specified for that
material.
If set to false, or absent, it works exactly the same way
as the original perMaterial type.
Property changes on: long/3D/Gale/trunk/src/Underworld
___________________________________________________________________
Name: svk:merge
- 9570c393-cf10-0410-b476-9a651db1e55a:/cig:594
c24a034b-ab11-0410-afe6-cfe714e2959e:/trunk:333
+ 9570c393-cf10-0410-b476-9a651db1e55a:/cig:595
c24a034b-ab11-0410-afe6-cfe714e2959e:/trunk:334
Modified: long/3D/Gale/trunk/src/Underworld/Rheology/src/Director.c
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Rheology/src/Director.c 2006-10-11 20:54:16 UTC (rev 4934)
+++ long/3D/Gale/trunk/src/Underworld/Rheology/src/Director.c 2006-10-11 20:54:18 UTC (rev 4935)
@@ -299,43 +299,98 @@
}
}
else if (self->initialDirectionType == INIT_DIR_PER_MAT) {
- /* Assign initial direction based on material */
+ /* Assign initial direction based on material
+ and check first is material is defined as random.*/
Material_Index materialsCount = Materials_Register_GetCount( self->materialPointsSwarm->materials_Register);
- XYZ* materialDirectionVectors;
+ XYZ* materialDirectionVectors;
int material_I;
Material* material;
+ Bool* randomInitialDirections;
+ int* randomInitialDirectionSeeds;
+ int materialOfParticle;
+
materialDirectionVectors = Memory_Alloc_Array(XYZ, materialsCount, "materialDirectionVectors");
+ randomInitialDirectionSeeds = Memory_Alloc_Array(int, materialsCount,
+ "randomInitialDirectionSeeds");
+ randomInitialDirections = Memory_Alloc_Array(Bool, materialsCount,
+ "randomInitialDirections");
/* Loop over materials and get material properties from dictionary */
for ( material_I = 0 ; material_I < materialsCount ; material_I++ ) {
- material = Materials_Register_GetByIndex( self->materialPointsSwarm->materials_Register, material_I );
- materialDirectionVectors[ material_I ][0] =
- Dictionary_GetDouble_WithDefault( material->dictionary,
- "initialDirectionX", DIRECTOR_DEFAULT_DIR_X );
+ material = Materials_Register_GetByIndex(
+ self->materialPointsSwarm->materials_Register,
+ material_I );
+ randomInitialDirections[material_I] = Dictionary_GetBool_WithDefault(
+ material->dictionary,
+ "randomInitialDirection",
+ False);
+ /* If no value is set, use default value from this file,
+ and not the (not-used) global value */
+ if ( randomInitialDirections[material_I] == False) {
+ materialDirectionVectors[ material_I ][0] =
+ Dictionary_GetDouble_WithDefault(
+ material->dictionary,
+ "initialDirectionX",
+ DIRECTOR_DEFAULT_DIR_X );
- materialDirectionVectors[ material_I ][1] =
- Dictionary_GetDouble_WithDefault( material->dictionary,
- "initialDirectionY", DIRECTOR_DEFAULT_DIR_Y );
+ materialDirectionVectors[ material_I ][1] =
+ Dictionary_GetDouble_WithDefault(
+ material->dictionary,
+ "initialDirectionY",
+ DIRECTOR_DEFAULT_DIR_Y );
- materialDirectionVectors[ material_I ][2] =
- Dictionary_GetDouble_WithDefault( material->dictionary,
- "initialDirectionZ", DIRECTOR_DEFAULT_DIR_Z );
+ materialDirectionVectors[ material_I ][2] =
+ Dictionary_GetDouble_WithDefault(
+ material->dictionary,
+ "initialDirectionZ",
+ DIRECTOR_DEFAULT_DIR_Z );
+ }
+ else {
+ /* If no random seed set, then use global value ( which if
+ not set will go to default value) */
+ randomInitialDirectionSeeds[material_I] = Dictionary_GetUnsignedInt_WithDefault(
+ material->dictionary,
+ "randomInitialDirectionSeed",
+ self->randomInitialDirectionSeed);
+ }
}
+ /* Assign value to particle */
- /* Assign value to particle */
+ /* If material is random, set the local srand,
+ locate all random particles, and set their director */
+ for (material_I = 0; material_I < materialsCount; material_I++) {
+ if (randomInitialDirections[material_I] == True) {
+ srand(randomInitialDirectionSeeds[material_I]);
+ for ( lParticle_I = 0 ; lParticle_I < particleLocalCount ; lParticle_I++ ){
+ materialOfParticle = MaterialPointsSwarm_GetMaterialIndexAt(
+ self->materialPointsSwarm,
+ lParticle_I );
+ if (materialOfParticle == material_I){
+ normal = Variable_GetPtrDouble( self->variable, lParticle_I );
+ for ( dim_I = 0; dim_I < self->materialPointsSwarm->dim; dim_I++ ) {
+ normal[dim_I] = ( (float) rand() - RAND_MAX/2 ) / RAND_MAX;
+ }
+ /* Normalising the direction vector */
+ StGermain_VectorNormalise( normal, self->materialPointsSwarm->dim ); }
+ }
+ }
+ }
+ /* For each non-random particle, set the initial direction */
for ( lParticle_I = 0 ; lParticle_I < particleLocalCount ; lParticle_I++ ) {
/* Initialise the norm of each director */
- normal = Variable_GetPtrDouble(self->variable,lParticle_I);
material_I = MaterialPointsSwarm_GetMaterialIndexAt(
self->materialPointsSwarm,
lParticle_I );
-
- memcpy(normal, materialDirectionVectors[material_I], sizeof(XYZ));
- StGermain_VectorNormalise( normal, self->materialPointsSwarm->dim );
+ if (randomInitialDirections[material_I] == False) {
+ normal = Variable_GetPtrDouble(self->variable,lParticle_I);
+ memcpy(normal, materialDirectionVectors[material_I], sizeof(XYZ));
+ StGermain_VectorNormalise( normal, self->materialPointsSwarm->dim );
+ }
}
Memory_Free(materialDirectionVectors);
-
+ Memory_Free(randomInitialDirections);
+ Memory_Free(randomInitialDirectionSeeds);
}
else {
Journal_Firewall(False, Journal_Register(Error_Type, "Director" ),
Added: long/3D/Gale/trunk/src/Underworld/Rheology/tests/testDirectorPerMaterial2.xml
===================================================================
--- long/3D/Gale/trunk/src/Underworld/Rheology/tests/testDirectorPerMaterial2.xml 2006-10-11 20:54:16 UTC (rev 4934)
+++ long/3D/Gale/trunk/src/Underworld/Rheology/tests/testDirectorPerMaterial2.xml 2006-10-11 20:54:18 UTC (rev 4935)
@@ -0,0 +1,167 @@
+<?xml version="1.0"?>
+<!DOCTYPE StGermainData SYSTEM "stgermain.dtd">
+
+<StGermainData xmlns="http://www.vpac.org/StGermain/XML_IO_Handler/Jun2003">
+
+ <!-- Component Stuff -->
+ <searchPath>../../InputFiles/</searchPath>
+ <include>./StgFEM_Components/LinearMesh.xml </include>
+ <include>./StgFEM_Components/ElementLayout.xml </include>
+ <include>./StgFEM_Components/VelocityField.xml </include>
+ <include>./StgFEM_Components/TimeIntegrator.xml </include>
+ <include>./PIC_Components/MaterialPointSwarm.xml </include>
+
+ <list name="plugins" mergeType="merge">
+ <param>StG_FEM_StandardConditionFunctions</param>
+ <!-- testDirector plugin has to be here to standardise dt calculations -->
+ <param>Underworld_testDirectorPerMaterial</param>
+ </list>
+
+ <!-- Rheology Components -->
+ <struct name="components" mergeType="merge">
+ <!-- Periodic boundary conditions -->
+ <struct name="periodicBCsManager">
+ <param name="Type">PeriodicBoundariesManager</param>
+ <param name="Geometry">geometry</param>
+ <param name="Swarm">materialSwarm</param>
+ <param name="TimeIntegrator">timeIntegrator</param>
+
+ <list name="PeriodicBoundaries">
+ <param>I_AXIS</param>
+ </list>
+ </struct>
+
+ <!-- Create Alignment Swarm Variable - for the sake of plotting -->
+ <struct name="director">
+ <param name="Type">Director</param>
+ <param name="MaterialPointsSwarm">materialSwarm</param>
+ <param name="TimeIntegrator">timeIntegrator</param>
+ <param name="VelocityGradientsField">VelocityGradientsField</param>
+ <param name="initialDirectionType">perMaterial</param>
+ </struct>
+ <struct name="alignment">
+ <param name="Type">AlignmentSwarmVariable</param>
+ <param name="Swarm">materialSwarm</param>
+ <param name="Director">director</param>
+ <param name="VelocityField">VelocityField</param>
+ </struct>
+ </struct>
+
+ <!-- Create different materials -->
+ <struct name="components" mergeType="merge">
+ <struct name="backgroundViscosity">
+ <param name="Type">MaterialViscosity</param>
+ <param name="eta0">1.0</param>
+ </struct>
+ <struct name="backgroundShape">
+ <param name="Type">Everywhere</param>
+ </struct>
+ <struct name="background">
+ <param name="Type">Material</param>
+ <param name="Shape">backgroundShape</param>
+ <param name="initialDirectionX">1.0</param>
+ <param name="initialDirectionY">0.0</param>
+ <param name="initialDirectionZ">0.0</param>
+ </struct>
+
+ <struct name="ballShape1">
+ <param name="Type">Sphere</param>
+ <param name="CentreX">0.5</param>
+ <param name="CentreY">0.7</param>
+ <param name="CentreZ">0.1</param>
+ <param name="radius"> 0.10 </param>
+ </struct>
+ <struct name="ballShape2">
+ <param name="Type">Sphere</param>
+ <param name="CentreX">0.2</param>
+ <param name="CentreY">0.5</param>
+ <param name="CentreZ">0.5</param>
+ <param name="radius"> 0.10 </param>
+ </struct>
+ <struct name="ball1">
+ <param name="Type">Material</param>
+ <param name="Shape">ballShape1</param>
+ <param name="randomInitialDirection">True</param>
+ <param name="randomInitialDirectionSeed">3</param>
+
+ </struct>
+ <struct name="ball2">
+ <param name="Type">Material</param>
+ <param name="Shape">ballShape2</param>
+ <param name="initialDirectionX">1.0</param>
+ <param name="initialDirectionY">1.0</param>
+ <param name="initialDirectionZ">0.0</param>
+
+ </struct>
+ </struct>
+ <!-- Simulation control -->
+ <param name="maxTimeSteps"> 1 </param>
+ <param name="outputPath">./output</param>
+ <param name="dumpEvery"> 1 </param>
+
+ <param name="particlesPerCell"> 2 </param>
+ <param name="SimpleShearFactor"> 2 </param>
+
+ <!-- Journal Control -->
+ <param name="journal.info.Context-verbose">True</param>
+ <param name="journal-level.info.Stg_ComponentFactory">2</param>
+ <param name="journal.debug">f</param>
+ <param name="journal-enable-branch.debug.StG_FEM">t</param>
+ <param name="journal-level-branch.debug.StG_FEM"> 1 </param>
+
+ <!-- Geometry & Mesh setup -->
+ <param name="dim"> 2 </param>
+ <param name="elementResI">10 </param>
+ <param name="elementResJ">10 </param>
+ <param name="elementResK">1 </param>
+ <param name="shadowDepth">1 </param>
+ <param name="minX"> 0.0 </param>
+ <param name="minY"> 0.0 </param>
+ <param name="minZ"> 0.0 </param>
+ <param name="maxX"> 1.0 </param>
+ <param name="maxY"> 1.0 </param>
+ <param name="maxZ"> 1.0 </param>
+ <param name="allowUnbalancing"> True </param>
+
+ <!-- Set up BCs and ICs -->
+ <include> VariableConditions/velocityBCs.simpleShear.xml </include>
+ <include> VariableConditions/velocityICs.simpleShear.xml </include>
+
+ <!-- Integration Scheme configuration -->
+ <param name="gaussParticlesX"> 2 </param>
+ <param name="gaussParticlesY"> 2 </param>
+ <param name="gaussParticlesZ"> 2 </param>
+
+
+ <include> Viewports/StrainRateInvariantVP.xml </include>
+ <include> Viewports/VelocityMagnitudeVP.xml </include>
+ <include> window.xml </include>
+ <struct name="components" mergeType="merge">
+ <struct name="alignmentColourMap">
+ <param name="Type">lucColourMap</param>
+ <param name="colours">Orange Red Black</param>
+ </struct>
+ <struct name="alignmentDrawingObject">
+ <param name="Type">lucSwarmVectors</param>
+ <param name="Swarm">materialSwarm</param>
+ <param name="ColourVariable">alignment</param>
+ <param name="ColourMap"> alignmentColourMap</param>
+ <param name="DirectionVariable">materialSwarm-Director</param>
+ <param name="arrowHeadSize">0.2</param>
+ <param name="length">0.05</param>
+ </struct>
+ <struct name="AlignmentVP">
+ <param name="Type">lucViewport</param>
+ <param name="Camera">camera</param>
+ <list name="DrawingObject">
+ <param>alignmentDrawingObject</param>
+ <param>border</param>
+ </list>
+ </struct>
+ <struct name="window" mergeType="merge">
+ <param name="Viewport">VelocityMagnitudeVP AlignmentVP </param>
+ </struct>
+ </struct>
+
+
+</StGermainData>
More information about the cig-commits
mailing list