[cig-commits] r4565 - in mc/3D/CitcomS/trunk: CitcomS/Solver
examples/Cookbook5 examples/Full examples/Regional lib module visual
tan2 at geodynamics.org
tan2 at geodynamics.org
Sun Sep 17 10:32:44 PDT 2006
Author: tan2
Date: 2006-09-17 10:32:43 -0700 (Sun, 17 Sep 2006)
New Revision: 4565
Modified:
mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py
mc/3D/CitcomS/trunk/examples/Cookbook5/cookbook5.cfg
mc/3D/CitcomS/trunk/examples/Full/input.sample
mc/3D/CitcomS/trunk/examples/Regional/input.sample
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/module/setProperties.cc
mc/3D/CitcomS/trunk/visual/autocombine.py
mc/3D/CitcomS/trunk/visual/batchcombine.py
mc/3D/CitcomS/trunk/visual/batchpaste.sh
mc/3D/CitcomS/trunk/visual/combine.py
mc/3D/CitcomS/trunk/visual/pasteCitcomData.sh
Log:
* Added new input parameter 'datadir' in Solver
* All outputs are done in 'datadir' directory
* Processors write its own ascii output in 'datadir/rank' directory
* Post-processing codes and cookbook examples were updated accordingly
Modified: mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py 2006-09-17 17:32:43 UTC (rev 4565)
@@ -265,6 +265,8 @@
tracer = pyre.inventory.facility("tracer", factory=Tracer)
visc = pyre.inventory.facility("visc", factory=Visc)
+ datadir = pyre.inventory.str("datadir", default=".")
+
rayleigh = pyre.inventory.float("rayleigh", default=1e+05)
Q0 = pyre.inventory.float("Q0", default=0.0)
Modified: mc/3D/CitcomS/trunk/examples/Cookbook5/cookbook5.cfg
===================================================================
--- mc/3D/CitcomS/trunk/examples/Cookbook5/cookbook5.cfg 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/examples/Cookbook5/cookbook5.cfg 2006-09-17 17:32:43 UTC (rev 4565)
@@ -21,7 +21,8 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[CitcomS.solver]
-datafile = ./cookbook5_output/cookbook5
+datafile = cookbook5_output
+datafile = cookbook5
datafile_old = ./restart_files/cookbook5
# Rayleigh number
Modified: mc/3D/CitcomS/trunk/examples/Full/input.sample
===================================================================
--- mc/3D/CitcomS/trunk/examples/Full/input.sample 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/examples/Full/input.sample 2006-09-17 17:32:43 UTC (rev 4565)
@@ -1,5 +1,6 @@
# specify output files
-datafile="/scratch/TAN2/fulltest"
+datadir="/scratch"
+datafile="fulltest"
# specify input files
Modified: mc/3D/CitcomS/trunk/examples/Regional/input.sample
===================================================================
--- mc/3D/CitcomS/trunk/examples/Regional/input.sample 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/examples/Regional/input.sample 2006-09-17 17:32:43 UTC (rev 4565)
@@ -1,5 +1,6 @@
# specify output files
-datafile="/scratch/regtest"
+datadir="/scratch"
+datafile="regtest"
# specify input files
Modified: mc/3D/CitcomS/trunk/lib/Instructions.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Instructions.c 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/lib/Instructions.c 2006-09-17 17:32:43 UTC (rev 4565)
@@ -31,6 +31,8 @@
#include <math.h>
#include <string.h>
+#include <sys/stat.h>
+#include <sys/errno.h>
#include "element_definitions.h"
#include "global_defs.h"
@@ -267,6 +269,7 @@
Default is no information recorded (apart from special things for given applications.
*/
+ input_string("datadir",E->control.data_dir,".",m);
input_string("datafile",E->control.data_file,"initialize",m);
input_string("datafile_old",E->control.old_P_file,"initialize",m);
@@ -929,7 +932,7 @@
char logfile[255];
E->fp = NULL;
- sprintf(logfile,"%s.log",E->control.data_file);
+ sprintf(logfile,"%s/%s.log",E->control.data_dir, E->control.data_file);
E->fp = output_open(logfile);
return;
@@ -942,7 +945,7 @@
E->fptime = NULL;
if (E->parallel.me == 0) {
- sprintf(timeoutput,"%s.time",E->control.data_file);
+ sprintf(timeoutput,"%s/%s.time",E->control.data_dir, E->control.data_file);
E->fptime = output_open(timeoutput);
}
@@ -956,7 +959,8 @@
E->fp_out = NULL;
if (E->control.verbose) {
- sprintf(output_file,"%s.info.%d",E->control.data_file,E->parallel.me);
+ sprintf(output_file,"%s/%d/%s.info.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me);
E->fp_out = output_open(output_file);
}
@@ -1018,9 +1022,49 @@
return;
}
+/* check whether E->control.data_file contains a path */
+void chkdatafile(struct All_variables *E)
+{
+ void parallel_process_termination();
+ char *found;
+
+ found = strchr(E->control.data_file, '/');
+ if (found) {
+ fprintf(stderr, "error in input parameter: datafile='%s' contains '/'\n", E->control.data_file);
+ parallel_process_termination();
+ }
+}
+
+
+void mkdatadir(struct All_variables *E)
+{
+ void parallel_process_termination();
+
+ int err;
+ char newdir[110];
+
+ err = mkdir(E->control.data_dir, 0755);
+ if (err && errno != EEXIST) {
+ /* if error occured and the directory is not exisitng */
+ fprintf(stderr, "Cannot make new directory '%s'\n", E->control.data_dir);
+ parallel_process_termination();
+ }
+ sprintf(newdir, "%s/%d", E->control.data_dir, E->parallel.me);
+ err = mkdir(newdir, 0755);
+ if (err && errno != EEXIST) {
+ /* if error occured and the directory is not exisitng */
+ fprintf(stderr, "Cannot make new directory '%s'\n", newdir);
+ parallel_process_termination();
+ }
+}
+
+
void output_init(struct All_variables *E)
{
+ chkdatafile(E);
+ mkdatadir(E);
+
open_log(E);
open_time(E);
open_info(E);
Modified: mc/3D/CitcomS/trunk/lib/Output.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Output.c 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/lib/Output.c 2006-09-17 17:32:43 UTC (rev 4565)
@@ -110,7 +110,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s.coord.%d",E->control.data_file,E->parallel.me);
+ sprintf(output_file,"%s/%d/%s.coord.%d",E->control.data_dir,E->parallel.me,
+ E->control.data_file,E->parallel.me);
fp1 = output_open(output_file);
for(j=1;j<=E->sphere.caps_per_proc;j++) {
@@ -132,7 +133,8 @@
FILE *fp1;
int lev = E->mesh.levmax;
- sprintf(output_file,"%s.visc.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.visc.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp1 = output_open(output_file);
@@ -154,7 +156,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s.velo.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.velo.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp1 = output_open(output_file);
fprintf(fp1,"%d %d %.5e\n",cycles,E->lmesh.nno,E->monitor.elapsed_time);
@@ -183,7 +186,8 @@
get_STD_topo(E,E->slice.tpg,E->slice.tpgb,E->slice.divg,E->slice.vort,cycles);
if (E->output.surf && (E->parallel.me_loc[3]==E->parallel.nprocz-1)) {
- sprintf(output_file,"%s.surf.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.surf.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp2 = output_open(output_file);
for(j=1;j<=E->sphere.caps_per_proc;j++) {
@@ -204,7 +208,8 @@
if (E->output.botm && (E->parallel.me_loc[3]==0)) {
- sprintf(output_file,"%s.botm.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.botm.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp2 = output_open(output_file);
for(j=1;j<=E->sphere.caps_per_proc;j++) {
@@ -227,7 +232,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s.stress.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.stress.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp1 = output_open(output_file);
fprintf(fp1,"%d %d %.5e\n",cycles,E->lmesh.nno,E->monitor.elapsed_time);
@@ -292,7 +298,8 @@
// only the first nprocz processors need to output
if (E->parallel.me<E->parallel.nprocz) {
- sprintf(output_file,"%s.average.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.average.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp1=fopen(output_file,"w");
for(j=1;j<=E->lmesh.noz;j++) {
fprintf(fp1,"%.4e %.4e %.4e %.4e\n",E->sx[1][3][j],E->Have.T[j],E->Have.V[1][j],E->Have.V[2][j]);
@@ -311,7 +318,8 @@
char output_file[255];
FILE* fp;
- sprintf(output_file,"%s.mat.%d",E->control.data_file,E->parallel.me);
+ sprintf(output_file,"%s/%d/%s.mat.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me);
fp = output_open(output_file);
for (m=1;m<=E->sphere.caps_per_proc;m++)
@@ -331,7 +339,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s.pressure.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.pressure.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp1 = output_open(output_file);
fprintf(fp1,"%d %d %.5e\n",cycles,E->lmesh.nno,E->monitor.elapsed_time);
@@ -355,7 +364,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s.tracer.%d.%d",E->control.data_file,E->parallel.me,cycles);
+ sprintf(output_file,"%s/%d/%s.tracer.%d.%d",E->control.data_dir,
+ E->parallel.me, E->control.data_file, E->parallel.me, cycles);
fp1 = output_open(output_file);
fprintf(fp1,"%.5e\n",E->monitor.elapsed_time);
Modified: mc/3D/CitcomS/trunk/lib/Output_h5.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Output_h5.c 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/lib/Output_h5.c 2006-09-17 17:32:43 UTC (rev 4565)
@@ -217,8 +217,8 @@
*/
/* determine filename */
- strncpy(E->hdf5.filename, E->control.data_file, (size_t)99);
- strncat(E->hdf5.filename, ".h5", (size_t)99);
+ snprintf(E->hdf5.filename, (size_t)100, "%s/%s.h5", E->control.data_dir,
+ E->control.data_file);
/* set up file creation property list with defaults */
fcpl_id = H5P_DEFAULT;
@@ -1378,7 +1378,7 @@
}
}
}
-
+
/* write to dataset */
cap_group = E->hdf5.cap_group;
dataset = H5Dopen(cap_group, "pressure");
@@ -1504,7 +1504,7 @@
status = h5write_field(dataset, field);
status = H5Dclose(dataset);
}
-
+
if ((E->output.botm == 1) && (pz == 0))
{
k = 0;
@@ -1575,7 +1575,7 @@
dataset = H5Dopen(cap_group, "surf/heatflux");
status = H5Dextend(dataset, scalar->dims);
status = H5Dclose(dataset);
-
+
dataset = H5Dopen(cap_group, "surf/topography");
status = H5Dextend(dataset, scalar->dims);
status = H5Dclose(dataset);
@@ -1589,7 +1589,7 @@
dataset = H5Dopen(cap_group, "botm/heatflux");
status = H5Dextend(dataset, scalar->dims);
status = H5Dclose(dataset);
-
+
dataset = H5Dopen(cap_group, "botm/topography");
status = H5Dextend(dataset, scalar->dims);
status = H5Dclose(dataset);
@@ -1647,7 +1647,7 @@
topo = E->slice.freesurf[1];
else
topo = E->slice.tpg[1];
-
+
/* topography data */
for(i = 0; i < mx; i++)
{
@@ -1767,7 +1767,7 @@
hid_t cap_group;
hid_t dataset;
herr_t status;
-
+
float vx, vy, vz;
float *S1[NCS], *S2[NCS], *S3[NCS];
@@ -2005,9 +2005,9 @@
status = h5write_dataset(dataset, H5T_NATIVE_INT, data, rank, memdims,
offset, stride, count, block);
-
+
status = H5Dclose(dataset);
-
+
free(data);
}
@@ -2167,6 +2167,7 @@
* Solver.inventory
*/
+ status = set_attribute_string(input, "datadir", E->control.data_dir);
status = set_attribute_string(input, "datafile", E->control.data_file);
status = set_attribute_string(input, "datafile_old", E->control.old_P_file);
Modified: mc/3D/CitcomS/trunk/lib/global_defs.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/global_defs.h 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/lib/global_defs.h 2006-09-17 17:32:43 UTC (rev 4565)
@@ -613,6 +613,7 @@
char Ahat_is_good[MAX_LEVELS]; /* general information controlling program flow */
char old_P_file[100];
+ char data_dir[100];
char data_file[100];
char post_topo_file[100];
char slabgeoid_file[100];
Modified: mc/3D/CitcomS/trunk/module/setProperties.cc
===================================================================
--- mc/3D/CitcomS/trunk/module/setProperties.cc 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/module/setProperties.cc 2006-09-17 17:32:43 UTC (rev 4565)
@@ -379,6 +379,7 @@
if (not m)
std::cout << "#Solver.inventory:" << std::endl;
+ getStringProperty(properties, "datadir", E->control.data_dir, m);
getStringProperty(properties, "datafile", E->control.data_file, m);
getStringProperty(properties, "datafile_old", E->control.old_P_file, m);
Modified: mc/3D/CitcomS/trunk/visual/autocombine.py
===================================================================
--- mc/3D/CitcomS/trunk/visual/autocombine.py 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/visual/autocombine.py 2006-09-17 17:32:43 UTC (rev 4565)
@@ -47,11 +47,8 @@
parser = Parser()
parser.read(inputfile)
+ datadir = parser.getstr('datadir')
datafile = parser.getstr('datafile')
- import os.path
- modeldir, modelname = os.path.split(datafile)
- modeldir = os.path.abspath(modeldir)
- #print modeldir, modelname
nodex = parser.getint('nodex')
nodey = parser.getint('nodey')
@@ -66,6 +63,6 @@
nodelist = combine.machinefile2nodes(machinefile, totalnodes)
for timestep in sys.argv[3:]:
- combine.combine(nodelist, modeldir, modelname, int(timestep),
+ combine.combine(nodelist, datadir, datafile, int(timestep),
nodex, nodey, nodez,
ncap, nprocx, nprocy, nprocz)
Modified: mc/3D/CitcomS/trunk/visual/batchcombine.py
===================================================================
--- mc/3D/CitcomS/trunk/visual/batchcombine.py 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/visual/batchcombine.py 2006-09-17 17:32:43 UTC (rev 4565)
@@ -29,7 +29,7 @@
'''
Paste and combine Citcom data
-Usage: batchcombine.py <machinefile | node-list> model-dir model-name timestep nodex nodey nodez ncap nprocx nprocy nprocz
+Usage: batchcombine.py <machinefile | node-list> datadir datafile timestep nodex nodey nodez ncap nprocx nprocy nprocz
'''
@@ -60,28 +60,28 @@
-def combine(nodes, modeldir, modelname, timestep, nodex, nodey, nodez,
+def combine(nodes, datadir, datafile, timestep, nodex, nodey, nodez,
ncap, nprocx, nprocy, nprocz):
import os
# paste
- cmd = 'batchpaste.sh %(modeldir)s %(modelname)s %(timestep)d %(nodes)s' \
+ cmd = 'batchpaste.sh %(datadir)s %(datafile)s %(timestep)d %(nodes)s' \
% vars()
print cmd
os.system(cmd)
# combine
- cmd = 'combine.py %(modelname)s %(timestep)d %(nodex)d %(nodey)d %(nodez)d %(ncap)d %(nprocx)d %(nprocy)d %(nprocz)d' % vars()
+ cmd = 'combine.py %(datafile)s %(timestep)d %(nodex)d %(nodey)d %(nodez)d %(ncap)d %(nprocx)d %(nprocy)d %(nprocz)d' % vars()
print cmd
os.system(cmd)
# delete
- cmd = 'rm %(modelname)s.[0-9]*.%(timestep)d' % vars()
+ cmd = 'rm %(datafile)s.[0-9]*.%(timestep)d' % vars()
print cmd
os.system(cmd)
# create .general file
- cmd = 'dxgeneral.sh %(modelname)s.cap*.%(timestep)d' % vars()
+ cmd = 'dxgeneral.sh %(datafile)s.cap*.%(timestep)d' % vars()
print cmd
os.system(cmd)
@@ -97,8 +97,8 @@
sys.exit(1)
machinefile = sys.argv[1]
- modeldir = sys.argv[2]
- modelname = sys.argv[3]
+ datadir = sys.argv[2]
+ datafile = sys.argv[3]
timestep = int(sys.argv[4])
nodex = int(sys.argv[5])
nodey = int(sys.argv[6])
@@ -111,7 +111,7 @@
totalnodes = nprocx * nprocy * nprocz * ncap
nodelist = machinefile2nodes(machinefile, totalnodes)
- combine(nodelist, modeldir, modelname, timestep, nodex, nodey, nodez,
+ combine(nodelist, datadir, datafile, timestep, nodex, nodey, nodez,
ncap, nprocx, nprocy, nprocz)
Modified: mc/3D/CitcomS/trunk/visual/batchpaste.sh
===================================================================
--- mc/3D/CitcomS/trunk/visual/batchpaste.sh 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/visual/batchpaste.sh 2006-09-17 17:32:43 UTC (rev 4565)
@@ -31,26 +31,26 @@
# 2) the list of ip has the same order as the MPI machinefile
if [ -z $4 ]; then
- echo "Usage:" `basename $0` modeldir modelname timestep ip1 [ip2 ... ]
+ echo "Usage:" `basename $0` datadir datafile timestep ip1 [ip2 ... ]
exit
fi
paste_exe=`which pasteCitcomData.sh`
cwd=`pwd`
-modeldir=$1
-modelname=$2
+datadir=$1
+datafile=$2
timestep=$3
-n=0
+rank=0
while [ "$4" ]
do
- cmd_paste="$paste_exe $modelname $n $timestep"
- cmd_copy="cp $modelname.$n.$timestep $cwd"
+ cmd_paste="$paste_exe $datafile $rank $timestep"
+ cmd_copy="cp $datafile.$rank.$timestep $cwd"
if [ $4 == $HOSTNAME -o $4 == "localhost" ]; then
- cd $modeldir && $cmd_paste && $cmd_copy
+ cd $datadir/$rank && $cmd_paste && $cmd_copy
else
- rsh $4 "cd $modeldir && $cmd_paste && $cmd_copy"
+ rsh $4 "cd $datadir/$rank && $cmd_paste && $cmd_copy"
fi
shift
Modified: mc/3D/CitcomS/trunk/visual/combine.py
===================================================================
--- mc/3D/CitcomS/trunk/visual/combine.py 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/visual/combine.py 2006-09-17 17:32:43 UTC (rev 4565)
@@ -29,7 +29,7 @@
'''
Combine the pasted Citcom Data
-usage: combine.py modelname timestep nodex nodey nodez ncap nprocx nprocy nprocz
+usage: combine.py datafile timestep nodex nodey nodez ncap nprocx nprocy nprocz
'''
class Combine(object):
@@ -44,8 +44,8 @@
def readData(self, filename):
fp = file(filename, 'r')
- # header
- fp.readline()
+ header = fp.readline()
+ #print header
return fp.readlines()
@@ -91,7 +91,9 @@
def write(self, filename, grid):
fp = file(filename, 'w')
- fp.write('%d x %d x %d\n' % (grid['nox'], grid['noy'], grid['noz']))
+ header = '%d x %d x %d\n' % (grid['nox'], grid['noy'], grid['noz'])
+ #print header
+ fp.write(header)
fp.writelines(self.saved)
return
Modified: mc/3D/CitcomS/trunk/visual/pasteCitcomData.sh
===================================================================
--- mc/3D/CitcomS/trunk/visual/pasteCitcomData.sh 2006-09-16 21:49:33 UTC (rev 4564)
+++ mc/3D/CitcomS/trunk/visual/pasteCitcomData.sh 2006-09-17 17:32:43 UTC (rev 4565)
@@ -29,15 +29,21 @@
# processor into a single file.
if [ -z $3 ]; then
- echo " usage:" `basename $0` modelname processor_no time_step
+ echo " usage:" `basename $0` datafile processor_rank timestep
exit
fi
-line=`cat $1.velo.$2.$3 | wc -l`
+datafile=$1
+rank=$2
+step=$3
+
+line=`cat $datafile.velo.$rank.$step | wc -l`
let line=line-1
#echo $line
-tail -n $line $1.velo.$2.$3 | paste -d' ' $1.coord.$2 - $1.visc.$2.$3 > $1.$2.$3
+tail -n $line $datafile.velo.$rank.$step \
+ | paste -d' ' $datafile.coord.$rank - $datafile.visc.$rank.$step \
+ > $datafile.$rank.$step
# version
More information about the cig-commits
mailing list