[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