[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