[cig-commits] r6233 - in mc/3D/CitcomS/trunk: CitcomS/Components
lib module
tan2 at geodynamics.org
tan2 at geodynamics.org
Mon Mar 12 15:14:37 PDT 2007
Author: tan2
Date: 2007-03-12 15:14:36 -0700 (Mon, 12 Mar 2007)
New Revision: 6233
Modified:
mc/3D/CitcomS/trunk/CitcomS/Components/Tracer.py
mc/3D/CitcomS/trunk/lib/Composition_related.c
mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c
mc/3D/CitcomS/trunk/lib/composition_related.h
mc/3D/CitcomS/trunk/lib/global_defs.h
mc/3D/CitcomS/trunk/lib/tracer_defs.h
mc/3D/CitcomS/trunk/module/setProperties.c
Log:
A new input parameter "ic_method_for_flavors", to specify which way to initialize the flavors when the tracers are init'd randomly
Currrently, only ic_method_for_flavors=0 is allowed, which produces a layered structure, any tracer above z_interface is of flavor 0, below z_interface is of flavor 1.
Modified: mc/3D/CitcomS/trunk/CitcomS/Components/Tracer.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Components/Tracer.py 2007-03-12 22:07:19 UTC (rev 6232)
+++ mc/3D/CitcomS/trunk/CitcomS/Components/Tracer.py 2007-03-12 22:14:36 UTC (rev 6233)
@@ -77,6 +77,8 @@
# later for many purposes. One of it is to compute composition,
# either using absolute method or ratio method.
tracer_flavors = inv.int("tracer_flavors", default=0)
+ ic_method_for_flavors = inv.int("ic_method_for_flavors", default=0)
+ z_interface = inv.float("z_interface", default=0.7)
# Advection Scheme
@@ -108,8 +110,6 @@
buoyancy_ratio = inv.float("buoyancy_ratio", default=1.0)
reset_initial_composition = inv.bool("reset_initial_composition",
default=False)
- # TODO: remove
- z_interface = inv.float("z_interface", default=0.5)
# compositional_rheology=1 (not implemented in this version, TODO:remove)
Modified: mc/3D/CitcomS/trunk/lib/Composition_related.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Composition_related.c 2007-03-12 22:07:19 UTC (rev 6232)
+++ mc/3D/CitcomS/trunk/lib/Composition_related.c 2007-03-12 22:14:36 UTC (rev 6233)
@@ -36,7 +36,7 @@
static void allocate_composition_memory(struct All_variables *E);
static void compute_elemental_composition_ratio_method(struct All_variables *E);
static void init_composition(struct All_variables *E);
-static void initialize_old_composition(struct All_variables *E);
+static void check_initial_composition(struct All_variables *E);
static void map_composition_to_nodes(struct All_variables *E);
@@ -65,8 +65,6 @@
input_int("reset_initial_composition",
&(E->composition.ireset_initial_composition),"0",m);
- input_double("z_interface",&(E->composition.z_interface),"0.5",m);
-
}
@@ -101,25 +99,6 @@
}
-void init_tracer_composition(struct All_variables *E)
-{
- int j, kk, number_of_tracers;
- double rad;
-
- for (j=1;j<=E->sphere.caps_per_proc;j++) {
-
- number_of_tracers = E->trace.ntracers[j];
- for (kk=1;kk<=number_of_tracers;kk++) {
- rad = E->trace.basicq[j][2][kk];
- //TODO: generalize init flavors
- if (rad<=E->composition.z_interface) E->trace.extraq[j][0][kk]=1.0;
- if (rad>E->composition.z_interface) E->trace.extraq[j][0][kk]=0.0;
- }
- }
- return;
-}
-
-
void write_composition_instructions(struct All_variables *E)
{
@@ -145,9 +124,6 @@
fprintf(E->trace.fpt,"Buoyancy Ratio: %f\n", E->composition.buoyancy_ratio);
- if (E->composition.ichemical_buoyancy==1)
- fprintf(E->trace.fpt,"Interface Height: %f\n",E->composition.z_interface);
-
if (E->composition.ireset_initial_composition==0)
fprintf(E->trace.fpt,"Using old initial composition from tracer files\n");
else
@@ -232,78 +208,31 @@
static void init_composition(struct All_variables *E)
{
if (E->composition.ichemical_buoyancy==1 && E->composition.ibuoy_type==1) {
- initialize_old_composition(E);
fill_composition(E);
+ check_initial_composition(E);
init_bulk_composition(E);
}
return;
}
-/************ INITIALIZE OLD COMPOSITION ************************/
-static void initialize_old_composition(struct All_variables *E)
+static void check_initial_composition(struct All_variables *E)
{
-
- char output_file[200];
- char input_s[1000];
-
- int ibottom_node;
- int kk;
- int j;
-
- double zbottom;
- double time;
-
- FILE *fp;
-
- if ((E->trace.ic_method==0)||(E->trace.ic_method==1)) {
- for (j=1;j<=E->sphere.caps_per_proc;j++) {
- for (kk=1;kk<=E->lmesh.nel;kk++) {
-
- ibottom_node=E->ien[j][kk].node[1];
- zbottom=E->sx[j][3][ibottom_node];
-
- if (zbottom<E->composition.z_interface) E->composition.comp_el[j][kk]=1.0;
- if (zbottom>=E->composition.z_interface) E->composition.comp_el[j][kk]=0.0;
-
- } /* end kk */
- } /* end j */
- }
-
-
- /* Else read from file */
-
-
- else if (E->trace.ic_method==2) {
-
- /* first look for backing file */
-
- sprintf(output_file,"%s.comp_el.%d.%d",E->control.old_P_file,E->parallel.me,E->monitor.solution_cycles_init);
- if ( (fp=fopen(output_file,"r"))==NULL) {
- fprintf(E->trace.fpt,"AKMerror(Initialize Old Composition)-FILE NOT EXIST: %s\n", output_file);
+ /* check empty element if using ratio method */
+ if (E->composition.ibuoy_type == 1) {
+ if (E->trace.istat_iempty) {
+ fprintf(E->trace.fpt,"WARNING(check_initial_composition)-number of tracers is REALLY LOW\n");
fflush(E->trace.fpt);
+ fprintf(stderr,"WARNING(check_initial_composition)-number of tracers is REALLY LOW\n");
exit(10);
}
+ }
- fgets(input_s,200,fp);
-
- for(j=1;j<=E->sphere.caps_per_proc;j++) {
- fgets(input_s,200,fp);
- for (kk=1;kk<=E->lmesh.nel;kk++) {
- fgets(input_s,200,fp);
- sscanf(input_s,"%lf",&E->composition.comp_el[j][kk]);
- }
- }
-
- fclose(fp);
-
- } /* endif */
-
-
-
return;
}
+
+
/*********** COMPUTE ELEMENTAL COMPOSITION RATIO METHOD ***/
/* */
/* This function computes the composition per element. */
Modified: mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c 2007-03-12 22:07:19 UTC (rev 6232)
+++ mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c 2007-03-12 22:14:36 UTC (rev 6233)
@@ -47,6 +47,7 @@
static void correct_tracers(struct All_variables *E);
static int isum_tracers(struct All_variables *E);
static void make_tracer_array(struct All_variables *E);
+static void init_tracer_flavors(struct All_variables *E);
@@ -90,7 +91,11 @@
input_int("tracer_flavors",&(E->trace.nflavors),"0,0,nomax",m);
+ input_int("ic_method_for_flavors",&(E->trace.ic_method_for_flavors),"0,0,nomax",m);
+ if (E->trace.ic_method_for_flavors == 0)
+ input_double("z_interface",&(E->trace.z_interface),"0.7",m);
+
/* Advection Scheme */
/* itracer_advection_scheme=1 (simple predictor corrector -uses only V(to)) */
@@ -259,12 +264,8 @@
make_regular_grid(E);
- if (E->trace.ic_method==0) {
+ if (E->trace.ic_method==0)
make_tracer_array(E);
-
- if (E->composition.ichemical_buoyancy==1)
- init_tracer_composition(E);
- }
else if (E->trace.ic_method==1)
read_tracer_file(E);
else if (E->trace.ic_method==2)
@@ -3008,6 +3009,19 @@
fprintf(E->trace.fpt,"Number of tracer flavors: %d\n", E->trace.nflavors);
+ if (E->trace.nflavors && E->trace.ic_method==0) {
+ fprintf(E->trace.fpt,"Initialized tracer flavors by: %d\n", E->trace.ic_method_for_flavors);
+ if (E->trace.ic_method_for_flavors == 0) {
+ fprintf(E->trace.fpt,"Layered tracer flavors\n");
+ fprintf(E->trace.fpt,"Interface Height: %f\n",E->trace.z_interface);
+ }
+ else {
+ fprintf(E->trace.fpt,"Sorry-This IC methods for Flavors are Unavailable %d\n",E->trace.ic_method_for_flavors);
+ fflush(E->trace.fpt);
+ parallel_process_termination();
+ }
+ }
+
if (E->trace.itracer_advection_scheme==1)
{
fprintf(E->trace.fpt,"\nSimple predictor-corrector method used\n");
@@ -3303,6 +3317,11 @@
}/* end j */
+
+ /* Initialize tracer flavors */
+ if (E->trace.nflavors) init_tracer_flavors(E);
+
+
fprintf(stderr,"DONE Making Tracer Array (%d)\n",E->parallel.me);
fflush(stderr);
@@ -5254,6 +5273,28 @@
+static void init_tracer_flavors(struct All_variables *E)
+{
+ int j, kk, number_of_tracers;
+ double rad;
+
+ if (E->trace.ic_method_for_flavors == 0) {
+ for (j=1;j<=E->sphere.caps_per_proc;j++) {
+
+ number_of_tracers = E->trace.ntracers[j];
+ for (kk=1;kk<=number_of_tracers;kk++) {
+ rad = E->trace.basicq[j][2][kk];
+
+ if (rad<=E->trace.z_interface) E->trace.extraq[j][0][kk]=1.0;
+ if (rad>E->trace.z_interface) E->trace.extraq[j][0][kk]=0.0;
+ }
+ }
+ }
+
+ return;
+}
+
+
/***********************************************************************/
/* This function computes the number of tracers in each element. */
/* Each tracer can be of different "flavors", which is the 0th index */
Modified: mc/3D/CitcomS/trunk/lib/composition_related.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/composition_related.h 2007-03-12 22:07:19 UTC (rev 6232)
+++ mc/3D/CitcomS/trunk/lib/composition_related.h 2007-03-12 22:14:36 UTC (rev 6233)
@@ -29,6 +29,5 @@
void composition_setup(struct All_variables *E);
void write_composition_instructions(struct All_variables *E);
void init_bulk_composition(struct All_variables *E);
-void init_tracer_composition(struct All_variables *E);
void fill_composition(struct All_variables *E);
Modified: mc/3D/CitcomS/trunk/lib/global_defs.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/global_defs.h 2007-03-12 22:07:19 UTC (rev 6232)
+++ mc/3D/CitcomS/trunk/lib/global_defs.h 2007-03-12 22:14:36 UTC (rev 6233)
@@ -681,8 +681,6 @@
double bulk_composition;
double error_fraction;
- double z_interface;
-
double compositional_rheology_prefactor;
};
Modified: mc/3D/CitcomS/trunk/lib/tracer_defs.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/tracer_defs.h 2007-03-12 22:07:19 UTC (rev 6232)
+++ mc/3D/CitcomS/trunk/lib/tracer_defs.h 2007-03-12 22:14:36 UTC (rev 6233)
@@ -83,6 +83,9 @@
int nflavors;
int **ntracer_flavor[13];
+ int ic_method_for_flavors;
+ double z_interface;
+
/* regular mesh parameters */
int numtheta[13];
int numphi[13];
Modified: mc/3D/CitcomS/trunk/module/setProperties.c
===================================================================
--- mc/3D/CitcomS/trunk/module/setProperties.c 2007-03-12 22:07:19 UTC (rev 6232)
+++ mc/3D/CitcomS/trunk/module/setProperties.c 2007-03-12 22:14:36 UTC (rev 6233)
@@ -604,6 +604,10 @@
getIntProperty(properties, "tracer_flavors", E->trace.nflavors, fp);
+ getIntProperty(properties, "ic_method_for_flavors", E->trace.ic_method_for_flavors, fp);
+ if (E->trace.ic_method_for_flavors == 0)
+ getDoubleProperty(properties, "z_interface", E->trace.z_interface, fp);
+
getIntProperty(properties, "tracer_advection_scheme", E->trace.itracer_advection_scheme, fp);
getIntProperty(properties, "tracer_interpolation_scheme", E->trace.itracer_interpolation_scheme, fp);
@@ -621,7 +625,6 @@
getIntProperty(properties, "buoy_type", E->composition.ibuoy_type, fp);
getDoubleProperty(properties, "buoyancy_ratio", E->composition.buoyancy_ratio, fp);
getIntProperty(properties, "reset_initial_composition", E->composition.ireset_initial_composition, fp);
- getDoubleProperty(properties, "z_interface", E->composition.z_interface, fp);
}
getIntProperty(properties, "compositional_rheology", E->composition.icompositional_rheology, fp);
More information about the cig-commits
mailing list