[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