[cig-commits] r11218 - mc/3D/CitcomS/trunk/lib

tan2 at geodynamics.org tan2 at geodynamics.org
Wed Feb 20 17:00:22 PST 2008


Author: tan2
Date: 2008-02-20 17:00:21 -0800 (Wed, 20 Feb 2008)
New Revision: 11218

Modified:
   mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c
   mc/3D/CitcomS/trunk/lib/Process_buoyancy.c
   mc/3D/CitcomS/trunk/lib/Tracer_setup.c
Log:
Get new tracers in post processing stage


Modified: mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c	2008-02-21 00:56:29 UTC (rev 11217)
+++ mc/3D/CitcomS/trunk/lib/Full_tracer_advection.c	2008-02-21 01:00:21 UTC (rev 11218)
@@ -169,8 +169,6 @@
     E->trace.number_of_extra_quantities = 0;
     if (E->trace.nflavors > 0)
         E->trace.number_of_extra_quantities += 1;
-    else if (E->trace.itracer_interpolate_fields)
-        E->trace.number_of_extra_quantities += 2;
 
 
     E->trace.number_of_tracer_quantities =

Modified: mc/3D/CitcomS/trunk/lib/Process_buoyancy.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Process_buoyancy.c	2008-02-21 00:56:29 UTC (rev 11217)
+++ mc/3D/CitcomS/trunk/lib/Process_buoyancy.c	2008-02-21 01:00:21 UTC (rev 11218)
@@ -178,10 +178,13 @@
 
 void post_processing(struct All_variables *E)
 {
-  if (E->trace.itracer_interpolate_fields && E->control.tracer)
-      output_interpolated_fields(E);
+    void dump_and_get_new_tracers_to_interpolate_fields(struct All_variables *E);
 
-  return;
+    if (E->trace.itracer_interpolate_fields && E->control.tracer) {
+        dump_and_get_new_tracers_to_interpolate_fields(E);
+        output_interpolated_fields(E);
+    }
+    return;
 }
 
 

Modified: mc/3D/CitcomS/trunk/lib/Tracer_setup.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Tracer_setup.c	2008-02-21 00:56:29 UTC (rev 11217)
+++ mc/3D/CitcomS/trunk/lib/Tracer_setup.c	2008-02-21 01:00:21 UTC (rev 11218)
@@ -78,6 +78,7 @@
 static void check_sum(struct All_variables *E);
 static int isum_tracers(struct All_variables *E);
 static void init_tracer_flavors(struct All_variables *E);
+static void free_tracer_arrays(struct All_variables *E, int j);
 static void reduce_tracer_arrays(struct All_variables *E);
 static void put_away_later(struct All_variables *E, int j, int it);
 static void eject_tracer(struct All_variables *E, int j, int it);
@@ -665,9 +666,8 @@
 
 
 
-void initialize_tracers(struct All_variables *E)
+static void get_new_tracers(struct All_variables *E)
 {
-
     if (E->trace.ic_method==0)
         make_tracer_array(E);
     else if (E->trace.ic_method==1)
@@ -692,7 +692,13 @@
 
     find_tracers(E);
 
+    return;
+}
 
+void initialize_tracers(struct All_variables *E)
+{
+    get_new_tracers(E);
+
     /* count # of tracers of each flavor */
 
     if (E->trace.nflavors > 0)
@@ -702,6 +708,23 @@
 }
 
 
+void dump_and_get_new_tracers_to_interpolate_fields(struct All_variables *E)
+{
+    int j;
+
+    for (j=1;j<=E->sphere.caps_per_proc;j++)
+        free_tracer_arrays(E, j);
+
+    E->trace.number_of_extra_quantities = 2;
+    E->trace.number_of_tracer_quantities =
+        E->trace.number_of_basic_quantities +
+        E->trace.number_of_extra_quantities;
+
+    get_new_tracers(E);
+    return;
+}
+
+
 /************** MAKE TRACER ARRAY ********************************/
 /* Here, each processor will generate tracers somewhere          */
 /* in the sphere - check if its in this cap  - then check radial */
@@ -863,7 +886,6 @@
 
     int read_double_vector(FILE *in, int num_columns, double *fields);
     int icheck_processor_shell();
-    int isum_tracers();
     void sphere_to_cart();
     void cart_to_sphere();
     void expand_tracer_arrays();
@@ -875,7 +897,6 @@
     FILE *fptracer;
 
     fptracer=fopen(E->trace.tracer_file,"r");
-    fprintf(E->trace.fpt,"Opening %s\n",E->trace.tracer_file);
 
     fgets(input_s,200,fptracer);
     sscanf(input_s,"%d %d",&number_of_tracers,&ncolumns);
@@ -906,7 +927,7 @@
 
             len = read_double_vector(fptracer, ncol, buffer);
             if (len != ncol) {
-                fprintf(E->trace.fpt,"ERROR(read tracer file) - wrong input file format: %s\n", E->trace.tracer_file);
+                fprintf(E->trace.fpt,"ERROR(read tracer file) - wrong input file format: %d-th tracer in %s\n", kk, E->trace.tracer_file);
                 fflush(E->trace.fpt);
                 exit(10);
             }
@@ -957,6 +978,20 @@
         fprintf(E->trace.fpt,"Number of tracers in this cap is: %d\n",
                 E->trace.ntracers[j]);
 
+        /** debug **
+        for (kk=1; kk<=E->trace.ntracers[j]; kk++) {
+            fprintf(E->trace.fpt, "tracer#=%d sph_coord=(%g,%g,%g)", kk,
+                    E->trace.basicq[j][0][kk],
+                    E->trace.basicq[j][1][kk],
+                    E->trace.basicq[j][2][kk]);
+            fprintf(E->trace.fpt, "   extraq=");
+            for (i=0; i<E->trace.number_of_extra_quantities; i++)
+                fprintf(E->trace.fpt, " %g", E->trace.extraq[j][i][kk]);
+            fprintf(E->trace.fpt, "\n");
+        }
+        fflush(E->trace.fpt);
+        /**/
+
     } /* end j */
 
     fclose(fptracer);
@@ -1083,6 +1118,20 @@
 
         }
 
+        /** debug **
+        for (kk=1; kk<=E->trace.ntracers[j]; kk++) {
+            fprintf(E->trace.fpt, "tracer#=%d sph_coord=(%g,%g,%g)", kk,
+                    E->trace.basicq[j][0][kk],
+                    E->trace.basicq[j][1][kk],
+                    E->trace.basicq[j][2][kk]);
+            fprintf(E->trace.fpt, "   extraq=");
+            for (i=0; i<E->trace.number_of_extra_quantities; i++)
+                fprintf(E->trace.fpt, " %g", E->trace.extraq[j][i][kk]);
+            fprintf(E->trace.fpt, "\n");
+        }
+        fflush(E->trace.fpt);
+        /**/
+
         fprintf(E->trace.fpt,"Read %d tracers from file %s\n",numtracers,output_file);
         fflush(E->trace.fpt);
 
@@ -1428,7 +1477,31 @@
 }
 
 
+/****** FREE TRACER ARRAYS *****************************************/
+static void free_tracer_arrays(struct All_variables *E, int j)
+{
+    int kk;
 
+    if (E->trace.nflavors > 0) {
+        for (kk=0;kk<E->trace.nflavors;kk++)
+            free(E->trace.ntracer_flavor[j][kk]);
+        free(E->trace.ntracer_flavor[j]);
+    }
+
+    for (kk=0;kk<E->trace.number_of_extra_quantities;kk++)
+        free(E->trace.extraq[j][kk]);
+
+    for (kk=0;kk<E->trace.number_of_basic_quantities;kk++)
+        free(E->trace.basicq[j][kk]);
+
+    free(E->trace.ielement[j]);
+
+    E->trace.max_ntracers[j] = E->trace.ntracers[j] = 0;
+
+    return;
+}
+
+
 /****** EXPAND TRACER ARRAYS *****************************************/
 
 void expand_tracer_arrays(struct All_variables *E, int j)



More information about the cig-commits mailing list