[cig-commits] r4582 - in mc/3D/CitcomS/trunk: CitcomS/Solver lib
tan2 at geodynamics.org
tan2 at geodynamics.org
Thu Sep 21 12:57:59 PDT 2006
Author: tan2
Date: 2006-09-21 12:57:58 -0700 (Thu, 21 Sep 2006)
New Revision: 4582
Modified:
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
Log:
Added new option for "output_format". The current behavior is:
* If output_format=="ascii-local" (the default), CitcomS will write ascii
files to the directory and prefix specified by "datafile", ie., the same
behavior as in v2.0
* If output_format=="ascii", CitcomS will write ascii files to the directory
specified by "datadir" with the prefix specified by "datafile". In the
case, "datafile" cannot contains the '/' (path seperator) character.
* If output_format=="hdf5", CitcomS will write singe HDf5 file to the
directory and prefix specified by "datafile".
Modified: mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py 2006-09-21 19:42:41 UTC (rev 4581)
+++ mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py 2006-09-21 19:57:58 UTC (rev 4582)
@@ -238,7 +238,7 @@
class Inventory(Component.Inventory):
- import pyre.inventory
+ import pyre.inventory as inv
# component modules
import CitcomS.Components.Advection_diffusion as Advection_diffusion
@@ -254,30 +254,34 @@
from CitcomS.Components.Visc import Visc
- tsolver = pyre.inventory.facility("tsolver", factory=Advection_diffusion.temperature_diffadv)
- vsolver = pyre.inventory.facility("vsolver", factory=Stokes_solver.incompressibleNewtonian)
+ tsolver = inv.facility("tsolver",
+ factory=Advection_diffusion.temperature_diffadv)
+ vsolver = inv.facility("vsolver",
+ factory=Stokes_solver.incompressibleNewtonian)
- bc = pyre.inventory.facility("bc", factory=BC)
- const = pyre.inventory.facility("const", factory=Const)
- ic = pyre.inventory.facility("ic", factory=IC)
- param = pyre.inventory.facility("param", factory=Param)
- phase = pyre.inventory.facility("phase", factory=Phase)
- tracer = pyre.inventory.facility("tracer", factory=Tracer)
- visc = pyre.inventory.facility("visc", factory=Visc)
+ bc = inv.facility("bc", factory=BC)
+ const = inv.facility("const", factory=Const)
+ ic = inv.facility("ic", factory=IC)
+ param = inv.facility("param", factory=Param)
+ phase = inv.facility("phase", factory=Phase)
+ tracer = inv.facility("tracer", factory=Tracer)
+ visc = inv.facility("visc", factory=Visc)
- datadir = pyre.inventory.str("datadir", default=".")
+ datadir = inv.str("datadir", default=".")
- rayleigh = pyre.inventory.float("rayleigh", default=1e+05)
- Q0 = pyre.inventory.float("Q0", default=0.0)
+ rayleigh = inv.float("rayleigh", default=1e+05)
+ Q0 = inv.float("Q0", default=0.0)
- stokes_flow_only = pyre.inventory.bool("stokes_flow_only", default=False)
+ stokes_flow_only = inv.bool("stokes_flow_only", default=False)
- output_format = pyre.inventory.str("output_format", default="ascii",
- validator=pyre.inventory.choice(["ascii", "hdf5"]))
- output_optional = pyre.inventory.str("output_optional", default="")
+ output_format = inv.str("output_format", default="ascii-local",
+ validator=inv.choice(["ascii-local",
+ "ascii",
+ "hdf5"]))
+ output_optional = inv.str("output_optional", default="")
- verbose = pyre.inventory.bool("verbose", default=False)
- see_convergence = pyre.inventory.bool("see_convergence", default=True)
+ verbose = inv.bool("verbose", default=False)
+ see_convergence = inv.bool("see_convergence", default=True)
# version
Modified: mc/3D/CitcomS/trunk/lib/Instructions.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Instructions.c 2006-09-21 19:42:41 UTC (rev 4581)
+++ mc/3D/CitcomS/trunk/lib/Instructions.c 2006-09-21 19:57:58 UTC (rev 4582)
@@ -144,7 +144,7 @@
check_bc_consistency(E);
- construct_masks(E); /* order is important here */
+ construct_masks(E); /* order is important here */
construct_id(E);
construct_lm(E);
@@ -160,7 +160,7 @@
general_stokes_solver_setup(E);
if (E->parallel.me==0) fprintf(stderr,"time=%f\n",
- CPU_time0()-E->monitor.cpu_time_at_start);
+ CPU_time0()-E->monitor.cpu_time_at_start);
construct_surf_det (E);
construct_bdry_det (E);
@@ -422,7 +422,7 @@
elx = E->lmesh.elx;
ely = E->lmesh.ely;
- E->P[j] = (double *) malloc((npno+1)*sizeof(double));
+ E->P[j] = (double *) malloc((npno+1)*sizeof(double));
E->T[j] = (double *) malloc((nno+1)*sizeof(double));
E->NP[j] = (float *) malloc((nno+1)*sizeof(float));
E->edot[j] = (float *) malloc((nno+1)*sizeof(float));
@@ -616,14 +616,14 @@
if(E->control.tracer==1) {
for(i=1;i<=E->mesh.nsd;i++) {
- E->GV[j][i]=(float*) malloc(((E->lmesh.nno+1)*E->parallel.nproc+1)*sizeof(float));
- E->GV1[j][i]=(float*) malloc(((E->lmesh.nno+1)*E->parallel.nproc+1)*sizeof(float));
- E->V[j][i]=(float*) malloc((E->lmesh.nno+1)*sizeof(float));
+ E->GV[j][i]=(float*) malloc(((E->lmesh.nno+1)*E->parallel.nproc+1)*sizeof(float));
+ E->GV1[j][i]=(float*) malloc(((E->lmesh.nno+1)*E->parallel.nproc+1)*sizeof(float));
+ E->V[j][i]=(float*) malloc((E->lmesh.nno+1)*sizeof(float));
- for(k=0;k<(E->lmesh.nno+1)*E->parallel.nproc;k++) {
- E->GV[j][i][k]=0.0;
- E->GV1[j][i][k]=0.0;
- }
+ for(k=0;k<(E->lmesh.nno+1)*E->parallel.nproc;k++) {
+ E->GV[j][i][k]=0.0;
+ E->GV1[j][i][k]=0.0;
+ }
}
}
@@ -639,7 +639,7 @@
E->BI[l][j] = (double *) malloc((E->lmesh.NEQ[l]+2)*sizeof(double));
k = (E->lmesh.NOX[l]*E->lmesh.NOZ[l]+E->lmesh.NOX[l]*E->lmesh.NOY[l]+
- E->lmesh.NOY[l]*E->lmesh.NOZ[l])*6;
+ E->lmesh.NOY[l]*E->lmesh.NOZ[l])*6;
E->zero_resid[l][j] = (int *) malloc((k+2)*sizeof(int));
E->parallel.Skip_id[l][j] = (int *) malloc((k+2)*sizeof(int));
@@ -715,7 +715,7 @@
E->sphere.ro = 1.0;
E->sphere.ri = 0.5;
- E->control.precondition = 0; /* for larger visc contrasts turn this back on */
+ E->control.precondition = 0; /* for larger visc contrasts turn this back on */
E->control.vprecondition = 1;
E->mesh.toptbc = 1; /* fixed t */
@@ -749,7 +749,7 @@
E->data.surf_temp = 0.0;
E->data.youngs_mod = 1.0e11;
E->data.Te = 0.0;
- E->data.T_sol0 = 1373.0; /* Dave's values 1991 (for the earth) */
+ E->data.T_sol0 = 1373.0; /* Dave's values 1991 (for the earth) */
E->data.Tsurf = 273.0;
E->data.dTsol_dz = 3.4e-3 ;
E->data.dTsol_dF = 440.0;
@@ -781,17 +781,17 @@
for (j=1;j<=E->sphere.caps_per_proc;j++) {
for(i=1;i<=E->lmesh.nno;i++) {
if ((E->node[j][i] & VBX) && (E->node[j][i] & SBX))
- printf("Inconsistent x velocity bc at %d\n",i);
+ printf("Inconsistent x velocity bc at %d\n",i);
if ((E->node[j][i] & VBZ) && (E->node[j][i] & SBZ))
- printf("Inconsistent z velocity bc at %d\n",i);
+ printf("Inconsistent z velocity bc at %d\n",i);
if ((E->node[j][i] & VBY) && (E->node[j][i] & SBY))
- printf("Inconsistent y velocity bc at %d\n",i);
+ printf("Inconsistent y velocity bc at %d\n",i);
if ((E->node[j][i] & TBX) && (E->node[j][i] & FBX))
- printf("Inconsistent x temperature bc at %d\n",i);
+ printf("Inconsistent x temperature bc at %d\n",i);
if ((E->node[j][i] & TBZ) && (E->node[j][i] & FBZ))
- printf("Inconsistent z temperature bc at %d\n",i);
+ printf("Inconsistent z temperature bc at %d\n",i);
if ((E->node[j][i] & TBY) && (E->node[j][i] & FBY))
- printf("Inconsistent y temperature bc at %d\n",i);
+ printf("Inconsistent y temperature bc at %d\n",i);
}
} /* end for j */
@@ -799,12 +799,12 @@
for (j=1;j<=E->sphere.caps_per_proc;j++) {
for(i=1;i<=E->lmesh.NNO[lev];i++) {
if ((E->NODE[lev][j][i] & VBX) && (E->NODE[lev][j][i] & SBX))
- printf("Inconsistent x velocity bc at %d,%d\n",lev,i);
- if ((E->NODE[lev][j][i] & VBZ) && (E->NODE[lev][j][i] & SBZ))
- printf("Inconsistent z velocity bc at %d,%d\n",lev,i);
- if ((E->NODE[lev][j][i] & VBY) && (E->NODE[lev][j][i] & SBY))
- printf("Inconsistent y velocity bc at %d,%d\n",lev,i);
- /* Tbc's not applicable below top level */
+ printf("Inconsistent x velocity bc at %d,%d\n",lev,i);
+ if ((E->NODE[lev][j][i] & VBZ) && (E->NODE[lev][j][i] & SBZ))
+ printf("Inconsistent z velocity bc at %d,%d\n",lev,i);
+ if ((E->NODE[lev][j][i] & VBY) && (E->NODE[lev][j][i] & SBY))
+ printf("Inconsistent y velocity bc at %d,%d\n",lev,i);
+ /* Tbc's not applicable below top level */
}
} /* end for j and lev */
@@ -910,13 +910,13 @@
for (m=1;m<=E->sphere.caps_per_proc;m++)
for(i=1;i<=E->lmesh.nnov;i++) {
- E->sphere.cap[m].V[1][i]=0.0;
- E->sphere.cap[m].V[2][i]=0.0;
+ E->sphere.cap[m].V[1][i]=0.0;
+ E->sphere.cap[m].V[2][i]=0.0;
E->sphere.cap[m].V[3][i]=0.0;
- E->sphere.cap[m].Vprev[1][i]=0.0;
- E->sphere.cap[m].Vprev[2][i]=0.0;
+ E->sphere.cap[m].Vprev[1][i]=0.0;
+ E->sphere.cap[m].Vprev[2][i]=0.0;
E->sphere.cap[m].Vprev[3][i]=0.0;
- }
+ }
return;
}
@@ -928,7 +928,7 @@
char logfile[255];
E->fp = NULL;
- sprintf(logfile,"%s/%s.log",E->control.data_dir, E->control.data_file);
+ sprintf(logfile,"%s.log", E->control.data_file);
E->fp = output_open(logfile);
return;
@@ -941,7 +941,7 @@
E->fptime = NULL;
if (E->parallel.me == 0) {
- sprintf(timeoutput,"%s/%s.time",E->control.data_dir, E->control.data_file);
+ sprintf(timeoutput,"%s.time", E->control.data_file);
E->fptime = output_open(timeoutput);
}
@@ -955,8 +955,7 @@
E->fp_out = NULL;
if (E->control.verbose) {
- sprintf(output_file,"%s/%d/%s.info.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me);
+ sprintf(output_file,"%s.info.%d", E->control.data_file, E->parallel.me);
E->fp_out = output_open(output_file);
}
@@ -984,34 +983,34 @@
E->output.average = 0;
while(1) {
- /* get next field */
- prev = strsep(&next, ",");
+ /* get next field */
+ prev = strsep(&next, ",");
- /* break if no more field */
- if(prev == NULL) break;
+ /* break if no more field */
+ if(prev == NULL) break;
- /* strip off leading and trailing whitespaces */
- prev = strip(prev);
+ /* strip off leading and trailing whitespaces */
+ prev = strip(prev);
- /* skip empty field */
- if (strlen(prev) == 0) continue;
+ /* skip empty field */
+ if (strlen(prev) == 0) continue;
- /* fprintf(stderr, "### %s: %s\n", prev, next); */
- if(strcmp(prev, "connectivity")==0)
- E->output.connectivity = 1;
- else if(strcmp(prev, "stress")==0)
- E->output.stress = 1;
- else if(strcmp(prev, "pressure")==0)
- E->output.pressure = 1;
- else if(strcmp(prev, "surf")==0)
- E->output.surf = 1;
- else if(strcmp(prev, "botm")==0)
- E->output.botm = 1;
- else if(strcmp(prev, "average")==0)
- E->output.average = 1;
- else
- if(E->parallel.me == 0)
- fprintf(stderr, "Warning: unknown field for output_optional: %s\n", prev);
+ /* fprintf(stderr, "### %s: %s\n", prev, next); */
+ if(strcmp(prev, "connectivity")==0)
+ E->output.connectivity = 1;
+ else if(strcmp(prev, "stress")==0)
+ E->output.stress = 1;
+ else if(strcmp(prev, "pressure")==0)
+ E->output.pressure = 1;
+ else if(strcmp(prev, "surf")==0)
+ E->output.surf = 1;
+ else if(strcmp(prev, "botm")==0)
+ E->output.botm = 1;
+ else if(strcmp(prev, "average")==0)
+ E->output.average = 1;
+ else
+ if(E->parallel.me == 0)
+ fprintf(stderr, "Warning: unknown field for output_optional: %s\n", prev);
}
@@ -1024,12 +1023,21 @@
void parallel_process_termination();
char *found;
+ char newdatafile[100];
+ fprintf(stderr, "datafile is %s\n", E->control.data_file);
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();
}
+
+ /* prepend the path to data_file */
+ sprintf(newdatafile, "%s/%d/%s", E->control.data_dir, E->parallel.me,
+ E->control.data_file);
+ strcpy(E->control.data_file, newdatafile);
+ fprintf(stderr, "datafile is %s\n", E->control.data_file);
+
}
@@ -1058,30 +1066,33 @@
void output_init(struct All_variables *E)
{
- chkdatafile(E);
- mkdatadir(E);
+ //DEBUG
+ //strcpy(E->output.format, "hdf5");
+ //fprintf(stderr, "output format is %s\n", E->output.format);
+ if (strcmp(E->output.format, "ascii-local") == 0)
+ E->problem_output = output;
+ else if (strcmp(E->output.format, "ascii") == 0) {
+ chkdatafile(E);
+ mkdatadir(E);
+ E->problem_output = output;
+ }
+ else if (strcmp(E->output.format, "hdf5") == 0)
+ E->problem_output = h5output;
+ else {
+ // indicate error here
+ if (E->parallel.me == 0) {
+ fprintf(stderr, "wrong output_format, must be either 'ascii-local', 'ascii' or 'hdf5'\n");
+ fprintf(E->fp, "wrong output_format, must be either 'ascii-local', 'ascii' or 'hdf5'\n");
+ }
+ parallel_process_termination(E);
+ }
- open_log(E);
- open_time(E);
- open_info(E);
+ open_log(E);
+ open_time(E);
+ open_info(E);
- output_parse_optional(E);
+ output_parse_optional(E);
- //DEBUG
- //strcpy(E->output.format, "hdf5");
- //fprintf(stderr, "output format is %s\n", E->output.format);
- if (strcmp(E->output.format, "ascii") == 0)
- E->problem_output = output;
- else if (strcmp(E->output.format, "hdf5") == 0)
- E->problem_output = h5output;
- else {
- // indicate error here
- if (E->parallel.me == 0) {
- fprintf(stderr, "wrong output_format, must be either 'ascii' or 'hdf5'\n");
- fprintf(E->fp, "wrong output_format, must be either 'ascii' or 'hdf5'\n");
- }
- parallel_process_termination(E);
- }
}
Modified: mc/3D/CitcomS/trunk/lib/Output.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Output.c 2006-09-21 19:42:41 UTC (rev 4581)
+++ mc/3D/CitcomS/trunk/lib/Output.c 2006-09-21 19:57:58 UTC (rev 4582)
@@ -110,8 +110,7 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s/%d/%s.coord.%d",E->control.data_dir,E->parallel.me,
- E->control.data_file,E->parallel.me);
+ sprintf(output_file,"%s.coord.%d",E->control.data_file,E->parallel.me);
fp1 = output_open(output_file);
for(j=1;j<=E->sphere.caps_per_proc;j++) {
@@ -133,8 +132,8 @@
FILE *fp1;
int lev = E->mesh.levmax;
- sprintf(output_file,"%s/%d/%s.visc.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.visc.%d.%d", E->control.data_file,
+ E->parallel.me, cycles);
fp1 = output_open(output_file);
@@ -156,8 +155,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s/%d/%s.velo.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.velo.%d.%d", 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);
@@ -186,8 +185,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/%d/%s.surf.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.surf.%d.%d", E->control.data_file,
+ E->parallel.me, cycles);
fp2 = output_open(output_file);
for(j=1;j<=E->sphere.caps_per_proc;j++) {
@@ -208,8 +207,8 @@
if (E->output.botm && (E->parallel.me_loc[3]==0)) {
- sprintf(output_file,"%s/%d/%s.botm.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.botm.%d.%d", E->control.data_file,
+ E->parallel.me, cycles);
fp2 = output_open(output_file);
for(j=1;j<=E->sphere.caps_per_proc;j++) {
@@ -232,8 +231,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s/%d/%s.stress.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.stress.%d.%d", 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);
@@ -298,8 +297,8 @@
// only the first nprocz processors need to output
if (E->parallel.me<E->parallel.nprocz) {
- sprintf(output_file,"%s/%d/%s.average.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.average.%d.%d", 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]);
@@ -318,8 +317,7 @@
char output_file[255];
FILE* fp;
- sprintf(output_file,"%s/%d/%s.mat.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me);
+ sprintf(output_file,"%s.mat.%d", E->control.data_file,E->parallel.me);
fp = output_open(output_file);
for (m=1;m<=E->sphere.caps_per_proc;m++)
@@ -339,8 +337,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s/%d/%s.pressure.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.pressure.%d.%d", 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);
@@ -364,8 +362,8 @@
char output_file[255];
FILE *fp1;
- sprintf(output_file,"%s/%d/%s.tracer.%d.%d",E->control.data_dir,
- E->parallel.me, E->control.data_file, E->parallel.me, cycles);
+ sprintf(output_file,"%s.tracer.%d.%d", 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-21 19:42:41 UTC (rev 4581)
+++ mc/3D/CitcomS/trunk/lib/Output_h5.c 2006-09-21 19:57:58 UTC (rev 4582)
@@ -217,8 +217,7 @@
*/
/* determine filename */
- snprintf(E->hdf5.filename, (size_t)100, "%s/%s.h5", E->control.data_dir,
- E->control.data_file);
+ snprintf(E->hdf5.filename, (size_t)100, "%s.h5", E->control.data_file);
/* set up file creation property list with defaults */
fcpl_id = H5P_DEFAULT;
Modified: mc/3D/CitcomS/trunk/lib/global_defs.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/global_defs.h 2006-09-21 19:42:41 UTC (rev 4581)
+++ mc/3D/CitcomS/trunk/lib/global_defs.h 2006-09-21 19:57:58 UTC (rev 4582)
@@ -789,7 +789,7 @@
};
struct Output {
- char format[10]; /* ascii or hdf5 */
+ char format[20]; /* ascii-local, ascii or hdf5 */
char optional[1000]; /* comma-delimited list of objects to output */
int connectivity; /* whether to output connectivity */
int stress; /* whether to output stress */
More information about the cig-commits
mailing list