[cig-commits] r15054 - mc/3D/CitcomS/trunk/lib
becker at geodynamics.org
becker at geodynamics.org
Tue May 26 08:21:42 PDT 2009
Author: becker
Date: 2009-05-26 08:21:42 -0700 (Tue, 26 May 2009)
New Revision: 15054
Modified:
mc/3D/CitcomS/trunk/lib/Initial_temperature.c
mc/3D/CitcomS/trunk/lib/convection_variables.h
Log:
Added blob_bc_persist parameter (default = off) to allow assigning
blob-like temperature anomalies to BCs.
Modified: mc/3D/CitcomS/trunk/lib/Initial_temperature.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Initial_temperature.c 2009-05-26 15:03:36 UTC (rev 15053)
+++ mc/3D/CitcomS/trunk/lib/Initial_temperature.c 2009-05-26 15:21:42 UTC (rev 15054)
@@ -134,7 +134,7 @@
input_float("half_space_age", &(E->convection.half_space_age), "40.0,1e-3,nomax", m);
input_float("mantle_temp",&(E->control.mantle_temp),"1.0",m);
-
+
switch(E->convection.tic_method){
case 2: /* blob */
if( ! input_float_vector("blob_center", 3, E->convection.blob_center, m)) {
@@ -152,6 +152,7 @@
}
input_float("blob_radius", &(E->convection.blob_radius), "0.063,0.0,1.0", m);
input_float("blob_dT", &(E->convection.blob_dT), "0.18,nomin,nomax", m);
+ input_boolean("blob_bc_persist",&(E->convection.blob_bc_persist),"off",m);
break;
case 4:
/*
@@ -538,14 +539,18 @@
int nox, noy, noz;
double theta_center, fi_center, r_center,x_center[4],dx[4];
- double radius, amp;
-
+ double radius, amp, r1,rout,rin;
+ const double e_4 = 1e-4;
double distance;
noy = E->lmesh.noy;
nox = E->lmesh.nox;
noz = E->lmesh.noz;
+ rout = E->sphere.ro;
+ rin = E->sphere.ri;
+
+
theta_center = E->convection.blob_center[0];
fi_center = E->convection.blob_center[1];
r_center = E->convection.blob_center[2];
@@ -569,8 +574,19 @@
dx[3] = E->x[m][3][node] - x_center[3];
distance = sqrt(dx[1]*dx[1] + dx[2]*dx[2] + dx[3]*dx[3]);
- if (distance < radius)
- E->T[m][node] += amp * exp(-1.0*distance/radius);
+ if (distance < radius){
+ E->T[m][node] += amp * exp(-1.0*distance/radius);
+
+ if(E->convection.blob_bc_persist){
+ r1 = E->sx[m][3][node];
+ if((fabs(r1 - rout) < e_4) || (fabs(r1 - rin) < e_4)){
+ /* at bottom or top of box, assign as TBC */
+ E->sphere.cap[m].TB[1][node]=E->T[m][node];
+ E->sphere.cap[m].TB[2][node]=E->T[m][node];
+ E->sphere.cap[m].TB[3][node]=E->T[m][node];
+ }
+ }
+ }
}
return;
}
Modified: mc/3D/CitcomS/trunk/lib/convection_variables.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/convection_variables.h 2009-05-26 15:03:36 UTC (rev 15053)
+++ mc/3D/CitcomS/trunk/lib/convection_variables.h 2009-05-26 15:21:42 UTC (rev 15054)
@@ -42,6 +42,7 @@
float blob_center[3];
float blob_radius;
float blob_dT;
+ int blob_bc_persist;
struct SOURCES {
int number;
More information about the CIG-COMMITS
mailing list