[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