[cig-commits] r14746 - in long/3D/Gale/trunk: . src/StgFEM/plugins/StandardConditionFunctions
walter at geodynamics.org
walter at geodynamics.org
Fri Apr 17 15:20:02 PDT 2009
Author: walter
Date: 2009-04-17 15:20:02 -0700 (Fri, 17 Apr 2009)
New Revision: 14746
Modified:
long/3D/Gale/trunk/
long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
Log:
r2654 at dante: boo | 2009-04-16 06:38:49 -0700
Added Garrett Ito's generalization of the temperature profile
Property changes on: long/3D/Gale/trunk
___________________________________________________________________
Name: svk:merge
- 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:2652
+ 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:2654
Modified: long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c
===================================================================
--- long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c 2009-04-17 20:30:21 UTC (rev 14745)
+++ long/3D/Gale/trunk/src/StgFEM/plugins/StandardConditionFunctions/StandardConditionFunctions.c 2009-04-17 22:20:02 UTC (rev 14746)
@@ -1416,32 +1416,61 @@
void StgFEM_StandardConditionFunctions_TemperatureProfile( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) {
- FiniteElementContext * context = (FiniteElementContext*)_context;
- FeVariable* feVariable = NULL;
- FeMesh* mesh = NULL;
- Dictionary* dictionary = context->dictionary;
- double* result = (double*) _result;
- double* coord;
- double T_0, A, B, C, y_max;
-
- feVariable = (FeVariable*)FieldVariable_Register_GetByName( context->fieldVariable_Register, "VelocityField" );
- mesh = feVariable->feMesh;
- coord = Mesh_GetVertex( mesh, node_lI );
-
- T_0 = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileTop", 0.0 );
- A = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileLinearCoefficient", 0.0 );
- B = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileExponentialCoefficient1", 0.0 );
- C = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileExponentialCoefficient2", 0.0 );
- y_max = Dictionary_GetDouble_WithDefault( dictionary, "maxY", 0.0 );
-
- if(coord[1]>y_max)
- {
- *result=T_0;
- }
- else
- {
- *result=T_0 + A*(y_max-coord[1]) + B*(1-exp(-C*(y_max-coord[1])));
- }
+ FiniteElementContext * context = (FiniteElementContext*)_context;
+ FeVariable* feVariable = NULL;
+ FeMesh* mesh = NULL;
+ Dictionary* dictionary = context->dictionary;
+ double* result = (double*) _result;
+ double* coord;
+ double T_0, H_0, dH, H, H_m, A, B, C, x_min, x_max, y_max, T_m, xc, dum;
+ /* G.Ito 10/08 added variables x_min, x_max, T_m, Xc, to do variation in x
+ and limit maximum T */
+
+ feVariable = (FeVariable*)FieldVariable_Register_GetByName( context->fieldVariable_Register, "VelocityField" );
+ mesh = feVariable->feMesh;
+ coord = Mesh_GetVertex( mesh, node_lI );
+
+ T_0 = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileTop", 0.0 );
+ T_m = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileMax", 10000.0 );
+ H_0 = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileH0", -1.0 );
+ H_m = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileHm", 1.0e+8 );
+ dH = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfiledH", 0.0 );
+ A = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileLinearCoefficient", 0.0 );
+ B = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileExponentialCoefficient1", 0.0 );
+ C = Dictionary_GetDouble_WithDefault( dictionary, "TemperatureProfileExponentialCoefficient2", 0.0 );
+ y_max = Dictionary_GetDouble_WithDefault( dictionary, "maxY", 0.0 );
+ x_max = Dictionary_GetDouble_WithDefault( dictionary, "maxX", 0.0 );
+ x_min = Dictionary_GetDouble_WithDefault( dictionary, "minX", 0.0 );
+ xc = Dictionary_GetDouble_WithDefault( dictionary, "ExtensionCentreX", 0.0 );
+
+ if (H_0<0.0)
+ {
+ if(coord[1]>y_max)
+ {
+ *result=T_0;
+ }
+ else
+ {
+ *result=T_0 + A*(y_max-coord[1]) + B*(1-exp(-C*(y_max-coord[1])));
+ }
+ }
+ else
+ {
+ if(coord[1]>=y_max)
+ {
+ *result=T_0;
+ }
+ else
+ {
+ H=H_0 + 2*fabs(coord[0]-xc)/(x_max-x_min)*dH;
+ if (H>H_m) H=H_m;
+
+ dum=T_0 + ((T_m-T_0)/H)*(y_max-coord[1])
+ + B*(1-exp(-C*(y_max-coord[1])));
+ if (dum>T_m) dum=T_m;
+ *result=dum;
+ }
+ }
}
void StgFEM_StandardConditionFunctions_ERF( Node_LocalIndex node_lI, Variable_Index var_I, void* _context, void* _result ) {
More information about the CIG-COMMITS
mailing list