[cig-commits] r4572 - in mc/3D/CitcomS/trunk: lib module
tan2 at geodynamics.org
tan2 at geodynamics.org
Wed Sep 20 12:54:04 PDT 2006
Author: tan2
Date: 2006-09-20 12:54:04 -0700 (Wed, 20 Sep 2006)
New Revision: 4572
Modified:
mc/3D/CitcomS/trunk/lib/Citcom_init.c
mc/3D/CitcomS/trunk/lib/Instructions.c
mc/3D/CitcomS/trunk/module/mesher.cc
mc/3D/CitcomS/trunk/module/setProperties.cc
Log:
Saving the input parameters to a unique file 'pidXXXXX.cfg' for archives.
Modified: mc/3D/CitcomS/trunk/lib/Citcom_init.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Citcom_init.c 2006-09-20 03:54:07 UTC (rev 4571)
+++ mc/3D/CitcomS/trunk/lib/Citcom_init.c 2006-09-20 19:54:04 UTC (rev 4572)
@@ -31,6 +31,8 @@
struct All_variables* citcom_init(MPI_Comm *world)
{
+ int get_process_identifier();
+
struct All_variables *E;
int rank, nproc;
@@ -39,6 +41,7 @@
MPI_Comm_rank(*world, &rank);
MPI_Comm_size(*world, &nproc);
+ E->control.PID = get_process_identifier();
E->parallel.world = *world;
E->parallel.nproc = nproc;
E->parallel.me = rank;
Modified: mc/3D/CitcomS/trunk/lib/Instructions.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Instructions.c 2006-09-20 03:54:07 UTC (rev 4571)
+++ mc/3D/CitcomS/trunk/lib/Instructions.c 2006-09-20 19:54:04 UTC (rev 4572)
@@ -48,8 +48,6 @@
void read_instructions(struct All_variables *E, char *filename)
{
- int get_process_identifier();
-
void allocate_common_vars();
void common_initial_fields();
void read_initial_settings();
@@ -97,8 +95,6 @@
set_signal();
- E->control.PID=get_process_identifier();
-
/* ==================================================
Initialize from the command line
from startup files. (See Parsing.c).
Modified: mc/3D/CitcomS/trunk/module/mesher.cc
===================================================================
--- mc/3D/CitcomS/trunk/module/mesher.cc 2006-09-20 03:54:07 UTC (rev 4571)
+++ mc/3D/CitcomS/trunk/module/mesher.cc 2006-09-20 19:54:04 UTC (rev 4572)
@@ -51,7 +51,6 @@
void construct_bdry_det (struct All_variables*);
void construct_surface (struct All_variables*);
void get_initial_elapsed_time(struct All_variables*);
- int get_process_identifier();
void lith_age_init(struct All_variables *E);
void mass_matrix(struct All_variables*);
void output_init(struct All_variables*);
@@ -74,8 +73,6 @@
E->monitor.cpu_time_at_last_cycle =
E->monitor.cpu_time_at_start = CPU_time0();
- E->control.PID = get_process_identifier();
-
output_init(E);
(E->problem_derived_values)(E); /* call this before global_derived_ */
(E->solver.global_derived_values)(E);
Modified: mc/3D/CitcomS/trunk/module/setProperties.cc
===================================================================
--- mc/3D/CitcomS/trunk/module/setProperties.cc 2006-09-20 03:54:07 UTC (rev 4571)
+++ mc/3D/CitcomS/trunk/module/setProperties.cc 2006-09-20 19:54:04 UTC (rev 4572)
@@ -38,16 +38,18 @@
#include "setProperties.h"
+std::ofstream* get_output_stream(int mute, int pid);
+
void getStringProperty(PyObject* properties, char* attribute,
- char* value, int mute);
+ char* value, std::ostream* out);
template <class T>
void getScalarProperty(PyObject* properties, char* attribute,
- T& value, int mute);
+ T& value, std::ostream* out);
template <class T>
void getVectorProperty(PyObject* properties, char* attribute,
- T* vector, int len, int mute);
+ T* vector, int len, std::ostream* out);
//
//
@@ -64,24 +66,23 @@
return NULL;
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
-
int m = E->parallel.me;
- if (not m)
- std::cout << "#Advection_diffusion.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.tsolver]" << std::endl;
- getScalarProperty(properties, "inputdiffusivity", E->control.inputdiff, m);
+ getScalarProperty(properties, "inputdiffusivity", E->control.inputdiff, out);
- getScalarProperty(properties, "ADV", E->advection.ADVECTION, m);
- getScalarProperty(properties, "fixed_timestep", E->advection.fixed_timestep, m);
- getScalarProperty(properties, "finetunedt", E->advection.fine_tune_dt, m);
+ getScalarProperty(properties, "ADV", E->advection.ADVECTION, out);
+ getScalarProperty(properties, "fixed_timestep", E->advection.fixed_timestep, out);
+ getScalarProperty(properties, "finetunedt", E->advection.fine_tune_dt, out);
- getScalarProperty(properties, "adv_sub_iterations", E->advection.temp_iterations, m);
- getScalarProperty(properties, "maxadvtime", E->advection.max_dimensionless_time, m);
+ getScalarProperty(properties, "adv_sub_iterations", E->advection.temp_iterations, out);
+ getScalarProperty(properties, "maxadvtime", E->advection.max_dimensionless_time, out);
- getScalarProperty(properties, "aug_lagr", E->control.augmented_Lagr, m);
- getScalarProperty(properties, "aug_number", E->control.augmented, m);
+ getScalarProperty(properties, "aug_lagr", E->control.augmented_Lagr, out);
+ getScalarProperty(properties, "aug_number", E->control.augmented, out);
- getScalarProperty(properties, "filter_temp", E->control.filter_temperature, m);
+ getScalarProperty(properties, "filter_temp", E->control.filter_temperature, out);
E->advection.total_timesteps = 1;
E->advection.sub_iterations = 1;
@@ -91,6 +92,10 @@
E->monitor.T_maxvaried = 1.05;
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -115,32 +120,36 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#BC.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.bc]" << std::endl;
- getScalarProperty(properties, "side_sbcs", E->control.side_sbcs, m);
+ getScalarProperty(properties, "side_sbcs", E->control.side_sbcs, out);
- getScalarProperty(properties, "topvbc", E->mesh.topvbc, m);
- getScalarProperty(properties, "topvbxval", E->control.VBXtopval, m);
- getScalarProperty(properties, "topvbyval", E->control.VBYtopval, m);
+ getScalarProperty(properties, "topvbc", E->mesh.topvbc, out);
+ getScalarProperty(properties, "topvbxval", E->control.VBXtopval, out);
+ getScalarProperty(properties, "topvbyval", E->control.VBYtopval, out);
- getScalarProperty(properties, "pseudo_free_surf", E->control.pseudo_free_surf, m);
+ getScalarProperty(properties, "pseudo_free_surf", E->control.pseudo_free_surf, out);
- getScalarProperty(properties, "botvbc", E->mesh.botvbc, m);
- getScalarProperty(properties, "botvbxval", E->control.VBXbotval, m);
- getScalarProperty(properties, "botvbyval", E->control.VBYbotval, m);
+ getScalarProperty(properties, "botvbc", E->mesh.botvbc, out);
+ getScalarProperty(properties, "botvbxval", E->control.VBXbotval, out);
+ getScalarProperty(properties, "botvbyval", E->control.VBYbotval, out);
- getScalarProperty(properties, "toptbc", E->mesh.toptbc, m);
- getScalarProperty(properties, "toptbcval", E->control.TBCtopval, m);
+ getScalarProperty(properties, "toptbc", E->mesh.toptbc, out);
+ getScalarProperty(properties, "toptbcval", E->control.TBCtopval, out);
- getScalarProperty(properties, "bottbc", E->mesh.bottbc, m);
- getScalarProperty(properties, "bottbcval", E->control.TBCbotval, m);
+ getScalarProperty(properties, "bottbc", E->mesh.bottbc, out);
+ getScalarProperty(properties, "bottbcval", E->control.TBCbotval, out);
- getScalarProperty(properties, "temperature_bound_adj", E->control.temperature_bound_adj, m);
- getScalarProperty(properties, "depth_bound_adj", E->control.depth_bound_adj, m);
- getScalarProperty(properties, "width_bound_adj", E->control.width_bound_adj, m);
+ getScalarProperty(properties, "temperature_bound_adj", E->control.temperature_bound_adj, out);
+ getScalarProperty(properties, "depth_bound_adj", E->control.depth_bound_adj, out);
+ getScalarProperty(properties, "width_bound_adj", E->control.width_bound_adj, out);
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -164,34 +173,38 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Const.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.const]" << std::endl;
float radius;
- getScalarProperty(properties, "layerd", radius, m);
- getScalarProperty(properties, "density", E->data.density, m);
- getScalarProperty(properties, "thermdiff", E->data.therm_diff, m);
- getScalarProperty(properties, "gravacc", E->data.grav_acc, m);
- getScalarProperty(properties, "thermexp", E->data.therm_exp, m);
- getScalarProperty(properties, "refvisc", E->data.ref_viscosity, m);
- getScalarProperty(properties, "cp", E->data.Cp, m);
- getScalarProperty(properties, "wdensity", E->data.density_above, m);
- getScalarProperty(properties, "surftemp", E->data.surf_temp, m);
+ getScalarProperty(properties, "layerd", radius, out);
+ getScalarProperty(properties, "density", E->data.density, out);
+ getScalarProperty(properties, "thermdiff", E->data.therm_diff, out);
+ getScalarProperty(properties, "gravacc", E->data.grav_acc, out);
+ getScalarProperty(properties, "thermexp", E->data.therm_exp, out);
+ getScalarProperty(properties, "refvisc", E->data.ref_viscosity, out);
+ getScalarProperty(properties, "cp", E->data.Cp, out);
+ getScalarProperty(properties, "wdensity", E->data.density_above, out);
+ getScalarProperty(properties, "surftemp", E->data.surf_temp, out);
E->data.therm_cond = E->data.therm_diff * E->data.density * E->data.Cp;
E->data.ref_temperature = E->control.Atemp * E->data.therm_diff
* E->data.ref_viscosity / (radius * radius * radius)
/ (E->data.density * E->data.grav_acc * E->data.therm_exp);
- getScalarProperty(properties, "z_lith", E->viscosity.zlith, m);
- getScalarProperty(properties, "z_410", E->viscosity.z410, m);
- getScalarProperty(properties, "z_lmantle", E->viscosity.zlm, m);
- getScalarProperty(properties, "z_cmb", E->viscosity.zcmb, m); //this is used as the D" phase change depth
+ getScalarProperty(properties, "z_lith", E->viscosity.zlith, out);
+ getScalarProperty(properties, "z_410", E->viscosity.z410, out);
+ getScalarProperty(properties, "z_lmantle", E->viscosity.zlm, out);
+ getScalarProperty(properties, "z_cmb", E->viscosity.zcmb, out); //this is used as the D" phase change depth
// convert meter to kilometer
E->data.layer_km = radius / 1e3;
E->data.radius_km = E->data.layer_km;
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -216,20 +229,20 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#IC.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.ic]" << std::endl;
- getScalarProperty(properties, "restart", E->control.restart, m);
- getScalarProperty(properties, "post_p", E->control.post_p, m);
- getScalarProperty(properties, "solution_cycles_init", E->monitor.solution_cycles_init, m);
- getScalarProperty(properties, "zero_elapsed_time", E->control.zero_elapsed_time, m);
+ getScalarProperty(properties, "restart", E->control.restart, out);
+ getScalarProperty(properties, "post_p", E->control.post_p, out);
+ getScalarProperty(properties, "solution_cycles_init", E->monitor.solution_cycles_init, out);
+ getScalarProperty(properties, "zero_elapsed_time", E->control.zero_elapsed_time, out);
- getScalarProperty(properties, "tic_method", E->convection.tic_method, m);
+ getScalarProperty(properties, "tic_method", E->convection.tic_method, out);
if (E->convection.tic_method == 0) {
int num_perturb;
- getScalarProperty(properties, "num_perturbations", num_perturb, m);
+ getScalarProperty(properties, "num_perturbations", num_perturb, out);
if(num_perturb > PERTURB_MAX_LAYERS) {
std::cerr << "'num_perturb' greater than allowed value, set to "
<< PERTURB_MAX_LAYERS << std::endl;
@@ -238,28 +251,33 @@
E->convection.number_of_perturbations = num_perturb;
getVectorProperty(properties, "perturbl", E->convection.perturb_ll,
- num_perturb, m);
+ num_perturb, out);
getVectorProperty(properties, "perturbm", E->convection.perturb_mm,
- num_perturb, m);
+ num_perturb, out);
getVectorProperty(properties, "perturblayer", E->convection.load_depth,
- num_perturb, m);
+ num_perturb, out);
getVectorProperty(properties, "perturbmag", E->convection.perturb_mag,
- num_perturb, m);
+ num_perturb, out);
}
else if (E->convection.tic_method == 1) {
- getScalarProperty(properties, "half_space_age", E->convection.half_space_age, m);
+ getScalarProperty(properties, "half_space_age", E->convection.half_space_age, out);
}
else if (E->convection.tic_method == 2) {
- getScalarProperty(properties, "half_space_age", E->convection.half_space_age, m);
- getVectorProperty(properties, "blob_center", E->convection.blob_center, 3, m);
+ getScalarProperty(properties, "half_space_age", E->convection.half_space_age, out);
+ getVectorProperty(properties, "blob_center", E->convection.blob_center, 3, out);
if( E->convection.blob_center[0] == -999.0 && E->convection.blob_center[1] == -999.0 && E->convection.blob_center[2] == -999.0 ) {
E->convection.blob_center[0] = 0.5*(E->control.theta_min+E->control.theta_max);
E->convection.blob_center[1] = 0.5*(E->control.fi_min+E->control.fi_max);
E->convection.blob_center[2] = 0.5*(E->sphere.ri+E->sphere.ro);
}
- getScalarProperty(properties, "blob_radius", E->convection.blob_radius, m);
- getScalarProperty(properties, "blob_dT", E->convection.blob_dT, m);
+ getScalarProperty(properties, "blob_radius", E->convection.blob_radius, out);
+ getScalarProperty(properties, "blob_dT", E->convection.blob_dT, out);
}
+
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -283,24 +301,28 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Param.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.param]" << std::endl;
- getScalarProperty(properties, "file_vbcs", E->control.vbcs_file, m);
- getStringProperty(properties, "vel_bound_file", E->control.velocity_boundary_file, m);
+ getScalarProperty(properties, "file_vbcs", E->control.vbcs_file, out);
+ getStringProperty(properties, "vel_bound_file", E->control.velocity_boundary_file, out);
- getScalarProperty(properties, "mat_control", E->control.mat_control, m);
- getStringProperty(properties, "mat_file", E->control.mat_file, m);
+ getScalarProperty(properties, "mat_control", E->control.mat_control, out);
+ getStringProperty(properties, "mat_file", E->control.mat_file, out);
- getScalarProperty(properties, "lith_age", E->control.lith_age, m);
- getStringProperty(properties, "lith_age_file", E->control.lith_age_file, m);
- getScalarProperty(properties, "lith_age_time", E->control.lith_age_time, m);
- getScalarProperty(properties, "lith_age_depth", E->control.lith_age_depth, m);
- getScalarProperty(properties, "mantle_temp", E->control.lith_age_mantle_temp, m);
+ getScalarProperty(properties, "lith_age", E->control.lith_age, out);
+ getStringProperty(properties, "lith_age_file", E->control.lith_age_file, out);
+ getScalarProperty(properties, "lith_age_time", E->control.lith_age_time, out);
+ getScalarProperty(properties, "lith_age_depth", E->control.lith_age_depth, out);
+ getScalarProperty(properties, "mantle_temp", E->control.lith_age_mantle_temp, out);
- getScalarProperty(properties, "start_age", E->control.start_age, m);
- getScalarProperty(properties, "reset_startage", E->control.reset_startage, m);
+ getScalarProperty(properties, "start_age", E->control.start_age, out);
+ getScalarProperty(properties, "reset_startage", E->control.reset_startage, out);
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -325,33 +347,37 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Phase.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.phase]" << std::endl;
- getScalarProperty(properties, "Ra_410", E->control.Ra_410, m);
- getScalarProperty(properties, "clapeyron410", E->control.clapeyron410, m);
- getScalarProperty(properties, "transT410", E->control.transT410, m);
- getScalarProperty(properties, "width410", E->control.width410, m);
+ getScalarProperty(properties, "Ra_410", E->control.Ra_410, out);
+ getScalarProperty(properties, "clapeyron410", E->control.clapeyron410, out);
+ getScalarProperty(properties, "transT410", E->control.transT410, out);
+ getScalarProperty(properties, "width410", E->control.width410, out);
if (E->control.width410!=0.0)
E->control.width410 = 1.0/E->control.width410;
- getScalarProperty(properties, "Ra_670", E->control.Ra_670 , m);
- getScalarProperty(properties, "clapeyron670", E->control.clapeyron670, m);
- getScalarProperty(properties, "transT670", E->control.transT670, m);
- getScalarProperty(properties, "width670", E->control.width670, m);
+ getScalarProperty(properties, "Ra_670", E->control.Ra_670 , out);
+ getScalarProperty(properties, "clapeyron670", E->control.clapeyron670, out);
+ getScalarProperty(properties, "transT670", E->control.transT670, out);
+ getScalarProperty(properties, "width670", E->control.width670, out);
if (E->control.width670!=0.0)
E->control.width670 = 1.0/E->control.width670;
- getScalarProperty(properties, "Ra_cmb", E->control.Ra_cmb, m);
- getScalarProperty(properties, "clapeyroncmb", E->control.clapeyroncmb, m);
- getScalarProperty(properties, "transTcmb", E->control.transTcmb, m);
- getScalarProperty(properties, "widthcmb", E->control.widthcmb, m);
+ getScalarProperty(properties, "Ra_cmb", E->control.Ra_cmb, out);
+ getScalarProperty(properties, "clapeyroncmb", E->control.clapeyroncmb, out);
+ getScalarProperty(properties, "transTcmb", E->control.transTcmb, out);
+ getScalarProperty(properties, "widthcmb", E->control.widthcmb, out);
if (E->control.widthcmb!=0.0)
E->control.widthcmb = 1.0/E->control.widthcmb;
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -376,23 +402,23 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Solver.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver]" << 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);
+ getStringProperty(properties, "datadir", E->control.data_dir, out);
+ getStringProperty(properties, "datafile", E->control.data_file, out);
+ getStringProperty(properties, "datafile_old", E->control.old_P_file, out);
- getScalarProperty(properties, "rayleigh", E->control.Atemp, m);
- getScalarProperty(properties, "Q0", E->control.Q0, m);
+ getScalarProperty(properties, "rayleigh", E->control.Atemp, out);
+ getScalarProperty(properties, "Q0", E->control.Q0, out);
- getScalarProperty(properties, "stokes_flow_only", E->control.stokes, m);
+ getScalarProperty(properties, "stokes_flow_only", E->control.stokes, out);
- getStringProperty(properties, "output_format", E->output.format, m);
- getStringProperty(properties, "output_optional", E->output.optional, m);
+ getStringProperty(properties, "output_format", E->output.format, out);
+ getStringProperty(properties, "output_optional", E->output.optional, out);
- getScalarProperty(properties, "verbose", E->control.verbose, m);
- getScalarProperty(properties, "see_convergence", E->control.print_convergence, m);
+ getScalarProperty(properties, "verbose", E->control.verbose, out);
+ getScalarProperty(properties, "see_convergence", E->control.print_convergence, out);
// parameters not used in pyre version,
// assigned value here to prevent uninitialized access
@@ -402,6 +428,10 @@
E->control.record_every = 1;
E->control.record_all_until = 1;
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -425,13 +455,13 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Sphere.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.mesher]" << std::endl;
- getScalarProperty(properties, "nproc_surf", E->parallel.nprocxy, m);
- getScalarProperty(properties, "nprocx", E->parallel.nprocx, m);
- getScalarProperty(properties, "nprocy", E->parallel.nprocy, m);
- getScalarProperty(properties, "nprocz", E->parallel.nprocz, m);
+ getScalarProperty(properties, "nproc_surf", E->parallel.nprocxy, out);
+ getScalarProperty(properties, "nprocx", E->parallel.nprocx, out);
+ getScalarProperty(properties, "nprocy", E->parallel.nprocy, out);
+ getScalarProperty(properties, "nprocz", E->parallel.nprocz, out);
if (E->parallel.nprocxy == 12)
if (E->parallel.nprocx != E->parallel.nprocy) {
@@ -440,13 +470,13 @@
return NULL;
}
- getScalarProperty(properties, "coor", E->control.coor, m);
- getStringProperty(properties, "coor_file", E->control.coor_file, m);
+ getScalarProperty(properties, "coor", E->control.coor, out);
+ getStringProperty(properties, "coor_file", E->control.coor_file, out);
- getScalarProperty(properties, "nodex", E->mesh.nox, m);
- getScalarProperty(properties, "nodey", E->mesh.noy, m);
- getScalarProperty(properties, "nodez", E->mesh.noz, m);
- getScalarProperty(properties, "levels", E->mesh.levels, m);
+ getScalarProperty(properties, "nodex", E->mesh.nox, out);
+ getScalarProperty(properties, "nodey", E->mesh.noy, out);
+ getScalarProperty(properties, "nodez", E->mesh.noz, out);
+ getScalarProperty(properties, "levels", E->mesh.levels, out);
E->mesh.mgunitx = (E->mesh.nox - 1) / E->parallel.nprocx /
(int) std::pow(2.0, E->mesh.levels - 1);
@@ -463,8 +493,8 @@
}
}
- getScalarProperty(properties, "radius_outer", E->sphere.ro, m);
- getScalarProperty(properties, "radius_inner", E->sphere.ri, m);
+ getScalarProperty(properties, "radius_outer", E->sphere.ro, out);
+ getScalarProperty(properties, "radius_inner", E->sphere.ri, out);
E->mesh.nsd = 3;
E->mesh.dof = 3;
@@ -513,10 +543,10 @@
E->sphere.caps = 1;
- getScalarProperty(properties, "theta_min", E->control.theta_min, m);
- getScalarProperty(properties, "theta_max", E->control.theta_max, m);
- getScalarProperty(properties, "fi_min", E->control.fi_min, m);
- getScalarProperty(properties, "fi_max", E->control.fi_max, m);
+ getScalarProperty(properties, "theta_min", E->control.theta_min, out);
+ getScalarProperty(properties, "theta_max", E->control.theta_max, out);
+ getScalarProperty(properties, "fi_min", E->control.fi_min, out);
+ getScalarProperty(properties, "fi_max", E->control.fi_max, out);
E->sphere.cap[1].theta[1] = E->control.theta_min;
E->sphere.cap[1].theta[2] = E->control.theta_max;
@@ -528,15 +558,19 @@
E->sphere.cap[1].fi[4] = E->control.fi_max;
}
- getScalarProperty(properties, "ll_max", E->sphere.llmax, m);
- getScalarProperty(properties, "nlong", E->sphere.noy, m);
- getScalarProperty(properties, "nlati", E->sphere.nox, m);
- getScalarProperty(properties, "output_ll_max", E->sphere.output_llmax, m);
+ getScalarProperty(properties, "ll_max", E->sphere.llmax, out);
+ getScalarProperty(properties, "nlong", E->sphere.noy, out);
+ getScalarProperty(properties, "nlati", E->sphere.nox, out);
+ getScalarProperty(properties, "output_ll_max", E->sphere.output_llmax, out);
E->mesh.layer[1] = 1;
E->mesh.layer[2] = 1;
E->mesh.layer[3] = 1;
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -560,12 +594,16 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Tracer.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.tracer]" << std::endl;
- getScalarProperty(properties, "tracer", E->control.tracer, m);
- getStringProperty(properties, "tracer_file", E->control.tracer_file, m);
+ getScalarProperty(properties, "tracer", E->control.tracer, out);
+ getStringProperty(properties, "tracer_file", E->control.tracer_file, out);
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -589,22 +627,22 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Visc.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.visc]" << std::endl;
- getStringProperty(properties, "Viscosity", E->viscosity.STRUCTURE, m);
+ getStringProperty(properties, "Viscosity", E->viscosity.STRUCTURE, out);
if ( strcmp(E->viscosity.STRUCTURE,"system") == 0)
E->viscosity.FROM_SYSTEM = 1;
else
E->viscosity.FROM_SYSTEM = 0;
- getScalarProperty(properties, "visc_smooth_method", E->viscosity.smooth_cycles, m);
- getScalarProperty(properties, "VISC_UPDATE", E->viscosity.update_allowed, m);
+ getScalarProperty(properties, "visc_smooth_method", E->viscosity.smooth_cycles, out);
+ getScalarProperty(properties, "VISC_UPDATE", E->viscosity.update_allowed, out);
int num_mat;
const int max_mat = 40;
- getScalarProperty(properties, "num_mat", num_mat, m);
+ getScalarProperty(properties, "num_mat", num_mat, out);
if(num_mat > max_mat) {
// max. allowed material types = 40
std::cerr << "'num_mat' greater than allowed value, set to "
@@ -614,28 +652,32 @@
E->viscosity.num_mat = num_mat;
getVectorProperty(properties, "visc0",
- E->viscosity.N0, num_mat, m);
+ E->viscosity.N0, num_mat, out);
- getScalarProperty(properties, "TDEPV", E->viscosity.TDEPV, m);
- getScalarProperty(properties, "rheol", E->viscosity.RHEOL, m);
+ getScalarProperty(properties, "TDEPV", E->viscosity.TDEPV, out);
+ getScalarProperty(properties, "rheol", E->viscosity.RHEOL, out);
getVectorProperty(properties, "viscE",
- E->viscosity.E, num_mat, m);
+ E->viscosity.E, num_mat, out);
getVectorProperty(properties, "viscT",
- E->viscosity.T, num_mat, m);
+ E->viscosity.T, num_mat, out);
getVectorProperty(properties, "viscZ",
- E->viscosity.Z, num_mat, m);
+ E->viscosity.Z, num_mat, out);
- getScalarProperty(properties, "SDEPV", E->viscosity.SDEPV, m);
- getScalarProperty(properties, "sdepv_misfit", E->viscosity.sdepv_misfit, m);
+ getScalarProperty(properties, "SDEPV", E->viscosity.SDEPV, out);
+ getScalarProperty(properties, "sdepv_misfit", E->viscosity.sdepv_misfit, out);
getVectorProperty(properties, "sdepv_expt",
- E->viscosity.sdepv_expt, num_mat, m);
+ E->viscosity.sdepv_expt, num_mat, out);
- getScalarProperty(properties, "VMIN", E->viscosity.MIN, m);
- getScalarProperty(properties, "visc_min", E->viscosity.min_value, m);
+ getScalarProperty(properties, "VMIN", E->viscosity.MIN, out);
+ getScalarProperty(properties, "visc_min", E->viscosity.min_value, out);
- getScalarProperty(properties, "VMAX", E->viscosity.MAX, m);
- getScalarProperty(properties, "visc_max", E->viscosity.max_value, m);
+ getScalarProperty(properties, "VMAX", E->viscosity.MAX, out);
+ getScalarProperty(properties, "visc_max", E->viscosity.max_value, out);
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -658,23 +700,27 @@
struct All_variables* E = static_cast<struct All_variables*>(PyCObject_AsVoidPtr(obj));
int m = E->parallel.me;
- if (not m)
- std::cout << "#Incompressible.inventory:" << std::endl;
+ std::ofstream *out = get_output_stream(E->parallel.me, E->control.PID);
+ *out << "[CitcomS.solver.vsolver]" << std::endl;
- getScalarProperty(properties, "node_assemble", E->control.NASSEMBLE, m);
- getScalarProperty(properties, "precond", E->control.precondition, m);
+ getScalarProperty(properties, "node_assemble", E->control.NASSEMBLE, out);
+ getScalarProperty(properties, "precond", E->control.precondition, out);
- getScalarProperty(properties, "accuracy", E->control.accuracy, m);
- getScalarProperty(properties, "tole_compressibility", E->control.tole_comp, m);
+ getScalarProperty(properties, "accuracy", E->control.accuracy, out);
+ getScalarProperty(properties, "tole_compressibility", E->control.tole_comp, out);
- getScalarProperty(properties, "mg_cycle", E->control.mg_cycle, m);
- getScalarProperty(properties, "down_heavy", E->control.down_heavy, m);
- getScalarProperty(properties, "up_heavy", E->control.up_heavy, m);
+ getScalarProperty(properties, "mg_cycle", E->control.mg_cycle, out);
+ getScalarProperty(properties, "down_heavy", E->control.down_heavy, out);
+ getScalarProperty(properties, "up_heavy", E->control.up_heavy, out);
- getScalarProperty(properties, "vlowstep", E->control.v_steps_low, m);
- getScalarProperty(properties, "vhighstep", E->control.v_steps_high, m);
- getScalarProperty(properties, "piterations", E->control.p_iterations, m);
+ getScalarProperty(properties, "vlowstep", E->control.v_steps_low, out);
+ getScalarProperty(properties, "vhighstep", E->control.v_steps_high, out);
+ getScalarProperty(properties, "piterations", E->control.p_iterations, out);
+ *out << std::endl;
+ out->close();
+ delete out;
+
if (PyErr_Occurred())
return NULL;
@@ -688,19 +734,27 @@
//==========================================================
// helper functions
-
-void getStringProperty(PyObject* properties, char* attribute, char* value, int mute)
+std::ofstream* get_output_stream(int mute, int pid)
{
- std::ofstream outf("/dev/null");
- std::ostream *out;
+ std::ofstream *out = new std::ofstream;
if (mute)
- out = &outf;
- else
- out = &std::cout;
+ out->open("/dev/null");
+ else {
+ char filename[255];
+ sprintf(filename, "pid%d.cfg", pid);
+ out->open(filename, std::ios::app);
+ }
- *out << '\t' << attribute << "=";
+ return out;
+}
+
+void getStringProperty(PyObject* properties, char* attribute,
+ char* value, std::ostream* out)
+{
+ *out << attribute << "=";
+
if(!PyObject_HasAttrString(properties, attribute)) {
char errmsg[255];
sprintf(errmsg, "no such attribute: %s", attribute);
@@ -725,18 +779,11 @@
template <class T>
-void getScalarProperty(PyObject* properties, char* attribute, T& value, int mute)
+void getScalarProperty(PyObject* properties, char* attribute,
+ T& value, std::ostream* out)
{
- std::ofstream outf("/dev/null");
- std::ostream *out;
+ *out << attribute << "=";
- if (mute)
- out = &outf;
- else
- out = &std::cout;
-
- *out << '\t' << attribute << "=";
-
if(!PyObject_HasAttrString(properties, attribute)) {
char errmsg[255];
sprintf(errmsg, "no such attribute: %s", attribute);
@@ -762,18 +809,10 @@
template <class T>
void getVectorProperty(PyObject* properties, char* attribute,
- T* vector, const int len, int mute)
+ T* vector, const int len, std::ostream* out)
{
- std::ofstream outf("/dev/null");
- std::ostream *out;
+ *out << attribute << "=";
- if (mute)
- out = &outf;
- else
- out = &std::cout;
-
- *out << '\t' << attribute << "=";
-
if(!PyObject_HasAttrString(properties, attribute)) {
char errmsg[255];
sprintf(errmsg, "no such attribute: %s", attribute);
More information about the cig-commits
mailing list