[cig-commits] r7856 - in mc/3D/CitcomS/trunk: CitcomS/Components/Stokes_solver lib module

tan2 at geodynamics.org tan2 at geodynamics.org
Tue Aug 21 13:27:37 PDT 2007


Author: tan2
Date: 2007-08-21 13:27:36 -0700 (Tue, 21 Aug 2007)
New Revision: 7856

Modified:
   mc/3D/CitcomS/trunk/CitcomS/Components/Stokes_solver/Incompressible.py
   mc/3D/CitcomS/trunk/lib/Instructions.c
   mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c
   mc/3D/CitcomS/trunk/lib/global_defs.h
   mc/3D/CitcomS/trunk/module/setProperties.c
Log:
A new input parameter to specify which compressible solver

If solver.vsolver.uzawa == "cg", Wei Leng's implementation is used.
If solver.vsolver.uzawa == "bicg", Eh Tan's implementation is used.


Modified: mc/3D/CitcomS/trunk/CitcomS/Components/Stokes_solver/Incompressible.py
===================================================================
--- mc/3D/CitcomS/trunk/CitcomS/Components/Stokes_solver/Incompressible.py	2007-08-21 20:26:56 UTC (rev 7855)
+++ mc/3D/CitcomS/trunk/CitcomS/Components/Stokes_solver/Incompressible.py	2007-08-21 20:27:36 UTC (rev 7856)
@@ -102,6 +102,8 @@
         aug_lagr = prop.bool("aug_lagr", default=True)
         aug_number = prop.float("aug_number", default=2.0e3)
 
+        uzawa = prop.str("uzawa", default="cg",
+                         validator=prop.choice(["cg", "bicg"]))
         compress_iter_maxstep = prop.int("compress_iter_maxstep", default=100)
         relative_err_accuracy = prop.float("relative_err_accuracy", default=0.01)
 

Modified: mc/3D/CitcomS/trunk/lib/Instructions.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Instructions.c	2007-08-21 20:26:56 UTC (rev 7855)
+++ mc/3D/CitcomS/trunk/lib/Instructions.c	2007-08-21 20:27:36 UTC (rev 7856)
@@ -422,9 +422,21 @@
   else
       E->control.inv_gruneisen = 0;
 
-  input_int("compress_iter_maxstep",&(E->control.compress_iter_maxstep),"100",m);
-  input_float("relative_err_accuracy",&(E->control.relative_err_accuracy),"0.01",m);
+  if(E->control.inv_gruneisen != 0) {
+      /* which compressible solver to use: "cg" or "bicg" */
+      input_string("uzawa",E->control.uzawa,"cg",m);
+      if(strcmp(E->control.uzawa, "cg") == 0) {
+          /* more convergence parameters for "cg" */
+          input_int("compress_iter_maxstep",&(E->control.compress_iter_maxstep),"100",m);
+          input_float("relative_err_accuracy",&(E->control.relative_err_accuracy),"0.001",m);
+      }
+      else if(strcmp(E->control.uzawa, "bicg") == 0) {
+      }
+      else
+          myerror(E, "Error: unknown Uzawa iteration\n");
+  }
 
+
   /* data section */
   input_float("Q0",&(E->control.Q0),"0.0",m);
   /* Q0_enriched gets read in Tracer_setup.c */

Modified: mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c	2007-08-21 20:26:56 UTC (rev 7855)
+++ mc/3D/CitcomS/trunk/lib/Stokes_flow_Incomp.c	2007-08-21 20:27:36 UTC (rev 7856)
@@ -35,6 +35,8 @@
 #include "global_defs.h"
 #include <stdlib.h>
 
+void myerror(struct All_variables *,char *);
+
 static float solve_Ahat_p_fhat(struct All_variables *E,
                                double **V, double **P, double **F,
                                double imp, int *steps_max);
@@ -110,8 +112,12 @@
     if(E->control.inv_gruneisen == 0)
         residual = solve_Ahat_p_fhat_CG(E, V, P, F, imp, steps_max);
     else {
-        residual = solve_Ahat_p_fhat_BiCG(E, V, P, F, imp, steps_max);
-        //residual = solve_Ahat_p_fhat_iterCG(E, V, P, F, imp, steps_max);
+        if(strcmp(E->control.uzawa, "cg") == 0)
+            residual = solve_Ahat_p_fhat_iterCG(E, V, P, F, imp, steps_max);
+        else if(strcmp(E->control.uzawa, "bicg") == 0)
+            residual = solve_Ahat_p_fhat_BiCG(E, V, P, F, imp, steps_max);
+        else
+            myerror(E, "Error: unknown Uzawa iteration\n");
     }
 
     return(residual);

Modified: mc/3D/CitcomS/trunk/lib/global_defs.h
===================================================================
--- mc/3D/CitcomS/trunk/lib/global_defs.h	2007-08-21 20:26:56 UTC (rev 7855)
+++ mc/3D/CitcomS/trunk/lib/global_defs.h	2007-08-21 20:27:36 UTC (rev 7856)
@@ -461,6 +461,8 @@
     /**/
     int compress_iter_maxstep;
 
+    char uzawa[20];
+
     float inputdiff;
     float VBXtopval;
     float VBXbotval;

Modified: mc/3D/CitcomS/trunk/module/setProperties.c
===================================================================
--- mc/3D/CitcomS/trunk/module/setProperties.c	2007-08-21 20:26:56 UTC (rev 7855)
+++ mc/3D/CitcomS/trunk/module/setProperties.c	2007-08-21 20:27:36 UTC (rev 7856)
@@ -773,8 +773,15 @@
     getIntProperty(properties, "aug_lagr", E->control.augmented_Lagr, fp);
     getDoubleProperty(properties, "aug_number", E->control.augmented, fp);
 
-    getIntProperty(properties, "compress_iter_maxstep", E->control.compress_iter_maxstep, fp);
-    getFloatProperty(properties, "relative_err_accuracy", E->control.relative_err_accuracy, fp);
+    if(E->control.inv_gruneisen != 0) {
+        /* which compressible solver to use: "cg" or "bicg" */
+        getStringProperty(properties, "uzawa", E->control.uzawa, fp);
+        if(strcmp(E->control.uzawa, "cg") == 0) {
+            /* more convergence parameters for "cg" */
+            getIntProperty(properties, "compress_iter_maxstep", E->control.compress_iter_maxstep, fp);
+            getFloatProperty(properties, "relative_err_accuracy", E->control.relative_err_accuracy, fp);
+        }
+    }
 
     PUTS(("\n"));
 



More information about the cig-commits mailing list