aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2003-06-04 11:50:47 +0000
committerjthorn <jthorn@f88db872-0e4f-0410-b76b-b9085cfa78c5>2003-06-04 11:50:47 +0000
commitb5f6b97b07884e44b5ed6b6ca256edd230f978cf (patch)
treed20426e615840fd36ce8be64ede30ac695d87d8b
parent2e72b0e19eb45f00fb6fc7411d1bb9e3be0b3d8f (diff)
changes to ILUCG subroutines
* change interface slightly * revise convergence criteria git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinAnalysis/AHFinderDirect/trunk@1093 f88db872-0e4f-0410-b76b-b9085cfa78c5
-rw-r--r--src/sparse-matrix/ilucg/dilucg.f7740
-rw-r--r--src/sparse-matrix/ilucg/ilucg.h4
-rw-r--r--src/sparse-matrix/ilucg/make.code.defn2
-rw-r--r--src/sparse-matrix/ilucg/silucg.f7736
4 files changed, 47 insertions, 35 deletions
diff --git a/src/sparse-matrix/ilucg/dilucg.f77 b/src/sparse-matrix/ilucg/dilucg.f77
index 411240d..11d6c4b 100644
--- a/src/sparse-matrix/ilucg/dilucg.f77
+++ b/src/sparse-matrix/ilucg/dilucg.f77
@@ -1,8 +1,9 @@
- SUBROUTINE DILUCG(N,IA,JA,A,
+ SUBROUTINE DILUCG(N,
+ $ IA,JA,A,
$ B,X,
$ ITEMP,RTEMP,
- $ EPS,ITER,
- $ ISTATUS,IERROR)
+ $ EPS,MAXITER,
+ $ ISTATUS)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION IA(*),JA(*),A(*),B(*),X(*),ITEMP(*),RTEMP(*)
C
@@ -32,21 +33,21 @@ C INFINITY-NORM OF THE CURRENT SOLUTION. HOWEVER, IF EPS
C .LT. 0.0D0, IT IS INTERNALLY SCALED BY THE MACHINE PRECISION,
C SO THAT, FOR EXAMPLE, EPS = -256.0D0 WILL ALLOW THE LAST 8 BITS
C OF THE SOLUTION TO BE IN ERROR.
-C ITER GIVES THE REQUESTED NUMBER OF ITERATIONS, OR IS 0 FOR "NO LIMIT".
-C ISTATUS IS AN INTEGER VARIABLE. FOR NORMAL RETURN, IT GIVES
-C THE NUMBER OF ITERATIONS DONE (NEGATIVE IS NO CONVERGENCE).
-C ON ERROR RETURN, THE ROW IN ERROR.
-C IERROR IS AN INTEGER VARIABLE. IT IS SET TO 0 FOR A SUCCESSFUL
-C SOLUTION (REACHED CONVERGENCE CRITERION), OR NEGATIVE FOR AN
-C ERROR (INCLUDING FAILURE TO CONVERGE WITHIN THE REQUESTED NUMBER
-C OF ITERATIONS).
+C MAXITER GIVES THE REQUESTED NUMBER OF ITERATIONS,
+C OR IS 0 FOR "NO LIMIT".
+C ISTATUS IS AN INTEGER VARIABLE, WHICH IS SET TO:
+C -I IF THERE IS AN ERROR IN THE MATRIX STRUCTURE IN ROW I
+C (SUCH AS A ZERO ELEMENT ON THE DIAGONAL).
+C 0 IF THE ITERATION FAILED TO REACH THE CONVERGENCE CRITERION
+C IN ITER ITERATIONS.
+C +I IF THE ITERATION CONVERGED IN I ITERATIONS.
C
C MODIFICATIONS
C * RETURN LOGICAL VALUE, J. THORNBURG, 13/MAY/85.
C * ADD CONVERGENCE CRITERIA, J. THORNBURG, 17/MAY/85.
C * CHANGED CONVERGENCE CRITERIA, J. THORNBURG, 4/AUG/89.
C * AVOID SKIP RETURNS, J. THORNBURG, 10/SEP/89.
-C * CHANGE FUNCTION BACK TO SUBROUTINE, J. THORNBURG, 2.JUN.2003
+C * CHANGE FUNCTION BACK TO SUBROUTINE, J. THORNBURG, 3.JUN.2003
C
C REFERENCE:
C D.S.KERSHAW,"THE INCOMPLETE CHOLESKY-CONJUGATE GRADIENT
@@ -74,16 +75,19 @@ C CALCULATE INDICES FOR BREAKING UP TEMPORARY ARRAYS.
IF (N.LT.0) GO TO 10
C DO INCOMPLETE LU DECOMPOSITION
IF (DLU0(NP,IA,JA,A,ITEMP(IC),ITEMP(JC),ITEMP(JCI),RTEMP(IALU),
- * ITEMP(ILU),ITEMP(JLU),ITEMP(ID),RTEMP(IR),ISTATUS)) GOTO 20
+ * ITEMP(ILU),ITEMP(JLU),ITEMP(ID),RTEMP(IR),IERROR)) GOTO 20
C AND DO CONJUGATE GRADIENT ITERATIONS
C CALL MODIFIED TO ADD ADJUSTABLE CONVERGENCE CRITERIA EPS
C - J. THORNBURG, 17/MAY/85.
10 CALL DNCG0(NP,IA,JA,A,B,X,ITEMP(ILU),ITEMP(JLU),ITEMP(ID),
* RTEMP(IALU),RTEMP(IR),RTEMP(IP),RTEMP(IS1),RTEMP(IS2),
- * EPS,ITER,ISTATUS)
- IERROR = 0
+ * EPS,MAXITER,ITER)
+C ITER IS ACTUAL NUMBER OF ITERATIONS (NEGATIVE IF NO CONVERGENCE)
+ ISTATUS = ITER
+ IF (ITER .LT. 0) ISTATUS = 0
RETURN
-20 IERROR = -1
+C ERROR RETURN FROM INCOMPLETE LU DECOMPOSITION
+20 ISTATUS = -IERROR
RETURN
END
@@ -112,7 +116,9 @@ C ILU AND JLU CORRESPONDS TO IA AND JA BUT FOR ALU.
C ID IS AN INTEGER ARRAY DIMENSIONED N. IT CONTAINS
C INDICES TO THE DIAGONAL ELEMENTS OF U.
C V IS A REAL SCRATCH VECTOR OF LENGTH N.
-C IE GIVES THE ROW NUMBER IN ERROR.
+C IE GIVES THE ROW NUMBER IN ERROR IF AN ERROR OCCURED
+C (RETURN VALUE .TRUE.), OR IS UNUSED IF ALL IS WELL
+C (RETURN VALUE .FALSE.).
C
C RETURN VALUE = .FALSE. IF ALL IS WELL, .TRUE. IF ERROR.
C
diff --git a/src/sparse-matrix/ilucg/ilucg.h b/src/sparse-matrix/ilucg/ilucg.h
index 9d839c9..60cd98b 100644
--- a/src/sparse-matrix/ilucg/ilucg.h
+++ b/src/sparse-matrix/ilucg/ilucg.h
@@ -21,14 +21,14 @@ void CCTK_FCALL
const float B[], float X[],
integer ITEMP[], float RTEMP[],
const float* EPS, const integer* ITER,
- integer* ISTATUS, integer* IERROR);
+ integer* ISTATUS);
void CCTK_FCALL
CCTK_FNAME(dilucg)(const integer* N,
const integer IA[], const integer JA[], const double A[],
const double B[], double X[],
integer ITEMP[], double RTEMP[],
const double* EPS, const integer* ITER,
- integer* ISTATUS, integer* IERROR);
+ integer* ISTATUS);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/sparse-matrix/ilucg/make.code.defn b/src/sparse-matrix/ilucg/make.code.defn
index 035b988..9a3d4ce 100644
--- a/src/sparse-matrix/ilucg/make.code.defn
+++ b/src/sparse-matrix/ilucg/make.code.defn
@@ -1,4 +1,4 @@
-# specification of things to be compiled in this directory
+# Cactus specification of things to be compiled in this directory
# $Header$
# Source files in this directory
diff --git a/src/sparse-matrix/ilucg/silucg.f77 b/src/sparse-matrix/ilucg/silucg.f77
index 09610e0..fc97c3b 100644
--- a/src/sparse-matrix/ilucg/silucg.f77
+++ b/src/sparse-matrix/ilucg/silucg.f77
@@ -1,4 +1,5 @@
- SUBROUTINE SILUCG(N,IA,JA,A,
+ SUBROUTINE SILUCG(N,
+ $ IA,JA,A,
$ B,X,
$ ITEMP,RTEMP,
$ EPS,ITER,
@@ -32,21 +33,21 @@ C INFINITY-NORM OF THE CURRENT SOLUTION. HOWEVER, IF EPS
C .LT. 0.0, IT IS INTERNALLY SCALED BY THE MACHINE PRECISION,
C SO THAT, FOR EXAMPLE, EPS = -256.0 WILL ALLOW THE LAST 8 BITS
C OF THE SOLUTION TO BE IN ERROR.
-C ITER GIVES THE REQUESTED NUMBER OF ITERATIONS, OR IS 0 FOR "NO LIMIT".
-C ISTATUS IS AN INTEGER VARIABLE. FOR NORMAL RETURN, IT GIVES
-C THE NUMBER OF ITERATIONS DONE (NEGATIVE IS NO CONVERGENCE).
-C ON ERROR RETURN, THE ROW IN ERROR.
-C IERROR IS AN INTEGER VARIABLE. IT IS SET TO 0 FOR A SUCCESSFUL
-C SOLUTION (REACHED CONVERGENCE CRITERION), OR NEGATIVE FOR AN
-C ERROR (INCLUDING FAILURE TO CONVERGE WITHIN THE REQUESTED NUMBER
-C OF ITERATIONS).
+C MAXITER GIVES THE REQUESTED NUMBER OF ITERATIONS,
+C OR IS 0 FOR "NO LIMIT".
+C ISTATUS IS AN INTEGER VARIABLE, WHICH IS SET TO:
+C -I IF THERE IS AN ERROR IN THE MATRIX STRUCTURE IN ROW I
+C (SUCH AS A ZERO ELEMENT ON THE DIAGONAL).
+C 0 IF THE ITERATION FAILED TO REACH THE CONVERGENCE CRITERION
+C IN ITER ITERATIONS.
+C +I IF THE ITERATION CONVERGED IN I ITERATIONS.
C
C MODIFICATIONS
C * RETURN LOGICAL VALUE, J. THORNBURG, 13/MAY/85.
C * ADD CONVERGENCE CRITERIA, J. THORNBURG, 17/MAY/85.
C * CHANGED CONVERGENCE CRITERIA, J. THORNBURG, 4/AUG/89.
C * AVOID SKIP RETURNS, J. THORNBURG, 10/SEP/89.
-C * CHANGE FUNCTION BACK TO SUBROUTINE, J. THORNBURG, 2.JUN.2003
+C * CHANGE FUNCTION BACK TO SUBROUTINE, J. THORNBURG, 3.JUN.2003
C
C REFERENCE:
C D.S.KERSHAW,"THE INCOMPLETE CHOLESKY-CONJUGATE GRADIENT
@@ -74,16 +75,19 @@ C CALCULATE INDICES FOR BREAKING UP TEMPORARY ARRAYS.
IF (N.LT.0) GO TO 10
C DO INCOMPLETE LU DECOMPOSITION
IF (SLU0(NP,IA,JA,A,ITEMP(IC),ITEMP(JC),ITEMP(JCI),RTEMP(IALU),
- * ITEMP(ILU),ITEMP(JLU),ITEMP(ID),RTEMP(IR),ISTATUS)) GOTO 20
+ * ITEMP(ILU),ITEMP(JLU),ITEMP(ID),RTEMP(IR),IERROR)) GOTO 20
C AND DO CONJUGATE GRADIENT ITERATIONS
C CALL MODIFIED TO ADD ADJUSTABLE CONVERGENCE CRITERIA EPS
C - J. THORNBURG, 17/MAY/85.
10 CALL SNCG0(NP,IA,JA,A,B,X,ITEMP(ILU),ITEMP(JLU),ITEMP(ID),
* RTEMP(IALU),RTEMP(IR),RTEMP(IP),RTEMP(IS1),RTEMP(IS2),
- * EPS,ITER,ISTATUS)
- IERROR = 0
+ * EPS,MAXITER,ITER)
+C ITER IS ACTUAL NUMBER OF ITERATIONS (NEGATIVE IF NO CONVERGENCE)
+ ISTATUS = ITER
+ IF (ITER .LT. 0) ISTATUS = 0
RETURN
-20 IERROR = -1
+C ERROR RETURN FROM INCOMPLETE LU DECOMPOSITION
+20 ISTATUS = -IERROR
RETURN
END
@@ -112,7 +116,9 @@ C ILU AND JLU CORRESPONDS TO IA AND JA BUT FOR ALU.
C ID IS AN INTEGER ARRAY DIMENSIONED N. IT CONTAINS
C INDICES TO THE DIAGONAL ELEMENTS OF U.
C V IS A REAL SCRATCH VECTOR OF LENGTH N.
-C IE GIVES THE ROW NUMBER IN ERROR.
+C IE GIVES THE ROW NUMBER IN ERROR IF AN ERROR OCCURED
+C (RETURN VALUE .TRUE.), OR IS UNUSED IF ALL IS WELL
+C (RETURN VALUE .FALSE.).
C
C RETURN VALUE = .FALSE. IF ALL IS WELL, .TRUE. IF ERROR.
C