[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