[cig-commits] r4631 - in mc/3D/CitcomS/trunk: CitcomS CitcomS/Components CitcomS/Solver lib module

tan2 at geodynamics.org tan2 at geodynamics.org
Tue Sep 26 17:24:46 PDT 2006


Author: tan2
Date: 2006-09-26 17:24:45 -0700 (Tue, 26 Sep 2006)
New Revision: 4631

Added:
   mc/3D/CitcomS/trunk/CitcomS/Components/Output.py
Modified:
   mc/3D/CitcomS/trunk/CitcomS/Makefile.am
   mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py
   mc/3D/CitcomS/trunk/lib/Instructions.c
   mc/3D/CitcomS/trunk/lib/Output.c
   mc/3D/CitcomS/trunk/lib/Output_h5.c
   mc/3D/CitcomS/trunk/lib/global_defs.h
   mc/3D/CitcomS/trunk/lib/output.h
   mc/3D/CitcomS/trunk/lib/output_h5.h
   mc/3D/CitcomS/trunk/module/bindings.cc
   mc/3D/CitcomS/trunk/module/setProperties.cc
   mc/3D/CitcomS/trunk/module/setProperties.h
Log:
* Created new component 'Output.py' for storing output-related properties
* Added several input parameters for HDF5 output performance tuning
* Moved 'output_format' and 'output_optional' form Solver.py to Output.py


Added: mc/3D/CitcomS/trunk/CitcomS/Components/Output.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Components/Output.py	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/CitcomS/Components/Output.py	2006-09-27 00:24:45 UTC (rev 4631)
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+#<LicenseText>
+#
+# CitcomS.py by Eh Tan, Eun-seo Choi, and Pururav Thoutireddy.
+# Copyright (C) 2002-2005, California Institute of Technology.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+#</LicenseText>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+
+from CitcomComponent import CitcomComponent
+
+class Output(CitcomComponent):
+
+
+    def __init__(self, name="output", facility="output"):
+        CitcomComponent.__init__(self, name, facility)
+        return
+
+
+
+    def setProperties(self):
+        print 'in output.py'
+        from CitcomSLib import Output_set_properties
+        Output_set_properties(self.all_variables, self.inventory)
+        return
+
+
+
+    class Inventory(CitcomComponent.Inventory):
+
+        import pyre.inventory as inv
+
+        output_format = inv.str("output_format", default="ascii-local",
+                                validator=inv.choice(["ascii-local",
+                                                      "ascii",
+                                                      "hdf5"]))
+        output_optional = inv.str("output_optional", default="surf,botm")
+
+        mega1 = 1024*1024
+        #megaq = 256*1024
+
+        # size of collective buffer used by MPI-IO
+        cb_block_size = inv.int("cb_block_size", default=mega1)
+        cb_buffer_size = inv.int("cb_buffer_size", default=mega1*4)
+
+        # size of data sieve buffer used by HDF5
+        sieve_buf_size = inv.int("sieve_buf_size", default=mega1)
+
+        # memory alignment used by HDF5
+        outupt_alignment = inv.int("outupt_alignment", default=mega1/4)
+        outupt_alignment_threshold = inv.int("outupt_alignment_threshold",
+                                        default=mega1/2)
+
+        # cache for chunked dataset used by HDF5
+        cache_mdc_nelmts = inv.int("cache_mdc_nelmts", default=10330)
+        cache_rdcc_nelmts = inv.int("cache_rdcc_nelmts", default=521)
+        cache_rdcc_nbytes = inv.int("cache_rdcc_nbytes", default=mega1)
+
+
+# version
+__id__ = "$Id$"
+
+# End of file

Modified: mc/3D/CitcomS/trunk/CitcomS/Makefile.am
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Makefile.am	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/CitcomS/Makefile.am	2006-09-27 00:24:45 UTC (rev 4631)
@@ -35,6 +35,7 @@
 	Components/Const.py \
 	Components/HackedConfigParser.py \
 	Components/IC.py \
+	Components/Output.py \
 	Components/Launchers.py \
 	Components/Param.py \
 	Components/Phase.py \

Modified: mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py	2006-09-27 00:24:45 UTC (rev 4631)
@@ -88,6 +88,7 @@
         inv.bc.initialize(all_variables)
         inv.const.initialize(all_variables)
         inv.ic.initialize(all_variables)
+        inv.output.initialize(all_variables)
         inv.param.initialize(all_variables)
         inv.phase.initialize(all_variables)
         inv.tracer.initialize(all_variables)
@@ -222,6 +223,7 @@
         inv.bc.setProperties()
         inv.const.setProperties()
         inv.ic.setProperties()
+        inv.output.setProperties()
         inv.param.setProperties()
         inv.phase.setProperties()
         inv.tracer.setProperties()
@@ -248,6 +250,7 @@
         from CitcomS.Components.BC import BC
         from CitcomS.Components.Const import Const
         from CitcomS.Components.IC import IC
+        from CitcomS.Components.Output import Output
         from CitcomS.Components.Param import Param
         from CitcomS.Components.Phase import Phase
         from CitcomS.Components.Tracer import Tracer
@@ -262,6 +265,7 @@
         bc = inv.facility("bc", factory=BC)
         const = inv.facility("const", factory=Const)
         ic = inv.facility("ic", factory=IC)
+        output = inv.facility("output", factory=Output)
         param = inv.facility("param", factory=Param)
         phase = inv.facility("phase", factory=Phase)
         tracer = inv.facility("tracer", factory=Tracer)
@@ -275,12 +279,6 @@
 
         stokes_flow_only = inv.bool("stokes_flow_only", default=False)
 
-        output_format = inv.str("output_format", default="ascii-local",
-                                validator=inv.choice(["ascii-local",
-                                                      "ascii",
-                                                      "hdf5"]))
-        output_optional = inv.str("output_optional", default="surf,botm")
-
         verbose = inv.bool("verbose", default=False)
         see_convergence = inv.bool("see_convergence", default=True)
 

Modified: mc/3D/CitcomS/trunk/lib/Instructions.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Instructions.c	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/lib/Instructions.c	2006-09-27 00:24:45 UTC (rev 4631)
@@ -270,9 +270,6 @@
   input_string("datadir_old",E->control.data_dir_old,"initialize",m);
   input_string("datafile_old",E->control.old_P_file,"initialize",m);
 
-  input_string("output_format",E->output.format,"ascii-local",m);
-  input_string("output_optional",E->output.optional,"surf,botm",m);
-
   input_int("mgunitx",&(E->mesh.mgunitx),"1",m);
   input_int("mgunitz",&(E->mesh.mgunitz),"1",m);
   input_int("mgunity",&(E->mesh.mgunity),"1",m);
@@ -382,6 +379,8 @@
     / (E->data.density * E->data.grav_acc * E->data.therm_exp)
     / (E->data.layer_km * E->data.layer_km * E->data.layer_km * 1e9);
 
+  output_common_input(E);
+  output_h5_input(E);
   phase_change_input(E);
   lith_age_input(E);
   viscosity_input(E);

Modified: mc/3D/CitcomS/trunk/lib/Output.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Output.c	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/lib/Output.c	2006-09-27 00:24:45 UTC (rev 4631)
@@ -33,6 +33,7 @@
 #include <math.h>
 #include "element_definitions.h"
 #include "global_defs.h"
+#include "parsing.h"
 #include "output.h"
 
 void output_coord(struct All_variables *);
@@ -53,7 +54,17 @@
 
 /**********************************************************************/
 
+void output_common_input(struct All_variables *E)
+{
+    int m = E->parallel.me;
 
+    input_string("output_format", E->output.format, "ascii-local",m);
+    input_string("output_optional", E->output.optional, "surf,botm",m);
+
+}
+
+
+
 void output(struct All_variables *E, int cycles)
 {
 

Modified: mc/3D/CitcomS/trunk/lib/Output_h5.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Output_h5.c	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/lib/Output_h5.c	2006-09-27 00:24:45 UTC (rev 4631)
@@ -35,6 +35,7 @@
 #include <math.h>
 #include "element_definitions.h"
 #include "global_defs.h"
+#include "parsing.h"
 #include "output_h5.h"
 
 #ifdef USE_HDF5
@@ -111,6 +112,31 @@
 
 
 /****************************************************************************
+ * Functions that read input parameters for legacy CitcomS                   *
+ ****************************************************************************/
+
+void output_h5_input(struct All_variables *E)
+{
+#ifdef USE_HDF5
+    int m = E->parallel.me;
+
+    input_int("cb_block_size", &(E->output.cb_block_size), "1048576", m);
+    input_int("cb_buffer_size", &(E->output.cb_buffer_size), "4194304", m);
+
+    input_int("sieve_buf_size", &(E->output.sieve_buf_size), "1048576", m);
+
+    input_int("outupt_alignment", &(E->output.alignment), "262144", m);
+    input_int("outupt_alignment_threshold", &(E->output.alignment_threshold), "524288", m);
+
+    input_int("cache_mdc_nelmts", &(E->output.cache_mdc_nelmts), "10330", m);
+    input_int("cache_rdcc_nelmts", &(E->output.cache_rdcc_nelmts), "521", m);
+    input_int("cache_rdcc_nbytes", &(E->output.cache_rdcc_nbytes), "1048576", m);
+
+#endif
+}
+
+
+/****************************************************************************
  * Functions that control which data is saved to output file(s).            *
  * These represent possible choices for (E->output) function pointer.       *
  ****************************************************************************/

Modified: mc/3D/CitcomS/trunk/lib/global_defs.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/global_defs.h	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/lib/global_defs.h	2006-09-27 00:24:45 UTC (rev 4631)
@@ -792,6 +792,23 @@
 struct Output {
     char format[20];  /* ascii-local, ascii or hdf5 */
     char optional[1000]; /* comma-delimited list of objects to output */
+
+    /* size of collective buffer used by MPI-IO */
+    int cb_block_size;
+    int cb_buffer_size;
+
+    /* size of data sieve buffer used by HDF5 */
+    int sieve_buf_size;
+
+    /* memory alignment used by HDF5 */
+    int alignment;
+    int alignment_threshold;
+
+    /* cache for chunked dataset used by HDF5 */
+    int cache_mdc_nelmts;
+    int cache_rdcc_nelmts;
+    int cache_rdcc_nbytes;
+
     int connectivity; /* whether to output connectivity */
     int stress;       /* whether to output stress */
     int pressure;     /* whether to output pressure */

Modified: mc/3D/CitcomS/trunk/lib/output.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/output.h	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/lib/output.h	2006-09-27 00:24:45 UTC (rev 4631)
@@ -33,6 +33,7 @@
 extern "C" {
 #endif
 
+void output_common_input(struct All_variables *);
 void output(struct All_variables *, int);
 void output_time(struct All_variables *, int);
 

Modified: mc/3D/CitcomS/trunk/lib/output_h5.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/output_h5.h	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/lib/output_h5.h	2006-09-27 00:24:45 UTC (rev 4631)
@@ -33,6 +33,7 @@
 extern "C" {
 #endif
 
+void output_h5_input(struct All_variables *);
 void h5output(struct All_variables *, int);
 
 void h5output_open(struct All_variables *);

Modified: mc/3D/CitcomS/trunk/module/bindings.cc
===================================================================
--- mc/3D/CitcomS/trunk/module/bindings.cc	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/module/bindings.cc	2006-09-27 00:24:45 UTC (rev 4631)
@@ -237,6 +237,11 @@
      METH_VARARGS,
      pyCitcom_IC_set_properties__doc__},
 
+    {pyCitcom_Output_set_properties__name__,
+     pyCitcom_Output_set_properties,
+     METH_VARARGS,
+     pyCitcom_Output_set_properties__doc__},
+
     {pyCitcom_Param_set_properties__name__,
      pyCitcom_Param_set_properties,
      METH_VARARGS,

Modified: mc/3D/CitcomS/trunk/module/setProperties.cc
===================================================================
--- mc/3D/CitcomS/trunk/module/setProperties.cc	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/module/setProperties.cc	2006-09-27 00:24:45 UTC (rev 4631)
@@ -285,6 +285,52 @@
 
 
 
+char pyCitcom_Output_set_properties__doc__[] = "";
+char pyCitcom_Output_set_properties__name__[] = "Output_set_properties";
+
+PyObject * pyCitcom_Output_set_properties(PyObject *self, PyObject *args)
+{
+    PyObject *obj, *properties;
+
+    if (!PyArg_ParseTuple(args, "OO:Output_set_properties",
+			  &obj, &properties))
+        return NULL;
+
+    struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
+
+    int m = E->parallel.me;
+    std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+    *out << "[CitcomS.solver.output]" << std::endl;
+
+    getStringProperty(properties, "output_format", E->output.format, out);
+    getStringProperty(properties, "output_optional", E->output.optional, out);
+
+    getScalarProperty(properties, "cb_block_size", E->output.cb_block_size, out);
+    getScalarProperty(properties, "cb_buffer_size", E->output.cb_buffer_size, out);
+
+    getScalarProperty(properties, "sieve_buf_size", E->output.sieve_buf_size, out);
+
+    getScalarProperty(properties, "outupt_alignment", E->output.alignment, out);
+    getScalarProperty(properties, "outupt_alignment_threshold", E->output.alignment_threshold, out);
+
+    getScalarProperty(properties, "cache_mdc_nelmts", E->output.cache_mdc_nelmts, out);
+    getScalarProperty(properties, "cache_rdcc_nelmts", E->output.cache_rdcc_nelmts, out);
+    getScalarProperty(properties, "cache_rdcc_nbytes", E->output.cache_rdcc_nbytes, out);
+
+    *out << std::endl;
+    out->close();
+    delete out;
+
+    if (PyErr_Occurred())
+	return NULL;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+
+}
+
+
+
 char pyCitcom_Param_set_properties__doc__[] = "";
 char pyCitcom_Param_set_properties__name__[] = "Param_set_properties";
 
@@ -413,9 +459,6 @@
 
     getScalarProperty(properties, "stokes_flow_only", E->control.stokes, out);
 
-    getStringProperty(properties, "output_format", E->output.format, out);
-    getStringProperty(properties, "output_optional", E->output.optional, out);
-
     getScalarProperty(properties, "verbose", E->control.verbose, out);
     getScalarProperty(properties, "see_convergence", E->control.print_convergence, out);
 

Modified: mc/3D/CitcomS/trunk/module/setProperties.h
===================================================================
--- mc/3D/CitcomS/trunk/module/setProperties.h	2006-09-27 00:23:43 UTC (rev 4630)
+++ mc/3D/CitcomS/trunk/module/setProperties.h	2006-09-27 00:24:45 UTC (rev 4631)
@@ -46,6 +46,10 @@
 extern char pyCitcom_IC_set_properties__name__[];
 extern PyObject * pyCitcom_IC_set_properties(PyObject *, PyObject *);
 
+extern char pyCitcom_Output_set_properties__doc__[];
+extern char pyCitcom_Output_set_properties__name__[];
+extern PyObject * pyCitcom_Output_set_properties(PyObject *, PyObject *);
+
 extern char pyCitcom_Param_set_properties__doc__[];
 extern char pyCitcom_Param_set_properties__name__[];
 extern PyObject * pyCitcom_Param_set_properties(PyObject *, PyObject *);



More information about the cig-commits mailing list