[cig-commits] r13256 - in mc/3D/CitcomS/trunk: CitcomS/Solver examples/Full examples/Regional lib module
tan2 at geodynamics.org
tan2 at geodynamics.org
Tue Nov 4 13:01:27 PST 2008
Author: tan2
Date: 2008-11-04 13:01:26 -0800 (Tue, 04 Nov 2008)
New Revision: 13256
Modified:
mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py
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/module/bindings.c
mc/3D/CitcomS/trunk/module/misc.c
mc/3D/CitcomS/trunk/module/misc.h
Log:
Removed input parameters "mgunitx", "mgunity" and "mgunitz".
Their values are inferred from other parameters.
Also, the code checks that "levels" > 1 when multigrid solver is used.
Modified: mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py 2008-11-04 21:00:01 UTC (rev 13255)
+++ mc/3D/CitcomS/trunk/CitcomS/Solver/Solver.py 2008-11-04 21:01:26 UTC (rev 13256)
@@ -246,7 +246,7 @@
def setProperties(self, stream):
- from CitcomSLib import Solver_set_properties
+ from CitcomSLib import Solver_set_properties, check_settings_consistency
Solver_set_properties(self.all_variables, self.inventory, stream)
@@ -264,6 +264,8 @@
inv.tracer.setProperties(stream)
inv.visc.setProperties(stream)
+ check_settings_consistency(self.all_variables);
+
return
Modified: mc/3D/CitcomS/trunk/examples/Full/input.sample
===================================================================
--- mc/3D/CitcomS/trunk/examples/Full/input.sample 2008-11-04 21:00:01 UTC (rev 13255)
+++ mc/3D/CitcomS/trunk/examples/Full/input.sample 2008-11-04 21:01:26 UTC (rev 13256)
@@ -32,9 +32,6 @@
nodex=9
nodey=9
nodez=9
-mgunitx=8
-mgunity=8
-mgunitz=8
levels=1
Modified: mc/3D/CitcomS/trunk/examples/Regional/input.sample
===================================================================
--- mc/3D/CitcomS/trunk/examples/Regional/input.sample 2008-11-04 21:00:01 UTC (rev 13255)
+++ mc/3D/CitcomS/trunk/examples/Regional/input.sample 2008-11-04 21:01:26 UTC (rev 13256)
@@ -33,9 +33,6 @@
nodex=17
nodey=17
nodez=9
-mgunitx=8
-mgunity=8
-mgunitz=8
levels=1
Modified: mc/3D/CitcomS/trunk/lib/Instructions.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Instructions.c 2008-11-04 21:00:01 UTC (rev 13255)
+++ mc/3D/CitcomS/trunk/lib/Instructions.c 2008-11-04 21:01:26 UTC (rev 13256)
@@ -83,6 +83,7 @@
void open_qfiles(struct All_variables *) ;
void read_rayleigh_from_file(struct All_variables *);
void read_initial_settings(struct All_variables *);
+void check_settings_consistency(struct All_variables *);
void initial_mesh_solver_setup(struct All_variables *E)
@@ -363,13 +364,25 @@
input_string("datadir_old",E->control.data_dir_old,".",m);
input_string("datafile_old",E->control.data_prefix_old,"initialize",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);
+ input_int("nproc_surf",&(E->parallel.nprocxy),"1",m);
+ input_int("nprocx",&(E->parallel.nprocx),"1",m);
+ input_int("nprocy",&(E->parallel.nprocy),"1",m);
+ input_int("nprocz",&(E->parallel.nprocz),"1",m);
+
+ input_int("nodex",&(E->mesh.nox),"essential",m);
+ input_int("nodez",&(E->mesh.noz),"essential",m);
+ input_int("nodey",&(E->mesh.noy),"essential",m);
+
input_int("levels",&(E->mesh.levels),"0",m);
- if(E->mesh.levels > MAX_LEVELS)
- myerror(E,"number of multigrid levels out of bound");
+ E->mesh.mgunitx = (E->mesh.nox - 1) / E->parallel.nprocx /
+ (int) pow(2.0, E->mesh.levels - 1);
+ E->mesh.mgunity = (E->mesh.noy - 1) / E->parallel.nprocy /
+ (int) pow(2.0, E->mesh.levels - 1);
+ E->mesh.mgunitz = (E->mesh.noz - 1) / E->parallel.nprocz /
+ (int) pow(2.0, E->mesh.levels - 1);
+
+
input_int("coor",&(E->control.coor),"0",m);
if(E->control.coor == 2){
/*
@@ -402,12 +415,7 @@
input_string("coor_file",E->control.coor_file,"",m);
- input_int("nprocx",&(E->parallel.nprocx),"1",m);
- input_int("nprocy",&(E->parallel.nprocy),"1",m);
- input_int("nprocz",&(E->parallel.nprocz),"1",m);
- input_int("nproc_surf",&(E->parallel.nprocxy),"1",m);
-
input_boolean("node_assemble",&(E->control.NASSEMBLE),"off",m);
/* general mesh structure */
@@ -597,10 +605,6 @@
#endif
- input_int("nodex",&(E->mesh.nox),"essential",m);
- input_int("nodez",&(E->mesh.noz),"essential",m);
- input_int("nodey",&(E->mesh.noy),"essential",m);
-
input_boolean("aug_lagr",&(E->control.augmented_Lagr),"off",m);
input_double("aug_number",&(E->control.augmented),"0.0",m);
@@ -743,11 +747,30 @@
(E->problem_settings)(E);
-
+ check_settings_consistency(E);
return;
}
+/* Checking the consistency of input parameters */
+void check_settings_consistency(struct All_variables *E)
+{
+ if (strcmp(E->control.SOLVER_TYPE, "cgrad") == 0) {
+ /* conjugate gradient has only one level */
+ if(E->mesh.levels != 1)
+ myerror(E, "Conjugate gradient solver is used. 'levels' must be 1.\n");
+ }
+ else {
+ /* multigrid solver needs two or more levels */
+ if(E->mesh.levels < 2)
+ myerror(E, "number of multigrid levels < 2\n");
+ if(E->mesh.levels > MAX_LEVELS)
+ myerror(E, "number of multigrid levels out of bound\n");
+ }
+ return;
+}
+
+
/* ===================================
Functions which set up details
common to all problems follow ...
Modified: mc/3D/CitcomS/trunk/module/bindings.c
===================================================================
--- mc/3D/CitcomS/trunk/module/bindings.c 2008-11-04 21:00:01 UTC (rev 13255)
+++ mc/3D/CitcomS/trunk/module/bindings.c 2008-11-04 21:01:26 UTC (rev 13256)
@@ -100,6 +100,11 @@
METH_VARARGS,
pyCitcom_set_signal__doc__},
+ {pyCitcom_check_settings_consistency__name__,
+ pyCitcom_check_settings_consistency,
+ METH_VARARGS,
+ pyCitcom_check_settings_consistency__doc__},
+
{pyCitcom_velocities_conform_bcs__name__,
pyCitcom_velocities_conform_bcs,
METH_VARARGS,
Modified: mc/3D/CitcomS/trunk/module/misc.c
===================================================================
--- mc/3D/CitcomS/trunk/module/misc.c 2008-11-04 21:00:01 UTC (rev 13255)
+++ mc/3D/CitcomS/trunk/module/misc.c 2008-11-04 21:01:26 UTC (rev 13256)
@@ -50,6 +50,7 @@
void read_temperature_boundary_from_file(struct All_variables*);
void read_velocity_boundary_from_file(struct All_variables*);
void set_signal();
+void check_settings_consistency(struct All_variables *);
void tracer_advection(struct All_variables*);
void velocities_conform_bcs(struct All_variables*, double **);
@@ -234,6 +235,26 @@
}
+char pyCitcom_check_settings_consistency__doc__[] = "";
+char pyCitcom_check_settings_consistency__name__[] = "check_settings_consistency";
+
+PyObject * pyCitcom_check_settings_consistency(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ struct All_variables* E;
+
+ if (!PyArg_ParseTuple(args, "O:check_settings_consistency", &obj))
+ return NULL;
+
+ E = (struct All_variables*)(PyCObject_AsVoidPtr(obj));
+
+ check_settings_consistency(E);
+
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+
char pyCitcom_velocities_conform_bcs__doc__[] = "";
char pyCitcom_velocities_conform_bcs__name__[] = "velocities_conform_bcs";
Modified: mc/3D/CitcomS/trunk/module/misc.h
===================================================================
--- mc/3D/CitcomS/trunk/module/misc.h 2008-11-04 21:00:01 UTC (rev 13255)
+++ mc/3D/CitcomS/trunk/module/misc.h 2008-11-04 21:01:26 UTC (rev 13256)
@@ -73,6 +73,11 @@
PyObject * pyCitcom_set_signal(PyObject *, PyObject *);
+extern char pyCitcom_check_settings_consistency__name__[];
+extern char pyCitcom_check_settings_consistency__doc__[];
+PyObject * pyCitcom_check_settings_consistency(PyObject *, PyObject *);
+
+
extern char pyCitcom_velocities_conform_bcs__name__[];
extern char pyCitcom_velocities_conform_bcs__doc__[];
PyObject * pyCitcom_velocities_conform_bcs(PyObject *, PyObject *);
More information about the CIG-COMMITS
mailing list