[cig-commits] commit: Use supgFactor instead of hard coding an upwind diffusivity factor

Mercurial hg at geodynamics.org
Mon Jul 9 16:29:56 PDT 2012


changeset:   838:a98a2acaff70
tag:         tip
user:        Walter Landry <wlandry at caltech.edu>
date:        Mon Jul 09 16:29:52 2012 -0700
files:       SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx
description:
Use supgFactor instead of hard coding an upwind diffusivity factor


diff -r 48bc6ad34fcd -r a98a2acaff70 SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx
--- a/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx	Mon Jul 09 15:32:40 2012 -0700
+++ b/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.cxx	Mon Jul 09 16:29:52 2012 -0700
@@ -69,6 +69,7 @@ AdvDiffResidualForceTerm_New(Name name,
                              Stg_Component* sle, 
                              FeVariable* velocityField,
                              double defaultDiffusivity,
+                             double supgFactor,
                              Swarm* picSwarm,
                              void* materials_Register,
                              AdvDiffResidualForceTerm_UpwindParamFuncType
@@ -79,7 +80,8 @@ AdvDiffResidualForceTerm_New(Name name,
   self->isConstructed = True;
   _ForceTerm_Init( self, context, forceVector, swarm, sle );
   _AdvDiffResidualForceTerm_Init(self,velocityField,defaultDiffusivity,
-                                 picSwarm, materials_Register,upwindFuncType );
+                                 supgFactor,picSwarm, materials_Register,
+                                 upwindFuncType );
   self->picSwarm=picSwarm;
 
   return self;
@@ -174,6 +176,7 @@ void _AdvDiffResidualForceTerm_Init(void
 void _AdvDiffResidualForceTerm_Init(void* residual,
                                     FeVariable* velocityField,
                                     double defaultDiffusivity,
+                                    double supgFactor,
                                     Swarm* picSwarm,
                                     void* materials_Register,
                                     AdvDiffResidualForceTerm_UpwindParamFuncType
@@ -183,6 +186,7 @@ void _AdvDiffResidualForceTerm_Init(void
 
   self->velocityField = velocityField;
   self->defaultDiffusivity = defaultDiffusivity;
+  self->supgFactor = supgFactor;
   self->materials_Register  = materials_Register;
   self->upwindParamType = upwindFuncType;
   self->picSwarm = picSwarm;
@@ -210,13 +214,13 @@ void _AdvDiffResidualForceTerm_Print( vo
 	/* General info */
 	Journal_PrintPointer( stream, self->velocityField );
 	Journal_PrintDouble( stream, self->defaultDiffusivity );
+	Journal_PrintDouble( stream, self->supgFactor );
 }
 
 void _AdvDiffResidualForceTerm_AssignFromXML( void* residual, Stg_ComponentFactory* cf, void* data ) {
 	AdvDiffResidualForceTerm*							self = (AdvDiffResidualForceTerm*)residual;
 	FeVariable*												velocityField;
 	Name														upwindParamFuncName;
-	double													defaultDiffusivity;
 	Materials_Register*		materials_Register;
 	AdvDiffResidualForceTerm_UpwindParamFuncType	upwindFuncType = (AdvDiffResidualForceTerm_UpwindParamFuncType)0;
 
@@ -237,13 +241,18 @@ void _AdvDiffResidualForceTerm_AssignFro
 	else 
 		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  );
+	double defaultDiffusivity=
+          Stg_ComponentFactory_GetDouble(cf,self->name,
+                                         (Dictionary_Entry_Key)"defaultDiffusivity",1.0);
+	double supgFactor=
+          Stg_ComponentFactory_GetDouble(cf,self->name,(Dictionary_Entry_Key)"supgFactor",1.0);
 	materials_Register = ((PICelleratorContext*)(self->context))->materials_Register;
 
-	_AdvDiffResidualForceTerm_Init( self, velocityField, defaultDiffusivity,
-                                        picSwarm,
-                                        materials_Register,
-                                        upwindFuncType );
+	_AdvDiffResidualForceTerm_Init(self,velocityField,defaultDiffusivity,
+                                       supgFactor,
+                                       picSwarm,
+                                       materials_Register,
+                                       upwindFuncType );
 }
 
 void _AdvDiffResidualForceTerm_Build(void* residual, void* data)
@@ -393,7 +402,6 @@ void _AdvDiffResidualForceTerm_AssembleE
   double*                    phiGrad;
   double*                    Ni;
   double*                    SUPGNi;
-  double                     supgfactor;
   double                     udotu, perturbation;
   double                     upwindDiffusivity;
 
@@ -464,7 +472,7 @@ void _AdvDiffResidualForceTerm_AssembleE
       if(dim==3)
         udotu+=velocity[K_AXIS]*velocity[K_AXIS];
 
-      supgfactor = upwindDiffusivity / udotu;
+      double supg = upwindDiffusivity*self->supgFactor / udotu;
       for(node_I=0; node_I<elementNodeCount; node_I++)
         {
           /* In the case of per diffusion - just build regular shape functions */
@@ -480,7 +488,7 @@ void _AdvDiffResidualForceTerm_AssembleE
             perturbation=perturbation+velocity[K_AXIS]*GNx[K_AXIS][node_I];
 			
           /* p = \frac{\bar \kappa \hat u_j w_j }{ ||u|| } -  Eq. 3.2.25 */
-          perturbation = supgfactor * perturbation;
+          perturbation = supg * perturbation;
 			
           SUPGNi[node_I] = Ni[node_I] + perturbation;
         }  
diff -r 48bc6ad34fcd -r a98a2acaff70 SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h
--- a/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h	Mon Jul 09 15:32:40 2012 -0700
+++ b/SLE/ProvidedSystems/AdvectionDiffusion/src/Residual.h	Mon Jul 09 16:29:52 2012 -0700
@@ -76,6 +76,7 @@ typedef struct {
   /* AdvDiffResidualForceTerm info */ \
   FeVariable* velocityField; \
   double defaultDiffusivity; \
+  double supgFactor; \
   AdvDiffResidualForceTerm_UpwindParamFuncType upwindParamType;
 
 struct AdvDiffResidualForceTerm { __AdvDiffResidualForceTerm };	
@@ -92,6 +93,7 @@ AdvDiffResidualForceTerm_New(Name name,
                              Stg_Component* sle, 
                              FeVariable* velocityField,
                              double defaultDiffusivity,
+                             double supgFactor,
                              Swarm* picSwarm,
                              void* materials_Register,
                              AdvDiffResidualForceTerm_UpwindParamFuncType
@@ -115,6 +117,7 @@ void _AdvDiffResidualForceTerm_Init(void
 void _AdvDiffResidualForceTerm_Init(void* residual,
                                     FeVariable* velocityField,
                                     double defaultDiffusivity,
+                                    double supgFactor,
                                     Swarm* picSwarm,
                                     void* materials_Register,
                                     AdvDiffResidualForceTerm_UpwindParamFuncType
diff -r 48bc6ad34fcd -r a98a2acaff70 SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx
--- a/SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx	Mon Jul 09 15:32:40 2012 -0700
+++ b/SLE/ProvidedSystems/AdvectionDiffusion/src/UpwindParameter.cxx	Mon Jul 09 16:29:52 2012 -0700
@@ -153,12 +153,9 @@ double AdvDiffResidualForceTerm_UpwindDi
     }
   upwindDiffusivity*=ISQRT15;         /* See Eq. 3.3.11 */
 
-  upwindDiffusivity/=16; /* This factor is because we are using Q2
+  upwindDiffusivity/=2; /* This factor is because we are using Q2
                            instead of Q1 elements, so the spacing
-                           needs to be adjusted.  That gives a factor
-                           of 2, but we make it a factor of 16 to
-                           ensure stability even when the mesh is
-                           distorted. */
+                           needs to be adjusted. */
 	
   return upwindDiffusivity;
 }



More information about the CIG-COMMITS mailing list