[cig-commits] commit: Make AdvectionDiffusion use gauss swarms

Mercurial hg at geodynamics.org
Wed Nov 9 00:56:18 PST 2011


changeset:   811:9c81e7eb56f2
user:        Walter Landry <wlandry at caltech.edu>
date:        Mon Oct 24 15:31:22 2011 -0700
files:       SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx
description:
Make AdvectionDiffusion use gauss swarms


diff -r 34d0c66dfca3 -r 9c81e7eb56f2 SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx
--- a/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx	Sat Oct 22 19:22:48 2011 -0700
+++ b/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx	Mon Oct 24 15:31:22 2011 -0700
@@ -60,27 +60,26 @@
 /* Textual name of this class */
 const Type AdvDiffResidualForceTerm_Type = "AdvDiffResidualForceTerm";
 
-AdvDiffResidualForceTerm* AdvDiffResidualForceTerm_New( 
-	Name							name,
-	FiniteElementContext*	context,
-	ForceVector*				forceVector,
-	Swarm*						integrationSwarm,
-	Stg_Component*				sle, 
-	FeVariable*					velocityField,
-	double						defaultDiffusivity,
-        Swarm*						picSwarm,
-	void*		materials_Register,
-	AdvDiffResidualForceTerm_UpwindParamFuncType upwindFuncType )
+AdvDiffResidualForceTerm*
+AdvDiffResidualForceTerm_New(Name name,
+                             FiniteElementContext* context,
+                             ForceVector* forceVector,
+                             Swarm* swarm,
+                             Stg_Component* sle, 
+                             FeVariable* velocityField,
+                             double defaultDiffusivity,
+                             void* materials_Register,
+                             AdvDiffResidualForceTerm_UpwindParamFuncType
+                             upwindFuncType )
 {
-	AdvDiffResidualForceTerm* self = (AdvDiffResidualForceTerm*) _AdvDiffResidualForceTerm_DefaultNew( name );
+  AdvDiffResidualForceTerm* self = (AdvDiffResidualForceTerm*) _AdvDiffResidualForceTerm_DefaultNew( name );
 
-	self->isConstructed = True;
-	_ForceTerm_Init( self, context, forceVector, integrationSwarm, sle );
-	_AdvDiffResidualForceTerm_Init( self, velocityField, defaultDiffusivity,
-                                        picSwarm,
-                                        materials_Register, upwindFuncType );
+  self->isConstructed = True;
+  _ForceTerm_Init( self, context, forceVector, swarm, sle );
+  _AdvDiffResidualForceTerm_Init(self,velocityField,defaultDiffusivity,
+                                 materials_Register,upwindFuncType );
 
-	return self;
+  return self;
 }
 
 void* _AdvDiffResidualForceTerm_DefaultNew( Name name ) {
@@ -169,21 +168,19 @@ void __AdvDiffResidualForceTerm_FreeLoca
 	NewClass_Delete(sle->advDiffResidualForceTerm->incarray);
 }
 
-void _AdvDiffResidualForceTerm_Init(
-	void*			residual,
-	FeVariable*		velocityField,
-	double			defaultDiffusivity,
-        Swarm*			picSwarm,
-	void*	                materials_Register,
-	AdvDiffResidualForceTerm_UpwindParamFuncType	upwindFuncType ) //WHY IS THIS LINE HERE???
+void _AdvDiffResidualForceTerm_Init(void* residual,
+                                    FeVariable* velocityField,
+                                    double defaultDiffusivity,
+                                    void* materials_Register,
+                                    AdvDiffResidualForceTerm_UpwindParamFuncType
+                                    upwindFuncType)
 {
-	AdvDiffResidualForceTerm* self = (AdvDiffResidualForceTerm*)residual;
+  AdvDiffResidualForceTerm* self = (AdvDiffResidualForceTerm*)residual;
 
-	self->velocityField = velocityField;
-	self->defaultDiffusivity = defaultDiffusivity;
-        self->picSwarm = picSwarm;
-	self->materials_Register  = materials_Register;
-	self->upwindParamType = upwindFuncType;
+  self->velocityField = velocityField;
+  self->defaultDiffusivity = defaultDiffusivity;
+  self->materials_Register  = materials_Register;
+  self->upwindParamType = upwindFuncType;
 }
 
 void _AdvDiffResidualForceTerm_Delete( void* residual ) {
@@ -217,7 +214,6 @@ void _AdvDiffResidualForceTerm_AssignFro
 	double													defaultDiffusivity;
 	Materials_Register*		materials_Register;
 	AdvDiffResidualForceTerm_UpwindParamFuncType	upwindFuncType = (AdvDiffResidualForceTerm_UpwindParamFuncType)0;
-        Swarm *picSwarm;
 
 	/* Construct Parent */
 	_ForceTerm_AssignFromXML( self, cf, data );
@@ -235,11 +231,10 @@ void _AdvDiffResidualForceTerm_AssignFro
 		Journal_Firewall( False, Journal_Register( Error_Type, (Name)self->type  ), "Cannot understand '%s'\n", upwindParamFuncName );
 
 	defaultDiffusivity = Stg_ComponentFactory_GetDouble( cf, self->name, (Dictionary_Entry_Key)"defaultDiffusivity", 1.0  );
-	picSwarm       = (Swarm*)Stg_ComponentFactory_ConstructByName( cf, (Name)"picIntegrationPoints", IntegrationPointsSwarm, True, data  ) ;
 	materials_Register = ((PICelleratorContext*)(self->context))->materials_Register;
 
 	_AdvDiffResidualForceTerm_Init( self, velocityField, defaultDiffusivity,
-                                        picSwarm, materials_Register,
+                                        materials_Register,
                                         upwindFuncType );
 }
 
@@ -249,7 +244,7 @@ void _AdvDiffResidualForceTerm_Build( vo
 	Material_Index                   material_I;
 	Material*                        material;
 	Materials_Register*              materials_Register = (Materials_Register*)(self->materials_Register);
-	IntegrationPointsSwarm*          swarm              = (IntegrationPointsSwarm*)self->picSwarm;
+	IntegrationPointsSwarm*          swarm              = (IntegrationPointsSwarm*)self->integrationSwarm;
 	MaterialPointsSwarm**            materialSwarms;
 	Index                            materialSwarm_I;
 	Stg_ComponentFactory*            cf;
@@ -276,7 +271,7 @@ void _AdvDiffResidualForceTerm_Build( vo
 	}
 	
 	/* Create Swarm Variables of each material swarm this ip swarm is mapped against */
-	materialSwarms = IntegrationPointMapper_GetMaterialPointsSwarms( swarm->mapper, &(self->materialSwarmCount) );
+	materialSwarms = IntegrationPointMapper_GetMaterialPointsSwarms(swarm->mapper, &(self->materialSwarmCount) );
 	self->diffusivitySwarmVariables = (void**)Memory_Alloc_Array( MaterialSwarmVariable*, self->materialSwarmCount, "DiffusivityVariables" );
 	
 	for ( materialSwarm_I = 0; materialSwarm_I < self->materialSwarmCount; ++materialSwarm_I ) {
@@ -330,7 +325,7 @@ void _AdvDiffResidualForceTerm_AssembleE
 void _AdvDiffResidualForceTerm_AssembleElement( void* forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elementResidual ) {
 	AdvDiffResidualForceTerm*  self               = Stg_CheckType( forceTerm, AdvDiffResidualForceTerm );
 	AdvectionDiffusionSLE*     sle                = Stg_CheckType( self->extraInfo, AdvectionDiffusionSLE );
-	Swarm*                     swarm              = self->picSwarm;
+	Swarm*                     swarm              = self->integrationSwarm;
 	Particle_Index             lParticle_I;
 	Particle_Index             cParticle_I;
 	Particle_Index             cellParticleCount;
@@ -421,9 +416,13 @@ void _AdvDiffResidualForceTerm_AssembleE
 		totalDerivative = phiDot + StGermain_VectorDotProduct( velocity, phiGrad, dim );
 
 		/* Get Diffusivity */
-		diffusivity = IntegrationPointMapper_GetDoubleFromMaterial(((IntegrationPointsSwarm *)swarm)->mapper, particle, self->materialExtHandle,
+                IntegrationPointsSwarm* NNswarm((IntegrationPointsSwarm*)swarm);
+                IntegrationPoint* NNparticle(particle);
+                NearestNeighbor_Replace(&NNswarm,&NNparticle,lElement_I,dim);
 
-		    offsetof(AdvDiffResidualForceTerm_MaterialExt, diffusivity));
+		diffusivity = IntegrationPointMapper_GetDoubleFromMaterial
+                  (NNswarm->mapper, NNparticle, self->materialExtHandle,
+                   offsetof(AdvDiffResidualForceTerm_MaterialExt, diffusivity));
 
 		/* Add to element residual */
 		factor = particle->weight * detJac;
diff -r 34d0c66dfca3 -r 9c81e7eb56f2 SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h
--- a/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h	Sat Oct 22 19:22:48 2011 -0700
+++ b/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h	Mon Oct 24 15:31:22 2011 -0700
@@ -41,107 +41,105 @@
 #ifndef __StgFEM_SLE_ProvidedSystems_AdvectionDiffusion_Residual_h__
 #define __StgFEM_SLE_ProvidedSystems_AdvectionDiffusion_Residual_h__
 
-	typedef double (AdvDiffResidualForceTerm_UpwindParamFunction)( void* residual, double pecletNumber );
+typedef double (AdvDiffResidualForceTerm_UpwindParamFunction)( void* residual, double pecletNumber );
 	
-	typedef enum { Exact, DoublyAsymptoticAssumption, CriticalAssumption } AdvDiffResidualForceTerm_UpwindParamFuncType;
+typedef enum { Exact, DoublyAsymptoticAssumption, CriticalAssumption } AdvDiffResidualForceTerm_UpwindParamFuncType;
 
-	typedef double (AdvDiffResidualForceTerm_GetDiffusivityFromIntPoint)( void* self, void* lParticle_I );
+typedef double (AdvDiffResidualForceTerm_GetDiffusivityFromIntPoint)( void* self, void* lParticle_I );
 
-	/** Textual name of this class */
-	extern const Type AdvDiffResidualForceTerm_Type;
+/** Textual name of this class */
+extern const Type AdvDiffResidualForceTerm_Type;
 
-        typedef struct {
-          double diffusivity;
-        } AdvDiffResidualForceTerm_MaterialExt;
+typedef struct {
+  double diffusivity;
+} AdvDiffResidualForceTerm_MaterialExt;
 
-	/** AdvDiffResidualForceTerm class contents */
-	#define __AdvDiffResidualForceTerm \
-		/* General info */ \
-		__ForceTerm \
-		\
-		/* Virtual info */ \
-		AdvDiffResidualForceTerm_UpwindParamFunction*			_upwindParam; \
-		AdvDiffResidualForceTerm_GetDiffusivityFromIntPoint*	_getDiffusivityFromIntPoint; \
-		double*																phiGrad; \
-		double**																GNx; \
-		double*																Ni; \
-		double*																SUPGNi; \
-		IArray																*incarray; \
-		\
-		void*				materials_Register; \
-		ExtensionInfo_Index				materialExtHandle; \
-		Swarm*						picSwarm; \
-		void**				diffusivitySwarmVariables; \
-		Index												materialSwarmCount;\
-		/* AdvDiffResidualForceTerm info */ \
-		FeVariable*															velocityField; \
-		double																defaultDiffusivity; \
-		AdvDiffResidualForceTerm_UpwindParamFuncType				upwindParamType;
+/** AdvDiffResidualForceTerm class contents */
+#define __AdvDiffResidualForceTerm                                      \
+  /* General info */                                                    \
+  __ForceTerm                                                           \
+                                                                        \
+  /* Virtual info */                                                    \
+  AdvDiffResidualForceTerm_UpwindParamFunction* _upwindParam; \
+  AdvDiffResidualForceTerm_GetDiffusivityFromIntPoint* _getDiffusivityFromIntPoint; \
+  double* phiGrad; \
+  double** GNx; \
+  double* Ni; \
+  double* SUPGNi; \
+  IArray *incarray; \
+  \
+  void* materials_Register; \
+  ExtensionInfo_Index materialExtHandle; \
+  void** diffusivitySwarmVariables; \
+  Index materialSwarmCount; \
+  /* AdvDiffResidualForceTerm info */ \
+  FeVariable* velocityField; \
+  double defaultDiffusivity; \
+  AdvDiffResidualForceTerm_UpwindParamFuncType upwindParamType;
 
-	struct AdvDiffResidualForceTerm { __AdvDiffResidualForceTerm };	
+struct AdvDiffResidualForceTerm { __AdvDiffResidualForceTerm };	
 
-	void __AdvDiffResidualForceTerm_UpdateLocalMemory( AdvectionDiffusionSLE* sle );
+void __AdvDiffResidualForceTerm_UpdateLocalMemory( AdvectionDiffusionSLE* sle );
 
-	void __AdvDiffResidualForceTerm_FreeLocalMemory( AdvectionDiffusionSLE* sle );
+void __AdvDiffResidualForceTerm_FreeLocalMemory( AdvectionDiffusionSLE* sle );
 
-	AdvDiffResidualForceTerm* AdvDiffResidualForceTerm_New( 
-		Name															name,
-		FiniteElementContext*									context,
-		ForceVector*												forceVector,
-		Swarm*														integrationSwarm,
-		Stg_Component*												sle, 
-		FeVariable*													velocityField,
-		double														defaultDiffusivity,
-		Swarm*						picSwarm,
-		void*		materials_Register,
-		AdvDiffResidualForceTerm_UpwindParamFuncType		upwindFuncType );
+AdvDiffResidualForceTerm*
+AdvDiffResidualForceTerm_New(Name name,
+                             FiniteElementContext* context,
+                             ForceVector* forceVector,
+                             Swarm* swarm,
+                             Stg_Component* sle, 
+                             FeVariable* velocityField,
+                             double defaultDiffusivity,
+                             void* materials_Register,
+                             AdvDiffResidualForceTerm_UpwindParamFuncType
+                             upwindFuncType );
 
 	
-	#ifndef ZERO
-	#define ZERO 0
-	#endif
+#ifndef ZERO
+#define ZERO 0
+#endif
 
-	#define ADVDIFFRESIDUALFORCETERM_DEFARGS \
-                FORCETERM_DEFARGS, \
-                AdvDiffResidualForceTerm_UpwindParamFunction*  _upwindParam
+#define ADVDIFFRESIDUALFORCETERM_DEFARGS                        \
+  FORCETERM_DEFARGS,                                            \
+    AdvDiffResidualForceTerm_UpwindParamFunction*  _upwindParam
 
-	#define ADVDIFFRESIDUALFORCETERM_PASSARGS \
-                FORCETERM_PASSARGS, \
-	        _upwindParam
+#define ADVDIFFRESIDUALFORCETERM_PASSARGS       \
+  FORCETERM_PASSARGS,                           \
+    _upwindParam
 
-	AdvDiffResidualForceTerm* _AdvDiffResidualForceTerm_New(  ADVDIFFRESIDUALFORCETERM_DEFARGS  );
+AdvDiffResidualForceTerm* _AdvDiffResidualForceTerm_New(  ADVDIFFRESIDUALFORCETERM_DEFARGS  );
 
-	void _AdvDiffResidualForceTerm_Init(
-   	void*                                        residual,
-   	FeVariable*                                  velocityField,
-   	double                                       defaultDiffusivity,
-        Swarm*						picSwarm,
-        void*  materials_Register,
-   	AdvDiffResidualForceTerm_UpwindParamFuncType upwindFuncType );
+void _AdvDiffResidualForceTerm_Init(void* residual,
+                                    FeVariable* velocityField,
+                                    double defaultDiffusivity,
+                                    void* materials_Register,
+                                    AdvDiffResidualForceTerm_UpwindParamFuncType
+                                    upwindFuncType );
 	
-	void _AdvDiffResidualForceTerm_Delete( void* residual );
+void _AdvDiffResidualForceTerm_Delete( void* residual );
 
-	void _AdvDiffResidualForceTerm_Print( void* residual, Stream* stream );
+void _AdvDiffResidualForceTerm_Print( void* residual, Stream* stream );
 
-	void* _AdvDiffResidualForceTerm_DefaultNew( Name name );
+void* _AdvDiffResidualForceTerm_DefaultNew( Name name );
 
-	void _AdvDiffResidualForceTerm_AssignFromXML( void* residual, Stg_ComponentFactory* cf, void* data );
+void _AdvDiffResidualForceTerm_AssignFromXML( void* residual, Stg_ComponentFactory* cf, void* data );
 
-	void _AdvDiffResidualForceTerm_Build( void* residual, void* data );
+void _AdvDiffResidualForceTerm_Build( void* residual, void* data );
 
-	void _AdvDiffResidualForceTerm_Initialise( void* residual, void* data );
+void _AdvDiffResidualForceTerm_Initialise( void* residual, void* data );
 
-	void _AdvDiffResidualForceTerm_Execute( void* residual, void* data );
+void _AdvDiffResidualForceTerm_Execute( void* residual, void* data );
 
-	void _AdvDiffResidualForceTerm_Destroy( void* residual, void* data );
+void _AdvDiffResidualForceTerm_Destroy( void* residual, void* data );
 
-	void _AdvDiffResidualForceTerm_AssembleElement( void* forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elementResidual );
+void _AdvDiffResidualForceTerm_AssembleElement( void* forceTerm, ForceVector* forceVector, Element_LocalIndex lElement_I, double* elementResidual );
 
-	/** Virtual Function Implementations */
-	#define AdvDiffResidualForceTerm_UpwindParam( residual, pecletNumber ) \
-		( ((AdvDiffResidualForceTerm*) residual)->_upwindParam( residual, pecletNumber ) )
+/** Virtual Function Implementations */
+#define AdvDiffResidualForceTerm_UpwindParam( residual, pecletNumber )  \
+  ( ((AdvDiffResidualForceTerm*) residual)->_upwindParam( residual, pecletNumber ) )
 
-	double _AdvDiffResidualForceTerm_UpwindParam( void* residual, double pecletNumber ) ;
+double _AdvDiffResidualForceTerm_UpwindParam( void* residual, double pecletNumber ) ;
 
 #endif
 
diff -r 34d0c66dfca3 -r 9c81e7eb56f2 SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx
--- a/SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx	Sat Oct 22 19:22:48 2011 -0700
+++ b/SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx	Mon Oct 24 15:31:22 2011 -0700
@@ -91,17 +91,22 @@ double AdvDiffResidualForceTerm_UpwindDi
 	
 	/* Compute the average diffusivity */
 	/* Find Number of Particles in Element */
-	cell_I = CellLayout_MapElementIdToCellId( self->picSwarm->cellLayout, lElement_I );
-	particleCount = self->picSwarm->cellParticleCountTbl[ cell_I ];
+	cell_I = CellLayout_MapElementIdToCellId( self->integrationSwarm->cellLayout, lElement_I );
+	particleCount = self->integrationSwarm->cellParticleCountTbl[ cell_I ];
 
 	/* Average diffusivity for element */
         averageDiffusivity = 0.0;
         for ( cParticle_I = 0 ; cParticle_I < particleCount ; cParticle_I++ ) {
-          lParticle_I = self->picSwarm->cellParticleTbl[cell_I][cParticle_I];
-          particle = (IntegrationPoint*) Swarm_ParticleAt( self->picSwarm, lParticle_I );
+          lParticle_I = self->integrationSwarm->cellParticleTbl[cell_I][cParticle_I];
+          particle = (IntegrationPoint*) Swarm_ParticleAt( self->integrationSwarm, lParticle_I );
+
+          IntegrationPointsSwarm*
+            NNswarm((IntegrationPointsSwarm*)(self->integrationSwarm));
+          IntegrationPoint* NNparticle(particle);
+          NearestNeighbor_Replace(&NNswarm,&NNparticle,lElement_I,dim);
 
           averageDiffusivity +=
-            IntegrationPointMapper_GetDoubleFromMaterial(((IntegrationPointsSwarm *)self->picSwarm)->mapper, particle, self->materialExtHandle,
+            IntegrationPointMapper_GetDoubleFromMaterial(NNswarm->mapper, NNparticle, self->materialExtHandle,
 		    offsetof(AdvDiffResidualForceTerm_MaterialExt, diffusivity));
         }
         averageDiffusivity /= (double)particleCount;



More information about the CIG-COMMITS mailing list