[cig-commits] r9120 - cs/benchmark/cigma/trunk/src

luis at geodynamics.org luis at geodynamics.org
Tue Jan 22 22:38:09 PST 2008


Author: luis
Date: 2008-01-22 22:38:09 -0800 (Tue, 22 Jan 2008)
New Revision: 9120

Modified:
   cs/benchmark/cigma/trunk/src/CompareCmd.cpp
   cs/benchmark/cigma/trunk/src/CompareCmd.h
Log:
Added --output-frequency and --verbose to compare command


Modified: cs/benchmark/cigma/trunk/src/CompareCmd.cpp
===================================================================
--- cs/benchmark/cigma/trunk/src/CompareCmd.cpp	2008-01-23 03:31:16 UTC (rev 9119)
+++ cs/benchmark/cigma/trunk/src/CompareCmd.cpp	2008-01-23 06:38:09 UTC (rev 9120)
@@ -24,6 +24,9 @@
     field_a = 0;
     field_b = 0;
     residuals = 0; //XXX: create ResidualField class?
+
+    verbose = false;
+    output_frequency = 0;
 }
 
 cigma::CompareCmd::~CompareCmd()
@@ -61,6 +64,10 @@
 
     // options for output
     opt->setOption("output");
+
+    // other options
+    opt->setFlag("verbose");
+    opt->setOption("output-frequency",'f');
 }
 
 static void load_field(std::string inputfile,
@@ -242,6 +249,7 @@
     std::string inputA, inputB;
     std::string inputfileA, inputfileB;
     std::string extA, extB;
+    std::string inputstr;
     char *in;
 
     bool debug = true;
@@ -286,6 +294,17 @@
     output_name = "epsilon";
 
 
+    verbose = opt->getFlag("verbose");
+
+    in = opt->getValue("output-frequency");
+    if (in == 0)
+    {
+        in = "1000";
+    }
+    inputstr = in;
+    string_to_int(inputstr, output_frequency);
+
+
     field_a = new FE_Field();
     load_field(inputfileA, locationA, readerA, field_a);
     std::cout << "first field location = " << locationA << std::endl;
@@ -300,7 +319,9 @@
     std::cout << "second field extension = " << extB << std::endl;
     std::cout << "second field dimensions = " << field_b->meshPart->nel << " cells, " << field_b->meshPart->nno << " nodes, "  << field_b->fe->cell->n_nodes() << " dofs/cell, rank " << field_b->n_rank() << std::endl;
 
+    std::cout << "outputfile = " << output_filename << std::endl;
 
+
     /* if no mesh specified, get it from fieldA
      * if fieldA has no mesh (e.g. specified by analytic soln), then
      * swap fieldA and fieldB, and try again.
@@ -354,38 +375,17 @@
     time(&t_0);
     t_e = t_0;
 
-    const int eltPeriod = 1000;
+    const int eltPeriod = output_frequency;
     const int eltMax = 1000;
-    std::cout << std::setprecision(4);
-    std::cout << "elts rate mins eta total progress\n";
+
+    if (verbose)
+    {
+        std::cout << std::setprecision(4);
+        std::cout << "elts rate mins eta total progress\n";
+    }
+
     for (e = 0; e < nel; e++)
     {
-        //* XXX: debug
-        if (e % eltPeriod == 0)
-        {
-            double elapsed_mins;
-            double rate_per_min;
-            double cells_per_sec;
-            double remaining_mins;
-            double total_mins;
-            double progress;
-
-            time(&t_e);
-            elapsed_mins = (t_e - t_0) / 60.0;
-            rate_per_min = elapsed_mins / (e + 1.0);
-            cells_per_sec = (1.0/60.0) / rate_per_min;
-            remaining_mins = (nel - e) * rate_per_min;
-            total_mins = nel * rate_per_min;
-            progress = 100 * elapsed_mins / total_mins;
-
-            //std::cout << e << " " << std::flush;
-            //std::cout << remaining_mins << "          " << std::flush;
-            std::cout << e << " " << cells_per_sec << " " << elapsed_mins << " " << remaining_mins << " " << total_mins << " " << progress << "%";
-            std::cout << "                                                                            \r" << std::flush;
-
-            //if (e == eltMax) { break; }
-        } // */
-
         // update cell data
         mesh->get_cell_coords(e, cell->globverts);
         //cell->set_global_vertices(...);
@@ -420,10 +420,41 @@
 
         epsilon[e] = err;
         L2 += err;
+
+        //* XXX: debug info
+        if (verbose && (e % output_frequency == 0))
+        {
+            double elapsed_mins;
+            double rate_per_min;
+            double cells_per_sec;
+            double remaining_mins;
+            double total_mins;
+            double progress;
+
+            time(&t_e);
+            elapsed_mins = (t_e - t_0) / 60.0;
+            rate_per_min = elapsed_mins / (e + 1.0);
+            cells_per_sec = (1.0/60.0) / rate_per_min;
+            remaining_mins = (nel - e) * rate_per_min;
+            total_mins = nel * rate_per_min;
+            progress = 100 * elapsed_mins / total_mins;
+
+            //std::cout << e << " " << std::flush;
+            //std::cout << remaining_mins << "          " << std::flush;
+            std::cout << e << " " << cells_per_sec << " " << elapsed_mins << " " << remaining_mins << " " << total_mins << " " << progress << "%";
+            std::cout << "                                                                            \r" << std::flush;
+
+            //if (e == eltMax) { break; }
+        } // */
+
     }
 
+    if (verbose)
+    {
+        std::cout << std::endl;
+    }
+
     L2 = sqrt(L2);
-    std::cout << std::endl;
     std::cout << std::setprecision(12);
     std::cout << "L2 = " << L2 << std::endl;
 
@@ -436,7 +467,7 @@
         int *connect = mesh->connect;
 
         /* XXX: create a cell-based ResidualField class */
-        std::cout << "Creating file " << output_filename << std::endl;
+        //std::cout << "Creating file " << output_filename << std::endl;
         VtkUgSimpleWriter *writer = new VtkUgSimpleWriter();
         writer->open(output_filename);
         writer->write_header();

Modified: cs/benchmark/cigma/trunk/src/CompareCmd.h
===================================================================
--- cs/benchmark/cigma/trunk/src/CompareCmd.h	2008-01-23 03:31:16 UTC (rev 9119)
+++ cs/benchmark/cigma/trunk/src/CompareCmd.h	2008-01-23 06:38:09 UTC (rev 9120)
@@ -35,10 +35,15 @@
     FE_Field *field_a;
     FE_Field *field_b;
     Field *residuals;
+    //Reader readerA, readerB;
+    //HdfReader h5_readerA, h5_readerB;
+    VtkUgReader readerA, readerB;
+
+public:
+    std::string locationA, locationB;
     std::string output_filename, output_name;
-    std::string locationA, locationB;
-    VtkUgReader readerA, readerB;
-    //HdfReader h5_readerA, h5_readerB;
+    bool verbose;
+    int output_frequency;
 };
 
 



More information about the cig-commits mailing list