C ALGORITHM 758, COLLECTED ALGORITHMS FROM ACM. C THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE, C VOL. 22, NO. 3, September, 1996, P. 302--328. C #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # Doc # Drivers # Info # Src # This archive created: Wed Sep 25 11:40:52 1996 export PATH; PATH=/bin:$PATH if test ! -d 'Doc' then mkdir 'Doc' fi cd 'Doc' if test -f 'readme' then echo shar: will not over-write existing file "'readme'" else cat << \SHAR_EOF > 'readme' `VLUGR2: A Vectorizable Adaptive Grid Solver for PDEs in 2D' by J.G. Blom, R.A. Trompert, and J.G. Verwer. This code solves systems of PDEs of the type F(t,x,y,U,Ut,Ux,Uy,Uxx,Uxy,Uyy)=0 with boundary conditions B(t,x,y,U,Ut,Ux,Uy)=0 and initial values U(t0,x,y)=U0 on a 2D domain bounded by right-angled polygons. In space Local Uniform Grid Refinement is applied to resolve local sharp gradients in the solution. For the time integration the implicit BDF2 method is used with variable stepsizes. Description of contents of source code files -------------------------------------------- (Both single precision and double precision available) src.f Main module, contains documentation ilubsn.f ILU decomposition and backsolve for arbitrary number of PDE components ilubs1.f ILU decomposition and backsolve for optimal vector performance for PDE with 1 component ilubs2.f ILU decomposition and backsolve for optimal vector performance for PDE with 2 components ilubs3.f ILU decomposition and backsolve for optimal vector performance for PDE with 3 components user.f Default modules that can be replaced by user's own (see description in paper) blas.f BLAS modules exmpl.f Calling program for the first time interval of the example in the paper exmplr.f Calling program for the second time interval of the example in the paper probi.f Calling program for problem I in the paper probii.f Calling program for problem II in the paper prtsol.f Program to print out solution from file generated by the DUMP routine wrtuni.f Program that reads the file generated by the DUMP routine and writes the (interpolated) solution on a uniform grid of a specified grid level and the maximum used grid level in each point to file. plot.m Matlab plotting routine to plot the data generated by WRTUNI.f How to use the solver: ---------------------- Compile and link the modules in exmpl.f user.f (only the SUBROUTINE DERIVF) src.f ilubSn.f blas.f (if the BLAS library is not available on the platform) The module blas.f contains, a.o., the functions I1MACH and R/D1MACH which set machine-dependent values. These functions need to be adapted to the platform. The results and integration information can be found in the files exmpl_runinfo exmpl_output A file DUMP is created that contains all the necessary information to restart the integration on the second time interval. For the second run one should compile and link the modules in exmplr.f user.f (only (a dummy) FUNCTION INIDOM and SUBROUTINE CHSPCM) src.f ilubsn.f blas.f (if the BLAS library is not available on the platform) The results for this run is in the file exmplr_output To get an optimal vector performance for a small number of PDE components one should use the specific ilubs#.f code, in this case: ilubs2.f SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'Drivers' then mkdir 'Drivers' fi cd 'Drivers' if test ! -d 'Dp' then mkdir 'Dp' fi cd 'Dp' if test -f 'prtsol.f' then echo shar: will not over-write existing file "'prtsol.f'" else cat << \SHAR_EOF > 'prtsol.f' PROGRAM PRTSOL C C----------------------------------------------------------------------- C Ccc This program reads a file made by subroutine DUMP and prints the C solution on an output file. Both filenames are read from standard C input. C Ccc EXTERNALS USED: EXTERNAL PRSOL, RDDUMP C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK PARAMETER (MXLEV=5, NPD=3, NPTS=10000) PARAMETER (LENIWK=NPTS*(7*MXLEV+20), + LENRWK=5*NPTS*NPD*MXLEV) C CHARACTER FILE*128 INTEGER IWK(LENIWK), + LSGNM1, LSGN, LSGNP1, LSUNM1, LSSN, LSUN DOUBLE PRECISION RWK(LENRWK) PRINT *, 'DUMP file?' READ '(A)', FILE C OPEN(UNIT=62,FILE=FILE,FORM='UNFORMATTED') CALL RDDUMP (62, RWK, LENRWK, IWK, LENIWK) CLOSE(62) C C Setup work storage LSGNM1 = 1 LSGN = LSGNM1 + MAXLVW+1 LSGNP1 = LSGN + MAXLVW+1 LSUNM1 = LSGNP1 + MAXLVW+1 LSSN = LSUNM1 + MAXLVW LSUN = LSSN + MAXLVW C C call print routine PRINT *, 'output file?' READ '(A)', FILE C OPEN(UNIT=61,FILE=FILE) CALL PRSOL (61, TW, NPDEW, XLW, YLW, DXB, DYB, + IWK(LSGN), IWK(LIWKPS), IWK(LSUN), RWK(LRWKPS)) CLOSE(61) END SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER LUNDMP, LENRWK, IWK(LENIWK) DOUBLE PRECISION RWK(LENRWK) C Ccc PURPOSE: C Read all information necessary for a restart of VLUGR2 from file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : OUT. Real workstorage intended to pass to VLUGR2 C LENRWK : IN. Dimension of RWK. C IWK : OUT. Integer workstorage intended to pass to VLUGR2 C LENIWK : IN. Dimension of IWK. C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J READ(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO IF (LENRWK .LT. LRWKPS+LRWKB .OR. LENIWK .LT. LIWKPS+LIWKB) THEN PRINT *, LENRWK, LRWKPS+LRWKB, LENIWK, LIWKPS+LIWKB STOP 'work space too small' ENDIF READ(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) READ(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) READ(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) C RETURN END SUBROUTINE PRSOL (LUN, T, NPDE, XL, YL, DXB, DYB, LGRID, ISTRUC, + LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, NPDE, LGRID(0:*), ISTRUC(*), LSOL(*) DOUBLE PRECISION T, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Print solution and coordinate values at all grid levels. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C T : IN. Current value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lowerleft corner of (virtual) domain C YL : IN. Y-coordinate of lowerleft corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C Ccc EXTERNALS USED: EXTERNAL PRSOLL C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL DOUBLE PRECISION DX, DY MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + SOL(LSOL(LEVEL)+1)) DX = DX/2 DY = DY/2 10 CONTINUE RETURN END SUBROUTINE PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + LROW, IROW, ICOL, U) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, LEVEL, NPTS, NPDE, LROW(0:*), IROW(*), ICOL(*) DOUBLE PRECISION T, XL, YL, DX, DY, U(NPTS,NPDE) C Ccc PURPOSE: C Print solution and X- and Y-coordinates of gridlevel LEVEL. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C LEVEL : IN. Grid level corresponding with solution U. C T : IN. Current value of time variable C NPTS : IN. # grid points at this level C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C U : IN. Solution on this grid level C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPT, IR, NROWS DOUBLE PRECISION X, Y C NROWS = LROW(0) WRITE(LUN,'(//// T10,A,T30,A,T46,A,T62,A,T71,A //)') + 'Level', 't', 'Y', 'X', 'Solution' IR = 1 Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T13,I2,T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + LEVEL, T, Y, X, U(IPT,1) DO 10 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 10 CONTINUE DO 20 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 30 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 30 CONTINUE 20 CONTINUE DO 40 IR = 2, NROWS Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + T, Y, X, U(IPT,1) DO 50 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 50 CONTINUE DO 60 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 70 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 70 CONTINUE 60 CONTINUE 40 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'probi.f' then echo shar: will not over-write existing file "'probi.f'" else cat << \SHAR_EOF > 'probi.f' PROGRAM EXMPL C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL DOUBLE PRECISION TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=3, NPTS=5000) PARAMETER (LENIWK=NPTS*(5*MXLEV+14), + LENRWK=NPTS*NPD*(5*MXLEV+9 + + 9*NPD+(2*MAXLR+MAXL+6+NPD)), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C CHARACTER FILE*7 INTEGER NPDE, INFO(7), IWK(LENIWK), MNTR, I LOGICAL LWK(LENLWK) DOUBLE PRECISION T, TOUT(4), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(2+3*NPD), RWK(LENRWK) C C First call of VLUGR2 MNTR = 0 NPDE = 3 T = 0.0 TOUT(1) = 500.0 TOUT(2) = 5000.0 TOUT(3) = 10000.0 TOUT(4) = 20000.0 DT = 0.1 XL = 0.0 XR = 1.0 YL = 0.0 YU = 1.0 DX = 0.05 DY = 0.05 TOLS = 0.1 TOLT = 0.1 INFO(1) = 1 C MAXLEV INFO(2) = 3 C Domain is a rectangle INFO(3) = 0 C Linear system solver PRINT *, 'Lin.sys.solver; BiCGStab, GCRO or matrix-free GCRO ?' PRINT *, ' (0 / 10,11,12,13 / 20,21,22,23 ) ?' READ *, INFO(4) OPEN (UNIT=61,FILE='RunInfo') C Write integration history to unit # 61 INFO(5) = 61 C Write Newton info to unit # 61 INFO(6) = 61 C Write Linear system solver info to unit # 61 INFO(7) = 61 C DTMIN = 1D-3 RINFO(1) = 1.0D-3 C DTMAX = 1.0 RINFO(2) = 10000.0 C UMAX RINFO(3) = 1.1D+5 RINFO(4) = 0.25 RINFO(5) = 292.0 C SPCWGT = 1.0 RINFO(6) = 1.0 RINFO(7) = 1.0 RINFO(8) = 1.0 C TIMWGT = 1.0 RINFO( 9) = 1.0 RINFO(10) = 1.0 RINFO(11) = 1.0 C C Call main routine FILE='DUMP' DO 10 I = 1, 4 CALL VLUGR2 (NPDE, T, TOUT(I), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, + LWK, LENLWK, MNTR) C C Save info on file WRITE(FILE(5:7),'(I3.3)') I OPEN(UNIT=LUNDMP,FILE=FILE,FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) C Check MNTR value IF (MNTR .NE. 1) THEN PRINT *, 'VLUGR2 returned with MNTR=', MNTR STOP ENDIF 10 CONTINUE END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C INTEGER I C DOUBLE PRECISION N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, + AT, CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C Ccc Problem parameters N = 0.4 KAPPA = 1.0D-10 G = 9.81 DM = 0.0 AT = 0.002 AL = 0.01 CF = 4182.0 TKAPPA = 4.0 LT = 0.001 LL = 0.01 CS = 840.0 RHOS = 2500.0 RHO0 = 1.0D+3 T0 = 290.0 P0 = 1.0D+5 ALPHA = -3.0D-4 BETA = 4.45D-10 GAMMA = LOG(1.2) MU0 = 1.0D-3 W0 = 0.25 QC = 1.0D-4 TC = 292.0 C Ccc Initial solution DO 10 I = 1, NPTS U(I,1) = P0 + (1.0 - Y(I))*RHO0*G U(I,2) = 0.0 U(I,3) = T0 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C----------------------------------------------------------------------- C DOUBLE PRECISION N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, + AT, CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I DOUBLE PRECISION P, PT, PX, PY, W, WT, WX, WY, T1, TT, TX, TY, + RHO, RHOX, RHOY, + MU, MUX, MUY, KAPMU, KAPMU2, KAPMUX, KAPMUY, Q1, Q2, QL, + ND11, ND12, ND22, H11, H12, H22, + PXX, PXY, PYY, WXX, WXY, WYY, TXX, TXY, TYY, + ND11Q1, ND11Q2, ND12Q1, ND12Q2, ND22Q1, ND22Q2, + H11Q1, H11Q2, H12Q1, H12Q2, H22Q1, H22Q2, Q1X, Q1Y, Q2X, Q2Y, + ND11X, ND12X, ND12Y, ND22Y, JW1, JW2, JW1X, JW2Y, + H11X, H12X, H12Y, H22Y, JT1X, JT2Y C DO 10 I = 1, NPTS P = U(I,1) PT = UT(I,1) PX = UX(I,1) PY = UY(I,1) W = U(I,2) WT = UT(I,2) WX = UX(I,2) WY = UY(I,2) T1 = U(I,3) TT = UT(I,3) TX = UX(I,3) TY = UY(I,3) RHO = RHO0*EXP(ALPHA*(T1-T0)+BETA*(P-P0)+GAMMA*W) RHOX = RHO*(ALPHA*TX+BETA*PX+GAMMA*WX) RHOY = RHO*(ALPHA*TY+BETA*PY+GAMMA*WY) MU = MU0*(1+1.85*W-4.0*W*W) MUX = MU0*(1.85*WX-8.0*W*WX) MUY = MU0*(1.85*WY-8.0*W*WY) KAPMU = KAPPA/MU KAPMU2 = -KAPMU/MU KAPMUX = KAPMU2*MUX KAPMUY = KAPMU2*MUY Q1 = -KAPMU*PX Q2 = -KAPMU*(PY+RHO*G) QL = MAX(SQRT(Q1*Q1+Q2*Q2),UROUND) ND11 = N*DM + AT*QL + (AL-AT)*Q1*Q1/QL ND12 = (AL-AT)*Q1*Q2/QL ND22 = N*DM + AT*QL + (AL-AT)*Q2*Q2/QL H11 = TKAPPA + LT*QL + (LL-LT)*Q1*Q1/QL H12 = (LL-LT)*Q1*Q2/QL H22 = TKAPPA + LT*QL + (LL-LT)*Q2*Q2/QL PXX = UXX(I,1) PXY = UXY(I,1) PYY = UYY(I,1) WXX = UXX(I,2) WXY = UXY(I,2) WYY = UYY(I,2) TXX = UXX(I,3) TXY = UXY(I,3) TYY = UYY(I,3) ND11Q1 = (AT + (AL-AT)*(2-(Q1/QL)**2))*Q1/QL ND11Q2 = (AT - (AL-AT)*((Q1/QL)**2))*Q2/QL ND12Q1 = (AL-AT)*(Q2/QL)**3 ND12Q2 = (AL-AT)*(Q1/QL)**3 ND22Q1 = (AT - (AL-AT)*((Q2/QL)**2))*Q1/QL ND22Q2 = (AT + (AL-AT)*(2-(Q2/QL)**2))*Q2/QL H11Q1 = (LT + (LL-LT)*(2-(Q1/QL)**2))*Q1/QL H11Q2 = (LT - (LL-LT)*((Q1/QL)**2))*Q2/QL H12Q1 = (LL-LT)*(Q2/QL)**3 H12Q2 = (LL-LT)*(Q1/QL)**3 H22Q1 = (LT - (LL-LT)*((Q2/QL)**2))*Q1/QL H22Q2 = (LT + (LL-LT)*(2-(Q2/QL)**2))*Q2/QL Q1X = -(KAPMUX*PX+KAPMU*PXX) Q1Y = -(KAPMUY*PX+KAPMU*PXY) Q2X = -(KAPMUX*(PY+RHO*G)+KAPMU*(PXY+RHOX*G)) Q2Y = -(KAPMUY*(PY+RHO*G)+KAPMU*(PYY+RHOY*G)) ND11X = ND11Q1*Q1X + ND11Q2*Q2X ND12X = ND12Q1*Q1X + ND12Q2*Q2X ND12Y = ND12Q1*Q1Y + ND12Q2*Q2Y ND22Y = ND22Q1*Q1Y + ND22Q2*Q2Y JW1 = -(ND11*WX + ND12*WY) JW2 = -(ND12*WX + ND22*WY) JW1X = -(ND11X*WX+ND11*WXX + ND12X*WY+ND12*WXY) JW2Y = -(ND12Y*WX+ND12*WXY + ND22Y*WY+ND22*WYY) H11X = H11Q1*Q1X + H11Q2*Q2X H12X = H12Q1*Q1X + H12Q2*Q2X H12Y = H12Q1*Q1Y + H12Q2*Q2Y H22Y = H22Q1*Q1Y + H22Q2*Q2Y JT1X = -(H11X*TX+H11*TXX + H12X*TY+H12*TXY) JT2Y = -(H12Y*TX+H12*TXY + H22Y*TY+H22*TYY) C RES(I,1) = N*RHO*(BETA*PT+GAMMA*WT+ALPHA*TT) + + RHOX*Q1+RHO*Q1X + RHOY*Q2+RHO*Q2Y RES(I,2) = N*RHO*WT + + RHO*Q1*WX + RHO*Q2*WY + + RHOX*JW1+RHO*JW1X + RHOY*JW2+RHO*JW2Y RES(I,3) = (N*CF*RHO+(1-N)*RHOS*CS)*TT + + RHO*CF*Q1*TX + RHO*CF*Q2*TY + + JT1X + JT2Y 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C C DOUBLE PRECISION N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, + AT, CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I, J, K, NBNDS DOUBLE PRECISION P, PY, W, T1, RHO, MU, KAPMU, Q2 C NBNDS = LLBND(0) DO 10 J = 1, NBNDS IF (ILBND(J) .EQ. 1) THEN C C yL boundary: dp/dy - rho.g2 = 0 C dw/dy = 0 0 'probii.f' PROGRAM EXMPL C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL DOUBLE PRECISION TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=2, NPTS=10000) PARAMETER (LENIWK=NPTS*(5*MXLEV+14), + LENRWK=NPTS*NPD*(5*MXLEV+9 + + 9*NPD+(2*MAXLR+MAXL+6+NPD)), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C CHARACTER FILE*7 INTEGER NPDE, INFO(7), IWK(LENIWK), MNTR, I LOGICAL LWK(LENLWK) DOUBLE PRECISION T, TOUT(4), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(2+3*NPD), RWK(LENRWK) C C First call of VLUGR2 MNTR = 0 NPDE = 2 T = 0.0 TOUT(1) = 10000.0 TOUT(2) = 20000.0 TOUT(3) = 30000.0 TOUT(4) = 100000.0 DT = 0.1 C Since domain is not a rectangle the domain parameters have not to be C specified here TOLS = 0.1 TOLT = 0.1 INFO(1) = 1 C MAXLEV INFO(2) = 3 C Domain is not a rectangle INFO(3) = 1 C Linear system solver PRINT *, 'Lin.sys.solver; BiCGStab, GCRO or matrix-free GCRO ?' PRINT *, ' (0 / 10,11,12,13 / 20,21,22,23 ) ?' READ *, INFO(4) OPEN (UNIT=61,FILE='RunInfo') C Write integration history to unit # 61 INFO(5) = 61 C Write Newton info to unit # 61 INFO(6) = 61 C Write Linear system solver info to unit # 61 INFO(7) = 61 C DTMIN RINFO(1) = 1.0D-3 C DTMAX RINFO(2) = 50000.0 C UMAX RINFO(3) = 1.1D+5 RINFO(4) = 0.25 C SPCWGT = 1.0 RINFO(5) = 1.0 RINFO(6) = 1.0 C TIMWGT = 1.0 RINFO(7) = 1.0 RINFO(8) = 1.0 C C Call main routine FILE='DUMP' DO 10 I = 1, 4 CALL VLUGR2 (NPDE, T, TOUT(I), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, + LWK, LENLWK, MNTR) C C Save info on file WRITE(FILE(5:7),'(I3.3)') I OPEN(UNIT=LUNDMP,FILE=FILE,FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) C Check MNTR value IF (MNTR .NE. 1) THEN PRINT *, 'VLUGR2 returned with MNTR=', MNTR STOP ENDIF 10 CONTINUE END LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define initial domain. NB. Boundaries should consist of as many points C as are necessary to employ second order space discretization, i.e., C a boundary enclosing the internal part of the domain should not C include less than 3 grid points including the corners. If Neumann C boundaries are used the minimum is 4 since otherwise the Jacobian C matrix will be singular. C C A (virtual) rectangle is placed upon the (irregular) domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : OUT. X-coordinate of lower-left point of virtual rectangle C YL : OUT. Y-coordinate of lower-left point of virtual rectangle C XR : OUT. X-coordinate of upper-right point of virtual rectangle C YU : OUT. Y-coordinate of upper-right point of virtual rectangle C DX : OUT. Grid width in X-direction C DY : OUT. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : OUT. INTEGER array of dimension (NBDPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C C NX should be even and NY a quintuple INTEGER NX, NY PARAMETER (NX = 20, NY = 20) C INTEGER I, IPT, J, NROWS, NPTS, NBNDS, NX1, NY1, NY2 C Ccc Make initial grid, check MAXPTS against rough estimate of NPTS IF (MAXPTS .LT. (NX+1)*(NY+1)) THEN INIDOM = .FALSE. MAXPTS = (NX+1)*(NY+1) RETURN ELSE INIDOM = .TRUE. ENDIF NROWS = NY+1 XL = 0.0 YL = 0.0 XR = 1.0 YU = 1.0 DX = (XR-XL)/NX DY = (YU-YL)/NY NX1 = NX/2 NY1 = NINT(NY*0.4) NY2 = NINT(NY*0.6) C C Make grid structure LROW(0) = NROWS IPT = 1 DO 10 I = 0, NY1 LROW(I+1) = IPT IROW(I+1) = I DO 20 J = 0, NX ICOL(IPT) = J IPT = IPT + 1 20 CONTINUE 10 CONTINUE DO 30 I = NY1+1, NY2-1 LROW(I+1) = IPT IROW(I+1) = I DO 40 J = NX/2, NX ICOL(IPT) = J IPT = IPT + 1 40 CONTINUE 30 CONTINUE DO 50 I = NY2, NY LROW(I+1) = IPT IROW(I+1) = I DO 60 J = 0, NX ICOL(IPT) = J IPT = IPT + 1 60 CONTINUE 50 CONTINUE LROW(NROWS+1) = IPT NPTS = IPT-1 C C Boundaries NBNDS = 16 ILBND(1) = 1 ILBND(2) = 2 ILBND(3) = 3 ILBND(4) = 2 ILBND(5) = 1 ILBND(6) = 2 ILBND(7) = 3 ILBND(8) = 4 ILBND( 9) = 12 ILBND(10) = 23 ILBND(11) = 32 ILBND(12) = 21 ILBND(13) = 12 ILBND(14) = 23 ILBND(15) = 34 ILBND(16) = 41 LLBND(0) = NBNDS LLBND(1) = 1 LLBND(2) = LLBND(1) + (NX-1) LLBND(3) = LLBND(2) + (NY1-1) LLBND(4) = LLBND(3) + (NX1-1) LLBND(5) = LLBND(4) + (NY2-NY1-1) LLBND(6) = LLBND(5) + (NX1-1) LLBND(7) = LLBND(6) + (NY1-1) LLBND(8) = LLBND(7) + (NX-1) LLBND( 9) = LLBND( 8) + (NY-1) LLBND(10) = LLBND( 9) + 1 LLBND(11) = LLBND(10) + 1 LLBND(12) = LLBND(11) + 1 LLBND(13) = LLBND(12) + 1 LLBND(14) = LLBND(13) + 1 LLBND(15) = LLBND(14) + 1 LLBND(16) = LLBND(15) + 1 LLBND(17) = LLBND(16) + 1 C Lower and upper boundary pointers DO 100 J = 1, NX-1 LBND(LLBND(1)+J-1) = J + 1 LBND(LLBND(7)+J-1) = NPTS - J 100 CONTINUE C Left boundary pointers DO 120 I = 1, NY1-1 LBND(LLBND(2)+I-1) = I*(NX+1) + 1 LBND(LLBND(6)+I-1) = NPTS - (I+1)*(NX+1) + 1 120 CONTINUE DO 130 I = 1, NY2-NY1-1 LBND(LLBND(4)+I-1) = NY1*(NX+1) + (I+1)*(NX1+1) 130 CONTINUE DO 140 I = 1, NX1-1 LBND(LLBND(3)+I-1) = NY1*(NX+1) + 1 + I LBND(LLBND(5)+I-1) = NPTS - (NY1+1)*(NX+1) + 1 + I 140 CONTINUE C Right boundary pointers DO 110 I = 1, NY1 LBND(LLBND(8)+I-1) = (I+1)*(NX+1) 110 CONTINUE J = LLBND(8)+NY1-1 DO 113 I = 1, NY2-NY1-1 LBND(J+I) = LBND(J) + I*(NX1+1) 113 CONTINUE J = LLBND(8)+NY2-1 DO 116 I = 0, NY1-1 LBND(J+I) = LBND(J-1) + (I+1)*(NX+1) 116 CONTINUE C Corners LBND(LLBND( 9)) = 1 LBND(LLBND(16)) = NX+1 LBND(LLBND(10)) = NY1*(NX+1) + 1 LBND(LLBND(11)) = LBND(LLBND(10)) + NX1 LBND(LLBND(13)) = (NY1+1)*(NX+1) + (NY2-NY1-1)*(NX1+1) + 1 LBND(LLBND(12)) = LBND(LLBND(13)) + NX1 LBND(LLBND(14)) = NPTS - NX LBND(LLBND(15)) = NPTS RETURN END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C INTEGER I C DOUBLE PRECISION N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, + AT, CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C Ccc Problem parameters N = 0.4 KAPPA = 1.0D-10 G = 9.81 DM = 0.0 AT = 0.002 AL = 0.01 RHO0 = 1.0D+3 P0 = 1.0D+5 BETA = 0.0 GAMMA = LOG(1.2) MU0 = 1.0D-3 W0 = 0.25 QC = 1.0D-4 C Ccc Initial solution DO 10 I = 1, NPTS U(I,1) = P0 + (1.0 - Y(I))*RHO0*G U(I,2) = 0.0 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C----------------------------------------------------------------------- C DOUBLE PRECISION N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, + AT, CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I DOUBLE PRECISION P, PT, PX, PY, W, WT, WX, WY, + RHO, RHOX, RHOY, + MU, MUX, MUY, KAPMU, KAPMU2, KAPMUX, KAPMUY, Q1, Q2, QL, + ND11, ND12, ND22, + PXX, PXY, PYY, WXX, WXY, WYY, + ND11Q1, ND11Q2, ND12Q1, ND12Q2, ND22Q1, ND22Q2, + Q1X, Q1Y, Q2X, Q2Y, + ND11X, ND12X, ND12Y, ND22Y, JW1, JW2, JW1X, JW2Y C DO 10 I = 1, NPTS P = U(I,1) PT = UT(I,1) PX = UX(I,1) PY = UY(I,1) W = U(I,2) WT = UT(I,2) WX = UX(I,2) WY = UY(I,2) RHO = RHO0*EXP(BETA*(P-P0)+GAMMA*W) RHOX = RHO*(BETA*PX+GAMMA*WX) RHOY = RHO*(BETA*PY+GAMMA*WY) MU = MU0*(1+1.85*W-4.0*W*W) MUX = MU0*(1.85*WX-8.0*W*WX) MUY = MU0*(1.85*WY-8.0*W*WY) KAPMU = KAPPA/MU KAPMU2 = -KAPMU/MU KAPMUX = KAPMU2*MUX KAPMUY = KAPMU2*MUY Q1 = -KAPMU*PX Q2 = -KAPMU*(PY+RHO*G) QL = MAX(SQRT(Q1*Q1+Q2*Q2),UROUND) ND11 = N*DM + AT*QL + (AL-AT)*Q1*Q1/QL ND12 = (AL-AT)*Q1*Q2/QL ND22 = N*DM + AT*QL + (AL-AT)*Q2*Q2/QL PXX = UXX(I,1) PXY = UXY(I,1) PYY = UYY(I,1) WXX = UXX(I,2) WXY = UXY(I,2) WYY = UYY(I,2) ND11Q1 = (AT + (AL-AT)*(2-(Q1/QL)**2))*Q1/QL ND11Q2 = (AT - (AL-AT)*((Q1/QL)**2))*Q2/QL ND12Q1 = (AL-AT)*(Q2/QL)**3 ND12Q2 = (AL-AT)*(Q1/QL)**3 ND22Q1 = (AT - (AL-AT)*((Q2/QL)**2))*Q1/QL ND22Q2 = (AT + (AL-AT)*(2-(Q2/QL)**2))*Q2/QL Q1X = -(KAPMUX*PX+KAPMU*PXX) Q1Y = -(KAPMUY*PX+KAPMU*PXY) Q2X = -(KAPMUX*(PY+RHO*G)+KAPMU*(PXY+RHOX*G)) Q2Y = -(KAPMUY*(PY+RHO*G)+KAPMU*(PYY+RHOY*G)) ND11X = ND11Q1*Q1X + ND11Q2*Q2X ND12X = ND12Q1*Q1X + ND12Q2*Q2X ND12Y = ND12Q1*Q1Y + ND12Q2*Q2Y ND22Y = ND22Q1*Q1Y + ND22Q2*Q2Y JW1 = -(ND11*WX + ND12*WY) JW2 = -(ND12*WX + ND22*WY) JW1X = -(ND11X*WX+ND11*WXX + ND12X*WY+ND12*WXY) JW2Y = -(ND12Y*WX+ND12*WXY + ND22Y*WY+ND22*WYY) C RES(I,1) = N*RHO*(BETA*PT+GAMMA*WT) + + RHOX*Q1+RHO*Q1X + RHOY*Q2+RHO*Q2Y RES(I,2) = N*RHO*WT + + RHO*Q1*WX + RHO*Q2*WY + + RHOX*JW1+RHO*JW1X + RHOY*JW2+RHO*JW2Y 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : IN. (0:LLBND(0)+1) C LLBND(0) = NBNDS: total # physical boundaries in actual grid C LLBND(1:NBNDS): pointers to a specific boundary in LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in the list + 1 C NB. corners with 2 different types of boundaries should be C pointed at twice. C ILBND : IN. (NBNDS) C ILBND(IB): type of boundary: C 1: Dirichlet C 2: Lower boundary -I C 3: Left boundary I C 4: Upper boundary I max. first order derivative C 5: Right boundary -I C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C C DOUBLE PRECISION N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, + AT, CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I, J, K DOUBLE PRECISION P, PY, W, RHO, MU, KAPMU, Q2 C J = 1 C C yL boundary: q2 = 0 C dw/dy = 0 0 'plot.m' % Plots solution and grid levels from data files sol.dat and grid.dat % generated by WRTUNI.f % NB. pcolor with default shading colors a cell with the lowerleft value and % ignores the last row and column. % nxb=input('nX base grid? '); nyb=input('nY base grid? '); load sol.dat load grid.dat [n,npde]=size(sol); unilev=floor(log(n/(nxb*nyb))/(log(2)*2)+1) nx=nxb*2^(unilev-1); ny=nyb*2^(unilev-1); for ic=1:npde Umin=input(['min. sol. value comp. ',int2str(ic),'? ']) Umax=input(['max. sol. value comp. ',int2str(ic),'? ']) U=zeros(ny+1,nx+1); for j = 0:ny for i = 0:nx U(j+1,i+1) = sol(j*(nx+1)+i+1,ic); end end figure(ic); colormap(jet); pcolor(U); shading('interp'); if Umin < Umax caxis([Umin Umax]) end; keyboard end; G=zeros(ny+2,nx+2); for j = 0:ny for i = 0:nx G(j+1,i+1) = grid(j*(nx+1)+i+1); end end figure(npde+1); grc=[1 1 1; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 0; 1 0 1]; colormap(grc(1:unilev,:)); pcolor(G); caxis([0.99 unilev]) SHAR_EOF fi # end of overwriting check if test -f 'wrtuni.f' then echo shar: will not over-write existing file "'wrtuni.f'" else cat << \SHAR_EOF > 'wrtuni.f' PROGRAM WRTUNI C C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C !!! !!! C !!! In subroutine WRUNI the constant NONVAL should be adjusted to !!! C !!! the data (NONVAL = impossible value for the first componenent) !!! C !!! !!! C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C C----------------------------------------------------------------------- C Ccc This program reads a file made by subroutine DUMP and writes the C (interpolated) solution on a uniform grid of a specified grid level C to the output file sol.dat. The maximum grid level used in each point C is written to the file grid.dat. C NB. This program is not correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc EXTERNALS USED: EXTERNAL WRUNI, RDDUMP C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK PARAMETER (MXLEV=5, NPD=3, NPTS=10000) PARAMETER (LENIWK=NPTS*(7*MXLEV+20), + LENRWK=5*NPTS*NPD*MXLEV) C CHARACTER FILE*128 INTEGER IWK(LENIWK), + LSGNM1, LSGN, LSGNP1, LSUNM1, LSSN, LSUN, + LUNI, MAXLEV, NX, NXB, NY, NYB, UNILEV DOUBLE PRECISION RWK(LENRWK) PRINT *, 'DUMP file?' READ '(A)', FILE C OPEN(UNIT=62,FILE=FILE,FORM='UNFORMATTED') CALL RDDUMP (62, RWK, LENRWK, IWK, LENIWK) CLOSE(62) C C Setup work storage LSGNM1 = 1 LSGN = LSGNM1 + MAXLVW+1 LSGNP1 = LSGN + MAXLVW+1 LSUNM1 = LSGNP1 + MAXLVW+1 LSSN = LSUNM1 + MAXLVW LSUN = LSSN + MAXLVW C C Check workspace MAXLEV = IWK(LSGN) PRINT *, 'Max. grid level?' READ *, UNILEV UNILEV = MIN(UNILEV,MAXLEV) NXB = NINT((XRW - XLW)/DXB) NYB = NINT((YUW - YLW)/DYB) NX = NXB * 2**(UNILEV-1) NY = NYB * 2**(UNILEV-1) LUNI = LENRWK - (NX+1)*(NY+1)*NPDEW IF (LUNI .LT. IWK(LSUN+MAXLVW)) STOP 'workspace' C C Write problem info to standard output and write the interpolated C solution and grid levels to the files PRINT *, 'T, NPDE, XL, YL, DXB, DYB, NXB, NYB' PRINT *, TW, NPDEW, XLW, YLW, DXB, DYB, NXB, NYB FILE = 'sol.dat' OPEN(UNIT=61,FILE=FILE) FILE = 'grid.dat' OPEN(UNIT=63,FILE=FILE) CALL WRUNI (61, 63, UNILEV, + TW, NPDEW, XLW, YLW, DXB, DYB, NXB, NYB, + IWK(LSGN), IWK(LIWKPS), IWK(LSUN), RWK(LRWKPS), + RWK(LUNI), NX, NY) CLOSE(61) CLOSE(63) END SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER LUNDMP, LENRWK, IWK(LENIWK) DOUBLE PRECISION RWK(LENRWK) C Ccc PURPOSE: C Read all information necessary for a restart of VLUGR2 from file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : OUT. Real workstorage intended to pass to VLUGR2 C LENRWK : IN. Dimension of RWK. C IWK : OUT. Integer workstorage intended to pass to VLUGR2 C LENIWK : IN. Dimension of IWK. C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J READ(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO IF (LENRWK .LT. LRWKPS+LRWKB .OR. LENIWK .LT. LIWKPS+LIWKB) THEN PRINT *, LENRWK, LRWKPS+LRWKB, LENIWK, LIWKPS+LIWKB STOP 'work space too small' ENDIF READ(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) READ(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) READ(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) C RETURN END SUBROUTINE WRUNI (LUNS, LUNG, UNILEV, + T, NPDE, XL, YL, DXB, DYB, NXB, NYB, + LGRID, ISTRUC, LSOL, SOL, UNIFRM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUNS, LUNG, UNILEV, + NPDE, NXB, NYB, LGRID(0:*), ISTRUC(*), LSOL(*), NX, NY DOUBLE PRECISION T, XL, YL, DXB, DYB, SOL(*), + UNIFRM(0:NX,0:NY,NPDE) C Ccc PURPOSE: C Write (interpolated) solution values at grid level UNILEV to file C LUNS. C Write maximum gridlevel used in each point to file LUNG. C NB. The data will not be correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc PARAMETER DESCRIPTION: C LUNS : IN. Logical unit number of solution file C LUNG : IN. Logical unit number of grid level file C UNILEV : IN. Maximum grid level to be used to generate the data C T : IN. Value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower left corner of (virtual) domain C YL : IN. Y-coordinate of lower left corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C NXB,NYB: IN. # gridcells in X- and Y-direction, resp., on base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C UNIFRM : WORK. (Interpolated) solution on level UNILEV / max. grid C level used. C NX, NY : IN. # gridcells in X- and Y-direction, resp., on grid of C of level UNILEV C C----------------------------------------------------------------------- C C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C !!! !!! C !!! In subroutine WRUNI the constant NONVAL should be adjusted to !!! C !!! the data (NONVAL = impossible value for the first componenent) !!! C !!! !!! DOUBLE PRECISION NONVAL PARAMETER (NONVAL = -999.999) C !!! !!! C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C C----------------------------------------------------------------------- C INTEGER I, IC, ICOL, IMUL, IPT, IR, IROW, J, + LEVEL, LLROW, LIROW, LICOL, MAXLEV, NROWS, NPTS DO 1 IC = 1, NPDE DO 1 IROW = 0, NY DO 1 ICOL = 0, NX UNIFRM(ICOL,IROW,IC) = NONVAL 1 CONTINUE MAXLEV = LGRID(0) DO 10 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 20 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 30 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL DO 40 IC = 1, NPDE UNIFRM(ICOL,IROW,IC) = + SOL(LSOL(LEVEL)+(IC-1)*NPTS+IPT) 40 CONTINUE 30 CONTINUE 20 CONTINUE 10 CONTINUE DO 100 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 110 J = IMUL, NY, IMUL*2 DO 110 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 120 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I,J-IMUL,IC)+UNIFRM(I,J+IMUL,IC))/2 120 CONTINUE ENDIF 110 CONTINUE DO 130 J = 0, NY, IMUL DO 130 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 140 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I-IMUL,J,IC)+UNIFRM(I+IMUL,J,IC))/2 140 CONTINUE ENDIF 130 CONTINUE 100 CONTINUE DO 150 J = 0, NY DO 150 I = 0, NX WRITE(LUNS,'(100E13.3)') (UNIFRM(I,J,IC), IC = 1, NPDE) 150 CONTINUE C C Grids DO 201 IROW = 0, NY DO 201 ICOL = 0, NX UNIFRM(ICOL,IROW,1) = 0 201 CONTINUE DO 210 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 220 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 230 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL UNIFRM(ICOL,IROW,1) = LEVEL 230 CONTINUE 220 CONTINUE 210 CONTINUE DO 300 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 310 J = IMUL, NY, IMUL*2 DO 310 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I,J-IMUL,1),UNIFRM(I,J+IMUL,1)) ENDIF 310 CONTINUE DO 330 J = 0, NY, IMUL DO 330 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I-IMUL,J,1),UNIFRM(I+IMUL,J,1)) ENDIF 330 CONTINUE 300 CONTINUE DO 350 J = 0, NY DO 350 I = 0, NX WRITE(LUNG,'(I2)') NINT(UNIFRM(I,J,1)) 350 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'exmpl.f' then echo shar: will not over-write existing file "'exmpl.f'" else cat << \SHAR_EOF > 'exmpl.f' PROGRAM EXMPL C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL DOUBLE PRECISION TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=2, NPTS=2500) PARAMETER (LENIWK=NPTS*(5*MXLEV+11), + LENRWK=NPTS*NPD*(5*MXLEV+9 + + (9*NPD+2*MAXLR+MAXL+7)), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C INTEGER NPDE, INFO(7), IWK(LENIWK), MNTR LOGICAL LWK(LENLWK) DOUBLE PRECISION T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(2+3*NPD), RWK(LENRWK) C First call of VLUGR2 MNTR = 0 NPDE = 2 T = 0.0 TOUT = 1.0 DT = 0.001 C Since domain is not a rectangle the grid parameters need not to be C specified here (cf. INIDOM) TOLS = 0.1 TOLT = 0.05 INFO(1) = 1 C MAXLEV INFO(2) = 5 C Domain not a rectangle INFO(3) = 1 C Linear system solver: GCRO + Diagonal scaling C (no first order derivatives at the boundaries) INFO(4) = 13 OPEN (UNIT=61,FILE='RunInfo') C Write integration history to unit # 61 INFO(5) = 61 C Write Newton info to unit # 61 INFO(6) = 61 C Write GCRO info to unit # 61 INFO(7) = 61 C DTMIN = 1D-7 RINFO(1) = 1.0D-7 C DTMAX = 1.0 RINFO(2) = 1.0 C UMAX = 1.0 RINFO(3) = 1.0 RINFO(4) = 1.0 C SPCWGT = 1.0 RINFO(5) = 1.0 RINFO(6) = 1.0 C TIMWGT = 1.0 RINFO(7) = 1.0 RINFO(8) = 1.0 C C Call main routine CALL VLUGR2 (NPDE, T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, + MNTR) PRINT *, 'VLUGR2 returned with MNTR=', MNTR C C Save info on file OPEN(UNIT=LUNDMP,FILE='DUMP',FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) END LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define initial domain. NB. Boundaries should consist of as many points C as are necessary to employ second order space discretization, i.e., C a boundary enclosing the internal part of the domain should not C include less than 3 grid points including the corners. If Neumann C boundaries are used the minimum is 4 since otherwise the Jacobian C matrix will be singular. C C A (virtual) rectangle is placed upon the (irregular) domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : OUT. X-coordinate of lowerleft point of virtual rectangle C YL : OUT. Y-coordinate of lowerleft point of virtual rectangle C XR : OUT. X-coordinate of upperright point of virtual rectangle C YU : OUT. Y-coordinate of upperright point of virtual rectangle C DX : OUT. Grid width in X-direction C DY : OUT. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C C Square domain [0,1]x[0,1] with holes. Dirichlet boundaries. C INTEGER NX, NY PARAMETER (NX = 10, NY = 10) INTEGER IDOM((NX+1)*(NY+1)) C INTEGER I, IPT, J, NROWS, NPTS, NBNDS NPTS = (NX+1)*(NY+1) - (NX-2) - 2*3 - 2 IF (MAXPTS .LT. NPTS) THEN INIDOM = .FALSE. MAXPTS = NPTS RETURN ELSE INIDOM = .TRUE. ENDIF NROWS = NY+1 XL = 0.0 YL = 0.0 XR = 1.0 YU = 1.0 DX = (XR-XL)/NX DY = (YU-YL)/NY C C Make grid structure LROW(0) = NROWS IPT = 1 DO 10 I = 0, 0 LROW(I+1) = IPT IROW(I+1) = I DO 15 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 15 CONTINUE 10 CONTINUE DO 20 I = 1, 3 LROW(I+1) = IPT IROW(I+1) = I DO 23 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 23 CONTINUE DO 26 J = 3, 10 ICOL(IPT) = J IPT = IPT + 1 26 CONTINUE 20 CONTINUE DO 30 I = 4, 4 LROW(I+1) = IPT IROW(I+1) = I DO 33 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 33 CONTINUE DO 36 J = 3, 5 ICOL(IPT) = J IPT = IPT + 1 36 CONTINUE DO 39 J = 8, 10 ICOL(IPT) = J IPT = IPT + 1 39 CONTINUE 30 CONTINUE DO 40 I = 5, 7 LROW(I+1) = IPT IROW(I+1) = I DO 43 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 43 CONTINUE DO 46 J = 3, 10 ICOL(IPT) = J IPT = IPT + 1 46 CONTINUE 40 CONTINUE DO 50 I = 8, 10 LROW(I+1) = IPT IROW(I+1) = I DO 56 J = 0, 8 ICOL(IPT) = J IPT = IPT + 1 56 CONTINUE 50 CONTINUE LROW(NROWS+1) = IPT C C Boundaries NBNDS = 28 ILBND(1) = 1 LLBND(1) = 1 IPT = 2 LBND(LLBND(1)) = IPT ILBND(2) = 2 LLBND(2) = LLBND(1) + 1 IPT = 4 LBND(LLBND(2) ) = IPT IPT = 15 LBND(LLBND(2)+1) = IPT IPT = 26 LBND(LLBND(2)+2) = IPT IPT = 37 LBND(LLBND(2)+3) = IPT IPT = 46 LBND(LLBND(2)+4) = IPT IPT = 57 LBND(LLBND(2)+5) = IPT IPT = 68 LBND(LLBND(2)+6) = IPT IPT = 79 LBND(LLBND(2)+7) = IPT IPT = 88 LBND(LLBND(2)+8) = IPT ILBND(3) = 3 LLBND(3) = LLBND(2) + 9 DO 130 J = 0, 6 IPT = 98+J LBND(LLBND(3)+J) = IPT 130 CONTINUE ILBND(4) = 4 LLBND(4) = LLBND(3) + 7 IPT = 96 LBND(LLBND(4)) = IPT ILBND(5) = 1 LLBND(5) = LLBND(4) + 1 DO 150 J = 0, 4 IPT = 86-J LBND(LLBND(5)+J) = IPT 150 CONTINUE ILBND(6) = 4 LLBND(6) = LLBND(5) + 5 DO 160 J = 0, 6 IPT = LBND(LLBND(2)+J) + 2 LBND(LLBND(6)+J) = IPT 160 CONTINUE ILBND(7) = 1 LLBND(7) = LLBND(6) + 7 DO 170 J = 0, 5 IPT = 8+J LBND(LLBND(7)+J) = IPT 170 CONTINUE ILBND(8) = 2 LLBND(8) = LLBND(7) + 6 DO 180 J = 0, 4 IPT = LBND(LLBND(6)+J+1) + 1 LBND(LLBND(8)+J) = IPT 180 CONTINUE ILBND(9) = 3 LLBND(9) = LLBND(8) + 5 DO 190 J = 0, 5 IPT = 72+J LBND(LLBND(9)+J) = IPT 190 CONTINUE ILBND(10) = 4 LLBND(10) = LLBND(9) + 6 IPT = 67 LBND(LLBND(10) ) = IPT IPT = 56 LBND(LLBND(10)+1) = IPT IPT = 45 LBND(LLBND(10)+2) = IPT IPT = 36 LBND(LLBND(10)+3) = IPT IPT = 25 LBND(LLBND(10)+4) = IPT ILBND(11) = 1 LLBND(11) = LLBND(10) + 5 IPT = 52 LBND(LLBND(11) ) = IPT IPT = 53 LBND(LLBND(11)+1) = IPT ILBND(12) = 2 LLBND(12) = LLBND(11) + 2 IPT = 43 LBND(LLBND(12) ) = IPT ILBND(13) = 3 LLBND(13) = LLBND(12) + 1 IPT = 32 LBND(LLBND(13) ) = IPT IPT = 33 LBND(LLBND(13)+1) = IPT ILBND(14) = 4 LLBND(14) = LLBND(13) + 2 IPT = 42 LBND(LLBND(14) ) = IPT C ILBND(15) = 12 LLBND(15) = LLBND(14) + 1 IPT = 1 LBND(LLBND(15)) = IPT ILBND(16) = 23 LLBND(16) = LLBND(15) + 1 IPT = 97 LBND(LLBND(16)) = IPT ILBND(17) = 34 LLBND(17) = LLBND(16) + 1 IPT = 105 LBND(LLBND(17)) = IPT ILBND(18) = 41 LLBND(18) = LLBND(17) + 1 IPT = 87 LBND(LLBND(18)) = IPT ILBND(19) = 14 LLBND(19) = LLBND(18) + 1 IPT = 81 LBND(LLBND(19)) = IPT ILBND(20) = 41 LLBND(20) = LLBND(19) + 1 IPT = 3 LBND(LLBND(20)) = IPT ILBND(21) = 12 LLBND(21) = LLBND(20) + 1 IPT = 7 LBND(LLBND(21)) = IPT ILBND(22) = 23 LLBND(22) = LLBND(21) + 1 IPT = 71 LBND(LLBND(22)) = IPT ILBND(23) = 34 LLBND(23) = LLBND(22) + 1 IPT = 78 LBND(LLBND(23)) = IPT ILBND(24) = 41 LLBND(24) = LLBND(23) + 1 IPT = 14 LBND(LLBND(24)) = IPT ILBND(25) = 14 LLBND(25) = LLBND(24) + 1 IPT = 51 LBND(LLBND(25)) = IPT ILBND(26) = 43 LLBND(26) = LLBND(25) + 1 IPT = 31 LBND(LLBND(26)) = IPT ILBND(27) = 32 LLBND(27) = LLBND(26) + 1 IPT = 34 LBND(LLBND(27)) = IPT ILBND(28) = 21 LLBND(28) = LLBND(27) + 1 IPT = 54 LBND(LLBND(28)) = IPT C LLBND(29) = LLBND(28) + 1 LLBND( 0) = NBNDS C No internal boundaries C (only necessary because we want to print the domain) LLBND(NBNDS+2) = LLBND(NBNDS+1) PRINT *, 'Input domain:' CALL PRDOM (LROW, IROW, ICOL, LLBND, ILBND, LBND, + IDOM, NX, NY) RETURN END SUBROUTINE CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U, SPCMON, TOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LEVEL, NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), SPCMON(NPTS), + TOL C Ccc PURPOSE: C Force grid refinement. C If for a node IPT SPCMON(IPT) > TOL the 16 surrounding cells will be C refined. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C LEVEL : IN. Current grid level C NPTS : IN. Number of grid points at this level C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C NPDE : IN. Number of PDE components C U : IN. Array of PDE components for the gridpoints C SPCMON : INOUT. C IN: Space monitor values as determined by VLUGR2 C OUT: Changed to a value > TOL where refinement is required C TOL : IN. Tolerance with which SPCMON will be compared C C----------------------------------------------------------------------- C INTEGER I C IF (LEVEL .GE. 3) RETURN DO 10 I = 1, NPTS IF (ABS(X(I)-1.0) .LT. 0.0001 .AND. + ABS(Y(I)-0.1) .LT. 0.0001) THEN SPCMON(I) = 2*TOL ENDIF 10 CONTINUE C RETURN END SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, + LGRID, ISTRUC, LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) DOUBLE PRECISION T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Control after a successful time step. The solution can be printed, C plotted or compared with the exact solution. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C DT : IN. Current time step size C DTNEW : IN. Time step size for next time step C XL : IN. X-coordinate of lowerleft corner of (virtual) rectangle C YL : IN. Y-coordinate of lowerleft corner of (virtual) rectangle C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C C C Local arrays: INTEGER MAXPTS, NPDE PARAMETER (MAXPTS=10000, NPDE=2) DOUBLE PRECISION X(MAXPTS), Y(MAXPTS), UEX(MAXPTS*NPDE) C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL DOUBLE PRECISION DX, DY C C Loop over the grid levels from coarse to fine. C Get physical coordinates of grid points C Compute ||err||_max MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL SETXY (XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), X, Y) DX = DX/2 DY = DY/2 CALL PRERR (LEVEL, T, NPTS, NPDE, X, Y, SOL(LSOL(LEVEL)+1), + UEX) 10 CONTINUE RETURN END SUBROUTINE PRERR (LEVEL, T, NPTS, NPDE, X, Y, U, UEX) INTEGER LEVEL, NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), UEX(NPTS,NPDE) INTEGER I,J DOUBLE PRECISION RMAX(2) CALL PDEIV (T, X, Y, UEX, NPTS, NPDE) RMAX(1) = 0.0 RMAX(2) = 0.0 DO 10 I = 1, NPTS J = 1 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) J = 2 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) 10 CONTINUE PRINT '(''Error at T='',E9.3,'', level='',I1,'' :'',2E11.3,I10)', + T, LEVEL, RMAX(1), RMAX(2), NPTS RETURN END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C C Burgers' equation, solution wave front at y = x+0.25t, speed of C propagation sqrt(2)/8 perpendicular to wave front. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C DOUBLE PRECISION EPS PARAMETER (EPS = 1D-3) INTEGER I DO 10 I = 1, NPTS U(I,1) = 0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) U(I,2) = 0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C----------------------------------------------------------------------- C C Burgers' equation Ut = - U.Ux - V.Uy + eps.(Uxx + Uyy) C Vt = - U.Vx - V.Vy + eps.(Vxx + Vyy) C DOUBLE PRECISION EPS PARAMETER (EPS = 1D-3) INTEGER I DO 10 I = 2, NPTS-1 RES(I,1) = UT(I,1) - + (-U(I,1)*UX(I,1) - U(I,2)*UY(I,1) + EPS*(UXX(I,1)+UYY(I,1))) RES(I,2) = UT(I,2) - + (-U(I,1)*UX(I,2) - U(I,2)*UY(I,2) + EPS*(UXX(I,2)+UYY(I,2))) 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : IN. (0:LLBND(0)+1) C LLBND(0) = NBNDS: total # physical boundaries in actual grid C LLBND(1:NBNDS): pointers to a specific boundary in LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in the list + 1 C NB. corners with 2 different types of boundaries should be C pointed at twice. C ILBND : IN. (NBNDS) C ILBND(IB): type of boundary: C 1: Dirichlet C 2: Lower boundary -I C 3: Left boundary I C 4: Upper boundary I max. first order derivative C 5: Right boundary -I C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C----------------------------------------------------------------------- C C Burgers' equation, Dirichlet boundaries. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C DOUBLE PRECISION EPS PARAMETER (EPS = 1D-3) INTEGER I, K, NBNDS NBNDS = LLBND(0) DO 10 K = LLBND(1), LLBND(NBNDS+1)-1 I = LBND(K) RES(I,1) = U(I,1) - + (0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) RES(I,2) = U(I,2) - + (0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) 10 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'exmplr.f' then echo shar: will not over-write existing file "'exmplr.f'" else cat << \SHAR_EOF > 'exmplr.f' PROGRAM EXMPLR C C Restart of EXMPL, default values, Jacobian derivatives exact INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=2, NPTS=2500) PARAMETER (LENIWK=NPTS*(5*MXLEV+14), + LENRWK=NPTS*NPD*(5*MXLEV + 9+18*NPD), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C INTEGER NPDE, INFO(1), IWK(LENIWK), MNTR LOGICAL LWK(LENLWK) DOUBLE PRECISION T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(1), RWK(LENRWK) C Continuation call of VLUGR2 MNTR = 1 TOUT = 3.0 TOLS = 0.1 TOLT = 0.05 C Default choices INFO(1) = 0 C OPEN(UNIT=LUNDMP,FILE='DUMP',FORM='UNFORMATTED') CALL RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) CLOSE(LUNDMP) C C call main routine CALL VLUGR2 (NPDE, T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, + MNTR) PRINT *, 'VLUGR2 returned with MNTR=', MNTR C OPEN(UNIT=LUNDMP,FILE='DUMP2',FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) END SUBROUTINE DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + FU, FUX, FUY, FUXX, FUXY, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION F(NPTS,NPDE), T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + A0, DT, DX, DY, UIB(*), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + ABSTOL(NPDE), DEL(NPTS), WORK(2*NPTS*NPDE), + FU(NPTS,NPDE,NPDE), FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), + FUXX(NPTS,NPDE,NPDE),FUXY(NPTS,NPDE,NPDE),FUYY(NPTS,NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUXY : OUT. dF(Uxy)dUxy C FUYY : OUT. dF(Uyy)dUyy C C----------------------------------------------------------------------- C DOUBLE PRECISION EPS PARAMETER (EPS = 1D-3) C INTEGER IC, IPT, LB, NBNDS C Ccc Loop over the components of the (derivatives of) U IC = 1 C C dF(U,Ut)/dU_ic DO 20 IPT = 1, NPTS FU(IPT,1,IC) = A0 - (-UX(IPT,1)) FU(IPT,2,IC) = - (-UX(IPT,2)) 20 CONTINUE C C dF(Ux)/dUx_ic DO 40 IPT = 1, NPTS FUX(IPT,1,IC) = - (-U(IPT,1)) FUX(IPT,2,IC) = 0.0 40 CONTINUE C C dF(Uy)/dUy_ic DO 50 IPT = 1, NPTS FUY(IPT,1,IC) = - (-U(IPT,2)) FUY(IPT,2,IC) = 0.0 50 CONTINUE C C dF(Uxx)/dUxx_ic DO 60 IPT = 1, NPTS FUXX(IPT,1,IC) = - (EPS) FUXX(IPT,2,IC) = 0.0 60 CONTINUE C C dF(Uxy)/dUxy_ic DO 70 IPT = 1, NPTS FUXY(IPT,1,IC) = 0.0 FUXY(IPT,2,IC) = 0.0 70 CONTINUE C C dF(Uyy)/dUyy_ic DO 80 IPT = 1, NPTS FUYY(IPT,1,IC) = - (EPS) FUYY(IPT,2,IC) = 0.0 80 CONTINUE IC = 2 C C dF(U,Ut)/dU_ic DO 120 IPT = 1, NPTS FU(IPT,1,IC) = - (-UY(IPT,1)) FU(IPT,2,IC) = A0 - (-UY(IPT,2)) 120 CONTINUE C C dF(Ux)/dUx_ic DO 140 IPT = 1, NPTS FUX(IPT,1,IC) = 0.0 FUX(IPT,2,IC) = - (-U(IPT,1)) 140 CONTINUE C C dF(Uy)/dUy_ic DO 150 IPT = 1, NPTS FUY(IPT,1,IC) = 0.0 FUY(IPT,2,IC) = - (-U(IPT,2)) 150 CONTINUE C C dF(Uxx)/dUxx_ic DO 160 IPT = 1, NPTS FUXX(IPT,1,IC) = 0.0 FUXX(IPT,2,IC) = - (EPS) 160 CONTINUE C C dF(Uxy)/dUxy_ic DO 170 IPT = 1, NPTS FUXY(IPT,1,IC) = 0.0 FUXY(IPT,2,IC) = 0.0 170 CONTINUE C C dF(Uyy)/dUyy_ic DO 180 IPT = 1, NPTS FUYY(IPT,1,IC) = 0.0 FUYY(IPT,2,IC) = - (EPS) 180 CONTINUE C C Correct boundaries (incl. the internal) NBNDS = LLBND(0) DO 100 LB = LLBND(1), LLBND(NBNDS+2)-1 IPT = LBND(LB) FU(IPT,1,1) = 1.0 FU(IPT,1,2) = 0.0 FU(IPT,2,1) = 0.0 FU(IPT,2,2) = 1.0 FUX(IPT,1,1) = 0.0 FUX(IPT,1,2) = 0.0 FUX(IPT,2,1) = 0.0 FUX(IPT,2,2) = 0.0 FUY(IPT,1,1) = 0.0 FUY(IPT,1,2) = 0.0 FUY(IPT,2,1) = 0.0 FUY(IPT,2,2) = 0.0 FUXX(IPT,1,1) = 0.0 FUXX(IPT,1,2) = 0.0 FUXX(IPT,2,1) = 0.0 FUXX(IPT,2,2) = 0.0 FUXY(IPT,1,1) = 0.0 FUXY(IPT,1,2) = 0.0 FUXY(IPT,2,1) = 0.0 FUXY(IPT,2,2) = 0.0 FUYY(IPT,1,1) = 0.0 FUYY(IPT,1,2) = 0.0 FUYY(IPT,2,1) = 0.0 FUYY(IPT,2,2) = 0.0 100 CONTINUE RETURN END SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, + LGRID, ISTRUC, LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) DOUBLE PRECISION T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Control after a successful time step. The solution can be printed, C plotted or compared with the exact solution. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C DT : IN. Current time step size C DTNEW : IN. Time step size for next time step C XL : IN. X-coordinate of lowerleft corner of (virtual) rectangle C YL : IN. Y-coordinate of lowerleft corner of (virtual) rectangle C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C C C Local arrays: INTEGER MAXPTS, NPDE PARAMETER (MAXPTS=10000, NPDE=2) DOUBLE PRECISION X(MAXPTS), Y(MAXPTS), UEX(MAXPTS*NPDE) C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL DOUBLE PRECISION DX, DY C C Loop over the grid levels from coarse to fine. C Get physical coordinates of grid points C Compute ||err||_max MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL SETXY (XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), X, Y) DX = DX/2 DY = DY/2 CALL PRERR (LEVEL, T, NPTS, NPDE, X, Y, SOL(LSOL(LEVEL)+1), + UEX) 10 CONTINUE RETURN END SUBROUTINE PRERR (LEVEL, T, NPTS, NPDE, X, Y, U, UEX) INTEGER LEVEL, NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), UEX(NPTS,NPDE) INTEGER I,J DOUBLE PRECISION RMAX(2) CALL PDEIV (T, X, Y, UEX, NPTS, NPDE) RMAX(1) = 0.0 RMAX(2) = 0.0 DO 10 I = 1, NPTS J = 1 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) J = 2 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) 10 CONTINUE PRINT '(''Error at T='',E9.3,'', level='',I1,'' :'',2E11.3,I10)', + T, LEVEL, RMAX(1), RMAX(2), NPTS RETURN END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C C Burgers' equation, solution wave front at y = x+0.25t, speed of C propagation sqrt(2)/8 perpendicular to wave front. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C DOUBLE PRECISION EPS PARAMETER (EPS = 1D-3) INTEGER I DO 10 I = 1, NPTS U(I,1) = 0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) U(I,2) = 0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C----------------------------------------------------------------------- C C Burgers' equation Ut = - U.Ux - V.Uy + eps.(Uxx + Uyy) C Vt = - U.Vx - V.Vy + eps.(Vxx + Vyy) C DOUBLE PRECISION EPS PARAMETER (EPS = 1D-3) INTEGER I DO 10 I = 2, NPTS-1 RES(I,1) = UT(I,1) - + (-U(I,1)*UX(I,1) - U(I,2)*UY(I,1) + EPS*(UXX(I,1)+UYY(I,1))) RES(I,2) = UT(I,2) - + (-U(I,1)*UX(I,2) - U(I,2)*UY(I,2) + EPS*(UXX(I,2)+UYY(I,2))) 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : IN. (0:LLBND(0)+1) C LLBND(0) = NBNDS: total # physical boundaries in actual grid C LLBND(1:NBNDS): pointers to a specific boundary in LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in the list + 1 C NB. corners with 2 different types of boundaries should be C pointed at twice. C ILBND : IN. (NBNDS) C ILBND(IB): type of boundary: C 1: Dirichlet C 2: Lower boundary -I C 3: Left boundary I C 4: Upper boundary I max. first order derivative C 5: Right boundary -I C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C----------------------------------------------------------------------- C C Burgers' equation, Dirichlet boundaries. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C DOUBLE PRECISION EPS PARAMETER (EPS = 1D-3) INTEGER I, K, NBNDS NBNDS = LLBND(0) DO 10 K = LLBND(1), LLBND(NBNDS+1)-1 I = LBND(K) RES(I,1) = U(I,1) - + (0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) RES(I,2) = U(I,2) - + (0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) 10 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'Sp' then mkdir 'Sp' fi cd 'Sp' if test -f 'prtsol.f' then echo shar: will not over-write existing file "'prtsol.f'" else cat << \SHAR_EOF > 'prtsol.f' PROGRAM PRTSOL C C----------------------------------------------------------------------- C Ccc This program reads a file made by subroutine DUMP and prints the C solution on an output file. Both filenames are read from standard C input. C Ccc EXTERNALS USED: EXTERNAL PRSOL, RDDUMP C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK PARAMETER (MXLEV=5, NPD=3, NPTS=10000) PARAMETER (LENIWK=NPTS*(7*MXLEV+20), + LENRWK=5*NPTS*NPD*MXLEV) C CHARACTER FILE*128 INTEGER IWK(LENIWK), + LSGNM1, LSGN, LSGNP1, LSUNM1, LSSN, LSUN REAL RWK(LENRWK) PRINT *, 'DUMP file?' READ '(A)', FILE C OPEN(UNIT=62,FILE=FILE,FORM='UNFORMATTED') CALL RDDUMP (62, RWK, LENRWK, IWK, LENIWK) CLOSE(62) C C Setup work storage LSGNM1 = 1 LSGN = LSGNM1 + MAXLVW+1 LSGNP1 = LSGN + MAXLVW+1 LSUNM1 = LSGNP1 + MAXLVW+1 LSSN = LSUNM1 + MAXLVW LSUN = LSSN + MAXLVW C C call print routine PRINT *, 'output file?' READ '(A)', FILE C OPEN(UNIT=61,FILE=FILE) CALL PRSOL (61, TW, NPDEW, XLW, YLW, DXB, DYB, + IWK(LSGN), IWK(LIWKPS), IWK(LSUN), RWK(LRWKPS)) CLOSE(61) END SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER LUNDMP, LENRWK, IWK(LENIWK) REAL RWK(LENRWK) C Ccc PURPOSE: C Read all information necessary for a restart of VLUGR2 from file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : OUT. Real workstorage intended to pass to VLUGR2 C LENRWK : IN. Dimension of RWK. C IWK : OUT. Integer workstorage intended to pass to VLUGR2 C LENIWK : IN. Dimension of IWK. C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J READ(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO IF (LENRWK .LT. LRWKPS+LRWKB .OR. LENIWK .LT. LIWKPS+LIWKB) THEN PRINT *, LENRWK, LRWKPS+LRWKB, LENIWK, LIWKPS+LIWKB STOP 'work space too small' ENDIF READ(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) READ(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) READ(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) C RETURN END SUBROUTINE PRSOL (LUN, T, NPDE, XL, YL, DXB, DYB, LGRID, ISTRUC, + LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, NPDE, LGRID(0:*), ISTRUC(*), LSOL(*) REAL T, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Print solution and coordinate values at all grid levels. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C T : IN. Current value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lowerleft corner of (virtual) domain C YL : IN. Y-coordinate of lowerleft corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C Ccc EXTERNALS USED: EXTERNAL PRSOLL C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL REAL DX, DY MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + SOL(LSOL(LEVEL)+1)) DX = DX/2 DY = DY/2 10 CONTINUE RETURN END SUBROUTINE PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + LROW, IROW, ICOL, U) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, LEVEL, NPTS, NPDE, LROW(0:*), IROW(*), ICOL(*) REAL T, XL, YL, DX, DY, U(NPTS,NPDE) C Ccc PURPOSE: C Print solution and X- and Y-coordinates of gridlevel LEVEL. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C LEVEL : IN. Grid level corresponding with solution U. C T : IN. Current value of time variable C NPTS : IN. # grid points at this level C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C U : IN. Solution on this grid level C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPT, IR, NROWS REAL X, Y C NROWS = LROW(0) WRITE(LUN,'(//// T10,A,T30,A,T46,A,T62,A,T71,A //)') + 'Level', 't', 'Y', 'X', 'Solution' IR = 1 Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T13,I2,T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + LEVEL, T, Y, X, U(IPT,1) DO 10 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 10 CONTINUE DO 20 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 30 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 30 CONTINUE 20 CONTINUE DO 40 IR = 2, NROWS Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + T, Y, X, U(IPT,1) DO 50 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 50 CONTINUE DO 60 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 70 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 70 CONTINUE 60 CONTINUE 40 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'probi.f' then echo shar: will not over-write existing file "'probi.f'" else cat << \SHAR_EOF > 'probi.f' PROGRAM EXMPL C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL REAL TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=3, NPTS=5000) PARAMETER (LENIWK=NPTS*(5*MXLEV+14), + LENRWK=NPTS*NPD*(5*MXLEV+9 + + 9*NPD+(2*MAXLR+MAXL+6+NPD)), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C CHARACTER FILE*7 INTEGER NPDE, INFO(7), IWK(LENIWK), MNTR, I LOGICAL LWK(LENLWK) REAL T, TOUT(4), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(2+3*NPD), RWK(LENRWK) C C First call of VLUGR2 MNTR = 0 NPDE = 3 T = 0.0 TOUT(1) = 500.0 TOUT(2) = 5000.0 TOUT(3) = 10000.0 TOUT(4) = 20000.0 DT = 0.1 XL = 0.0 XR = 1.0 YL = 0.0 YU = 1.0 DX = 0.05 DY = 0.05 TOLS = 0.1 TOLT = 0.1 INFO(1) = 1 C MAXLEV INFO(2) = 3 C Domain is a rectangle INFO(3) = 0 C Linear system solver PRINT *, 'Lin.sys.solver; BiCGStab, GCRO or matrix-free GCRO ?' PRINT *, ' (0 / 10,11,12,13 / 20,21,22,23 ) ?' READ *, INFO(4) OPEN (UNIT=61,FILE='RunInfo') C Write integration history to unit # 61 INFO(5) = 61 C Write Newton info to unit # 61 INFO(6) = 61 C Write Linear system solver info to unit # 61 INFO(7) = 61 C DTMIN = 1E-3 RINFO(1) = 1.0E-3 C DTMAX = 1.0 RINFO(2) = 10000.0 C UMAX RINFO(3) = 1.1E+5 RINFO(4) = 0.25 RINFO(5) = 292.0 C SPCWGT = 1.0 RINFO(6) = 1.0 RINFO(7) = 1.0 RINFO(8) = 1.0 C TIMWGT = 1.0 RINFO( 9) = 1.0 RINFO(10) = 1.0 RINFO(11) = 1.0 C C Call main routine FILE='DUMP' DO 10 I = 1, 4 CALL VLUGR2 (NPDE, T, TOUT(I), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, + LWK, LENLWK, MNTR) C C Save info on file WRITE(FILE(5:7),'(I3.3)') I OPEN(UNIT=LUNDMP,FILE=FILE,FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) C Check MNTR value IF (MNTR .NE. 1) THEN PRINT *, 'VLUGR2 returned with MNTR=', MNTR STOP ENDIF 10 CONTINUE END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C INTEGER I C REAL N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C Ccc Problem parameters N = 0.4 KAPPA = 1.0E-10 G = 9.81 DM = 0.0 AT = 0.002 AL = 0.01 CF = 4182.0 TKAPPA = 4.0 LT = 0.001 LL = 0.01 CS = 840.0 RHOS = 2500.0 RHO0 = 1.0E+3 T0 = 290.0 P0 = 1.0E+5 ALPHA = -3.0E-4 BETA = 4.45E-10 GAMMA = LOG(1.2) MU0 = 1.0E-3 W0 = 0.25 QC = 1.0E-4 TC = 292.0 C Ccc Initial solution DO 10 I = 1, NPTS U(I,1) = P0 + (1.0 - Y(I))*RHO0*G U(I,2) = 0.0 U(I,3) = T0 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C----------------------------------------------------------------------- C REAL N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I REAL P, PT, PX, PY, W, WT, WX, WY, T1, TT, TX, TY, + RHO, RHOX, RHOY, + MU, MUX, MUY, KAPMU, KAPMU2, KAPMUX, KAPMUY, Q1, Q2, QL, + ND11, ND12, ND22, H11, H12, H22, + PXX, PXY, PYY, WXX, WXY, WYY, TXX, TXY, TYY, + ND11Q1, ND11Q2, ND12Q1, ND12Q2, ND22Q1, ND22Q2, + H11Q1, H11Q2, H12Q1, H12Q2, H22Q1, H22Q2, Q1X, Q1Y, Q2X, Q2Y, + ND11X, ND12X, ND12Y, ND22Y, JW1, JW2, JW1X, JW2Y, + H11X, H12X, H12Y, H22Y, JT1X, JT2Y C DO 10 I = 1, NPTS P = U(I,1) PT = UT(I,1) PX = UX(I,1) PY = UY(I,1) W = U(I,2) WT = UT(I,2) WX = UX(I,2) WY = UY(I,2) T1 = U(I,3) TT = UT(I,3) TX = UX(I,3) TY = UY(I,3) RHO = RHO0*EXP(ALPHA*(T1-T0)+BETA*(P-P0)+GAMMA*W) RHOX = RHO*(ALPHA*TX+BETA*PX+GAMMA*WX) RHOY = RHO*(ALPHA*TY+BETA*PY+GAMMA*WY) MU = MU0*(1+1.85*W-4.0*W*W) MUX = MU0*(1.85*WX-8.0*W*WX) MUY = MU0*(1.85*WY-8.0*W*WY) KAPMU = KAPPA/MU KAPMU2 = -KAPMU/MU KAPMUX = KAPMU2*MUX KAPMUY = KAPMU2*MUY Q1 = -KAPMU*PX Q2 = -KAPMU*(PY+RHO*G) QL = MAX(SQRT(Q1*Q1+Q2*Q2),UROUND) ND11 = N*DM + AT*QL + (AL-AT)*Q1*Q1/QL ND12 = (AL-AT)*Q1*Q2/QL ND22 = N*DM + AT*QL + (AL-AT)*Q2*Q2/QL H11 = TKAPPA + LT*QL + (LL-LT)*Q1*Q1/QL H12 = (LL-LT)*Q1*Q2/QL H22 = TKAPPA + LT*QL + (LL-LT)*Q2*Q2/QL PXX = UXX(I,1) PXY = UXY(I,1) PYY = UYY(I,1) WXX = UXX(I,2) WXY = UXY(I,2) WYY = UYY(I,2) TXX = UXX(I,3) TXY = UXY(I,3) TYY = UYY(I,3) ND11Q1 = (AT + (AL-AT)*(2-(Q1/QL)**2))*Q1/QL ND11Q2 = (AT - (AL-AT)*((Q1/QL)**2))*Q2/QL ND12Q1 = (AL-AT)*(Q2/QL)**3 ND12Q2 = (AL-AT)*(Q1/QL)**3 ND22Q1 = (AT - (AL-AT)*((Q2/QL)**2))*Q1/QL ND22Q2 = (AT + (AL-AT)*(2-(Q2/QL)**2))*Q2/QL H11Q1 = (LT + (LL-LT)*(2-(Q1/QL)**2))*Q1/QL H11Q2 = (LT - (LL-LT)*((Q1/QL)**2))*Q2/QL H12Q1 = (LL-LT)*(Q2/QL)**3 H12Q2 = (LL-LT)*(Q1/QL)**3 H22Q1 = (LT - (LL-LT)*((Q2/QL)**2))*Q1/QL H22Q2 = (LT + (LL-LT)*(2-(Q2/QL)**2))*Q2/QL Q1X = -(KAPMUX*PX+KAPMU*PXX) Q1Y = -(KAPMUY*PX+KAPMU*PXY) Q2X = -(KAPMUX*(PY+RHO*G)+KAPMU*(PXY+RHOX*G)) Q2Y = -(KAPMUY*(PY+RHO*G)+KAPMU*(PYY+RHOY*G)) ND11X = ND11Q1*Q1X + ND11Q2*Q2X ND12X = ND12Q1*Q1X + ND12Q2*Q2X ND12Y = ND12Q1*Q1Y + ND12Q2*Q2Y ND22Y = ND22Q1*Q1Y + ND22Q2*Q2Y JW1 = -(ND11*WX + ND12*WY) JW2 = -(ND12*WX + ND22*WY) JW1X = -(ND11X*WX+ND11*WXX + ND12X*WY+ND12*WXY) JW2Y = -(ND12Y*WX+ND12*WXY + ND22Y*WY+ND22*WYY) H11X = H11Q1*Q1X + H11Q2*Q2X H12X = H12Q1*Q1X + H12Q2*Q2X H12Y = H12Q1*Q1Y + H12Q2*Q2Y H22Y = H22Q1*Q1Y + H22Q2*Q2Y JT1X = -(H11X*TX+H11*TXX + H12X*TY+H12*TXY) JT2Y = -(H12Y*TX+H12*TXY + H22Y*TY+H22*TYY) C RES(I,1) = N*RHO*(BETA*PT+GAMMA*WT+ALPHA*TT) + + RHOX*Q1+RHO*Q1X + RHOY*Q2+RHO*Q2Y RES(I,2) = N*RHO*WT + + RHO*Q1*WX + RHO*Q2*WY + + RHOX*JW1+RHO*JW1X + RHOY*JW2+RHO*JW2Y RES(I,3) = (N*CF*RHO+(1-N)*RHOS*CS)*TT + + RHO*CF*Q1*TX + RHO*CF*Q2*TY + + JT1X + JT2Y 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C C REAL N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I, J, K, NBNDS REAL P, PY, W, T1, RHO, MU, KAPMU, Q2 C NBNDS = LLBND(0) DO 10 J = 1, NBNDS IF (ILBND(J) .EQ. 1) THEN C C yL boundary: dp/dy - rho.g2 = 0 C dw/dy = 0 0 'probii.f' PROGRAM EXMPL C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL REAL TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=2, NPTS=10000) PARAMETER (LENIWK=NPTS*(5*MXLEV+14), + LENRWK=NPTS*NPD*(5*MXLEV+9 + + 9*NPD+(2*MAXLR+MAXL+6+NPD)), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C CHARACTER FILE*7 INTEGER NPDE, INFO(7), IWK(LENIWK), MNTR, I LOGICAL LWK(LENLWK) REAL T, TOUT(4), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(2+3*NPD), RWK(LENRWK) C C First call of VLUGR2 MNTR = 0 NPDE = 2 T = 0.0 TOUT(1) = 10000.0 TOUT(2) = 20000.0 TOUT(3) = 30000.0 TOUT(4) = 100000.0 DT = 0.1 C Since domain is not a rectangle the domain parameters have not to be C specified here TOLS = 0.1 TOLT = 0.1 INFO(1) = 1 C MAXLEV INFO(2) = 3 C Domain is not a rectangle INFO(3) = 1 C Linear system solver PRINT *, 'Lin.sys.solver; BiCGStab, GCRO or matrix-free GCRO ?' PRINT *, ' (0 / 10,11,12,13 / 20,21,22,23 ) ?' READ *, INFO(4) OPEN (UNIT=61,FILE='RunInfo') C Write integration history to unit # 61 INFO(5) = 61 C Write Newton info to unit # 61 INFO(6) = 61 C Write Linear system solver info to unit # 61 INFO(7) = 61 C DTMIN RINFO(1) = 1.0E-3 C DTMAX RINFO(2) = 50000.0 C UMAX RINFO(3) = 1.1E+5 RINFO(4) = 0.25 C SPCWGT = 1.0 RINFO(5) = 1.0 RINFO(6) = 1.0 C TIMWGT = 1.0 RINFO(7) = 1.0 RINFO(8) = 1.0 C C Call main routine FILE='DUMP' DO 10 I = 1, 4 CALL VLUGR2 (NPDE, T, TOUT(I), DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, + LWK, LENLWK, MNTR) C C Save info on file WRITE(FILE(5:7),'(I3.3)') I OPEN(UNIT=LUNDMP,FILE=FILE,FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) C Check MNTR value IF (MNTR .NE. 1) THEN PRINT *, 'VLUGR2 returned with MNTR=', MNTR STOP ENDIF 10 CONTINUE END LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*) REAL XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define initial domain. NB. Boundaries should consist of as many points C as are necessary to employ second order space discretization, i.e., C a boundary enclosing the internal part of the domain should not C include less than 3 grid points including the corners. If Neumann C boundaries are used the minimum is 4 since otherwise the Jacobian C matrix will be singular. C C A (virtual) rectangle is placed upon the (irregular) domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : OUT. X-coordinate of lower-left point of virtual rectangle C YL : OUT. Y-coordinate of lower-left point of virtual rectangle C XR : OUT. X-coordinate of upper-right point of virtual rectangle C YU : OUT. Y-coordinate of upper-right point of virtual rectangle C DX : OUT. Grid width in X-direction C DY : OUT. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : OUT. INTEGER array of dimension (NBDPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C C NX should be even and NY a quintuple INTEGER NX, NY PARAMETER (NX = 20, NY = 20) C INTEGER I, IPT, J, NROWS, NPTS, NBNDS, NX1, NY1, NY2 C Ccc Make initial grid, check MAXPTS against rough estimate of NPTS IF (MAXPTS .LT. (NX+1)*(NY+1)) THEN INIDOM = .FALSE. MAXPTS = (NX+1)*(NY+1) RETURN ELSE INIDOM = .TRUE. ENDIF NROWS = NY+1 XL = 0.0 YL = 0.0 XR = 1.0 YU = 1.0 DX = (XR-XL)/NX DY = (YU-YL)/NY NX1 = NX/2 NY1 = NINT(NY*0.4) NY2 = NINT(NY*0.6) C C Make grid structure LROW(0) = NROWS IPT = 1 DO 10 I = 0, NY1 LROW(I+1) = IPT IROW(I+1) = I DO 20 J = 0, NX ICOL(IPT) = J IPT = IPT + 1 20 CONTINUE 10 CONTINUE DO 30 I = NY1+1, NY2-1 LROW(I+1) = IPT IROW(I+1) = I DO 40 J = NX/2, NX ICOL(IPT) = J IPT = IPT + 1 40 CONTINUE 30 CONTINUE DO 50 I = NY2, NY LROW(I+1) = IPT IROW(I+1) = I DO 60 J = 0, NX ICOL(IPT) = J IPT = IPT + 1 60 CONTINUE 50 CONTINUE LROW(NROWS+1) = IPT NPTS = IPT-1 C C Boundaries NBNDS = 16 ILBND(1) = 1 ILBND(2) = 2 ILBND(3) = 3 ILBND(4) = 2 ILBND(5) = 1 ILBND(6) = 2 ILBND(7) = 3 ILBND(8) = 4 ILBND( 9) = 12 ILBND(10) = 23 ILBND(11) = 32 ILBND(12) = 21 ILBND(13) = 12 ILBND(14) = 23 ILBND(15) = 34 ILBND(16) = 41 LLBND(0) = NBNDS LLBND(1) = 1 LLBND(2) = LLBND(1) + (NX-1) LLBND(3) = LLBND(2) + (NY1-1) LLBND(4) = LLBND(3) + (NX1-1) LLBND(5) = LLBND(4) + (NY2-NY1-1) LLBND(6) = LLBND(5) + (NX1-1) LLBND(7) = LLBND(6) + (NY1-1) LLBND(8) = LLBND(7) + (NX-1) LLBND( 9) = LLBND( 8) + (NY-1) LLBND(10) = LLBND( 9) + 1 LLBND(11) = LLBND(10) + 1 LLBND(12) = LLBND(11) + 1 LLBND(13) = LLBND(12) + 1 LLBND(14) = LLBND(13) + 1 LLBND(15) = LLBND(14) + 1 LLBND(16) = LLBND(15) + 1 LLBND(17) = LLBND(16) + 1 C Lower and upper boundary pointers DO 100 J = 1, NX-1 LBND(LLBND(1)+J-1) = J + 1 LBND(LLBND(7)+J-1) = NPTS - J 100 CONTINUE C Left boundary pointers DO 120 I = 1, NY1-1 LBND(LLBND(2)+I-1) = I*(NX+1) + 1 LBND(LLBND(6)+I-1) = NPTS - (I+1)*(NX+1) + 1 120 CONTINUE DO 130 I = 1, NY2-NY1-1 LBND(LLBND(4)+I-1) = NY1*(NX+1) + (I+1)*(NX1+1) 130 CONTINUE DO 140 I = 1, NX1-1 LBND(LLBND(3)+I-1) = NY1*(NX+1) + 1 + I LBND(LLBND(5)+I-1) = NPTS - (NY1+1)*(NX+1) + 1 + I 140 CONTINUE C Right boundary pointers DO 110 I = 1, NY1 LBND(LLBND(8)+I-1) = (I+1)*(NX+1) 110 CONTINUE J = LLBND(8)+NY1-1 DO 113 I = 1, NY2-NY1-1 LBND(J+I) = LBND(J) + I*(NX1+1) 113 CONTINUE J = LLBND(8)+NY2-1 DO 116 I = 0, NY1-1 LBND(J+I) = LBND(J-1) + (I+1)*(NX+1) 116 CONTINUE C Corners LBND(LLBND( 9)) = 1 LBND(LLBND(16)) = NX+1 LBND(LLBND(10)) = NY1*(NX+1) + 1 LBND(LLBND(11)) = LBND(LLBND(10)) + NX1 LBND(LLBND(13)) = (NY1+1)*(NX+1) + (NY2-NY1-1)*(NX1+1) + 1 LBND(LLBND(12)) = LBND(LLBND(13)) + NX1 LBND(LLBND(14)) = NPTS - NX LBND(LLBND(15)) = NPTS RETURN END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C INTEGER I C REAL N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C Ccc Problem parameters N = 0.4 KAPPA = 1.0E-10 G = 9.81 DM = 0.0 AT = 0.002 AL = 0.01 RHO0 = 1.0E+3 P0 = 1.0E+5 BETA = 0.0 GAMMA = LOG(1.2) MU0 = 1.0E-3 W0 = 0.25 QC = 1.0E-4 C Ccc Initial solution DO 10 I = 1, NPTS U(I,1) = P0 + (1.0 - Y(I))*RHO0*G U(I,2) = 0.0 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C----------------------------------------------------------------------- C REAL N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I REAL P, PT, PX, PY, W, WT, WX, WY, + RHO, RHOX, RHOY, + MU, MUX, MUY, KAPMU, KAPMU2, KAPMUX, KAPMUY, Q1, Q2, QL, + ND11, ND12, ND22, + PXX, PXY, PYY, WXX, WXY, WYY, + ND11Q1, ND11Q2, ND12Q1, ND12Q2, ND22Q1, ND22Q2, + Q1X, Q1Y, Q2X, Q2Y, + ND11X, ND12X, ND12Y, ND22Y, JW1, JW2, JW1X, JW2Y C DO 10 I = 1, NPTS P = U(I,1) PT = UT(I,1) PX = UX(I,1) PY = UY(I,1) W = U(I,2) WT = UT(I,2) WX = UX(I,2) WY = UY(I,2) RHO = RHO0*EXP(BETA*(P-P0)+GAMMA*W) RHOX = RHO*(BETA*PX+GAMMA*WX) RHOY = RHO*(BETA*PY+GAMMA*WY) MU = MU0*(1+1.85*W-4.0*W*W) MUX = MU0*(1.85*WX-8.0*W*WX) MUY = MU0*(1.85*WY-8.0*W*WY) KAPMU = KAPPA/MU KAPMU2 = -KAPMU/MU KAPMUX = KAPMU2*MUX KAPMUY = KAPMU2*MUY Q1 = -KAPMU*PX Q2 = -KAPMU*(PY+RHO*G) QL = MAX(SQRT(Q1*Q1+Q2*Q2),UROUND) ND11 = N*DM + AT*QL + (AL-AT)*Q1*Q1/QL ND12 = (AL-AT)*Q1*Q2/QL ND22 = N*DM + AT*QL + (AL-AT)*Q2*Q2/QL PXX = UXX(I,1) PXY = UXY(I,1) PYY = UYY(I,1) WXX = UXX(I,2) WXY = UXY(I,2) WYY = UYY(I,2) ND11Q1 = (AT + (AL-AT)*(2-(Q1/QL)**2))*Q1/QL ND11Q2 = (AT - (AL-AT)*((Q1/QL)**2))*Q2/QL ND12Q1 = (AL-AT)*(Q2/QL)**3 ND12Q2 = (AL-AT)*(Q1/QL)**3 ND22Q1 = (AT - (AL-AT)*((Q2/QL)**2))*Q1/QL ND22Q2 = (AT + (AL-AT)*(2-(Q2/QL)**2))*Q2/QL Q1X = -(KAPMUX*PX+KAPMU*PXX) Q1Y = -(KAPMUY*PX+KAPMU*PXY) Q2X = -(KAPMUX*(PY+RHO*G)+KAPMU*(PXY+RHOX*G)) Q2Y = -(KAPMUY*(PY+RHO*G)+KAPMU*(PYY+RHOY*G)) ND11X = ND11Q1*Q1X + ND11Q2*Q2X ND12X = ND12Q1*Q1X + ND12Q2*Q2X ND12Y = ND12Q1*Q1Y + ND12Q2*Q2Y ND22Y = ND22Q1*Q1Y + ND22Q2*Q2Y JW1 = -(ND11*WX + ND12*WY) JW2 = -(ND12*WX + ND22*WY) JW1X = -(ND11X*WX+ND11*WXX + ND12X*WY+ND12*WXY) JW2Y = -(ND12Y*WX+ND12*WXY + ND22Y*WY+ND22*WYY) C RES(I,1) = N*RHO*(BETA*PT+GAMMA*WT) + + RHOX*Q1+RHO*Q1X + RHOY*Q2+RHO*Q2Y RES(I,2) = N*RHO*WT + + RHO*Q1*WX + RHO*Q2*WY + + RHOX*JW1+RHO*JW1X + RHOY*JW2+RHO*JW2Y 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : IN. (0:LLBND(0)+1) C LLBND(0) = NBNDS: total # physical boundaries in actual grid C LLBND(1:NBNDS): pointers to a specific boundary in LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in the list + 1 C NB. corners with 2 different types of boundaries should be C pointed at twice. C ILBND : IN. (NBNDS) C ILBND(IB): type of boundary: C 1: Dirichlet C 2: Lower boundary -I C 3: Left boundary I C 4: Upper boundary I max. first order derivative C 5: Right boundary -I C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C C REAL N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC COMMON /PROBLM/ N, GAMMA, MU0, RHO0, P0, W0, G, DM, KAPPA, AL, AT, + CF, TKAPPA, LT, LL, CS, RHOS, T0, ALPHA, BETA, QC, TC SAVE /PROBLM/ C INTEGER I, J, K REAL P, PY, W, RHO, MU, KAPMU, Q2 C J = 1 C C yL boundary: q2 = 0 C dw/dy = 0 0 'plot.m' % Plots solution and grid levels from data files sol.dat and grid.dat % generated by WRTUNI.f % NB. pcolor with default shading colors a cell with the lowerleft value and % ignores the last row and column. % nxb=input('nX base grid? '); nyb=input('nY base grid? '); load sol.dat load grid.dat [n,npde]=size(sol); unilev=floor(log(n/(nxb*nyb))/(log(2)*2)+1) nx=nxb*2^(unilev-1); ny=nyb*2^(unilev-1); for ic=1:npde Umin=input(['min. sol. value comp. ',int2str(ic),'? ']) Umax=input(['max. sol. value comp. ',int2str(ic),'? ']) U=zeros(ny+1,nx+1); for j = 0:ny for i = 0:nx U(j+1,i+1) = sol(j*(nx+1)+i+1,ic); end end figure(ic); colormap(jet); pcolor(U); shading('interp'); if Umin < Umax caxis([Umin Umax]) end; keyboard end; G=zeros(ny+2,nx+2); for j = 0:ny for i = 0:nx G(j+1,i+1) = grid(j*(nx+1)+i+1); end end figure(npde+1); grc=[1 1 1; 1 1 0; 0 1 0; 0 1 1; 0 0 1; 1 0 0; 1 0 1]; colormap(grc(1:unilev,:)); pcolor(G); caxis([0.99 unilev]) SHAR_EOF fi # end of overwriting check if test -f 'wrtuni.f' then echo shar: will not over-write existing file "'wrtuni.f'" else cat << \SHAR_EOF > 'wrtuni.f' PROGRAM WRTUNI C C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C !!! !!! C !!! In subroutine WRUNI the constant NONVAL should be adjusted to !!! C !!! the data (NONVAL = impossible value for the first componenent) !!! C !!! !!! C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C C----------------------------------------------------------------------- C Ccc This program reads a file made by subroutine DUMP and writes the C (interpolated) solution on a uniform grid of a specified grid level C to the output file sol.dat. The maximum grid level used in each point C is written to the file grid.dat. C NB. This program is not correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc EXTERNALS USED: EXTERNAL WRUNI, RDDUMP C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK PARAMETER (MXLEV=5, NPD=3, NPTS=10000) PARAMETER (LENIWK=NPTS*(7*MXLEV+20), + LENRWK=5*NPTS*NPD*MXLEV) C CHARACTER FILE*128 INTEGER IWK(LENIWK), + LSGNM1, LSGN, LSGNP1, LSUNM1, LSSN, LSUN, + LUNI, MAXLEV, NX, NXB, NY, NYB, UNILEV REAL RWK(LENRWK) PRINT *, 'DUMP file?' READ '(A)', FILE C OPEN(UNIT=62,FILE=FILE,FORM='UNFORMATTED') CALL RDDUMP (62, RWK, LENRWK, IWK, LENIWK) CLOSE(62) C C Setup work storage LSGNM1 = 1 LSGN = LSGNM1 + MAXLVW+1 LSGNP1 = LSGN + MAXLVW+1 LSUNM1 = LSGNP1 + MAXLVW+1 LSSN = LSUNM1 + MAXLVW LSUN = LSSN + MAXLVW C C Check workspace MAXLEV = IWK(LSGN) PRINT *, 'Max. grid level?' READ *, UNILEV UNILEV = MIN(UNILEV,MAXLEV) NXB = NINT((XRW - XLW)/DXB) NYB = NINT((YUW - YLW)/DYB) NX = NXB * 2**(UNILEV-1) NY = NYB * 2**(UNILEV-1) LUNI = LENRWK - (NX+1)*(NY+1)*NPDEW IF (LUNI .LT. IWK(LSUN+MAXLVW)) STOP 'workspace' C C Write problem info to standard output and write the interpolated C solution and grid levels to the files PRINT *, 'T, NPDE, XL, YL, DXB, DYB, NXB, NYB' PRINT *, TW, NPDEW, XLW, YLW, DXB, DYB, NXB, NYB FILE = 'sol.dat' OPEN(UNIT=61,FILE=FILE) FILE = 'grid.dat' OPEN(UNIT=63,FILE=FILE) CALL WRUNI (61, 63, UNILEV, + TW, NPDEW, XLW, YLW, DXB, DYB, NXB, NYB, + IWK(LSGN), IWK(LIWKPS), IWK(LSUN), RWK(LRWKPS), + RWK(LUNI), NX, NY) CLOSE(61) CLOSE(63) END SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER LUNDMP, LENRWK, IWK(LENIWK) REAL RWK(LENRWK) C Ccc PURPOSE: C Read all information necessary for a restart of VLUGR2 from file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : OUT. Real workstorage intended to pass to VLUGR2 C LENRWK : IN. Dimension of RWK. C IWK : OUT. Integer workstorage intended to pass to VLUGR2 C LENIWK : IN. Dimension of IWK. C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J READ(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO IF (LENRWK .LT. LRWKPS+LRWKB .OR. LENIWK .LT. LIWKPS+LIWKB) THEN PRINT *, LENRWK, LRWKPS+LRWKB, LENIWK, LIWKPS+LIWKB STOP 'work space too small' ENDIF READ(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) READ(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) READ(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) C RETURN END SUBROUTINE WRUNI (LUNS, LUNG, UNILEV, + T, NPDE, XL, YL, DXB, DYB, NXB, NYB, + LGRID, ISTRUC, LSOL, SOL, UNIFRM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUNS, LUNG, UNILEV, + NPDE, NXB, NYB, LGRID(0:*), ISTRUC(*), LSOL(*), NX, NY REAL T, XL, YL, DXB, DYB, SOL(*), UNIFRM(0:NX,0:NY,NPDE) C Ccc PURPOSE: C Write (interpolated) solution values at grid level UNILEV to file C LUNS. C Write maximum gridlevel used in each point to file LUNG. C NB. The data will not be correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc PARAMETER DESCRIPTION: C LUNS : IN. Logical unit number of solution file C LUNG : IN. Logical unit number of grid level file C UNILEV : IN. Maximum grid level to be used to generate the data C T : IN. Value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower left corner of (virtual) domain C YL : IN. Y-coordinate of lower left corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C NXB,NYB: IN. # gridcells in X- and Y-direction, resp., on base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C UNIFRM : WORK. (Interpolated) solution on level UNILEV / max. grid C level used. C NX, NY : IN. # gridcells in X- and Y-direction, resp., on grid of C of level UNILEV C C----------------------------------------------------------------------- C C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C !!! !!! C !!! In subroutine WRUNI the constant NONVAL should be adjusted to !!! C !!! the data (NONVAL = impossible value for the first componenent) !!! C !!! !!! REAL NONVAL PARAMETER (NONVAL = -999.999) C !!! !!! C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C C----------------------------------------------------------------------- C INTEGER I, IC, ICOL, IMUL, IPT, IR, IROW, J, + LEVEL, LLROW, LIROW, LICOL, MAXLEV, NROWS, NPTS DO 1 IC = 1, NPDE DO 1 IROW = 0, NY DO 1 ICOL = 0, NX UNIFRM(ICOL,IROW,IC) = NONVAL 1 CONTINUE MAXLEV = LGRID(0) DO 10 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 20 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 30 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL DO 40 IC = 1, NPDE UNIFRM(ICOL,IROW,IC) = + SOL(LSOL(LEVEL)+(IC-1)*NPTS+IPT) 40 CONTINUE 30 CONTINUE 20 CONTINUE 10 CONTINUE DO 100 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 110 J = IMUL, NY, IMUL*2 DO 110 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 120 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I,J-IMUL,IC)+UNIFRM(I,J+IMUL,IC))/2 120 CONTINUE ENDIF 110 CONTINUE DO 130 J = 0, NY, IMUL DO 130 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 140 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I-IMUL,J,IC)+UNIFRM(I+IMUL,J,IC))/2 140 CONTINUE ENDIF 130 CONTINUE 100 CONTINUE DO 150 J = 0, NY DO 150 I = 0, NX WRITE(LUNS,'(100E13.3)') (UNIFRM(I,J,IC), IC = 1, NPDE) 150 CONTINUE C C Grids DO 201 IROW = 0, NY DO 201 ICOL = 0, NX UNIFRM(ICOL,IROW,1) = 0 201 CONTINUE DO 210 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 220 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 230 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL UNIFRM(ICOL,IROW,1) = LEVEL 230 CONTINUE 220 CONTINUE 210 CONTINUE DO 300 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 310 J = IMUL, NY, IMUL*2 DO 310 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I,J-IMUL,1),UNIFRM(I,J+IMUL,1)) ENDIF 310 CONTINUE DO 330 J = 0, NY, IMUL DO 330 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I-IMUL,J,1),UNIFRM(I+IMUL,J,1)) ENDIF 330 CONTINUE 300 CONTINUE DO 350 J = 0, NY DO 350 I = 0, NX WRITE(LUNG,'(I2)') NINT(UNIFRM(I,J,1)) 350 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'exmpl.f' then echo shar: will not over-write existing file "'exmpl.f'" else cat << \SHAR_EOF > 'exmpl.f' PROGRAM EXMPL C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL REAL TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=2, NPTS=2500) PARAMETER (LENIWK=NPTS*(5*MXLEV+11), + LENRWK=NPTS*NPD*(5*MXLEV+9 + + (9*NPD+2*MAXLR+MAXL+7)), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C INTEGER NPDE, INFO(7), IWK(LENIWK), MNTR LOGICAL LWK(LENLWK) REAL T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(2+3*NPD), RWK(LENRWK) C First call of VLUGR2 MNTR = 0 NPDE = 2 T = 0.0 TOUT = 1.0 DT = 0.001 C Since domain is not a rectangle the grid parameters need not to be C specified here (cf. INIDOM) TOLS = 0.1 TOLT = 0.05 INFO(1) = 1 C MAXLEV INFO(2) = 5 C Domain not a rectangle INFO(3) = 1 C Linear system solver: GCRO + Diagonal scaling C (no first order derivatives at the boundaries) INFO(4) = 13 OPEN (UNIT=61,FILE='RunInfo') C Write integration history to unit # 61 INFO(5) = 61 C Write Newton info to unit # 61 INFO(6) = 61 C Write GCRO info to unit # 61 INFO(7) = 61 C DTMIN = 1E-7 RINFO(1) = 1.0E-7 C DTMAX = 1.0 RINFO(2) = 1.0 C UMAX = 1.0 RINFO(3) = 1.0 RINFO(4) = 1.0 C SPCWGT = 1.0 RINFO(5) = 1.0 RINFO(6) = 1.0 C TIMWGT = 1.0 RINFO(7) = 1.0 RINFO(8) = 1.0 C C Call main routine CALL VLUGR2 (NPDE, T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, + MNTR) PRINT *, 'VLUGR2 returned with MNTR=', MNTR C C Save info on file OPEN(UNIT=LUNDMP,FILE='DUMP',FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) END LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*) REAL XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define initial domain. NB. Boundaries should consist of as many points C as are necessary to employ second order space discretization, i.e., C a boundary enclosing the internal part of the domain should not C include less than 3 grid points including the corners. If Neumann C boundaries are used the minimum is 4 since otherwise the Jacobian C matrix will be singular. C C A (virtual) rectangle is placed upon the (irregular) domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : OUT. X-coordinate of lowerleft point of virtual rectangle C YL : OUT. Y-coordinate of lowerleft point of virtual rectangle C XR : OUT. X-coordinate of upperright point of virtual rectangle C YU : OUT. Y-coordinate of upperright point of virtual rectangle C DX : OUT. Grid width in X-direction C DY : OUT. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C C Square domain [0,1]x[0,1] with holes. Dirichlet boundaries. C INTEGER NX, NY PARAMETER (NX = 10, NY = 10) INTEGER IDOM((NX+1)*(NY+1)) C INTEGER I, IPT, J, NROWS, NPTS, NBNDS NPTS = (NX+1)*(NY+1) - (NX-2) - 2*3 - 2 IF (MAXPTS .LT. NPTS) THEN INIDOM = .FALSE. MAXPTS = NPTS RETURN ELSE INIDOM = .TRUE. ENDIF NROWS = NY+1 XL = 0.0 YL = 0.0 XR = 1.0 YU = 1.0 DX = (XR-XL)/NX DY = (YU-YL)/NY C C Make grid structure LROW(0) = NROWS IPT = 1 DO 10 I = 0, 0 LROW(I+1) = IPT IROW(I+1) = I DO 15 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 15 CONTINUE 10 CONTINUE DO 20 I = 1, 3 LROW(I+1) = IPT IROW(I+1) = I DO 23 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 23 CONTINUE DO 26 J = 3, 10 ICOL(IPT) = J IPT = IPT + 1 26 CONTINUE 20 CONTINUE DO 30 I = 4, 4 LROW(I+1) = IPT IROW(I+1) = I DO 33 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 33 CONTINUE DO 36 J = 3, 5 ICOL(IPT) = J IPT = IPT + 1 36 CONTINUE DO 39 J = 8, 10 ICOL(IPT) = J IPT = IPT + 1 39 CONTINUE 30 CONTINUE DO 40 I = 5, 7 LROW(I+1) = IPT IROW(I+1) = I DO 43 J = 0, 2 ICOL(IPT) = J IPT = IPT + 1 43 CONTINUE DO 46 J = 3, 10 ICOL(IPT) = J IPT = IPT + 1 46 CONTINUE 40 CONTINUE DO 50 I = 8, 10 LROW(I+1) = IPT IROW(I+1) = I DO 56 J = 0, 8 ICOL(IPT) = J IPT = IPT + 1 56 CONTINUE 50 CONTINUE LROW(NROWS+1) = IPT C C Boundaries NBNDS = 28 ILBND(1) = 1 LLBND(1) = 1 IPT = 2 LBND(LLBND(1)) = IPT ILBND(2) = 2 LLBND(2) = LLBND(1) + 1 IPT = 4 LBND(LLBND(2) ) = IPT IPT = 15 LBND(LLBND(2)+1) = IPT IPT = 26 LBND(LLBND(2)+2) = IPT IPT = 37 LBND(LLBND(2)+3) = IPT IPT = 46 LBND(LLBND(2)+4) = IPT IPT = 57 LBND(LLBND(2)+5) = IPT IPT = 68 LBND(LLBND(2)+6) = IPT IPT = 79 LBND(LLBND(2)+7) = IPT IPT = 88 LBND(LLBND(2)+8) = IPT ILBND(3) = 3 LLBND(3) = LLBND(2) + 9 DO 130 J = 0, 6 IPT = 98+J LBND(LLBND(3)+J) = IPT 130 CONTINUE ILBND(4) = 4 LLBND(4) = LLBND(3) + 7 IPT = 96 LBND(LLBND(4)) = IPT ILBND(5) = 1 LLBND(5) = LLBND(4) + 1 DO 150 J = 0, 4 IPT = 86-J LBND(LLBND(5)+J) = IPT 150 CONTINUE ILBND(6) = 4 LLBND(6) = LLBND(5) + 5 DO 160 J = 0, 6 IPT = LBND(LLBND(2)+J) + 2 LBND(LLBND(6)+J) = IPT 160 CONTINUE ILBND(7) = 1 LLBND(7) = LLBND(6) + 7 DO 170 J = 0, 5 IPT = 8+J LBND(LLBND(7)+J) = IPT 170 CONTINUE ILBND(8) = 2 LLBND(8) = LLBND(7) + 6 DO 180 J = 0, 4 IPT = LBND(LLBND(6)+J+1) + 1 LBND(LLBND(8)+J) = IPT 180 CONTINUE ILBND(9) = 3 LLBND(9) = LLBND(8) + 5 DO 190 J = 0, 5 IPT = 72+J LBND(LLBND(9)+J) = IPT 190 CONTINUE ILBND(10) = 4 LLBND(10) = LLBND(9) + 6 IPT = 67 LBND(LLBND(10) ) = IPT IPT = 56 LBND(LLBND(10)+1) = IPT IPT = 45 LBND(LLBND(10)+2) = IPT IPT = 36 LBND(LLBND(10)+3) = IPT IPT = 25 LBND(LLBND(10)+4) = IPT ILBND(11) = 1 LLBND(11) = LLBND(10) + 5 IPT = 52 LBND(LLBND(11) ) = IPT IPT = 53 LBND(LLBND(11)+1) = IPT ILBND(12) = 2 LLBND(12) = LLBND(11) + 2 IPT = 43 LBND(LLBND(12) ) = IPT ILBND(13) = 3 LLBND(13) = LLBND(12) + 1 IPT = 32 LBND(LLBND(13) ) = IPT IPT = 33 LBND(LLBND(13)+1) = IPT ILBND(14) = 4 LLBND(14) = LLBND(13) + 2 IPT = 42 LBND(LLBND(14) ) = IPT C ILBND(15) = 12 LLBND(15) = LLBND(14) + 1 IPT = 1 LBND(LLBND(15)) = IPT ILBND(16) = 23 LLBND(16) = LLBND(15) + 1 IPT = 97 LBND(LLBND(16)) = IPT ILBND(17) = 34 LLBND(17) = LLBND(16) + 1 IPT = 105 LBND(LLBND(17)) = IPT ILBND(18) = 41 LLBND(18) = LLBND(17) + 1 IPT = 87 LBND(LLBND(18)) = IPT ILBND(19) = 14 LLBND(19) = LLBND(18) + 1 IPT = 81 LBND(LLBND(19)) = IPT ILBND(20) = 41 LLBND(20) = LLBND(19) + 1 IPT = 3 LBND(LLBND(20)) = IPT ILBND(21) = 12 LLBND(21) = LLBND(20) + 1 IPT = 7 LBND(LLBND(21)) = IPT ILBND(22) = 23 LLBND(22) = LLBND(21) + 1 IPT = 71 LBND(LLBND(22)) = IPT ILBND(23) = 34 LLBND(23) = LLBND(22) + 1 IPT = 78 LBND(LLBND(23)) = IPT ILBND(24) = 41 LLBND(24) = LLBND(23) + 1 IPT = 14 LBND(LLBND(24)) = IPT ILBND(25) = 14 LLBND(25) = LLBND(24) + 1 IPT = 51 LBND(LLBND(25)) = IPT ILBND(26) = 43 LLBND(26) = LLBND(25) + 1 IPT = 31 LBND(LLBND(26)) = IPT ILBND(27) = 32 LLBND(27) = LLBND(26) + 1 IPT = 34 LBND(LLBND(27)) = IPT ILBND(28) = 21 LLBND(28) = LLBND(27) + 1 IPT = 54 LBND(LLBND(28)) = IPT C LLBND(29) = LLBND(28) + 1 LLBND( 0) = NBNDS C No internal boundaries C (only necessary because we want to print the domain) LLBND(NBNDS+2) = LLBND(NBNDS+1) PRINT *, 'Input domain:' CALL PRDOM (LROW, IROW, ICOL, LLBND, ILBND, LBND, + IDOM, NX, NY) RETURN END SUBROUTINE CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U, SPCMON, TOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LEVEL, NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), SPCMON(NPTS), TOL C Ccc PURPOSE: C Force grid refinement. C If for a node IPT SPCMON(IPT) > TOL the 16 surrounding cells will be C refined. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C LEVEL : IN. Current grid level C NPTS : IN. Number of grid points at this level C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C NPDE : IN. Number of PDE components C U : IN. Array of PDE components for the gridpoints C SPCMON : INOUT. C IN: Space monitor values as determined by VLUGR2 C OUT: Changed to a value > TOL where refinement is required C TOL : IN. Tolerance with which SPCMON will be compared C C----------------------------------------------------------------------- C INTEGER I C IF (LEVEL .GE. 3) RETURN DO 10 I = 1, NPTS IF (ABS(X(I)-1.0) .LT. 0.0001 .AND. + ABS(Y(I)-0.1) .LT. 0.0001) THEN SPCMON(I) = 2*TOL ENDIF 10 CONTINUE C RETURN END SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, + LGRID, ISTRUC, LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) REAL T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Control after a successful time step. The solution can be printed, C plotted or compared with the exact solution. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C DT : IN. Current time step size C DTNEW : IN. Time step size for next time step C XL : IN. X-coordinate of lowerleft corner of (virtual) rectangle C YL : IN. Y-coordinate of lowerleft corner of (virtual) rectangle C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C C C Local arrays: INTEGER MAXPTS, NPDE PARAMETER (MAXPTS=10000, NPDE=2) REAL X(MAXPTS), Y(MAXPTS), UEX(MAXPTS*NPDE) C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL REAL DX, DY C C Loop over the grid levels from coarse to fine. C Get physical coordinates of grid points C Compute ||err||_max MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL SETXY (XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), X, Y) DX = DX/2 DY = DY/2 CALL PRERR (LEVEL, T, NPTS, NPDE, X, Y, SOL(LSOL(LEVEL)+1), + UEX) 10 CONTINUE RETURN END SUBROUTINE PRERR (LEVEL, T, NPTS, NPDE, X, Y, U, UEX) INTEGER LEVEL, NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), UEX(NPTS,NPDE) INTEGER I,J REAL RMAX(2) CALL PDEIV (T, X, Y, UEX, NPTS, NPDE) RMAX(1) = 0.0 RMAX(2) = 0.0 DO 10 I = 1, NPTS J = 1 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) J = 2 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) 10 CONTINUE PRINT '(''Error at T='',E9.3,'', level='',I1,'' :'',2E11.3,I10)', + T, LEVEL, RMAX(1), RMAX(2), NPTS RETURN END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C C Burgers' equation, solution wave front at y = x+0.25t, speed of C propagation sqrt(2)/8 perpendicular to wave front. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C REAL EPS PARAMETER (EPS = 1E-3) INTEGER I DO 10 I = 1, NPTS U(I,1) = 0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) U(I,2) = 0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C----------------------------------------------------------------------- C C Burgers' equation Ut = - U.Ux - V.Uy + eps.(Uxx + Uyy) C Vt = - U.Vx - V.Vy + eps.(Vxx + Vyy) C REAL EPS PARAMETER (EPS = 1E-3) INTEGER I DO 10 I = 2, NPTS-1 RES(I,1) = UT(I,1) - + (-U(I,1)*UX(I,1) - U(I,2)*UY(I,1) + EPS*(UXX(I,1)+UYY(I,1))) RES(I,2) = UT(I,2) - + (-U(I,1)*UX(I,2) - U(I,2)*UY(I,2) + EPS*(UXX(I,2)+UYY(I,2))) 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : IN. (0:LLBND(0)+1) C LLBND(0) = NBNDS: total # physical boundaries in actual grid C LLBND(1:NBNDS): pointers to a specific boundary in LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in the list + 1 C NB. corners with 2 different types of boundaries should be C pointed at twice. C ILBND : IN. (NBNDS) C ILBND(IB): type of boundary: C 1: Dirichlet C 2: Lower boundary -I C 3: Left boundary I C 4: Upper boundary I max. first order derivative C 5: Right boundary -I C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C----------------------------------------------------------------------- C C Burgers' equation, Dirichlet boundaries. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C REAL EPS PARAMETER (EPS = 1E-3) INTEGER I, K, NBNDS NBNDS = LLBND(0) DO 10 K = LLBND(1), LLBND(NBNDS+1)-1 I = LBND(K) RES(I,1) = U(I,1) - + (0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) RES(I,2) = U(I,2) - + (0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) 10 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'exmplr.f' then echo shar: will not over-write existing file "'exmplr.f'" else cat << \SHAR_EOF > 'exmplr.f' PROGRAM EXMPLR C C Restart of EXMPL, default values, Jacobian derivatives exact INTEGER MXLEV, NPD, NPTS, LENIWK, LENRWK, LENLWK PARAMETER (MXLEV=2, NPD=2, NPTS=2500) PARAMETER (LENIWK=NPTS*(5*MXLEV+14), + LENRWK=NPTS*NPD*(5*MXLEV + 9+18*NPD), + LENLWK=2*NPTS) C C----------------------------------------------------------------------- C INTEGER LUNDMP PARAMETER (LUNDMP = 89) C INTEGER NPDE, INFO(1), IWK(LENIWK), MNTR LOGICAL LWK(LENLWK) REAL T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, RINFO(1), RWK(LENRWK) C Continuation call of VLUGR2 MNTR = 1 TOUT = 3.0 TOLS = 0.1 TOLT = 0.05 C Default choices INFO(1) = 0 C OPEN(UNIT=LUNDMP,FILE='DUMP',FORM='UNFORMATTED') CALL RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) CLOSE(LUNDMP) C C call main routine CALL VLUGR2 (NPDE, T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, + MNTR) PRINT *, 'VLUGR2 returned with MNTR=', MNTR C OPEN(UNIT=LUNDMP,FILE='DUMP2',FORM='UNFORMATTED') CALL DUMP (LUNDMP, RWK, IWK) CLOSE(LUNDMP) END SUBROUTINE DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + FU, FUX, FUY, FUXX, FUXY, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL F(NPTS,NPDE), T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + A0, DT, DX, DY, UIB(*), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + ABSTOL(NPDE), DEL(NPTS), WORK(2*NPTS*NPDE), + FU(NPTS,NPDE,NPDE), FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), + FUXX(NPTS,NPDE,NPDE),FUXY(NPTS,NPDE,NPDE),FUYY(NPTS,NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUXY : OUT. dF(Uxy)dUxy C FUYY : OUT. dF(Uyy)dUyy C C----------------------------------------------------------------------- C REAL EPS PARAMETER (EPS = 1E-3) C INTEGER IC, IPT, LB, NBNDS C Ccc Loop over the components of the (derivatives of) U IC = 1 C C dF(U,Ut)/dU_ic DO 20 IPT = 1, NPTS FU(IPT,1,IC) = A0 - (-UX(IPT,1)) FU(IPT,2,IC) = - (-UX(IPT,2)) 20 CONTINUE C C dF(Ux)/dUx_ic DO 40 IPT = 1, NPTS FUX(IPT,1,IC) = - (-U(IPT,1)) FUX(IPT,2,IC) = 0.0 40 CONTINUE C C dF(Uy)/dUy_ic DO 50 IPT = 1, NPTS FUY(IPT,1,IC) = - (-U(IPT,2)) FUY(IPT,2,IC) = 0.0 50 CONTINUE C C dF(Uxx)/dUxx_ic DO 60 IPT = 1, NPTS FUXX(IPT,1,IC) = - (EPS) FUXX(IPT,2,IC) = 0.0 60 CONTINUE C C dF(Uxy)/dUxy_ic DO 70 IPT = 1, NPTS FUXY(IPT,1,IC) = 0.0 FUXY(IPT,2,IC) = 0.0 70 CONTINUE C C dF(Uyy)/dUyy_ic DO 80 IPT = 1, NPTS FUYY(IPT,1,IC) = - (EPS) FUYY(IPT,2,IC) = 0.0 80 CONTINUE IC = 2 C C dF(U,Ut)/dU_ic DO 120 IPT = 1, NPTS FU(IPT,1,IC) = - (-UY(IPT,1)) FU(IPT,2,IC) = A0 - (-UY(IPT,2)) 120 CONTINUE C C dF(Ux)/dUx_ic DO 140 IPT = 1, NPTS FUX(IPT,1,IC) = 0.0 FUX(IPT,2,IC) = - (-U(IPT,1)) 140 CONTINUE C C dF(Uy)/dUy_ic DO 150 IPT = 1, NPTS FUY(IPT,1,IC) = 0.0 FUY(IPT,2,IC) = - (-U(IPT,2)) 150 CONTINUE C C dF(Uxx)/dUxx_ic DO 160 IPT = 1, NPTS FUXX(IPT,1,IC) = 0.0 FUXX(IPT,2,IC) = - (EPS) 160 CONTINUE C C dF(Uxy)/dUxy_ic DO 170 IPT = 1, NPTS FUXY(IPT,1,IC) = 0.0 FUXY(IPT,2,IC) = 0.0 170 CONTINUE C C dF(Uyy)/dUyy_ic DO 180 IPT = 1, NPTS FUYY(IPT,1,IC) = 0.0 FUYY(IPT,2,IC) = - (EPS) 180 CONTINUE C C Correct boundaries (incl. the internal) NBNDS = LLBND(0) DO 100 LB = LLBND(1), LLBND(NBNDS+2)-1 IPT = LBND(LB) FU(IPT,1,1) = 1.0 FU(IPT,1,2) = 0.0 FU(IPT,2,1) = 0.0 FU(IPT,2,2) = 1.0 FUX(IPT,1,1) = 0.0 FUX(IPT,1,2) = 0.0 FUX(IPT,2,1) = 0.0 FUX(IPT,2,2) = 0.0 FUY(IPT,1,1) = 0.0 FUY(IPT,1,2) = 0.0 FUY(IPT,2,1) = 0.0 FUY(IPT,2,2) = 0.0 FUXX(IPT,1,1) = 0.0 FUXX(IPT,1,2) = 0.0 FUXX(IPT,2,1) = 0.0 FUXX(IPT,2,2) = 0.0 FUXY(IPT,1,1) = 0.0 FUXY(IPT,1,2) = 0.0 FUXY(IPT,2,1) = 0.0 FUXY(IPT,2,2) = 0.0 FUYY(IPT,1,1) = 0.0 FUYY(IPT,1,2) = 0.0 FUYY(IPT,2,1) = 0.0 FUYY(IPT,2,2) = 0.0 100 CONTINUE RETURN END SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, + LGRID, ISTRUC, LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) REAL T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Control after a successful time step. The solution can be printed, C plotted or compared with the exact solution. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C DT : IN. Current time step size C DTNEW : IN. Time step size for next time step C XL : IN. X-coordinate of lowerleft corner of (virtual) rectangle C YL : IN. Y-coordinate of lowerleft corner of (virtual) rectangle C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C C C Local arrays: INTEGER MAXPTS, NPDE PARAMETER (MAXPTS=10000, NPDE=2) REAL X(MAXPTS), Y(MAXPTS), UEX(MAXPTS*NPDE) C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL REAL DX, DY C C Loop over the grid levels from coarse to fine. C Get physical coordinates of grid points C Compute ||err||_max MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL SETXY (XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), X, Y) DX = DX/2 DY = DY/2 CALL PRERR (LEVEL, T, NPTS, NPDE, X, Y, SOL(LSOL(LEVEL)+1), + UEX) 10 CONTINUE RETURN END SUBROUTINE PRERR (LEVEL, T, NPTS, NPDE, X, Y, U, UEX) INTEGER LEVEL, NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), UEX(NPTS,NPDE) INTEGER I,J REAL RMAX(2) CALL PDEIV (T, X, Y, UEX, NPTS, NPDE) RMAX(1) = 0.0 RMAX(2) = 0.0 DO 10 I = 1, NPTS J = 1 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) J = 2 RMAX(J) = MAX(RMAX(J),ABS(UEX(I,J)-U(I,J))) 10 CONTINUE PRINT '(''Error at T='',E9.3,'', level='',I1,'' :'',2E11.3,I10)', + T, LEVEL, RMAX(1), RMAX(2), NPTS RETURN END SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C C Burgers' equation, solution wave front at y = x+0.25t, speed of C propagation sqrt(2)/8 perpendicular to wave front. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C REAL EPS PARAMETER (EPS = 1E-3) INTEGER I DO 10 I = 1, NPTS U(I,1) = 0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) U(I,2) = 0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS))) 10 CONTINUE RETURN END SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C----------------------------------------------------------------------- C C Burgers' equation Ut = - U.Ux - V.Uy + eps.(Uxx + Uyy) C Vt = - U.Vx - V.Vy + eps.(Vxx + Vyy) C REAL EPS PARAMETER (EPS = 1E-3) INTEGER I DO 10 I = 2, NPTS-1 RES(I,1) = UT(I,1) - + (-U(I,1)*UX(I,1) - U(I,2)*UY(I,1) + EPS*(UXX(I,1)+UYY(I,1))) RES(I,2) = UT(I,2) - + (-U(I,1)*UX(I,2) - U(I,2)*UY(I,2) + EPS*(UXX(I,2)+UYY(I,2))) 10 CONTINUE RETURN END SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : IN. (0:LLBND(0)+1) C LLBND(0) = NBNDS: total # physical boundaries in actual grid C LLBND(1:NBNDS): pointers to a specific boundary in LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in the list + 1 C NB. corners with 2 different types of boundaries should be C pointed at twice. C ILBND : IN. (NBNDS) C ILBND(IB): type of boundary: C 1: Dirichlet C 2: Lower boundary -I C 3: Left boundary I C 4: Upper boundary I max. first order derivative C 5: Right boundary -I C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C----------------------------------------------------------------------- C C Burgers' equation, Dirichlet boundaries. C U = 3/4 - 1/4/(1+exp((-4x+4y-t)/(32*eps))) C V = 3/4 + 1/4/(1+exp((-4x+4y-t)/(32*eps))) C REAL EPS PARAMETER (EPS = 1E-3) INTEGER I, K, NBNDS NBNDS = LLBND(0) DO 10 K = LLBND(1), LLBND(NBNDS+1)-1 I = LBND(K) RES(I,1) = U(I,1) - + (0.75 - 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) RES(I,2) = U(I,2) - + (0.75 + 0.25/(1+EXP((-4*X(I)+4*Y(I)-T)/(32*EPS)))) 10 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'exmplr_output' then echo shar: will not over-write existing file "'exmplr_output'" else cat << \SHAR_EOF > 'exmplr_output' Newton: MAXNIT, MAXJAC, TOLNEW:10, 2, 1. Lin. solver BiCGStab+ILU: MAXLIT, TOLLSB:100, 0.1 Max. grid level exceeded at T= 0.1024390E+01 Error at T=0.102E+01, level=1 : 0.128E-02 0.128E-02 105 Error at T=0.102E+01, level=2 : 0.205E-01 0.205E-01 195 Error at T=0.102E+01, level=3 : 0.372E-01 0.372E-01 435 Max. grid level exceeded at T= 0.1039244E+01 Error at T=0.104E+01, level=1 : 0.338E-02 0.338E-02 105 Error at T=0.104E+01, level=2 : 0.225E-01 0.225E-01 195 Error at T=0.104E+01, level=3 : 0.441E-01 0.441E-01 435 Max. grid level exceeded at T= 0.1068953E+01 Error at T=0.107E+01, level=1 : 0.873E-02 0.873E-02 105 Error at T=0.107E+01, level=2 : 0.873E-02 0.873E-02 195 Error at T=0.107E+01, level=3 : 0.440E-01 0.440E-01 435 Max. grid level exceeded at T= 0.1116052E+01 Error at T=0.112E+01, level=1 : 0.136E-01 0.136E-01 105 Error at T=0.112E+01, level=2 : 0.419E-01 0.419E-01 195 Error at T=0.112E+01, level=3 : 0.578E-01 0.578E-01 453 Max. grid level exceeded at T= 0.1162002E+01 Error at T=0.116E+01, level=1 : 0.191E-01 0.191E-01 105 Error at T=0.116E+01, level=2 : 0.605E-01 0.605E-01 214 Error at T=0.116E+01, level=3 : 0.608E-01 0.608E-01 481 Max. grid level exceeded at T= 0.1209130E+01 Error at T=0.121E+01, level=1 : 0.608E-01 0.608E-01 105 Error at T=0.121E+01, level=2 : 0.688E-01 0.688E-01 214 Error at T=0.121E+01, level=3 : 0.688E-01 0.688E-01 481 Max. grid level exceeded at T= 0.1251769E+01 Error at T=0.125E+01, level=1 : 0.646E-01 0.646E-01 105 Error at T=0.125E+01, level=2 : 0.735E-01 0.735E-01 214 Error at T=0.125E+01, level=3 : 0.735E-01 0.735E-01 453 Max. grid level exceeded at T= 0.1293394E+01 Error at T=0.129E+01, level=1 : 0.174E-01 0.174E-01 105 Error at T=0.129E+01, level=2 : 0.370E-01 0.370E-01 184 Error at T=0.129E+01, level=3 : 0.751E-01 0.751E-01 477 Max. grid level exceeded at T= 0.1335019E+01 Error at T=0.134E+01, level=1 : 0.576E-01 0.576E-01 105 Error at T=0.134E+01, level=2 : 0.783E-01 0.783E-01 184 Error at T=0.134E+01, level=3 : 0.860E-01 0.860E-01 513 Max. grid level exceeded at T= 0.1376643E+01 Error at T=0.138E+01, level=1 : 0.842E-01 0.842E-01 105 Error at T=0.138E+01, level=2 : 0.842E-01 0.842E-01 204 Error at T=0.138E+01, level=3 : 0.899E-01 0.899E-01 513 Max. grid level exceeded at T= 0.1419363E+01 Error at T=0.142E+01, level=1 : 0.620E-01 0.620E-01 105 Error at T=0.142E+01, level=2 : 0.887E-01 0.887E-01 204 Error at T=0.142E+01, level=3 : 0.941E-01 0.941E-01 489 Max. grid level exceeded at T= 0.1459892E+01 Error at T=0.146E+01, level=1 : 0.252E-01 0.252E-01 105 Error at T=0.146E+01, level=2 : 0.705E-01 0.705E-01 194 Error at T=0.146E+01, level=3 : 0.973E-01 0.973E-01 521 Max. grid level exceeded at T= 0.1502673E+01 Error at T=0.150E+01, level=1 : 0.192E-01 0.192E-01 105 Error at T=0.150E+01, level=2 : 0.487E-01 0.487E-01 194 Error at T=0.150E+01, level=3 : 0.906E-01 0.906E-01 513 Max. grid level exceeded at T= 0.1545454E+01 Error at T=0.155E+01, level=1 : 0.340E-01 0.340E-01 105 Error at T=0.155E+01, level=2 : 0.987E-01 0.987E-01 216 Error at T=0.155E+01, level=3 : 0.987E-01 0.987E-01 561 Max. grid level exceeded at T= 0.1590908E+01 Error at T=0.159E+01, level=1 : 0.498E-01 0.498E-01 105 Error at T=0.159E+01, level=2 : 0.894E-01 0.894E-01 196 Error at T=0.159E+01, level=3 : 0.950E-01 0.950E-01 543 Max. grid level exceeded at T= 0.1636363E+01 Error at T=0.164E+01, level=1 : 0.883E-01 0.883E-01 105 Error at T=0.164E+01, level=2 : 0.883E-01 0.883E-01 206 Error at T=0.164E+01, level=3 : 0.996E-01 0.996E-01 525 Max. grid level exceeded at T= 0.1680351E+01 Error at T=0.168E+01, level=1 : 0.490E-01 0.490E-01 105 Error at T=0.168E+01, level=2 : 0.490E-01 0.490E-01 216 Error at T=0.168E+01, level=3 : 0.101E+00 0.101E+00 521 Max. grid level exceeded at T= 0.1725856E+01 Error at T=0.173E+01, level=1 : 0.362E-01 0.362E-01 105 Error at T=0.173E+01, level=2 : 0.833E-01 0.833E-01 216 Error at T=0.173E+01, level=3 : 0.102E+00 0.102E+00 565 Max. grid level exceeded at T= 0.1771361E+01 Error at T=0.177E+01, level=1 : 0.881E-01 0.881E-01 105 Error at T=0.177E+01, level=2 : 0.934E-01 0.934E-01 141 Error at T=0.177E+01, level=3 : 0.103E+00 0.103E+00 407 Max. grid level exceeded at T= 0.1812316E+01 Error at T=0.181E+01, level=1 : 0.769E-01 0.769E-01 105 Error at T=0.181E+01, level=2 : 0.906E-01 0.906E-01 151 Error at T=0.181E+01, level=3 : 0.963E-01 0.963E-01 415 Max. grid level exceeded at T= 0.1851905E+01 Error at T=0.185E+01, level=1 : 0.331E-01 0.331E-01 105 Error at T=0.185E+01, level=2 : 0.841E-01 0.841E-01 145 Error at T=0.185E+01, level=3 : 0.100E+00 0.100E+00 425 Max. grid level exceeded at T= 0.1891495E+01 Error at T=0.189E+01, level=1 : 0.233E-01 0.233E-01 105 Error at T=0.189E+01, level=2 : 0.310E-01 0.310E-01 145 Error at T=0.189E+01, level=3 : 0.947E-01 0.947E-01 421 Max. grid level exceeded at T= 0.1928445E+01 Error at T=0.193E+01, level=1 : 0.337E-01 0.337E-01 105 Error at T=0.193E+01, level=2 : 0.912E-01 0.912E-01 145 Error at T=0.193E+01, level=3 : 0.103E+00 0.103E+00 445 Max. grid level exceeded at T= 0.1968132E+01 Error at T=0.197E+01, level=1 : 0.349E-01 0.349E-01 105 Error at T=0.197E+01, level=2 : 0.963E-01 0.963E-01 145 Error at T=0.197E+01, level=3 : 0.109E+00 0.109E+00 435 Max. grid level exceeded at T= 0.2009407E+01 Error at T=0.201E+01, level=1 : 0.770E-01 0.770E-01 105 Error at T=0.201E+01, level=2 : 0.908E-01 0.908E-01 145 Error at T=0.201E+01, level=3 : 0.984E-01 0.984E-01 403 Max. grid level exceeded at T= 0.2047507E+01 Error at T=0.205E+01, level=1 : 0.900E-01 0.900E-01 105 Error at T=0.205E+01, level=2 : 0.900E-01 0.900E-01 155 Error at T=0.205E+01, level=3 : 0.103E+00 0.103E+00 417 Max. grid level exceeded at T= 0.2085607E+01 Error at T=0.209E+01, level=1 : 0.394E-01 0.394E-01 105 Error at T=0.209E+01, level=2 : 0.394E-01 0.394E-01 145 Error at T=0.209E+01, level=3 : 0.103E+00 0.103E+00 399 Max. grid level exceeded at T= 0.2122182E+01 Error at T=0.212E+01, level=1 : 0.376E-01 0.376E-01 105 Error at T=0.212E+01, level=2 : 0.873E-01 0.873E-01 135 Error at T=0.212E+01, level=3 : 0.106E+00 0.106E+00 411 Max. grid level exceeded at T= 0.2158758E+01 Error at T=0.216E+01, level=1 : 0.923E-01 0.923E-01 105 Error at T=0.216E+01, level=2 : 0.102E+00 0.102E+00 135 Error at T=0.216E+01, level=3 : 0.112E+00 0.112E+00 401 Max. grid level exceeded at T= 0.2196996E+01 Error at T=0.220E+01, level=1 : 0.940E-01 0.940E-01 105 Error at T=0.220E+01, level=2 : 0.940E-01 0.940E-01 145 Error at T=0.220E+01, level=3 : 0.942E-01 0.942E-01 387 Max. grid level exceeded at T= 0.2233496E+01 Error at T=0.223E+01, level=1 : 0.530E-01 0.530E-01 105 Error at T=0.223E+01, level=2 : 0.958E-01 0.958E-01 135 Error at T=0.223E+01, level=3 : 0.104E+00 0.104E+00 387 Max. grid level exceeded at T= 0.2268338E+01 Error at T=0.227E+01, level=1 : 0.232E-01 0.232E-01 105 Error at T=0.227E+01, level=2 : 0.708E-01 0.708E-01 125 Error at T=0.227E+01, level=3 : 0.114E+00 0.114E+00 405 Max. grid level exceeded at T= 0.2303179E+01 Error at T=0.230E+01, level=1 : 0.301E-01 0.301E-01 105 Error at T=0.230E+01, level=2 : 0.621E-01 0.621E-01 125 Error at T=0.230E+01, level=3 : 0.973E-01 0.973E-01 409 Max. grid level exceeded at T= 0.2336361E+01 Error at T=0.234E+01, level=1 : 0.418E-01 0.418E-01 105 Error at T=0.234E+01, level=2 : 0.103E+00 0.103E+00 125 Error at T=0.234E+01, level=3 : 0.104E+00 0.104E+00 409 Max. grid level exceeded at T= 0.2373229E+01 Error at T=0.237E+01, level=1 : 0.348E-01 0.348E-01 105 Error at T=0.237E+01, level=2 : 0.103E+00 0.103E+00 125 Error at T=0.237E+01, level=3 : 0.116E+00 0.116E+00 381 Max. grid level exceeded at T= 0.2410098E+01 Error at T=0.241E+01, level=1 : 0.838E-01 0.838E-01 105 Error at T=0.241E+01, level=2 : 0.918E-01 0.918E-01 125 Error at T=0.241E+01, level=3 : 0.103E+00 0.103E+00 367 Max. grid level exceeded at T= 0.2444798E+01 Error at T=0.244E+01, level=1 : 0.969E-01 0.969E-01 105 Error at T=0.244E+01, level=2 : 0.969E-01 0.969E-01 135 Error at T=0.244E+01, level=3 : 0.107E+00 0.107E+00 395 Max. grid level exceeded at T= 0.2481812E+01 Error at T=0.248E+01, level=1 : 0.489E-01 0.489E-01 105 Error at T=0.248E+01, level=2 : 0.489E-01 0.489E-01 125 Error at T=0.248E+01, level=3 : 0.110E+00 0.110E+00 389 Max. grid level exceeded at T= 0.2516358E+01 Error at T=0.252E+01, level=1 : 0.279E-01 0.279E-01 105 Error at T=0.252E+01, level=2 : 0.852E-01 0.852E-01 115 Error at T=0.252E+01, level=3 : 0.109E+00 0.109E+00 367 Max. grid level exceeded at T= 0.2548601E+01 Error at T=0.255E+01, level=1 : 0.874E-01 0.874E-01 105 Error at T=0.255E+01, level=2 : 0.109E+00 0.109E+00 115 Error at T=0.255E+01, level=3 : 0.114E+00 0.114E+00 353 Max. grid level exceeded at T= 0.2583324E+01 Error at T=0.258E+01, level=1 : 0.105E+00 0.105E+00 105 Error at T=0.258E+01, level=2 : 0.105E+00 0.105E+00 125 Error at T=0.258E+01, level=3 : 0.113E+00 0.113E+00 343 Max. grid level exceeded at T= 0.2618047E+01 Error at T=0.262E+01, level=1 : 0.752E-01 0.752E-01 105 Error at T=0.262E+01, level=2 : 0.907E-01 0.907E-01 115 Error at T=0.262E+01, level=3 : 0.103E+00 0.103E+00 335 Max. grid level exceeded at T= 0.2649876E+01 Error at T=0.265E+01, level=1 : 0.330E-01 0.330E-01 105 Error at T=0.265E+01, level=2 : 0.937E-01 0.937E-01 105 Error at T=0.265E+01, level=3 : 0.107E+00 0.107E+00 349 Max. grid level exceeded at T= 0.2684888E+01 Error at T=0.268E+01, level=1 : 0.214E-01 0.214E-01 105 Error at T=0.268E+01, level=2 : 0.588E-01 0.588E-01 105 Error at T=0.268E+01, level=3 : 0.104E+00 0.104E+00 361 Max. grid level exceeded at T= 0.2716400E+01 Error at T=0.272E+01, level=1 : 0.396E-01 0.396E-01 105 Error at T=0.272E+01, level=2 : 0.624E-01 0.624E-01 105 Error at T=0.272E+01, level=3 : 0.943E-01 0.943E-01 361 Max. grid level exceeded at T= 0.2747911E+01 Error at T=0.275E+01, level=1 : 0.426E-01 0.426E-01 105 Error at T=0.275E+01, level=2 : 0.852E-01 0.852E-01 105 Error at T=0.275E+01, level=3 : 0.100E+00 0.100E+00 343 Max. grid level exceeded at T= 0.2779422E+01 Error at T=0.278E+01, level=1 : 0.473E-01 0.473E-01 105 Error at T=0.278E+01, level=2 : 0.995E-01 0.995E-01 105 Error at T=0.278E+01, level=3 : 0.995E-01 0.995E-01 315 Max. grid level exceeded at T= 0.2810933E+01 Error at T=0.281E+01, level=1 : 0.827E-01 0.827E-01 105 Error at T=0.281E+01, level=2 : 0.857E-01 0.857E-01 105 Error at T=0.281E+01, level=3 : 0.857E-01 0.857E-01 325 Max. grid level exceeded at T= 0.2842444E+01 Error at T=0.284E+01, level=1 : 0.854E-01 0.854E-01 105 Error at T=0.284E+01, level=2 : 0.854E-01 0.854E-01 115 Error at T=0.284E+01, level=3 : 0.896E-01 0.896E-01 335 Max. grid level exceeded at T= 0.2873955E+01 Error at T=0.287E+01, level=1 : 0.436E-01 0.436E-01 105 Error at T=0.287E+01, level=2 : 0.507E-01 0.507E-01 105 Error at T=0.287E+01, level=3 : 0.981E-01 0.981E-01 329 Max. grid level exceeded at T= 0.2905467E+01 Error at T=0.291E+01, level=1 : 0.209E-01 0.209E-01 105 Error at T=0.291E+01, level=2 : 0.321E-01 0.321E-01 85 Error at T=0.291E+01, level=3 : 0.822E-01 0.822E-01 297 Max. grid level exceeded at T= 0.2929100E+01 Error at T=0.293E+01, level=1 : 0.651E-01 0.651E-01 105 Error at T=0.293E+01, level=2 : 0.651E-01 0.651E-01 75 Error at T=0.293E+01, level=3 : 0.835E-01 0.835E-01 257 Max. grid level exceeded at T= 0.2952733E+01 Error at T=0.295E+01, level=1 : 0.914E-01 0.914E-01 105 Error at T=0.295E+01, level=2 : 0.914E-01 0.914E-01 95 Error at T=0.295E+01, level=3 : 0.914E-01 0.914E-01 279 Max. grid level exceeded at T= 0.2976367E+01 Error at T=0.298E+01, level=1 : 0.944E-01 0.944E-01 105 Error at T=0.298E+01, level=2 : 0.944E-01 0.944E-01 95 Error at T=0.298E+01, level=3 : 0.944E-01 0.944E-01 279 Max. grid level exceeded at T= 0.3000000E+01 Error at T=0.300E+01, level=1 : 0.769E-01 0.769E-01 105 Error at T=0.300E+01, level=2 : 0.769E-01 0.769E-01 95 Error at T=0.300E+01, level=3 : 0.770E-01 0.770E-01 275 Statistics: # accepted timesteps = 100, # rejected timesteps = 0 Level # Nit # Jacs # Res 1 200 100 200 2 200 100 200 3 236 100 236 4 90 45 90 5 84 42 84 Nit Level # Lin. sys. it 1 1 406 1 2 531 1 3 765 1 4 1150 1 5 2543 2 1 224 2 2 497 2 3 763 2 4 1129 2 5 1666 3 3 36 VLUGR2 returned with MNTR=1 SHAR_EOF fi # end of overwriting check if test -f 'exmpl_runinfo' then echo shar: will not over-write existing file "'exmpl_runinfo'" else cat << \SHAR_EOF > 'exmpl_runinfo' Newton: MAXNIT, MAXJAC, TOLNEW:10, 2, 1. Lin. solver GCRO + Diag:NRRMAX, MAXLR, MAXL, TOLLSC:1, 5, 20, 0.1 Time integration at T= 0.10E-02, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.1000000E-02 Max. and WRMS norm residual= 0.3124977E+00 0.3809564E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2587571E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2587571E+01 1 0.7940456E-02 0.3068691E-02 2 0.4920185E-04 0.1901469E-04 Result GMRES:2, 5.E-2, 4.9201852097292E-5, 0 1 2 0.4920185E-04 0.2587425E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4920185E-04 1 0.3607606E-06 0.7332256E-02 2 0.8350327E-09 0.1697157E-04 Result GMRES:2, 5.E-2, 8.3503272159052E-10, 0 2 4 0.8350327E-09 0.4924130E-04 NI: 1, NLI: 6, ERLI 0.8350327E-09, ERNI: 0.2587425E+01 Max. and WRMS norm residual= 0.3304106E-05 0.3093770E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3094834E-05 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3094834E-05 1 0.1649133E-07 0.5328664E-02 2 0.7015665E-10 0.2266895E-04 Result GMRES:2, 2.5E-2, 7.0156653323097E-11, 0 1 2 0.7015665E-10 0.3097748E-05 NI: 2, NLI: 3, ERLI 0.7015665E-10, ERNI: 0.3097748E-05 T= 0.10E-02, LEVEL= 1 ,TOLWGT=1.0, SPCMON= 0.25E+01 Time integration at T= 0.10E-02, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.1000000E-02 Max. and WRMS norm residual= 0.6265081E+02 0.9901911E+05 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1253606E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1253606E+03 1 0.6454259E+00 0.5148556E-02 2 0.9677610E-02 0.7719820E-04 Result GMRES:2, 5.E-2, 9.6776103100751E-3, 0 1 2 0.9677610E-02 0.1254414E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9677610E-02 1 0.2099671E-03 0.2169618E-01 2 0.1826068E-05 0.1886899E-03 Result GMRES:2, 5.E-2, 1.8260677147409E-6, 0 2 4 0.1826068E-05 0.9679736E-02 NI: 1, NLI: 6, ERLI 0.1826068E-05, ERNI: 0.1254414E+03 Max. and WRMS norm residual= 0.1062122E+00 0.1155515E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1153519E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1153519E+00 1 0.2056640E-02 0.1782927E-01 2 0.3030768E-04 0.2627411E-03 Result GMRES:2, 2.5E-2, 3.0307680372923E-5, 0 1 2 0.3030768E-04 0.1152602E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3030768E-04 1 0.5561209E-06 0.1834917E-01 2 0.4551796E-08 0.1501862E-03 Result GMRES:2, 2.5E-2, 4.551796120067E-9, 0 2 4 0.4551796E-08 0.3029501E-04 NI: 2, NLI: 6, ERLI 0.4551796E-08, ERNI: 0.1152602E+00 T= 0.10E-02, LEVEL= 2 ,TOLWGT=1.0, SPCMON= 0.25E+01 Time integration at T= 0.10E-02, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.1000000E-02 Max. and WRMS norm residual= 0.8369919E+02 0.1865125E+06 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.2082940E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2082940E+03 1 0.1614652E+01 0.7751796E-02 2 0.3528043E-01 0.1693781E-03 Result GMRES:2, 5.E-2, 3.5280431272551E-2, 0 1 2 0.3528043E-01 0.2091117E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3528043E-01 1 0.1341322E-02 0.3801888E-01 2 0.2417575E-04 0.6852453E-03 Result GMRES:2, 5.E-2, 2.4175749033616E-5, 0 2 4 0.2417575E-04 0.3536114E-01 NI: 1, NLI: 6, ERLI 0.2417575E-04, ERNI: 0.2091116E+03 Max. and WRMS norm residual= 0.3248791E+00 0.4901487E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.4867908E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4867908E+00 1 0.6861875E-02 0.1409615E-01 2 0.2132608E-03 0.4380954E-03 Result GMRES:2, 2.5E-2, 2.1326080551274E-4, 0 1 2 0.2132608E-03 0.4867185E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2132608E-03 1 0.1032655E-04 0.4842217E-01 2 0.2098828E-06 0.9841604E-03 Result GMRES:2, 2.5E-2, 2.0988284042316E-7, 0 2 4 0.2098828E-06 0.2129131E-03 NI: 2, NLI: 6, ERLI 0.2098828E-06, ERNI: 0.4867187E+00 T= 0.10E-02, LEVEL= 3 ,TOLWGT=1.0, SPCMON= 0.21E+01 Time integration at T= 0.10E-02, Grid level= 4, NPTS= 933 Nonlinear system solver at T = 0.1000000E-02 Max. and WRMS norm residual= 0.8551892E+02 0.2770983E+06 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1866 # it. GCRO # it.GMRES Error Estimate 0 0 0.2906686E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2906686E+03 1 0.3439840E+01 0.1183423E-01 2 0.1032455E+00 0.3552000E-03 3 0.4684401E-02 0.1611595E-04 Result GMRES:3, 5.E-2, 4.684400509764E-3, 0 1 3 0.4684401E-02 0.2965172E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4684401E-02 1 0.3111485E-03 0.6642226E-01 2 0.1448775E-04 0.3092764E-02 3 0.9868457E-06 0.2106664E-03 Result GMRES:3, 5.E-2, 9.8684570625204E-7, 0 2 6 0.9868457E-06 0.4714166E-02 NI: 1, NLI: 8, ERLI 0.9868457E-06, ERNI: 0.2965172E+03 Max. and WRMS norm residual= 0.4473919E+00 0.8410583E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1866 # it. GCRO # it.GMRES Error Estimate 0 0 0.8209343E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8209343E+00 1 0.1751207E-01 0.2133188E-01 2 0.5751479E-03 0.7006016E-03 Result GMRES:2, 2.5E-2, 5.7514790634038E-4, 0 1 2 0.5751479E-03 0.8267277E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5751479E-03 1 0.4363949E-04 0.7587524E-01 2 0.2396354E-05 0.4166501E-02 3 0.1522522E-06 0.2647184E-03 Result GMRES:3, 2.5E-2, 1.5225224695537E-7, 0 2 5 0.1522522E-06 0.5756360E-03 NI: 2, NLI: 7, ERLI 0.1522522E-06, ERNI: 0.8267282E+00 T= 0.10E-02, LEVEL= 4 ,TOLWGT=1.0, SPCMON= 0.99E+00 TN= 0.00E+00, DT= 0.10E-02, DTNEW= 0.20E-02, TIMMON= 0.15E-01 Time integration at T= 0.30E-02, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.2998000E-02 Max. and WRMS norm residual= 0.2519034E+01 0.2334955E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.5832523E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5832523E+01 1 0.1016586E-01 0.1742961E-02 2 0.6008963E-04 0.1030251E-04 Result GMRES:2, 5.E-2, 6.008962934574E-5, 0 1 2 0.6008963E-04 0.5834512E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6008963E-04 1 0.4598391E-06 0.7652553E-02 2 0.1283332E-08 0.2135696E-04 Result GMRES:2, 5.E-2, 1.2833321080264E-9, 0 2 4 0.1283332E-08 0.6014312E-04 NI: 1, NLI: 6, ERLI 0.1283332E-08, ERNI: 0.5834512E+01 Max. and WRMS norm residual= 0.2702050E-05 0.2143266E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2571444E-05 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2571444E-05 1 0.1607463E-07 0.6251206E-02 2 0.8567181E-10 0.3331662E-04 Result GMRES:2, 2.5E-2, 8.5671810437856E-11, 0 1 2 0.8567181E-10 0.2571481E-05 NI: 2, NLI: 3, ERLI 0.8567181E-10, ERNI: 0.2571481E-05 T= 0.30E-02, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.30E-02, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.2998000E-02 Max. and WRMS norm residual= 0.2571265E+01 0.2734119E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.4713553E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4713553E+01 1 0.2070335E-01 0.4392303E-02 2 0.1938059E-03 0.4111674E-04 Result GMRES:2, 5.E-2, 1.9380594694057E-4, 0 1 2 0.1938059E-03 0.4720085E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1938059E-03 1 0.3490292E-05 0.1800921E-01 2 0.5698885E-07 0.2940511E-03 Result GMRES:2, 5.E-2, 5.6988845140423E-8, 0 2 4 0.5698885E-07 0.1938742E-03 NI: 1, NLI: 6, ERLI 0.5698885E-07, ERNI: 0.4720084E+01 Max. and WRMS norm residual= 0.9639731E-05 0.1106119E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1325926E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1325926E-04 1 0.1193025E-06 0.8997672E-02 2 0.1759851E-08 0.1327262E-03 Result GMRES:2, 2.5E-2, 1.7598511837783E-9, 0 1 2 0.1759851E-08 0.1328723E-04 NI: 2, NLI: 3, ERLI 0.1759851E-08, ERNI: 0.1328723E-04 T= 0.30E-02, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.30E-02, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.2998000E-02 Max. and WRMS norm residual= 0.2659409E+01 0.3297191E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.4649558E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4649558E+01 1 0.4096669E-01 0.8810878E-02 2 0.6396360E-03 0.1375692E-03 Result GMRES:2, 5.E-2, 6.3963596753812E-4, 0 1 2 0.6396360E-03 0.4668253E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6396360E-03 1 0.2020490E-04 0.3158812E-01 2 0.7122733E-06 0.1113560E-02 3 0.2703729E-07 0.4226981E-04 Result GMRES:3, 5.E-2, 2.7037288515705E-8, 0 2 5 0.2703729E-07 0.6391232E-03 NI: 1, NLI: 7, ERLI 0.2703729E-07, ERNI: 0.4668251E+01 Max. and WRMS norm residual= 0.1380234E-03 0.1899045E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.2266413E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2266413E-03 1 0.3124184E-05 0.1378471E-01 2 0.7678540E-07 0.3387971E-03 Result GMRES:2, 2.5E-2, 7.6785400342085E-8, 0 1 2 0.7678540E-07 0.2273476E-03 NI: 2, NLI: 3, ERLI 0.7678540E-07, ERNI: 0.2273476E-03 T= 0.30E-02, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.22E+01 Time integration at T= 0.30E-02, Grid level= 4, NPTS= 933 Nonlinear system solver at T = 0.2998000E-02 Max. and WRMS norm residual= 0.2745327E+01 0.4863344E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1866 # it. GCRO # it.GMRES Error Estimate 0 0 0.6125761E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6125761E+01 1 0.9421461E-01 0.1538007E-01 2 0.2909991E-02 0.4750416E-03 Result GMRES:2, 5.E-2, 2.9099914737763E-3, 0 1 2 0.2909991E-02 0.6259800E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2909991E-02 1 0.1570932E-03 0.5398408E-01 2 0.1210313E-04 0.4159164E-02 3 0.8551072E-06 0.2938521E-03 Result GMRES:3, 5.E-2, 8.5510723438666E-7, 0 2 5 0.8551072E-06 0.2918153E-02 NI: 1, NLI: 7, ERLI 0.8551072E-06, ERNI: 0.6259778E+01 Max. and WRMS norm residual= 0.5484037E-03 0.8478544E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1866 # it. GCRO # it.GMRES Error Estimate 0 0 0.9912935E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9912935E-03 1 0.2402009E-04 0.2423106E-01 2 0.9062334E-06 0.9141928E-03 Result GMRES:2, 2.5E-2, 9.0623340235135E-7, 0 1 2 0.9062334E-06 0.1002900E-02 NI: 2, NLI: 3, ERLI 0.9062334E-06, ERNI: 0.1002900E-02 T= 0.30E-02, LEVEL= 4 ,TOLWGT=1.0, SPCMON= 0.10E+01 Time integration at T= 0.30E-02, Grid level= 5, NPTS= 2267 Nonlinear system solver at T = 0.2998000E-02 Max. and WRMS norm residual= 0.9431567E+01 0.1359183E+05 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4534 # it. GCRO # it.GMRES Error Estimate 0 0 0.1507146E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1507146E+02 1 0.1285282E+01 0.8527925E-01 2 0.1869220E+00 0.1240238E-01 3 0.2341426E-01 0.1553550E-02 4 0.3250441E-02 0.2156687E-03 Result GMRES:4, 5.E-2, 3.2504407601835E-3, 0 1 4 0.3250441E-02 0.1617039E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3250441E-02 1 0.5714779E-03 0.1758155E+00 2 0.8261352E-04 0.2541610E-01 3 0.1174973E-04 0.3614812E-02 4 0.1759899E-05 0.5414339E-03 Result GMRES:4, 5.E-2, 1.7598987166929E-6, 0 2 8 0.1759899E-05 0.3245485E-02 NI: 1, NLI: 10, ERLI 0.1759899E-05, ERNI: 0.1617046E+02 Max. and WRMS norm residual= 0.1218658E-01 0.9071501E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4534 # it. GCRO # it.GMRES Error Estimate 0 0 0.9739836E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9739836E-02 1 0.6759194E-03 0.6939741E-01 2 0.9941862E-04 0.1020742E-01 3 0.1659889E-04 0.1704226E-02 4 0.2335639E-05 0.2398027E-03 Result GMRES:4, 2.5E-2, 2.3356392873872E-6, 0 1 4 0.2335639E-05 0.1005804E-01 NI: 2, NLI: 5, ERLI 0.2335639E-05, ERNI: 0.1005804E-01 T= 0.30E-02, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.61E+00 TN= 0.10E-02, DT= 0.20E-02, DTNEW= 0.40E-02, TIMMON= 0.79E-01 Time integration at T= 0.70E-02, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.6986008E-02 Max. and WRMS norm residual= 0.1921808E+01 0.1788237E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1104866E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1104866E+02 1 0.4660126E-01 0.4217819E-02 2 0.5798277E-03 0.5247945E-04 Result GMRES:2, 5.E-2, 5.7982773260555E-4, 0 1 2 0.5798277E-03 0.1105332E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5798277E-03 1 0.9428081E-05 0.1626014E-01 2 0.5447638E-07 0.9395269E-04 Result GMRES:2, 5.E-2, 5.447637784157E-8, 0 2 4 0.5447638E-07 0.5809358E-03 NI: 1, NLI: 6, ERLI 0.5447638E-07, ERNI: 0.1105332E+02 Max. and WRMS norm residual= 0.2084027E-04 0.1680796E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.4025353E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4025353E-04 1 0.5403361E-06 0.1342332E-01 2 0.4896161E-08 0.1216331E-03 Result GMRES:2, 2.5E-2, 4.8961605226586E-9, 0 1 2 0.4896161E-08 0.4033928E-04 NI: 2, NLI: 3, ERLI 0.4896161E-08, ERNI: 0.4033928E-04 T= 0.70E-02, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.28E+01 Time integration at T= 0.70E-02, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.6986008E-02 Max. and WRMS norm residual= 0.2081405E+01 0.2236046E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.8609731E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8609731E+01 1 0.7895409E-01 0.9170332E-02 2 0.1747616E-02 0.2029815E-03 Result GMRES:2, 5.E-2, 1.7476164050496E-3, 0 1 2 0.1747616E-02 0.8627146E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1747616E-02 1 0.7275119E-04 0.4162881E-01 2 0.2357020E-05 0.1348706E-02 3 0.8833182E-07 0.5054417E-04 Result GMRES:3, 5.E-2, 8.8331823561318E-8, 0 2 5 0.8833182E-07 0.1748318E-02 NI: 1, NLI: 7, ERLI 0.8833182E-07, ERNI: 0.8627141E+01 Max. and WRMS norm residual= 0.8260108E-04 0.8365246E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.2001270E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2001270E-03 1 0.3767614E-05 0.1882611E-01 2 0.1113394E-06 0.5563439E-03 Result GMRES:2, 2.5E-2, 1.1133944252145E-7, 0 1 2 0.1113394E-06 0.2009689E-03 NI: 2, NLI: 3, ERLI 0.1113394E-06, ERNI: 0.2009689E-03 T= 0.70E-02, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.70E-02, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.6986008E-02 Max. and WRMS norm residual= 0.2350580E+01 0.3048808E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.8760526E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8760526E+01 1 0.1441406E+00 0.1645342E-01 2 0.4821727E-02 0.5503924E-03 Result GMRES:2, 5.E-2, 4.8217270887607E-3, 0 1 2 0.4821727E-02 0.8828237E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4821727E-02 1 0.3404862E-03 0.7061498E-01 2 0.2360971E-04 0.4896525E-02 3 0.1718212E-05 0.3563478E-03 Result GMRES:3, 5.E-2, 1.7182116181896E-6, 0 2 5 0.1718212E-05 0.4815646E-02 NI: 1, NLI: 7, ERLI 0.1718212E-05, ERNI: 0.8828208E+01 Max. and WRMS norm residual= 0.7288796E-03 0.8382065E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.1989542E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1989542E-02 1 0.5046748E-04 0.2536637E-01 2 0.2684681E-05 0.1349396E-02 3 0.2069819E-06 0.1040349E-03 Result GMRES:3, 2.5E-2, 2.069818521148E-7, 0 1 3 0.2069819E-06 0.2001489E-02 NI: 2, NLI: 4, ERLI 0.2069819E-06, ERNI: 0.2001489E-02 T= 0.70E-02, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.23E+01 Time integration at T= 0.70E-02, Grid level= 4, NPTS= 997 Nonlinear system solver at T = 0.6986008E-02 Max. and WRMS norm residual= 0.2834373E+01 0.4736759E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1994 # it. GCRO # it.GMRES Error Estimate 0 0 0.1165791E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1165791E+02 1 0.2954137E+00 0.2534020E-01 2 0.1800375E-01 0.1544338E-02 3 0.2256470E-02 0.1935570E-03 Result GMRES:3, 5.E-2, 2.256469727987E-3, 0 1 3 0.2256470E-02 0.1215997E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2256470E-02 1 0.4225068E-03 0.1872424E+00 2 0.4468125E-04 0.1980139E-01 3 0.6803119E-05 0.3014939E-02 4 0.9725540E-06 0.4310069E-03 Result GMRES:4, 5.E-2, 9.7255402368166E-7, 0 2 7 0.9725540E-06 0.2253853E-02 NI: 1, NLI: 9, ERLI 0.9725540E-06, ERNI: 0.1215996E+02 Max. and WRMS norm residual= 0.2426355E-02 0.3819154E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1994 # it. GCRO # it.GMRES Error Estimate 0 0 0.8712018E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8712018E-02 1 0.3268108E-03 0.3751264E-01 2 0.2718766E-04 0.3120708E-02 3 0.4433489E-05 0.5088934E-03 Result GMRES:3, 2.5E-2, 4.4334889277596E-6, 0 1 3 0.4433489E-05 0.8860599E-02 NI: 2, NLI: 4, ERLI 0.4433489E-05, ERNI: 0.8860599E-02 T= 0.70E-02, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.96E+00 Time integration at T= 0.70E-02, Grid level= 5, NPTS= 2267 Nonlinear system solver at T = 0.6986008E-02 Max. and WRMS norm residual= 0.5096713E+01 0.7491417E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4534 # it. GCRO # it.GMRES Error Estimate 0 0 0.1509776E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1509776E+02 1 0.2261791E+01 0.1498097E+00 2 0.6654337E+00 0.4407500E-01 3 0.1325531E+00 0.8779656E-02 4 0.3215580E-01 0.2129840E-02 5 0.8415188E-02 0.5573800E-03 Result GMRES:5, 5.E-2, 8.4151875485952E-3, 0 1 5 0.8415188E-02 0.1783206E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8415188E-02 1 0.2577106E-02 0.3062446E+00 2 0.7013619E-03 0.8334478E-01 3 0.1732643E-03 0.2058948E-01 4 0.4834589E-04 0.5745076E-02 5 0.1293520E-04 0.1537126E-02 6 0.3734403E-05 0.4437694E-03 Result GMRES:6, 5.E-2, 3.734403108745E-6, 0 2 11 0.3734403E-05 0.8550291E-02 NI: 1, NLI: 13, ERLI 0.3734403E-05, ERNI: 0.1783228E+02 Max. and WRMS norm residual= 0.6907381E-02 0.9644119E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4534 # it. GCRO # it.GMRES Error Estimate 0 0 0.1870853E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1870853E-01 1 0.2060833E-02 0.1101547E+00 2 0.6250681E-03 0.3341085E-01 3 0.1720059E-03 0.9193982E-02 4 0.3415030E-04 0.1825386E-02 5 0.8898429E-05 0.4756347E-03 Result GMRES:5, 2.5E-2, 8.8984289255908E-6, 0 1 5 0.8898429E-05 0.2109879E-01 NI: 2, NLI: 6, ERLI 0.8898429E-05, ERNI: 0.2109879E-01 T= 0.70E-02, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.55E+00 TN= 0.30E-02, DT= 0.40E-02, DTNEW= 0.80E-02, TIMMON= 0.87E-01 Time integration at T= 0.15E-01, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.1493012E-01 Max. and WRMS norm residual= 0.1825466E+01 0.1703476E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2151773E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2151773E+02 1 0.1840669E+00 0.8554198E-02 2 0.4598234E-02 0.2136951E-03 Result GMRES:2, 5.E-2, 4.5982339617973E-3, 0 1 2 0.4598234E-02 0.2153659E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4598234E-02 1 0.1501131E-03 0.3264582E-01 2 0.1745156E-05 0.3795275E-03 Result GMRES:2, 5.E-2, 1.7451563246915E-6, 0 2 4 0.1745156E-05 0.4614737E-02 NI: 1, NLI: 6, ERLI 0.1745156E-05, ERNI: 0.2153658E+02 Max. and WRMS norm residual= 0.7841032E-04 0.5858212E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2796968E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2796968E-03 1 0.7732677E-05 0.2764664E-01 2 0.1168210E-06 0.4176702E-03 Result GMRES:2, 2.5E-2, 1.1682100032E-7, 0 1 2 0.1168210E-06 0.2809449E-03 NI: 2, NLI: 3, ERLI 0.1168210E-06, ERNI: 0.2809449E-03 T= 0.15E-01, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.31E+01 Time integration at T= 0.15E-01, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.1493012E-01 Max. and WRMS norm residual= 0.1990284E+01 0.2145833E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1670574E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1670574E+02 1 0.3082522E+00 0.1845188E-01 2 0.1380423E-01 0.8263168E-03 Result GMRES:2, 5.E-2, 1.3804233348944E-2, 0 1 2 0.1380423E-01 0.1677441E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1380423E-01 1 0.1151515E-02 0.8341750E-01 2 0.7359891E-04 0.5331618E-02 3 0.5458838E-05 0.3954467E-03 Result GMRES:3, 5.E-2, 5.4588379950337E-6, 0 2 5 0.5458838E-05 0.1379329E-01 NI: 1, NLI: 7, ERLI 0.5458838E-05, ERNI: 0.1677434E+02 Max. and WRMS norm residual= 0.3278468E-03 0.3023610E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1440364E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1440364E-02 1 0.5491010E-04 0.3812238E-01 2 0.3296907E-05 0.2288940E-02 3 0.2459617E-06 0.1707636E-03 Result GMRES:3, 2.5E-2, 2.4596170412469E-7, 0 1 3 0.2459617E-06 0.1451448E-02 NI: 2, NLI: 4, ERLI 0.2459617E-06, ERNI: 0.1451448E-02 T= 0.15E-01, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.15E-01, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.1493012E-01 Max. and WRMS norm residual= 0.2264831E+01 0.3017055E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.1718277E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1718277E+02 1 0.5470873E+00 0.3183929E-01 2 0.3671133E-01 0.2136520E-02 3 0.4746633E-02 0.2762438E-03 Result GMRES:3, 5.E-2, 4.7466334288358E-3, 0 1 3 0.4746633E-02 0.1744590E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4746633E-02 1 0.9238292E-03 0.1946283E+00 2 0.9657963E-04 0.2034697E-01 3 0.1335728E-04 0.2814053E-02 4 0.2048096E-05 0.4314840E-03 Result GMRES:4, 5.E-2, 2.048096257487E-6, 0 2 7 0.2048096E-05 0.4684594E-02 NI: 1, NLI: 9, ERLI 0.2048096E-05, ERNI: 0.1744586E+02 Max. and WRMS norm residual= 0.3388003E-02 0.3796641E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.1783807E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1783807E-01 1 0.8731269E-03 0.4894738E-01 2 0.8742903E-04 0.4901260E-02 3 0.1319532E-04 0.7397281E-03 Result GMRES:3, 2.5E-2, 1.3195323050578E-5, 0 1 3 0.1319532E-04 0.1807236E-01 NI: 2, NLI: 4, ERLI 0.1319532E-04, ERNI: 0.1807236E-01 T= 0.15E-01, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.24E+01 Time integration at T= 0.15E-01, Grid level= 4, NPTS= 1005 Nonlinear system solver at T = 0.1493012E-01 Max. and WRMS norm residual= 0.3394293E+01 0.4992408E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2010 # it. GCRO # it.GMRES Error Estimate 0 0 0.2334666E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2334666E+02 1 0.1162001E+01 0.4977161E-01 2 0.1362044E+00 0.5834000E-02 3 0.3533336E-01 0.1513423E-02 4 0.9227798E-02 0.3952513E-03 Result GMRES:4, 5.E-2, 9.2277981249406E-3, 0 1 4 0.9227798E-02 0.2523954E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9227798E-02 1 0.3034688E-02 0.3288637E+00 2 0.8079040E-03 0.8755111E-01 3 0.1545708E-03 0.1675056E-01 4 0.4832095E-04 0.5236455E-02 5 0.1250177E-04 0.1354795E-02 6 0.3261015E-05 0.3533904E-03 Result GMRES:6, 5.E-2, 3.2610153344697E-6, 0 2 10 0.3261015E-05 0.9025163E-02 NI: 1, NLI: 12, ERLI 0.3261015E-05, ERNI: 0.2523944E+02 Max. and WRMS norm residual= 0.1301990E-01 0.1854697E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2010 # it. GCRO # it.GMRES Error Estimate 0 0 0.8062615E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8062615E-01 1 0.5575560E-02 0.6915324E-01 2 0.8261937E-03 0.1024722E-01 3 0.2468989E-03 0.3062268E-02 4 0.5471304E-04 0.6786016E-03 Result GMRES:4, 2.5E-2, 5.4713040131188E-5, 0 1 4 0.5471304E-04 0.8249215E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5471304E-04 1 0.1805770E-04 0.3300439E+00 2 0.4684595E-05 0.8562118E-01 3 0.1133933E-05 0.2072509E-01 4 0.2988326E-06 0.5461816E-02 5 0.8454590E-07 0.1545261E-02 6 0.2320777E-07 0.4241726E-03 Result GMRES:6, 2.5E-2, 2.3207773638089E-8, 0 2 10 0.2320777E-07 0.5332071E-04 NI: 2, NLI: 12, ERLI 0.2320777E-07, ERNI: 0.8249238E-01 T= 0.15E-01, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.90E+00 TN= 0.70E-02, DT= 0.79E-02, DTNEW= 0.16E-01, TIMMON= 0.11E+00 Time integration at T= 0.31E-01, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.3081834E-01 Max. and WRMS norm residual= 0.1978195E+01 0.1855862E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.4064466E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4064466E+02 1 0.6066791E+00 0.1492642E-01 2 0.2934393E-01 0.7219628E-03 Result GMRES:2, 5.E-2, 2.9343929560588E-2, 0 1 2 0.2934393E-01 0.4074887E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2934393E-01 1 0.1841303E-02 0.6274902E-01 2 0.4252285E-04 0.1449119E-02 3 0.2415057E-05 0.8230175E-04 Result GMRES:3, 5.E-2, 2.4150568493954E-6, 0 2 5 0.2415057E-05 0.2952547E-01 NI: 1, NLI: 7, ERLI 0.2415057E-05, ERNI: 0.4074871E+02 Max. and WRMS norm residual= 0.2591792E-03 0.2038040E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1947971E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1947971E-02 1 0.1070071E-03 0.5493261E-01 2 0.2754446E-05 0.1414008E-02 3 0.1344240E-06 0.6900722E-04 Result GMRES:3, 2.5E-2, 1.3442404425522E-7, 0 1 3 0.1344240E-06 0.1966496E-02 NI: 2, NLI: 4, ERLI 0.1344240E-06, ERNI: 0.1966496E-02 T= 0.31E-01, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.36E+01 Time integration at T= 0.31E-01, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.3081834E-01 Max. and WRMS norm residual= 0.2154637E+01 0.2326817E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.3292594E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3292594E+02 1 0.1180763E+01 0.3586116E-01 2 0.9464044E-01 0.2874343E-02 3 0.1180246E-01 0.3584548E-03 Result GMRES:3, 5.E-2, 1.1802462188699E-2, 0 1 3 0.1180246E-01 0.3327953E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1180246E-01 1 0.2275811E-02 0.1928251E+00 2 0.2574599E-03 0.2181409E-01 3 0.2807648E-04 0.2378866E-02 4 0.3517272E-05 0.2980117E-03 Result GMRES:4, 5.E-2, 3.5172718397714E-6, 0 2 7 0.3517272E-05 0.1164281E-01 NI: 1, NLI: 9, ERLI 0.3517272E-05, ERNI: 0.3327944E+02 Max. and WRMS norm residual= 0.9776045E-03 0.9138729E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.8682852E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8682852E-02 1 0.6759495E-03 0.7784879E-01 2 0.8876442E-04 0.1022296E-01 3 0.1293484E-04 0.1489699E-02 4 0.1606429E-05 0.1850116E-03 Result GMRES:4, 2.5E-2, 1.6064286079722E-6, 0 1 4 0.1606429E-05 0.8767475E-02 NI: 2, NLI: 5, ERLI 0.1606429E-05, ERNI: 0.8767475E-02 T= 0.31E-01, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.36E+01 Time integration at T= 0.31E-01, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.3081834E-01 Max. and WRMS norm residual= 0.2439995E+01 0.3129889E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.3434986E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3434986E+02 1 0.2382825E+01 0.6936928E-01 2 0.3017916E+00 0.8785818E-02 3 0.6640534E-01 0.1933206E-02 4 0.1898566E-01 0.5527144E-03 Result GMRES:4, 5.E-2, 1.8985660477868E-2, 0 1 4 0.1898566E-01 0.3544861E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1898566E-01 1 0.6788641E-02 0.3575668E+00 2 0.1632546E-02 0.8598837E-01 3 0.3430140E-03 0.1806701E-01 4 0.9679941E-04 0.5098554E-02 5 0.2737217E-04 0.1441729E-02 6 0.5441797E-05 0.2866267E-03 Result GMRES:6, 5.E-2, 5.4417972259105E-6, 0 2 10 0.5441797E-05 0.1798766E-01 NI: 1, NLI: 12, ERLI 0.5441797E-05, ERNI: 0.3544869E+02 Max. and WRMS norm residual= 0.1084702E-01 0.1286411E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.1187335E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1187335E+00 1 0.1265369E-01 0.1065722E+00 2 0.2477000E-02 0.2086185E-01 3 0.7183341E-03 0.6049972E-02 4 0.1717883E-03 0.1446840E-02 5 0.4439495E-04 0.3739043E-03 Result GMRES:5, 2.5E-2, 4.4394949540481E-5, 0 1 5 0.4439495E-04 0.1215667E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4439495E-04 1 0.1583724E-04 0.3567352E+00 2 0.3860104E-05 0.8694917E-01 3 0.1060087E-05 0.2387855E-01 4 0.2376149E-06 0.5352296E-02 5 0.5296404E-07 0.1193020E-02 6 0.1608830E-07 0.3623903E-03 Result GMRES:6, 2.5E-2, 1.6088300788704E-8, 0 2 11 0.1608830E-07 0.4223677E-04 NI: 2, NLI: 13, ERLI 0.1608830E-07, ERNI: 0.1215671E+00 T= 0.31E-01, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.31E-01, Grid level= 4, NPTS= 1005 Nonlinear system solver at T = 0.3081834E-01 Max. and WRMS norm residual= 0.2964946E+01 0.4562476E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2010 # it. GCRO # it.GMRES Error Estimate 0 0 0.4018420E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4018420E+02 1 0.4837995E+01 0.1203954E+00 2 0.1232616E+01 0.3067414E-01 3 0.5324127E+00 0.1324930E-01 4 0.2436834E+00 0.6064159E-02 5 0.9665421E-01 0.2405279E-02 6 0.4440365E-01 0.1105003E-02 7 0.1927512E-01 0.4796690E-03 Result GMRES:7, 5.E-2, 1.9275118334675E-2, 0 1 7 0.1927512E-01 0.4696065E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1927512E-01 1 0.1035407E-01 0.5371728E+00 2 0.4424484E-02 0.2295438E+00 3 0.1859846E-02 0.9648947E-01 4 0.8619788E-03 0.4471977E-01 5 0.3858790E-03 0.2001954E-01 6 0.1725157E-03 0.8950178E-02 7 0.8025991E-04 0.4163913E-02 8 0.3685773E-04 0.1912192E-02 9 0.1700843E-04 0.8824032E-03 Result GMRES:9, 5.E-2, 1.7008425827875E-5, 0 2 16 0.1700843E-04 0.1829761E-01 NI: 1, NLI: 18, ERLI 0.1700843E-04, ERNI: 0.4696124E+02 Max. and WRMS norm residual= 0.3286337E-01 0.4875832E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2010 # it. GCRO # it.GMRES Error Estimate 0 0 0.3868713E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3868713E+00 1 0.6443710E-01 0.1665595E+00 2 0.1879728E-01 0.4858794E-01 3 0.9541553E-02 0.2466338E-01 4 0.3312400E-02 0.8562020E-02 5 0.1586109E-02 0.4099837E-02 6 0.6535215E-03 0.1689248E-02 7 0.2989289E-03 0.7726832E-03 Result GMRES:7, 2.5E-2, 2.9892893928165E-4, 0 1 7 0.2989289E-03 0.4168877E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2989289E-03 1 0.1640650E-03 0.5488429E+00 2 0.6528948E-04 0.2184114E+00 3 0.3042507E-04 0.1017803E+00 4 0.1292564E-04 0.4323985E-01 5 0.6001216E-05 0.2007573E-01 6 0.2725273E-05 0.9116793E-02 7 0.1214915E-05 0.4064227E-02 8 0.5788582E-06 0.1936441E-02 9 0.2577087E-06 0.8621070E-03 Result GMRES:9, 2.5E-2, 2.5770871770139E-7, 0 2 16 0.2577087E-06 0.2802057E-03 NI: 2, NLI: 18, ERLI 0.2577087E-06, ERNI: 0.4168953E+00 T= 0.31E-01, LEVEL= 4 ,TOLWGT=1.0, SPCMON= 0.79E+00 TN= 0.15E-01, DT= 0.16E-01, DTNEW= 0.32E-01, TIMMON= 0.22E+00 Time integration at T= 0.62E-01, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.6208227E-01 Max. and WRMS norm residual= 0.2006651E+01 0.1909486E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6320650E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6320650E+02 1 0.1663045E+01 0.2631130E-01 2 0.1841636E+00 0.2913681E-02 3 0.1500349E-01 0.2373725E-03 Result GMRES:3, 5.E-2, 1.5003487896021E-2, 0 1 3 0.1500349E-01 0.6373902E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1500349E-01 1 0.1577936E-02 0.1051713E+00 2 0.1551145E-03 0.1033856E-01 3 0.8366369E-05 0.5576283E-03 Result GMRES:3, 5.E-2, 8.3663690490315E-6, 0 2 6 0.8366369E-05 0.1500851E-01 NI: 1, NLI: 8, ERLI 0.8366369E-05, ERNI: 0.6373940E+02 Max. and WRMS norm residual= 0.4163241E-03 0.3439807E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6521279E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6521279E-02 1 0.5652497E-03 0.8667773E-01 2 0.3661452E-04 0.5614622E-02 3 0.2824913E-05 0.4331839E-03 Result GMRES:3, 2.5E-2, 2.8249131041764E-6, 0 1 3 0.2824913E-05 0.6613609E-02 NI: 2, NLI: 4, ERLI 0.2824913E-05, ERNI: 0.6613609E-02 T= 0.62E-01, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.44E+01 Time integration at T= 0.62E-01, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.6208227E-01 Max. and WRMS norm residual= 0.2201276E+01 0.2405903E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.5730824E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5730824E+02 1 0.4325727E+01 0.7548176E-01 2 0.6766223E+00 0.1180672E-01 3 0.1534537E+00 0.2677689E-02 4 0.4289151E-01 0.7484353E-03 Result GMRES:4, 5.E-2, 4.2891507416191E-2, 0 1 4 0.4289151E-01 0.5893475E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4289151E-01 1 0.1606002E-01 0.3744335E+00 2 0.3579884E-02 0.8346370E-01 3 0.6769860E-03 0.1578368E-01 4 0.1241291E-03 0.2894026E-02 5 0.3383035E-04 0.7887424E-03 Result GMRES:5, 5.E-2, 3.3830352135253E-5, 0 2 9 0.3383035E-04 0.4053689E-01 NI: 1, NLI: 11, ERLI 0.3383035E-04, ERNI: 0.5893473E+02 Max. and WRMS norm residual= 0.2988255E-02 0.4135589E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.7850171E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7850171E-01 1 0.1035256E-01 0.1318768E+00 2 0.2030979E-02 0.2587178E-01 3 0.5123555E-03 0.6526680E-02 4 0.1337697E-03 0.1704036E-02 5 0.3384938E-04 0.4311929E-03 Result GMRES:5, 2.5E-2, 3.3849376875597E-5, 0 1 5 0.3384938E-04 0.8264134E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3384938E-04 1 0.1099122E-04 0.3247098E+00 2 0.2549608E-05 0.7532215E-01 3 0.6713487E-06 0.1983341E-01 4 0.1418634E-06 0.4191019E-02 5 0.2353920E-07 0.6954102E-03 Result GMRES:5, 2.5E-2, 2.3539201444133E-8, 0 2 10 0.2353920E-07 0.3249762E-04 NI: 2, NLI: 12, ERLI 0.2353920E-07, ERNI: 0.8264148E-01 T= 0.62E-01, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.42E+01 Time integration at T= 0.62E-01, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.6208227E-01 Max. and WRMS norm residual= 0.2496867E+01 0.3219927E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.6583030E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6583030E+02 1 0.9360506E+01 0.1421915E+00 2 0.2429306E+01 0.3690255E-01 3 0.1046302E+01 0.1589393E-01 4 0.4933587E+00 0.7494402E-02 5 0.1907173E+00 0.2897106E-02 6 0.8791683E-01 0.1335507E-02 7 0.3785524E-01 0.5750428E-03 Result GMRES:7, 5.E-2, 3.7855240177087E-2, 0 1 7 0.3785524E-01 0.6986521E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3785524E-01 1 0.2094131E-01 0.5531945E+00 2 0.9303165E-02 0.2457563E+00 3 0.3628380E-02 0.9584881E-01 4 0.1656793E-02 0.4376654E-01 5 0.7027013E-03 0.1856285E-01 6 0.2698616E-03 0.7128777E-02 7 0.1114557E-03 0.2944260E-02 8 0.5014567E-04 0.1324669E-02 9 0.2004776E-04 0.5295900E-03 Result GMRES:9, 5.E-2, 2.0047755524495E-5, 0 2 16 0.2004776E-04 0.3408556E-01 NI: 1, NLI: 18, ERLI 0.2004776E-04, ERNI: 0.6986610E+02 Max. and WRMS norm residual= 0.4744880E-01 0.6707907E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.1203119E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1203119E+01 1 0.2442110E+00 0.2029817E+00 2 0.8347483E-01 0.6938205E-01 3 0.4114009E-01 0.3419454E-01 4 0.1552585E-01 0.1290467E-01 5 0.6961504E-02 0.5786216E-02 6 0.2935085E-02 0.2439565E-02 7 0.1300299E-02 0.1080774E-02 8 0.5702134E-03 0.4739461E-03 Result GMRES:8, 2.5E-2, 5.7021341587217E-4, 0 1 8 0.5702134E-03 0.1280386E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5702134E-03 1 0.3090351E-03 0.5419639E+00 2 0.1331377E-03 0.2334875E+00 3 0.5723011E-04 0.1003661E+00 4 0.2473122E-04 0.4337186E-01 5 0.1014694E-04 0.1779499E-01 6 0.4573139E-05 0.8020049E-02 7 0.1850074E-05 0.3244529E-02 8 0.6977471E-06 0.1223660E-02 9 0.3228930E-06 0.5662669E-03 Result GMRES:9, 2.5E-2, 3.2289296800718E-7, 0 2 17 0.3228930E-06 0.5058155E-03 NI: 2, NLI: 19, ERLI 0.3228930E-06, ERNI: 0.1280384E+01 T= 0.62E-01, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.62E-01, Grid level= 4, NPTS= 1035 Nonlinear system solver at T = 0.6208227E-01 Max. and WRMS norm residual= 0.2795502E+01 0.4557870E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2070 # it. GCRO # it.GMRES Error Estimate 0 0 0.6991392E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6991392E+02 1 0.1783482E+02 0.2550968E+00 2 0.8334210E+01 0.1192067E+00 3 0.5386688E+01 0.7704743E-01 4 0.3312862E+01 0.4738487E-01 5 0.1938174E+01 0.2772229E-01 6 0.1260307E+01 0.1802656E-01 7 0.7548164E+00 0.1079637E-01 8 0.4824304E+00 0.6900349E-02 9 0.3008208E+00 0.4302731E-02 10 0.1906762E+00 0.2727299E-02 11 0.1223310E+00 0.1749737E-02 12 0.7700425E-01 0.1101415E-02 13 0.4987720E-01 0.7134088E-03 Result GMRES:13, 5.E-2, 4.9877204761144E-2, 0 1 13 0.4987720E-01 0.9148352E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4987720E-01 1 0.3633037E-01 0.7283962E+00 2 0.2193381E-01 0.4397562E+00 3 0.1394284E-01 0.2795434E+00 4 0.8956023E-02 0.1795614E+00 5 0.5587552E-02 0.1120262E+00 6 0.3735163E-02 0.7488718E-01 7 0.2317860E-02 0.4647134E-01 8 0.1544845E-02 0.3097297E-01 9 0.9816756E-03 0.1968185E-01 10 0.6443086E-03 0.1291790E-01 11 0.4161090E-03 0.8342669E-02 12 0.2706882E-03 0.5427093E-02 13 0.1765178E-03 0.3539047E-02 14 0.1141067E-03 0.2287752E-02 15 0.7429792E-04 0.1489617E-02 16 0.4749411E-04 0.9522207E-03 Result GMRES:16, 5.E-2, 4.7494106514274E-5, 0 2 29 0.4749411E-04 0.4919917E-01 NI: 1, NLI: 31, ERLI 0.4749411E-04, ERNI: 0.9148619E+02 Max. and WRMS norm residual= 0.1511747E+00 0.1930775E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2070 # it. GCRO # it.GMRES Error Estimate 0 0 0.2603009E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2603009E+01 1 0.7915305E+00 0.3040829E+00 2 0.3704801E+00 0.1423276E+00 3 0.2566994E+00 0.9861639E-01 4 0.1227879E+00 0.4717151E-01 5 0.8362102E-01 0.3212475E-01 6 0.4609644E-01 0.1770890E-01 7 0.3030126E-01 0.1164086E-01 8 0.1812435E-01 0.6962844E-02 9 0.1160355E-01 0.4457745E-02 10 0.7314946E-02 0.2810188E-02 11 0.4598608E-02 0.1766650E-02 12 0.2964343E-02 0.1138814E-02 13 0.1865588E-02 0.7167044E-03 Result GMRES:13, 2.5E-2, 1.865588166501E-3, 0 1 13 0.1865588E-02 0.2905850E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1865588E-02 1 0.1351942E-02 0.7246736E+00 2 0.8163270E-03 0.4375708E+00 3 0.5171630E-03 0.2772118E+00 4 0.3248116E-03 0.1741068E+00 5 0.2081444E-03 0.1115704E+00 6 0.1337554E-03 0.7169612E-01 7 0.8525509E-04 0.4569878E-01 8 0.5562589E-04 0.2981681E-01 9 0.3550678E-04 0.1903248E-01 10 0.2318383E-04 0.1242709E-01 11 0.1484202E-04 0.7955680E-02 12 0.9716349E-05 0.5208196E-02 13 0.6218655E-05 0.3333348E-02 14 0.4036084E-05 0.2163438E-02 15 0.2564633E-05 0.1374705E-02 16 0.1622970E-05 0.8699506E-03 Result GMRES:16, 2.5E-2, 1.6229696055596E-6, 0 2 29 0.1622970E-05 0.1816795E-02 NI: 2, NLI: 31, ERLI 0.1622970E-05, ERNI: 0.2905956E+01 T= 0.62E-01, LEVEL= 4 ,TOLWGT=1.0, SPCMON= 0.11E+01 Time integration at T= 0.62E-01, Grid level= 5, NPTS= 2269 Nonlinear system solver at T = 0.6208227E-01 Max. and WRMS norm residual= 0.3579365E+01 0.6301140E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4538 # it. GCRO # it.GMRES Error Estimate 0 0 0.5217801E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5217801E+02 1 0.2938703E+02 0.5632072E+00 2 0.1975308E+02 0.3785709E+00 3 0.1440799E+02 0.2761314E+00 4 0.9780769E+01 0.1874500E+00 5 0.7289654E+01 0.1397074E+00 6 0.5455948E+01 0.1045641E+00 7 0.4157006E+01 0.7966970E-01 8 0.3197024E+01 0.6127149E-01 9 0.2486497E+01 0.4765411E-01 10 0.1949356E+01 0.3735972E-01 11 0.1534260E+01 0.2940435E-01 12 0.1211080E+01 0.2321054E-01 13 0.9584715E+00 0.1836926E-01 14 0.7597388E+00 0.1456052E-01 15 0.6028409E+00 0.1155354E-01 16 0.4787624E+00 0.9175559E-02 17 0.3807859E+00 0.7297824E-02 18 0.3031723E+00 0.5810346E-02 19 0.2415010E+00 0.4628407E-02 20 0.1925168E+00 0.3689616E-02 Result GMRES:20, 5.E-2, 0.1925168037548, 1 1 20 0.1925168E+00 0.1188315E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1925168E+00 1 0.1587099E+00 0.8243949E+00 2 0.1235470E+00 0.6417468E+00 3 0.9869643E-01 0.5126640E+00 4 0.7872441E-01 0.4089223E+00 5 0.6313205E-01 0.3279301E+00 6 0.5057869E-01 0.2627235E+00 7 0.4052575E-01 0.2105050E+00 8 0.3250208E-01 0.1688273E+00 9 0.2606831E-01 0.1354080E+00 10 0.2092358E-01 0.1086844E+00 11 0.1678650E-01 0.8719499E-01 12 0.1347036E-01 0.6996977E-01 13 0.1081189E-01 0.5616078E-01 14 0.8675646E-02 0.4506436E-01 15 0.6959669E-02 0.3615097E-01 16 0.5587723E-02 0.2902460E-01 17 0.4483202E-02 0.2328733E-01 18 0.3599625E-02 0.1869772E-01 19 0.2885524E-02 0.1498843E-01 20 0.2318675E-02 0.1204401E-01 Result GMRES:20, 5.E-2, 2.3186746854141E-3, 1 2 40 0.2318675E-02 0.3591378E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2318675E-02 1 0.1920157E-02 0.8281269E+00 2 0.1506569E-02 0.6497544E+00 3 0.1206953E-02 0.5205357E+00 4 0.9671396E-03 0.4171088E+00 5 0.7784328E-03 0.3357231E+00 6 0.6252572E-03 0.2696615E+00 7 0.5026384E-03 0.2167783E+00 8 0.4039573E-03 0.1742191E+00 9 0.3247607E-03 0.1400631E+00 10 0.2609940E-03 0.1125617E+00 11 0.2096397E-03 0.9041358E-01 12 0.1684155E-03 0.7263440E-01 13 0.1353189E-03 0.5836044E-01 14 0.1086190E-03 0.4684529E-01 15 0.8717089E-04 0.3759514E-01 16 0.6988989E-04 0.3014217E-01 17 0.5609304E-04 0.2419185E-01 18 0.4485582E-04 0.1934546E-01 19 0.3594382E-04 0.1550188E-01 20 0.2864187E-04 0.1235269E-01 Result GMRES:20, 5.E-2, 2.864187407801E-5, 1 3 60 0.2864187E-04 0.4449114E-02 NI: 1, NLI: 63, ERLI 0.2864187E-04, ERNI: 0.1188410E+03 Max. and WRMS norm residual= 0.1990834E+00 0.2931523E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4538 # it. GCRO # it.GMRES Error Estimate 0 0 0.1940562E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1940562E+01 1 0.8217698E+00 0.4234699E+00 2 0.5566233E+00 0.2868361E+00 3 0.4235288E+00 0.2182505E+00 4 0.2929139E+00 0.1509428E+00 5 0.2230716E+00 0.1149520E+00 6 0.1659585E+00 0.8552085E-01 7 0.1266125E+00 0.6524527E-01 8 0.9614164E-01 0.4954319E-01 9 0.7378038E-01 0.3802010E-01 10 0.5681383E-01 0.2927699E-01 11 0.4392289E-01 0.2263410E-01 12 0.3407815E-01 0.1756097E-01 13 0.2649416E-01 0.1365282E-01 14 0.2065823E-01 0.1064549E-01 15 0.1614129E-01 0.8317844E-02 16 0.1264323E-01 0.6515242E-02 17 0.9916971E-02 0.5110359E-02 18 0.7788608E-02 0.4013583E-02 19 0.6127122E-02 0.3157395E-02 20 0.4827791E-02 0.2487831E-02 Result GMRES:20, 2.5E-2, 4.8277911276219E-3, 1 1 20 0.4827791E-02 0.3916397E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4827791E-02 1 0.3951794E-02 0.8185511E+00 2 0.3026740E-02 0.6269409E+00 3 0.2399164E-02 0.4969485E+00 4 0.1890342E-02 0.3915543E+00 5 0.1501949E-02 0.3111049E+00 6 0.1190953E-02 0.2466869E+00 7 0.9457072E-03 0.1958882E+00 8 0.7519796E-03 0.1557606E+00 9 0.5978957E-03 0.1238446E+00 10 0.4757038E-03 0.9853446E-01 11 0.3786715E-03 0.7843577E-01 12 0.3015744E-03 0.6246633E-01 13 0.2402061E-03 0.4975487E-01 14 0.1913245E-03 0.3962983E-01 15 0.1523887E-03 0.3156490E-01 16 0.1215285E-03 0.2517270E-01 17 0.9678048E-04 0.2004653E-01 18 0.7711749E-04 0.1597366E-01 19 0.6141908E-04 0.1272198E-01 20 0.4899531E-04 0.1014860E-01 Result GMRES:20, 2.5E-2, 4.8995312897024E-5, 1 2 40 0.4899531E-04 0.8358818E-02 NI: 2, NLI: 42, ERLI 0.4899531E-04, ERNI: 0.3916695E+01 T= 0.62E-01, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.41E+00 TN= 0.31E-01, DT= 0.31E-01, DTNEW= 0.27E-01, TIMMON= 0.59E+00 Time integration at T= 0.88E-01, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.8813554E-01 Max. and WRMS norm residual= 0.1537917E+01 0.1520120E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3626740E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3626740E+02 1 0.1337019E+01 0.3686559E-01 2 0.1608976E+00 0.4436426E-02 3 0.9149387E-02 0.2522758E-03 Result GMRES:3, 5.E-2, 9.1493865379949E-3, 0 1 3 0.9149387E-02 0.3669449E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9149387E-02 1 0.8001794E-03 0.8745716E-01 2 0.8036086E-04 0.8783197E-02 3 0.5132226E-05 0.5609366E-03 Result GMRES:3, 5.E-2, 5.1322256561928E-6, 0 2 6 0.5132226E-05 0.9152391E-02 NI: 1, NLI: 8, ERLI 0.5132226E-05, ERNI: 0.3669462E+02 Max. and WRMS norm residual= 0.4177703E-03 0.3987952E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.7191726E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7191726E-02 1 0.7201007E-03 0.1001290E+00 2 0.4209283E-04 0.5852953E-02 3 0.3705375E-05 0.5152274E-03 Result GMRES:3, 2.5E-2, 3.7053745677489E-6, 0 1 3 0.3705375E-05 0.7327327E-02 NI: 2, NLI: 4, ERLI 0.3705375E-05, ERNI: 0.7327327E-02 T= 0.88E-01, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.47E+01 Time integration at T= 0.88E-01, Grid level= 2, NPTS= 230 Nonlinear system solver at T = 0.8813554E-01 Max. and WRMS norm residual= 0.1540871E+01 0.1788010E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 460 # it. GCRO # it.GMRES Error Estimate 0 0 0.3635221E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3635221E+02 1 0.2793597E+01 0.7684807E-01 2 0.4752664E+00 0.1307394E-01 3 0.1143161E+00 0.3144681E-02 4 0.3169558E-01 0.8719026E-03 Result GMRES:4, 5.E-2, 3.1695583001813E-2, 0 1 4 0.3169558E-01 0.3730536E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3169558E-01 1 0.1107539E-01 0.3494302E+00 2 0.2443749E-02 0.7710061E-01 3 0.4744664E-03 0.1496948E-01 4 0.7666549E-04 0.2418807E-02 5 0.1770374E-04 0.5585555E-03 Result GMRES:5, 5.E-2, 1.7703741263223E-5, 0 2 9 0.1770374E-04 0.3043146E-01 NI: 1, NLI: 11, ERLI 0.1770374E-04, ERNI: 0.3730488E+02 Max. and WRMS norm residual= 0.4011997E-02 0.5104777E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 460 # it. GCRO # it.GMRES Error Estimate 0 0 0.9246323E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9246323E-01 1 0.1205416E-01 0.1303670E+00 2 0.2424787E-02 0.2622434E-01 3 0.5745998E-03 0.6214360E-02 4 0.1423699E-03 0.1539746E-02 5 0.3422152E-04 0.3701095E-03 Result GMRES:5, 2.5E-2, 3.4221515367643E-5, 0 1 5 0.3422152E-04 0.9742958E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3422152E-04 1 0.1068585E-04 0.3122553E+00 2 0.2500769E-05 0.7307593E-01 3 0.6106336E-06 0.1784356E-01 4 0.1220682E-06 0.3567000E-02 5 0.1939626E-07 0.5667856E-03 Result GMRES:5, 2.5E-2, 1.9396262876785E-8, 0 2 10 0.1939626E-07 0.3291762E-04 NI: 2, NLI: 12, ERLI 0.1939626E-07, ERNI: 0.9742946E-01 T= 0.88E-01, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.44E+01 Time integration at T= 0.88E-01, Grid level= 3, NPTS= 458 Nonlinear system solver at T = 0.8813554E-01 Max. and WRMS norm residual= 0.1916950E+01 0.2840720E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 916 # it. GCRO # it.GMRES Error Estimate 0 0 0.5673804E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5673804E+02 1 0.7130883E+01 0.1256808E+00 2 0.1997408E+01 0.3520403E-01 3 0.7961305E+00 0.1403169E-01 4 0.3760803E+00 0.6628363E-02 5 0.1360994E+00 0.2398734E-02 6 0.6115401E-01 0.1077831E-02 7 0.2503769E-01 0.4412858E-03 Result GMRES:7, 5.E-2, 2.5037691090571E-2, 0 1 7 0.2503769E-01 0.5934838E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2503769E-01 1 0.1357406E-01 0.5421451E+00 2 0.5737456E-02 0.2291528E+00 3 0.2167840E-02 0.8658305E-01 4 0.9471535E-03 0.3782911E-01 5 0.3912341E-03 0.1562581E-01 6 0.1453637E-03 0.5805794E-02 7 0.5497537E-04 0.2195705E-02 8 0.2437864E-04 0.9736777E-03 Result GMRES:8, 5.E-2, 2.4378642561494E-5, 0 2 15 0.2437864E-04 0.2204436E-01 NI: 1, NLI: 17, ERLI 0.2437864E-04, ERNI: 0.5934928E+02 Max. and WRMS norm residual= 0.4617696E-01 0.5636011E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 916 # it. GCRO # it.GMRES Error Estimate 0 0 0.9670588E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9670588E+00 1 0.1848310E+00 0.1911269E+00 2 0.6076766E-01 0.6283761E-01 3 0.2899909E-01 0.2998689E-01 4 0.1035591E-01 0.1070866E-01 5 0.4645993E-02 0.4804250E-02 6 0.1818636E-02 0.1880584E-02 7 0.7981026E-03 0.8252886E-03 Result GMRES:7, 2.5E-2, 7.9810264657556E-4, 0 1 7 0.7981026E-03 0.1027121E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7981026E-03 1 0.4457746E-03 0.5585430E+00 2 0.1752832E-03 0.2196249E+00 3 0.7594747E-04 0.9516003E-01 4 0.3035374E-04 0.3803238E-01 5 0.1319683E-04 0.1653525E-01 6 0.5506510E-05 0.6899501E-02 7 0.1912251E-05 0.2395997E-02 8 0.8436463E-06 0.1057065E-02 9 0.3546768E-06 0.4443999E-03 Result GMRES:9, 2.5E-2, 3.5467675223191E-7, 0 2 16 0.3546768E-06 0.7012254E-03 NI: 2, NLI: 18, ERLI 0.3546768E-06, ERNI: 0.1027120E+01 T= 0.88E-01, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.28E+01 Time integration at T= 0.88E-01, Grid level= 4, NPTS= 1011 Nonlinear system solver at T = 0.8813554E-01 Max. and WRMS norm residual= 0.2724218E+01 0.4128322E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2022 # it. GCRO # it.GMRES Error Estimate 0 0 0.6089872E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6089872E+02 1 0.1423982E+02 0.2338279E+00 2 0.6258401E+01 0.1027674E+00 3 0.3855510E+01 0.6331019E-01 4 0.2347307E+01 0.3854443E-01 5 0.1356958E+01 0.2228221E-01 6 0.8608513E+00 0.1413579E-01 7 0.5116389E+00 0.8401473E-02 8 0.3183587E+00 0.5227675E-02 9 0.1969690E+00 0.3234370E-02 10 0.1221506E+00 0.2005799E-02 11 0.7768055E-01 0.1275570E-02 12 0.4755645E-01 0.7809106E-03 Result GMRES:12, 5.E-2, 4.7556450996294E-2, 0 1 12 0.4755645E-01 0.7878856E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4755645E-01 1 0.3396375E-01 0.7141776E+00 2 0.2015219E-01 0.4237531E+00 3 0.1256150E-01 0.2641388E+00 4 0.7889712E-02 0.1659020E+00 5 0.4880453E-02 0.1026244E+00 6 0.3163816E-02 0.6652758E-01 7 0.1951028E-02 0.4102552E-01 8 0.1271288E-02 0.2673218E-01 9 0.7904794E-03 0.1662192E-01 10 0.5125925E-03 0.1077861E-01 11 0.3219506E-03 0.6769863E-02 12 0.2074573E-03 0.4362338E-02 13 0.1312526E-03 0.2759932E-02 14 0.8440443E-04 0.1774826E-02 15 0.5350893E-04 0.1125166E-02 16 0.3408668E-04 0.7167625E-03 Result GMRES:16, 5.E-2, 3.4086680579289E-5, 0 2 28 0.3408668E-04 0.4654514E-01 NI: 1, NLI: 30, ERLI 0.3408668E-04, ERNI: 0.7879055E+02 Max. and WRMS norm residual= 0.9636093E-01 0.1496513E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2022 # it. GCRO # it.GMRES Error Estimate 0 0 0.1951300E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1951300E+01 1 0.5542061E+00 0.2840189E+00 2 0.2576194E+00 0.1320245E+00 3 0.1724186E+00 0.8836089E-01 4 0.8441912E-01 0.4326301E-01 5 0.5527103E-01 0.2832523E-01 6 0.3073591E-01 0.1575150E-01 7 0.1934614E-01 0.9914486E-02 8 0.1152643E-01 0.5907051E-02 9 0.7139253E-02 0.3658716E-02 10 0.4447893E-02 0.2279450E-02 11 0.2708882E-02 0.1388245E-02 12 0.1712163E-02 0.8774472E-03 Result GMRES:12, 2.5E-2, 1.7121629865803E-3, 0 1 12 0.1712163E-02 0.2153023E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1712163E-02 1 0.1220793E-02 0.7130119E+00 2 0.7099423E-03 0.4146465E+00 3 0.4407980E-03 0.2574509E+00 4 0.2722951E-03 0.1590357E+00 5 0.1664513E-03 0.9721700E-01 6 0.1072064E-03 0.6261457E-01 7 0.6486599E-04 0.3788541E-01 8 0.4199046E-04 0.2452480E-01 9 0.2583071E-04 0.1508659E-01 10 0.1648308E-04 0.9627049E-02 11 0.1033633E-04 0.6036999E-02 12 0.6481463E-05 0.3785541E-02 13 0.4131373E-05 0.2412956E-02 14 0.2556965E-05 0.1493412E-02 15 0.1629045E-05 0.9514546E-03 Result GMRES:15, 2.5E-2, 1.6290454116697E-6, 0 2 27 0.1629045E-05 0.1610291E-02 NI: 2, NLI: 29, ERLI 0.1629045E-05, ERNI: 0.2153098E+01 T= 0.88E-01, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.93E+00 Time integration at T= 0.88E-01, Grid level= 5, NPTS= 2417 Nonlinear system solver at T = 0.8813554E-01 Max. and WRMS norm residual= 0.2712351E+01 0.5375611E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4834 # it. GCRO # it.GMRES Error Estimate 0 0 0.4335671E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4335671E+02 1 0.2330089E+02 0.5374230E+00 2 0.1344804E+02 0.3101721E+00 3 0.9547412E+01 0.2202061E+00 4 0.6753438E+01 0.1557646E+00 5 0.5036906E+01 0.1161736E+00 6 0.3764905E+01 0.8683557E-01 7 0.2846232E+01 0.6564686E-01 8 0.2172805E+01 0.5011462E-01 9 0.1671019E+01 0.3854119E-01 10 0.1293270E+01 0.2982861E-01 11 0.1005548E+01 0.2319244E-01 12 0.7845768E+00 0.1809586E-01 13 0.6136848E+00 0.1415432E-01 14 0.4808469E+00 0.1109048E-01 15 0.3774740E+00 0.8706242E-02 16 0.2967115E+00 0.6843496E-02 17 0.2335411E+00 0.5386505E-02 18 0.1840120E+00 0.4244141E-02 19 0.1451113E+00 0.3346917E-02 20 0.1145952E+00 0.2643078E-02 Result GMRES:20, 5.E-2, 0.1145951543091, 1 1 20 0.1145952E+00 0.9774039E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1145952E+00 1 0.9365210E-01 0.8172431E+00 2 0.7212689E-01 0.6294061E+00 3 0.5704278E-01 0.4977765E+00 4 0.4505999E-01 0.3932102E+00 5 0.3577707E-01 0.3122041E+00 6 0.2838277E-01 0.2476786E+00 7 0.2252955E-01 0.1966012E+00 8 0.1789945E-01 0.1561972E+00 9 0.1421762E-01 0.1240682E+00 10 0.1130161E-01 0.9862208E-01 11 0.8983512E-02 0.7839348E-01 12 0.7142040E-02 0.6232410E-01 13 0.5678650E-02 0.4955401E-01 14 0.4514433E-02 0.3939463E-01 15 0.3590075E-02 0.3132833E-01 16 0.2855544E-02 0.2491854E-01 17 0.2269886E-02 0.1980787E-01 18 0.1804780E-02 0.1574918E-01 19 0.1434047E-02 0.1251403E-01 20 0.1141194E-02 0.9958481E-02 Result GMRES:20, 5.E-2, 1.1411936974422E-3, 1 2 40 0.1141194E-02 0.2079930E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1141194E-02 1 0.9368573E-03 0.8209451E+00 2 0.7275176E-03 0.6375058E+00 3 0.5772018E-03 0.5057878E+00 4 0.4582490E-03 0.4015523E+00 5 0.3652585E-03 0.3200670E+00 6 0.2906377E-03 0.2546787E+00 7 0.2315406E-03 0.2028933E+00 8 0.1844020E-03 0.1615870E+00 9 0.1468797E-03 0.1287070E+00 10 0.1170178E-03 0.1025398E+00 11 0.9318433E-04 0.8165514E-01 12 0.7424597E-04 0.6505992E-01 13 0.5914746E-04 0.5182946E-01 14 0.4711084E-04 0.4128207E-01 15 0.3752253E-04 0.3288007E-01 16 0.2986269E-04 0.2616794E-01 17 0.2379359E-04 0.2084974E-01 18 0.1889916E-04 0.1656087E-01 19 0.1504867E-04 0.1318678E-01 20 0.1191040E-04 0.1043679E-01 Result GMRES:20, 5.E-2, 1.1910404174481E-5, 1 3 60 0.1191040E-04 0.2137338E-02 NI: 1, NLI: 63, ERLI 0.1191040E-04, ERNI: 0.9774638E+02 Max. and WRMS norm residual= 0.1298155E+00 0.2151721E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4834 # it. GCRO # it.GMRES Error Estimate 0 0 0.1401270E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1401270E+01 1 0.5673878E+00 0.4049096E+00 2 0.3660432E+00 0.2612224E+00 3 0.2798350E+00 0.1997009E+00 4 0.1891144E+00 0.1349592E+00 5 0.1444832E+00 0.1031087E+00 6 0.1060659E+00 0.7569268E-01 7 0.8083418E-01 0.5768636E-01 8 0.6091132E-01 0.4346865E-01 9 0.4636795E-01 0.3308994E-01 10 0.3537771E-01 0.2524688E-01 11 0.2707326E-01 0.1932051E-01 12 0.2077989E-01 0.1482932E-01 13 0.1598306E-01 0.1140612E-01 14 0.1232390E-01 0.8794804E-02 15 0.9518421E-02 0.6792709E-02 16 0.7363916E-02 0.5255171E-02 17 0.5710119E-02 0.4074959E-02 18 0.4432348E-02 0.3163093E-02 19 0.3446549E-02 0.2459589E-02 20 0.2683189E-02 0.1914826E-02 Result GMRES:20, 2.5E-2, 2.6831887324695E-3, 1 1 20 0.2683189E-02 0.2736438E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2683189E-02 1 0.2174334E-02 0.8103545E+00 2 0.1644281E-02 0.6128086E+00 3 0.1289075E-02 0.4804267E+00 4 0.1004211E-02 0.3742603E+00 5 0.7891789E-03 0.2941198E+00 6 0.6190562E-03 0.2307166E+00 7 0.4862092E-03 0.1812058E+00 8 0.3822701E-03 0.1424686E+00 9 0.3006420E-03 0.1120465E+00 10 0.2366794E-03 0.8820826E-01 11 0.1863579E-03 0.6945389E-01 12 0.1467620E-03 0.5469687E-01 13 0.1155861E-03 0.4307790E-01 14 0.9107847E-04 0.3394411E-01 15 0.7178030E-04 0.2675187E-01 16 0.5657747E-04 0.2108591E-01 17 0.4454651E-04 0.1660208E-01 18 0.3508739E-04 0.1307675E-01 19 0.2763363E-04 0.1029880E-01 20 0.2177611E-04 0.8115757E-02 Result GMRES:20, 2.5E-2, 2.1776108358888E-5, 1 2 40 0.2177611E-04 0.4509214E-02 NI: 2, NLI: 42, ERLI 0.2177611E-04, ERNI: 0.2736555E+01 T= 0.88E-01, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.28E+00 TN= 0.62E-01, DT= 0.26E-01, DTNEW= 0.27E-01, TIMMON= 0.48E+00 Time integration at T= 0.11E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.1149551E+00 Max. and WRMS norm residual= 0.1086600E+01 0.1109405E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2337661E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2337661E+02 1 0.1114116E+01 0.4765945E-01 2 0.1301905E+00 0.5569262E-02 3 0.6950254E-02 0.2973166E-03 Result GMRES:3, 5.E-2, 6.9502536862475E-3, 0 1 3 0.6950254E-02 0.2370520E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6950254E-02 1 0.6897309E-03 0.9923823E-01 2 0.5959102E-04 0.8573935E-02 3 0.3780215E-05 0.5438959E-03 Result GMRES:3, 5.E-2, 3.7802146048211E-6, 0 2 6 0.3780215E-05 0.6992063E-02 NI: 1, NLI: 8, ERLI 0.3780215E-05, ERNI: 0.2370520E+02 Max. and WRMS norm residual= 0.2251701E-03 0.2191937E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3935174E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3935174E-02 1 0.3783165E-03 0.9613717E-01 2 0.2279244E-04 0.5791977E-02 3 0.2082801E-05 0.5292781E-03 Result GMRES:3, 2.5E-2, 2.0828014896848E-6, 0 1 3 0.2082801E-05 0.4016593E-02 NI: 2, NLI: 4, ERLI 0.2082801E-05, ERNI: 0.4016593E-02 T= 0.11E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.49E+01 Time integration at T= 0.11E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.1149551E+00 Max. and WRMS norm residual= 0.1116318E+01 0.1402328E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.2777509E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2777509E+02 1 0.2231827E+01 0.8035355E-01 2 0.4400010E+00 0.1584157E-01 3 0.1070650E+00 0.3854712E-02 4 0.3033934E-01 0.1092322E-02 5 0.6675803E-02 0.2403522E-03 Result GMRES:5, 5.E-2, 6.6758032627409E-3, 0 1 5 0.6675803E-02 0.2821821E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6675803E-02 1 0.1953789E-02 0.2926673E+00 2 0.4584210E-03 0.6866904E-01 3 0.1203959E-03 0.1803466E-01 4 0.2482262E-04 0.3718297E-02 5 0.3783084E-05 0.5666859E-03 Result GMRES:5, 5.E-2, 3.7830835110037E-6, 0 2 10 0.3783084E-05 0.6546675E-02 NI: 1, NLI: 12, ERLI 0.3783084E-05, ERNI: 0.2821814E+02 Max. and WRMS norm residual= 0.4098748E-02 0.5236557E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.9445897E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9445897E-01 1 0.1200374E-01 0.1270789E+00 2 0.2440589E-02 0.2583755E-01 3 0.6172628E-03 0.6534719E-02 4 0.1547617E-03 0.1638401E-02 5 0.3577445E-04 0.3787301E-03 Result GMRES:5, 2.5E-2, 3.5774452352483E-5, 0 1 5 0.3577445E-04 0.1004054E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3577445E-04 1 0.1087753E-04 0.3040586E+00 2 0.2448522E-05 0.6844332E-01 3 0.6192352E-06 0.1730943E-01 4 0.1282782E-06 0.3585750E-02 5 0.2006798E-07 0.5609585E-03 Result GMRES:5, 2.5E-2, 2.0067984826219E-8, 0 2 10 0.2006798E-07 0.3447045E-04 NI: 2, NLI: 12, ERLI 0.2006798E-07, ERNI: 0.1004051E+00 T= 0.11E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.50E+01 Time integration at T= 0.11E+00, Grid level= 3, NPTS= 466 Nonlinear system solver at T = 0.1149551E+00 Max. and WRMS norm residual= 0.2356665E+01 0.2985516E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 932 # it. GCRO # it.GMRES Error Estimate 0 0 0.6064706E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6064706E+02 1 0.8294993E+01 0.1367749E+00 2 0.2175857E+01 0.3587737E-01 3 0.8312691E+00 0.1370667E-01 4 0.3911330E+00 0.6449332E-02 5 0.1373517E+00 0.2264771E-02 6 0.6133680E-01 0.1011373E-02 7 0.2425113E-01 0.3998731E-03 Result GMRES:7, 5.E-2, 2.4251128216101E-2, 0 1 7 0.2425113E-01 0.6375715E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2425113E-01 1 0.1310852E-01 0.5405325E+00 2 0.5558363E-02 0.2292002E+00 3 0.2155061E-02 0.8886437E-01 4 0.8952723E-03 0.3691673E-01 5 0.3775622E-03 0.1556885E-01 6 0.1426722E-03 0.5883118E-02 7 0.5484563E-04 0.2261570E-02 8 0.2343190E-04 0.9662188E-03 Result GMRES:8, 5.E-2, 2.3431896376376E-5, 0 2 15 0.2343190E-04 0.2149943E-01 NI: 1, NLI: 17, ERLI 0.2343190E-04, ERNI: 0.6375787E+02 Max. and WRMS norm residual= 0.3211056E-01 0.3930020E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 932 # it. GCRO # it.GMRES Error Estimate 0 0 0.6593643E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6593643E+00 1 0.1269605E+00 0.1925499E+00 2 0.4118317E-01 0.6245890E-01 3 0.1948703E-01 0.2955427E-01 4 0.6931321E-02 0.1051213E-01 5 0.3113433E-02 0.4721871E-02 6 0.1215502E-02 0.1843445E-02 7 0.5242181E-03 0.7950357E-03 Result GMRES:7, 2.5E-2, 5.2421811565376E-4, 0 1 7 0.5242181E-03 0.6792929E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5242181E-03 1 0.2932668E-03 0.5594366E+00 2 0.1162775E-03 0.2218113E+00 3 0.4944711E-04 0.9432545E-01 4 0.1925540E-04 0.3673165E-01 5 0.8403327E-05 0.1603021E-01 6 0.3449361E-05 0.6580012E-02 7 0.1173104E-05 0.2237816E-02 8 0.5266604E-06 0.1004659E-02 9 0.2001555E-06 0.3818172E-03 Result GMRES:9, 2.5E-2, 2.0015549827922E-7, 0 2 16 0.2001555E-06 0.4615529E-03 NI: 2, NLI: 18, ERLI 0.2001555E-06, ERNI: 0.6792902E+00 T= 0.11E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.25E+01 Time integration at T= 0.11E+00, Grid level= 4, NPTS= 1023 Nonlinear system solver at T = 0.1149551E+00 Max. and WRMS norm residual= 0.2668093E+01 0.4294440E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2046 # it. GCRO # it.GMRES Error Estimate 0 0 0.6281544E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6281544E+02 1 0.1520208E+02 0.2420118E+00 2 0.6746034E+01 0.1073945E+00 3 0.4068647E+01 0.6477145E-01 4 0.2502420E+01 0.3983765E-01 5 0.1443731E+01 0.2298370E-01 6 0.9046515E+00 0.1440174E-01 7 0.5415834E+00 0.8621819E-02 8 0.3348356E+00 0.5330466E-02 9 0.2075678E+00 0.3304408E-02 10 0.1276503E+00 0.2032148E-02 11 0.8041140E-01 0.1280122E-02 12 0.4973889E-01 0.7918257E-03 Result GMRES:12, 5.E-2, 4.9738885225606E-2, 0 1 12 0.4973889E-01 0.8097577E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4973889E-01 1 0.3549430E-01 0.7136128E+00 2 0.2090834E-01 0.4203620E+00 3 0.1289853E-01 0.2593248E+00 4 0.8093625E-02 0.1627223E+00 5 0.4943976E-02 0.9939861E-01 6 0.3200912E-02 0.6435432E-01 7 0.1953771E-02 0.3928055E-01 8 0.1270322E-02 0.2553982E-01 9 0.7833031E-03 0.1574830E-01 10 0.5065111E-03 0.1018340E-01 11 0.3163179E-03 0.6359570E-02 12 0.2033065E-03 0.4087475E-02 13 0.1277135E-03 0.2567679E-02 14 0.8204308E-04 0.1649476E-02 15 0.5179085E-04 0.1041255E-02 16 0.3294909E-04 0.6624413E-03 Result GMRES:16, 5.E-2, 3.2949092971737E-5, 0 2 28 0.3294909E-04 0.4854982E-01 NI: 1, NLI: 30, ERLI 0.3294909E-04, ERNI: 0.8097779E+02 Max. and WRMS norm residual= 0.1286402E+00 0.1582272E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2046 # it. GCRO # it.GMRES Error Estimate 0 0 0.2052159E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2052159E+01 1 0.6004672E+00 0.2926026E+00 2 0.2616558E+00 0.1275027E+00 3 0.1772670E+00 0.8638072E-01 4 0.8729650E-01 0.4253886E-01 5 0.5760051E-01 0.2806825E-01 6 0.3159265E-01 0.1539483E-01 7 0.2034588E-01 0.9914377E-02 8 0.1184043E-01 0.5769743E-02 9 0.7495744E-02 0.3652614E-02 10 0.4518448E-02 0.2201802E-02 11 0.2826547E-02 0.1377353E-02 12 0.1746448E-02 0.8510293E-03 Result GMRES:12, 2.5E-2, 1.7464475575398E-3, 0 1 12 0.1746448E-02 0.2253549E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1746448E-02 1 0.1239110E-02 0.7095034E+00 2 0.7216490E-03 0.4132096E+00 3 0.4433567E-03 0.2538620E+00 4 0.2731808E-03 0.1564208E+00 5 0.1648674E-03 0.9440155E-01 6 0.1061678E-03 0.6079070E-01 7 0.6320202E-04 0.3618890E-01 8 0.4089241E-04 0.2341462E-01 9 0.2469660E-04 0.1414105E-01 10 0.1582314E-04 0.9060187E-02 11 0.9699346E-05 0.5553757E-02 12 0.6127479E-05 0.3508539E-02 13 0.3818772E-05 0.2186594E-02 14 0.2387140E-05 0.1366855E-02 15 0.1494434E-05 0.8556992E-03 Result GMRES:15, 2.5E-2, 1.4944338126161E-6, 0 2 27 0.1494434E-05 0.1655120E-02 NI: 2, NLI: 29, ERLI 0.1494434E-05, ERNI: 0.2253660E+01 T= 0.11E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.10E+01 Time integration at T= 0.11E+00, Grid level= 5, NPTS= 2297 Nonlinear system solver at T = 0.1149551E+00 Max. and WRMS norm residual= 0.3011137E+01 0.5799713E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4594 # it. GCRO # it.GMRES Error Estimate 0 0 0.4640145E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4640145E+02 1 0.2462273E+02 0.5306457E+00 2 0.1335604E+02 0.2878368E+00 3 0.9284491E+01 0.2000905E+00 4 0.6645816E+01 0.1432243E+00 5 0.4939682E+01 0.1064553E+00 6 0.3705539E+01 0.7985824E-01 7 0.2803637E+01 0.6042131E-01 8 0.2141493E+01 0.4615141E-01 9 0.1642848E+01 0.3540509E-01 10 0.1265713E+01 0.2727745E-01 11 0.9800364E+00 0.2112081E-01 12 0.7613892E+00 0.1640874E-01 13 0.5933548E+00 0.1278742E-01 14 0.4634602E+00 0.9988053E-02 15 0.3626726E+00 0.7815975E-02 16 0.2843086E+00 0.6127148E-02 17 0.2231831E+00 0.4809831E-02 18 0.1754011E+00 0.3780079E-02 19 0.1380137E+00 0.2974340E-02 20 0.1087198E+00 0.2343026E-02 Result GMRES:20, 5.E-2, 0.1087197931855, 1 1 20 0.1087198E+00 0.1047729E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1087198E+00 1 0.8871586E-01 0.8160047E+00 2 0.6816586E-01 0.6269867E+00 3 0.5375573E-01 0.4944429E+00 4 0.4236850E-01 0.3897036E+00 5 0.3355001E-01 0.3085915E+00 6 0.2657200E-01 0.2444081E+00 7 0.2105162E-01 0.1936319E+00 8 0.1668944E-01 0.1535087E+00 9 0.1323100E-01 0.1216981E+00 10 0.1049682E-01 0.9654930E-01 11 0.8326221E-02 0.7658423E-01 12 0.6606976E-02 0.6077068E-01 13 0.5243340E-02 0.4822802E-01 14 0.4161205E-02 0.3827458E-01 15 0.3302928E-02 0.3038019E-01 16 0.2621822E-02 0.2411541E-01 17 0.2080624E-02 0.1913749E-01 18 0.1651634E-02 0.1519166E-01 19 0.1310541E-02 0.1205430E-01 20 0.1040608E-02 0.9571464E-02 Result GMRES:20, 5.E-2, 1.0406076165556E-3, 1 2 40 0.1040608E-02 0.1961121E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1040608E-02 1 0.8528315E-03 0.8195515E+00 2 0.6611589E-03 0.6353585E+00 3 0.5234240E-03 0.5029984E+00 4 0.4148057E-03 0.3986188E+00 5 0.3300409E-03 0.3171617E+00 6 0.2621894E-03 0.2519580E+00 7 0.2085720E-03 0.2004329E+00 8 0.1658093E-03 0.1593389E+00 9 0.1318815E-03 0.1267351E+00 10 0.1048729E-03 0.1007804E+00 11 0.8339170E-04 0.8013751E-01 12 0.6630949E-04 0.6372190E-01 13 0.5272083E-04 0.5066350E-01 14 0.4189754E-04 0.4026258E-01 15 0.3329613E-04 0.3199681E-01 16 0.2643301E-04 0.2540151E-01 17 0.2099367E-04 0.2017443E-01 18 0.1662267E-04 0.1597401E-01 19 0.1318211E-04 0.1266771E-01 20 0.1038049E-04 0.9975413E-02 Result GMRES:20, 5.E-2, 1.0380491212951E-5, 1 3 60 0.1038049E-04 0.1941836E-02 NI: 1, NLI: 63, ERLI 0.1038049E-04, ERNI: 0.1047792E+03 Max. and WRMS norm residual= 0.1483690E+00 0.2549365E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4594 # it. GCRO # it.GMRES Error Estimate 0 0 0.1658285E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1658285E+01 1 0.6633770E+00 0.4000381E+00 2 0.4086400E+00 0.2464233E+00 3 0.3110394E+00 0.1875669E+00 4 0.2087456E+00 0.1258804E+00 5 0.1594036E+00 0.9612560E-01 6 0.1144193E+00 0.6899858E-01 7 0.8659773E-01 0.5222127E-01 8 0.6479636E-01 0.3907432E-01 9 0.4920088E-01 0.2966974E-01 10 0.3747430E-01 0.2259823E-01 11 0.2860478E-01 0.1724962E-01 12 0.2194638E-01 0.1323438E-01 13 0.1683622E-01 0.1015279E-01 14 0.1296311E-01 0.7817183E-02 15 0.9986620E-02 0.6022259E-02 16 0.7709786E-02 0.4649253E-02 17 0.5957659E-02 0.3592663E-02 18 0.4610817E-02 0.2780474E-02 19 0.3572267E-02 0.2154194E-02 20 0.2772021E-02 0.1671619E-02 Result GMRES:20, 2.5E-2, 2.7720207998481E-3, 1 1 20 0.2772021E-02 0.3177495E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2772021E-02 1 0.2240878E-02 0.8083914E+00 2 0.1687122E-02 0.6086252E+00 3 0.1317062E-02 0.4751270E+00 4 0.1021949E-02 0.3686657E+00 5 0.7998409E-03 0.2885407E+00 6 0.6251270E-03 0.2255131E+00 7 0.4894303E-03 0.1765608E+00 8 0.3832896E-03 0.1382708E+00 9 0.3003944E-03 0.1083666E+00 10 0.2355577E-03 0.8497687E-01 11 0.1847274E-03 0.6663997E-01 12 0.1449893E-03 0.5230454E-01 13 0.1137605E-03 0.4103883E-01 14 0.8930642E-04 0.3221708E-01 15 0.7009107E-04 0.2528519E-01 16 0.5502840E-04 0.1985137E-01 17 0.4316058E-04 0.1557008E-01 18 0.3388700E-04 0.1222466E-01 19 0.2659084E-04 0.9592584E-02 20 0.2088360E-04 0.7533709E-02 Result GMRES:20, 2.5E-2, 2.0883598383334E-5, 1 2 40 0.2088360E-04 0.4592081E-02 NI: 2, NLI: 42, ERLI 0.2088360E-04, ERNI: 0.3177582E+01 T= 0.11E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.30E+00 TN= 0.88E-01, DT= 0.27E-01, DTNEW= 0.26E-01, TIMMON= 0.52E+00 Time integration at T= 0.14E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.1402421E+00 Max. and WRMS norm residual= 0.5220742E+00 0.5457908E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1082523E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1082523E+02 1 0.5004709E+00 0.4623190E-01 2 0.5669500E-01 0.5237302E-02 3 0.2890846E-02 0.2670470E-03 Result GMRES:3, 5.E-2, 2.8908459170091E-3, 0 1 3 0.2890846E-02 0.1097516E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2890846E-02 1 0.2850390E-03 0.9860054E-01 2 0.2261353E-04 0.7822462E-02 3 0.1383384E-05 0.4785394E-03 Result GMRES:3, 5.E-2, 1.3833836709755E-6, 0 2 6 0.1383384E-05 0.2910196E-02 NI: 1, NLI: 8, ERLI 0.1383384E-05, ERNI: 0.1097516E+02 Max. and WRMS norm residual= 0.4601851E-04 0.4357621E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.7486723E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7486723E-03 1 0.6786227E-04 0.9064349E-01 2 0.4054085E-05 0.5415032E-02 3 0.3458758E-06 0.4619856E-03 Result GMRES:3, 2.5E-2, 3.4587582038665E-7, 0 1 3 0.3458758E-06 0.7641116E-03 NI: 2, NLI: 4, ERLI 0.3458758E-06, ERNI: 0.7641116E-03 T= 0.14E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.53E+01 Time integration at T= 0.14E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.1402421E+00 Max. and WRMS norm residual= 0.6686312E+00 0.9315660E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.2220354E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2220354E+02 1 0.1450156E+01 0.6531189E-01 2 0.3024339E+00 0.1362097E-01 3 0.6736650E-01 0.3034042E-02 4 0.1861158E-01 0.8382256E-03 Result GMRES:4, 5.E-2, 1.8611580206552E-2, 0 1 4 0.1861158E-01 0.2230098E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1861158E-01 1 0.6078462E-02 0.3265957E+00 2 0.1370553E-02 0.7363979E-01 3 0.2013775E-03 0.1082001E-01 4 0.3496873E-04 0.1878869E-02 5 0.9189585E-05 0.4937563E-03 Result GMRES:5, 5.E-2, 9.1895854796504E-6, 0 2 9 0.9189585E-05 0.1804447E-01 NI: 1, NLI: 11, ERLI 0.9189585E-05, ERNI: 0.2230108E+02 Max. and WRMS norm residual= 0.2672100E-02 0.3238735E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.5589209E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5589209E-01 1 0.6747506E-02 0.1207238E+00 2 0.1321090E-02 0.2363644E-01 3 0.3405039E-03 0.6092167E-02 4 0.8033629E-04 0.1437346E-02 5 0.1719189E-04 0.3075908E-03 Result GMRES:5, 2.5E-2, 1.71918919663E-5, 0 1 5 0.1719189E-04 0.5959399E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1719189E-04 1 0.4907597E-05 0.2854600E+00 2 0.1026774E-05 0.5972433E-01 3 0.2531333E-06 0.1472399E-01 4 0.5361789E-07 0.3118789E-02 5 0.8375532E-08 0.4871792E-03 Result GMRES:5, 2.5E-2, 8.3755323979752E-9, 0 2 10 0.8375532E-08 0.1659371E-04 NI: 2, NLI: 12, ERLI 0.8375532E-08, ERNI: 0.5959381E-01 T= 0.14E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.50E+01 Time integration at T= 0.14E+00, Grid level= 3, NPTS= 504 Nonlinear system solver at T = 0.1402421E+00 Max. and WRMS norm residual= 0.2827790E+01 0.3090302E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1008 # it. GCRO # it.GMRES Error Estimate 0 0 0.5763306E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5763306E+02 1 0.7988170E+01 0.1386039E+00 2 0.1681960E+01 0.2918395E-01 3 0.6292891E+00 0.1091889E-01 4 0.2818358E+00 0.4890176E-02 5 0.9974449E-01 0.1730682E-02 6 0.4372719E-01 0.7587171E-03 Result GMRES:6, 5.E-2, 4.3727188833582E-2, 0 1 6 0.4372719E-01 0.6106034E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4372719E-01 1 0.2322138E-01 0.5310512E+00 2 0.8891087E-02 0.2033309E+00 3 0.3818896E-02 0.8733459E-01 4 0.1507342E-02 0.3447151E-01 5 0.5668686E-03 0.1296376E-01 6 0.2419328E-03 0.5532777E-02 7 0.1013251E-03 0.2317211E-02 8 0.3550193E-04 0.8118960E-03 Result GMRES:8, 5.E-2, 3.5501930953849E-5, 0 2 14 0.3550193E-04 0.3887487E-01 NI: 1, NLI: 16, ERLI 0.3550193E-04, ERNI: 0.6106056E+02 Max. and WRMS norm residual= 0.2766625E-01 0.3619779E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1008 # it. GCRO # it.GMRES Error Estimate 0 0 0.5875651E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5875651E+00 1 0.1107966E+00 0.1885691E+00 2 0.3618554E-01 0.6158559E-01 3 0.1629920E-01 0.2774025E-01 4 0.5944496E-02 0.1011717E-01 5 0.2439116E-02 0.4151227E-02 6 0.1004219E-02 0.1709120E-02 7 0.3898190E-03 0.6634482E-03 Result GMRES:7, 2.5E-2, 3.8981902531178E-4, 0 1 7 0.3898190E-03 0.6131820E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3898190E-03 1 0.2087177E-03 0.5354220E+00 2 0.7794796E-04 0.1999594E+00 3 0.3311870E-04 0.8495917E-01 4 0.1287320E-04 0.3302352E-01 5 0.5206582E-05 0.1335641E-01 6 0.2133282E-05 0.5472492E-02 7 0.7185348E-06 0.1843252E-02 8 0.3038191E-06 0.7793849E-03 Result GMRES:8, 2.5E-2, 3.0381906373353E-7, 0 2 15 0.3038191E-06 0.3468435E-03 NI: 2, NLI: 17, ERLI 0.3038191E-06, ERNI: 0.6131862E+00 T= 0.14E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.14E+00, Grid level= 4, NPTS= 1053 Nonlinear system solver at T = 0.1402421E+00 Max. and WRMS norm residual= 0.2936486E+01 0.4209847E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2106 # it. GCRO # it.GMRES Error Estimate 0 0 0.5942133E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5942133E+02 1 0.1372099E+02 0.2309101E+00 2 0.5726819E+01 0.9637648E-01 3 0.3280942E+01 0.5521488E-01 4 0.2002228E+01 0.3369544E-01 5 0.1134339E+01 0.1908975E-01 6 0.6955203E+00 0.1170489E-01 7 0.4086014E+00 0.6876341E-02 8 0.2491203E+00 0.4192439E-02 9 0.1508480E+00 0.2538617E-02 10 0.9186087E-01 0.1545924E-02 11 0.5650637E-01 0.9509442E-03 12 0.3451473E-01 0.5808475E-03 Result GMRES:12, 5.E-2, 3.4514729751606E-2, 0 1 12 0.3451473E-01 0.7583409E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3451473E-01 1 0.2411181E-01 0.6985949E+00 2 0.1406298E-01 0.4074485E+00 3 0.8410290E-02 0.2436725E+00 4 0.5211561E-02 0.1509953E+00 5 0.3119105E-02 0.9037025E-01 6 0.1981166E-02 0.5740060E-01 7 0.1192814E-02 0.3455956E-01 8 0.7593870E-03 0.2200182E-01 9 0.4616509E-03 0.1337548E-01 10 0.2927900E-03 0.8483046E-02 11 0.1799229E-03 0.5212930E-02 12 0.1134048E-03 0.3285693E-02 13 0.7004278E-04 0.2029359E-02 14 0.4406167E-04 0.1276605E-02 15 0.2734595E-04 0.7922980E-03 Result GMRES:15, 5.E-2, 2.7345949703448E-5, 0 2 27 0.2734595E-04 0.3347689E-01 NI: 1, NLI: 29, ERLI 0.2734595E-04, ERNI: 0.7583535E+02 Max. and WRMS norm residual= 0.9769370E-01 0.1404984E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2106 # it. GCRO # it.GMRES Error Estimate 0 0 0.1762812E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1762812E+01 1 0.5102076E+00 0.2894283E+00 2 0.2296828E+00 0.1302934E+00 3 0.1503072E+00 0.8526558E-01 4 0.7180057E-01 0.4073071E-01 5 0.4579284E-01 0.2597716E-01 6 0.2493295E-01 0.1414385E-01 7 0.1541690E-01 0.8745630E-02 8 0.8951106E-02 0.5077744E-02 9 0.5408304E-02 0.3067999E-02 10 0.3253702E-02 0.1845746E-02 11 0.1955128E-02 0.1109096E-02 12 0.1193982E-02 0.6773168E-03 Result GMRES:12, 2.5E-2, 1.1939819814737E-3, 0 1 12 0.1193982E-02 0.1932838E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1193982E-02 1 0.8327433E-03 0.6974504E+00 2 0.4719343E-03 0.3952608E+00 3 0.2822120E-03 0.2363620E+00 4 0.1709793E-03 0.1432009E+00 5 0.1001800E-03 0.8390410E-01 6 0.6345584E-04 0.5314639E-01 7 0.3694663E-04 0.3094404E-01 8 0.2333161E-04 0.1954101E-01 9 0.1397282E-04 0.1170270E-01 10 0.8628256E-05 0.7226454E-02 11 0.5303336E-05 0.4441722E-02 12 0.3196881E-05 0.2677495E-02 13 0.2008140E-05 0.1681885E-02 14 0.1193488E-05 0.9995864E-03 Result GMRES:14, 2.5E-2, 1.1934881723635E-6, 0 2 26 0.1193488E-05 0.1105338E-02 NI: 2, NLI: 28, ERLI 0.1193488E-05, ERNI: 0.1932893E+01 T= 0.14E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.94E+00 Time integration at T= 0.14E+00, Grid level= 5, NPTS= 2299 Nonlinear system solver at T = 0.1402421E+00 Max. and WRMS norm residual= 0.3028296E+01 0.5824331E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4598 # it. GCRO # it.GMRES Error Estimate 0 0 0.4520084E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4520084E+02 1 0.2334702E+02 0.5165173E+00 2 0.1206448E+02 0.2669082E+00 3 0.8211464E+01 0.1816662E+00 4 0.5832072E+01 0.1290257E+00 5 0.4260512E+01 0.9425737E-01 6 0.3170744E+01 0.7014790E-01 7 0.2386945E+01 0.5280754E-01 8 0.1811054E+01 0.4006682E-01 9 0.1377670E+01 0.3047886E-01 10 0.1051347E+01 0.2325945E-01 11 0.8043746E+00 0.1779557E-01 12 0.6163422E+00 0.1363564E-01 13 0.4736061E+00 0.1047782E-01 14 0.3648778E+00 0.8072367E-02 15 0.2816043E+00 0.6230067E-02 16 0.2177622E+00 0.4817657E-02 17 0.1687118E+00 0.3732492E-02 18 0.1309704E+00 0.2897521E-02 19 0.1018156E+00 0.2252515E-02 20 0.7922296E-01 0.1752688E-02 Result GMRES:20, 5.E-2, 7.9222957433116E-2, 1 1 20 0.7922296E-01 0.1003151E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7922296E-01 1 0.6402069E-01 0.8081077E+00 2 0.4862119E-01 0.6137261E+00 3 0.3783272E-01 0.4775475E+00 4 0.2956040E-01 0.3731292E+00 5 0.2311082E-01 0.2917188E+00 6 0.1814681E-01 0.2290600E+00 7 0.1421966E-01 0.1794891E+00 8 0.1116733E-01 0.1409608E+00 9 0.8768559E-02 0.1106821E+00 10 0.6889490E-02 0.8696330E-01 11 0.5413064E-02 0.6832696E-01 12 0.4256203E-02 0.5372436E-01 13 0.3345472E-02 0.4222856E-01 14 0.2631018E-02 0.3321029E-01 15 0.2070199E-02 0.2613130E-01 16 0.1627518E-02 0.2054352E-01 17 0.1281186E-02 0.1617191E-01 18 0.1007722E-02 0.1272008E-01 19 0.7929921E-03 0.1000962E-01 20 0.6242218E-03 0.7879305E-02 Result GMRES:20, 5.E-2, 6.2422181930209E-4, 1 2 40 0.6242218E-03 0.1392959E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6242218E-03 1 0.5075330E-03 0.8130651E+00 2 0.3900086E-03 0.6247916E+00 3 0.3059643E-03 0.4901532E+00 4 0.2404462E-03 0.3851936E+00 5 0.1896204E-03 0.3037709E+00 6 0.1493632E-03 0.2392791E+00 7 0.1177840E-03 0.1886894E+00 8 0.9281378E-04 0.1486872E+00 9 0.7317099E-04 0.1172195E+00 10 0.5766346E-04 0.9237655E-01 11 0.4544859E-04 0.7280840E-01 12 0.3580702E-04 0.5736265E-01 13 0.2821245E-04 0.4519619E-01 14 0.2222054E-04 0.3559719E-01 15 0.1749951E-04 0.2803411E-01 16 0.1377208E-04 0.2206280E-01 17 0.1083969E-04 0.1736513E-01 18 0.8514784E-05 0.1364064E-01 19 0.6692736E-05 0.1072173E-01 20 0.5231124E-05 0.8380232E-02 Result GMRES:20, 5.E-2, 5.2311236184888E-6, 1 3 60 0.5231124E-05 0.1145032E-02 NI: 1, NLI: 63, ERLI 0.5231124E-05, ERNI: 0.1003197E+03 Max. and WRMS norm residual= 0.1400740E+00 0.2447453E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4598 # it. GCRO # it.GMRES Error Estimate 0 0 0.1567722E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1567722E+01 1 0.6061989E+00 0.3866750E+00 2 0.3523726E+00 0.2247673E+00 3 0.2675388E+00 0.1706545E+00 4 0.1784622E+00 0.1138354E+00 5 0.1353636E+00 0.8634414E-01 6 0.9677632E-01 0.6173055E-01 7 0.7228218E-01 0.4610651E-01 8 0.5320125E-01 0.3393539E-01 9 0.3955870E-01 0.2523324E-01 10 0.2973432E-01 0.1896658E-01 11 0.2230388E-01 0.1422694E-01 12 0.1691484E-01 0.1078944E-01 13 0.1279960E-01 0.8164462E-02 14 0.9751379E-02 0.6220096E-02 15 0.7424760E-02 0.4736019E-02 16 0.5669643E-02 0.3616486E-02 17 0.4342888E-02 0.2770191E-02 18 0.3321925E-02 0.2118951E-02 19 0.2544222E-02 0.1622878E-02 20 0.1954687E-02 0.1246833E-02 Result GMRES:20, 2.5E-2, 1.9546871096609E-3, 1 1 20 0.1954687E-02 0.2918008E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1954687E-02 1 0.1567212E-02 0.8017714E+00 2 0.1165278E-02 0.5961458E+00 3 0.8987315E-03 0.4597828E+00 4 0.6906088E-03 0.3533091E+00 5 0.5345899E-03 0.2734913E+00 6 0.4140414E-03 0.2118198E+00 7 0.3207741E-03 0.1641051E+00 8 0.2489321E-03 0.1273514E+00 9 0.1933085E-03 0.9889484E-01 10 0.1500920E-03 0.7678569E-01 11 0.1165907E-03 0.5964673E-01 12 0.9071264E-04 0.4640775E-01 13 0.7042306E-04 0.3602779E-01 14 0.5481141E-04 0.2804102E-01 15 0.4261400E-04 0.2180093E-01 16 0.3311114E-04 0.1693936E-01 17 0.2578813E-04 0.1319297E-01 18 0.2002387E-04 0.1024403E-01 19 0.1558502E-04 0.7973151E-02 20 0.1212562E-04 0.6203354E-02 Result GMRES:20, 2.5E-2, 1.2125615416066E-5, 1 2 40 0.1212562E-04 0.3176684E-02 NI: 2, NLI: 42, ERLI 0.1212562E-04, ERNI: 0.2918046E+01 T= 0.14E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.33E+00 TN= 0.11E+00, DT= 0.25E-01, DTNEW= 0.26E-01, TIMMON= 0.50E+00 Time integration at T= 0.17E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.1655291E+00 Max. and WRMS norm residual= 0.1774712E+00 0.1855441E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.4027646E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4027646E+01 1 0.1419447E+00 0.3524259E-01 2 0.1716614E-01 0.4262077E-02 3 0.8506691E-03 0.2112075E-03 Result GMRES:3, 5.E-2, 8.5066905627716E-4, 0 1 3 0.8506691E-03 0.4072495E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8506691E-03 1 0.7585948E-04 0.8917626E-01 2 0.6467433E-05 0.7602760E-02 3 0.4169425E-06 0.4901348E-03 Result GMRES:3, 5.E-2, 4.169425114961E-7, 0 2 6 0.4169425E-06 0.8527216E-03 NI: 1, NLI: 8, ERLI 0.4169425E-06, ERNI: 0.4072503E+01 Max. and WRMS norm residual= 0.6428887E-05 0.6444476E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1100388E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1100388E-03 1 0.9326274E-05 0.8475443E-01 2 0.7422172E-06 0.6745051E-02 3 0.5037842E-07 0.4578242E-03 Result GMRES:3, 2.5E-2, 5.0378420934627E-8, 0 1 3 0.5037842E-07 0.1135470E-03 NI: 2, NLI: 4, ERLI 0.5037842E-07, ERNI: 0.1135470E-03 T= 0.17E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.17E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.1655291E+00 Max. and WRMS norm residual= 0.1111344E+01 0.1166649E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.3299937E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3299937E+02 1 0.2224624E+01 0.6741414E-01 2 0.3440796E+00 0.1042685E-01 3 0.7939586E-01 0.2405981E-02 4 0.1932877E-01 0.5857314E-03 Result GMRES:4, 5.E-2, 1.9328768616275E-2, 0 1 4 0.1932877E-01 0.3349093E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1932877E-01 1 0.6081058E-02 0.3146118E+00 2 0.1276532E-02 0.6604314E-01 3 0.2132927E-03 0.1103499E-01 4 0.3379522E-04 0.1748442E-02 5 0.9016675E-05 0.4664899E-03 Result GMRES:5, 5.E-2, 9.0166747275736E-6, 0 2 9 0.9016675E-05 0.1857741E-01 NI: 1, NLI: 11, ERLI 0.9016675E-05, ERNI: 0.3349084E+02 Max. and WRMS norm residual= 0.1138825E-02 0.1042144E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.1775304E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1775304E-01 1 0.2466657E-02 0.1389428E+00 2 0.5742848E-03 0.3234852E-01 3 0.1471061E-03 0.8286249E-02 4 0.2842159E-04 0.1600942E-02 5 0.6351338E-05 0.3577605E-03 Result GMRES:5, 2.5E-2, 6.3513384729939E-6, 0 1 5 0.6351338E-05 0.1880622E-01 NI: 2, NLI: 6, ERLI 0.6351338E-05, ERNI: 0.1880622E-01 T= 0.17E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.47E+01 Time integration at T= 0.17E+00, Grid level= 3, NPTS= 508 Nonlinear system solver at T = 0.1655291E+00 Max. and WRMS norm residual= 0.2616276E+01 0.3089126E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1016 # it. GCRO # it.GMRES Error Estimate 0 0 0.5580197E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5580197E+02 1 0.7621207E+01 0.1365760E+00 2 0.1844359E+01 0.3305187E-01 3 0.7063189E+00 0.1265760E-01 4 0.3034409E+00 0.5437817E-02 5 0.1088133E+00 0.1949991E-02 6 0.4740063E-01 0.8494437E-03 Result GMRES:6, 5.E-2, 4.7400625095277E-2, 0 1 6 0.4740063E-01 0.5867067E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4740063E-01 1 0.2504676E-01 0.5284058E+00 2 0.9666424E-02 0.2039303E+00 3 0.4072725E-02 0.8592133E-01 4 0.1599172E-02 0.3373735E-01 5 0.5614116E-03 0.1184397E-01 6 0.2448683E-03 0.5165930E-02 7 0.1000255E-03 0.2110214E-02 8 0.3561423E-04 0.7513451E-03 Result GMRES:8, 5.E-2, 3.5614229487829E-5, 0 2 14 0.3561423E-04 0.4296817E-01 NI: 1, NLI: 16, ERLI 0.3561423E-04, ERNI: 0.5867079E+02 Max. and WRMS norm residual= 0.5420856E-01 0.5851864E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1016 # it. GCRO # it.GMRES Error Estimate 0 0 0.9495755E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9495755E+00 1 0.1765933E+00 0.1859708E+00 2 0.5528930E-01 0.5822528E-01 3 0.2477230E-01 0.2608776E-01 4 0.8796528E-02 0.9263643E-02 5 0.3712054E-02 0.3909172E-02 6 0.1470877E-02 0.1548983E-02 7 0.5849423E-03 0.6160040E-03 Result GMRES:7, 2.5E-2, 5.849422904812E-4, 0 1 7 0.5849423E-03 0.1004654E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5849423E-03 1 0.3134112E-03 0.5357984E+00 2 0.1163791E-03 0.1989582E+00 3 0.4866530E-04 0.8319675E-01 4 0.1916675E-04 0.3276691E-01 5 0.7741495E-05 0.1323463E-01 6 0.3166698E-05 0.5413693E-02 7 0.1102012E-05 0.1883967E-02 8 0.4662680E-06 0.7971180E-03 Result GMRES:8, 2.5E-2, 4.6626804390103E-7, 0 2 15 0.4662680E-06 0.5205473E-03 NI: 2, NLI: 17, ERLI 0.4662680E-06, ERNI: 0.1004655E+01 T= 0.17E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.29E+01 Time integration at T= 0.17E+00, Grid level= 4, NPTS= 1053 Nonlinear system solver at T = 0.1655291E+00 Max. and WRMS norm residual= 0.2706048E+01 0.4326839E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2106 # it. GCRO # it.GMRES Error Estimate 0 0 0.6048193E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6048193E+02 1 0.1386197E+02 0.2291919E+00 2 0.5650803E+01 0.9342961E-01 3 0.3181387E+01 0.5260063E-01 4 0.1949721E+01 0.3223641E-01 5 0.1075863E+01 0.1778817E-01 6 0.6515777E+00 0.1077310E-01 7 0.3806976E+00 0.6294403E-02 8 0.2297128E+00 0.3798040E-02 9 0.1385746E+00 0.2291174E-02 10 0.8364393E-01 0.1382957E-02 11 0.5141006E-01 0.8500070E-03 12 0.3113655E-01 0.5148074E-03 Result GMRES:12, 5.E-2, 3.1136545080757E-2, 0 1 12 0.3113655E-01 0.7681095E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3113655E-01 1 0.2169530E-01 0.6967794E+00 2 0.1256255E-01 0.4034664E+00 3 0.7497087E-02 0.2407810E+00 4 0.4593646E-02 0.1475323E+00 5 0.2759049E-02 0.8861128E-01 6 0.1726522E-02 0.5545001E-01 7 0.1047664E-02 0.3364740E-01 8 0.6568238E-03 0.2109495E-01 9 0.4014912E-03 0.1289453E-01 10 0.2514187E-03 0.8074713E-02 11 0.1549822E-03 0.4977500E-02 12 0.9636823E-04 0.3095020E-02 13 0.5971848E-04 0.1917955E-02 14 0.3706342E-04 0.1190351E-02 15 0.2302725E-04 0.7395568E-03 Result GMRES:15, 5.E-2, 2.3027245158627E-5, 0 2 27 0.2302725E-04 0.3015152E-01 NI: 1, NLI: 29, ERLI 0.2302725E-04, ERNI: 0.7681202E+02 Max. and WRMS norm residual= 0.1193745E+00 0.1517600E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2106 # it. GCRO # it.GMRES Error Estimate 0 0 0.1896632E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1896632E+01 1 0.5312717E+00 0.2801133E+00 2 0.2306214E+00 0.1215952E+00 3 0.1535623E+00 0.8096581E-01 4 0.6960310E-01 0.3669826E-01 5 0.4439146E-01 0.2340542E-01 6 0.2360490E-01 0.1244569E-01 7 0.1473595E-01 0.7769538E-02 8 0.8311562E-02 0.4382275E-02 9 0.5106328E-02 0.2692314E-02 10 0.2991332E-02 0.1577181E-02 11 0.1825072E-02 0.9622698E-03 Result GMRES:11, 2.5E-2, 1.8250715839518E-3, 0 1 11 0.1825072E-02 0.2056271E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1825072E-02 1 0.1277073E-02 0.6997386E+00 2 0.7101246E-03 0.3890941E+00 3 0.4282916E-03 0.2346711E+00 4 0.2505277E-03 0.1372701E+00 5 0.1506424E-03 0.8254057E-01 6 0.9130923E-04 0.5003049E-01 7 0.5483581E-04 0.3004584E-01 8 0.3367642E-04 0.1845211E-01 9 0.1998784E-04 0.1095181E-01 10 0.1251626E-04 0.6857953E-02 11 0.7352595E-05 0.4028661E-02 12 0.4637070E-05 0.2540760E-02 13 0.2707827E-05 0.1483683E-02 14 0.1720459E-05 0.9426804E-03 Result GMRES:14, 2.5E-2, 1.7204592492369E-6, 0 2 25 0.1720459E-05 0.1683163E-02 NI: 2, NLI: 27, ERLI 0.1720459E-05, ERNI: 0.2056384E+01 T= 0.17E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.17E+00, Grid level= 5, NPTS= 2311 Nonlinear system solver at T = 0.1655291E+00 Max. and WRMS norm residual= 0.3043578E+01 0.5960105E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.4579971E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4579971E+02 1 0.2345066E+02 0.5120263E+00 2 0.1191731E+02 0.2602049E+00 3 0.8046097E+01 0.1756801E+00 4 0.5696599E+01 0.1243807E+00 5 0.4133024E+01 0.9024127E-01 6 0.3073488E+01 0.6710715E-01 7 0.2305535E+01 0.5033951E-01 8 0.1742694E+01 0.3805033E-01 9 0.1324814E+01 0.2892625E-01 10 0.1012191E+01 0.2210038E-01 11 0.7748258E+00 0.1691770E-01 12 0.5932032E+00 0.1295212E-01 13 0.4544549E+00 0.9922659E-02 14 0.3486021E+00 0.7611447E-02 15 0.2679875E+00 0.5851292E-02 16 0.2063954E+00 0.4506479E-02 17 0.1591578E+00 0.3475083E-02 18 0.1229203E+00 0.2683866E-02 19 0.9507760E-01 0.2075943E-02 20 0.7365285E-01 0.1608151E-02 Result GMRES:20, 5.E-2, 7.3652846127247E-2, 1 1 20 0.7365285E-01 0.1012432E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7365285E-01 1 0.5930584E-01 0.8052078E+00 2 0.4483607E-01 0.6087486E+00 3 0.3469361E-01 0.4710424E+00 4 0.2703123E-01 0.3670087E+00 5 0.2107950E-01 0.2862007E+00 6 0.1648102E-01 0.2237662E+00 7 0.1289111E-01 0.1750252E+00 8 0.1009381E-01 0.1370457E+00 9 0.7902966E-02 0.1073002E+00 10 0.6196816E-02 0.8413546E-01 11 0.4853818E-02 0.6590129E-01 12 0.3808655E-02 0.5171090E-01 13 0.2986225E-02 0.4054460E-01 14 0.2342763E-02 0.3180818E-01 15 0.1839206E-02 0.2497128E-01 16 0.1442101E-02 0.1957971E-01 17 0.1132776E-02 0.1537994E-01 18 0.8887663E-03 0.1206697E-01 19 0.6978209E-03 0.9474459E-02 20 0.5478413E-03 0.7438155E-02 Result GMRES:20, 5.E-2, 5.4784127577624E-4, 1 2 40 0.5478413E-03 0.1282453E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5478413E-03 1 0.4444900E-03 0.8113482E+00 2 0.3405887E-03 0.6216923E+00 3 0.2663616E-03 0.4862022E+00 4 0.2087034E-03 0.3809559E+00 5 0.1641083E-03 0.2995545E+00 6 0.1288476E-03 0.2351915E+00 7 0.1012778E-03 0.1848670E+00 8 0.7953886E-04 0.1451860E+00 9 0.6250220E-04 0.1140881E+00 10 0.4908202E-04 0.8959168E-01 11 0.3855217E-04 0.7037106E-01 12 0.3027188E-04 0.5525667E-01 13 0.2377099E-04 0.4339029E-01 14 0.1866100E-04 0.3406279E-01 15 0.1464765E-04 0.2673703E-01 16 0.1149235E-04 0.2097752E-01 17 0.9017421E-05 0.1645992E-01 18 0.7060668E-05 0.1288816E-01 19 0.5531234E-05 0.1009642E-01 20 0.4310827E-05 0.7868752E-02 Result GMRES:20, 5.E-2, 4.3108273037417E-6, 1 3 60 0.4310827E-05 0.9968242E-03 NI: 1, NLI: 63, ERLI 0.4310827E-05, ERNI: 0.1012480E+03 Max. and WRMS norm residual= 0.1448270E+00 0.2583132E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.1649730E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1649730E+01 1 0.6271552E+00 0.3801562E+00 2 0.3513239E+00 0.2129584E+00 3 0.2673019E+00 0.1620276E+00 4 0.1763795E+00 0.1069142E+00 5 0.1326083E+00 0.8038180E-01 6 0.9560176E-01 0.5794994E-01 7 0.7144147E-01 0.4330494E-01 8 0.5306071E-01 0.3216326E-01 9 0.3935763E-01 0.2385701E-01 10 0.2946887E-01 0.1786284E-01 11 0.2187842E-01 0.1326181E-01 12 0.1652013E-01 0.1001384E-01 13 0.1241288E-01 0.7524185E-02 14 0.9412171E-02 0.5705279E-02 15 0.7141434E-02 0.4328850E-02 16 0.5433311E-02 0.3293454E-02 17 0.4148340E-02 0.2514557E-02 18 0.3166627E-02 0.1919482E-02 19 0.2424097E-02 0.1469390E-02 20 0.1856044E-02 0.1125059E-02 Result GMRES:20, 2.5E-2, 1.8560437590182E-3, 1 1 20 0.1856044E-02 0.3031619E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1856044E-02 1 0.1483147E-02 0.7990903E+00 2 0.1100953E-02 0.5931718E+00 3 0.8450759E-03 0.4553104E+00 4 0.6476753E-03 0.3489548E+00 5 0.4992990E-03 0.2690125E+00 6 0.3856543E-03 0.2077830E+00 7 0.2975931E-03 0.1603373E+00 8 0.2303140E-03 0.1240887E+00 9 0.1782281E-03 0.9602579E-01 10 0.1379321E-03 0.7431511E-01 11 0.1068769E-03 0.5758320E-01 12 0.8287051E-04 0.4464901E-01 13 0.6414343E-04 0.3455922E-01 14 0.4978542E-04 0.2682341E-01 15 0.3856344E-04 0.2077722E-01 16 0.2990530E-04 0.1611239E-01 17 0.2318639E-04 0.1249237E-01 18 0.1797385E-04 0.9683958E-02 19 0.1393196E-04 0.7506270E-02 20 0.1081617E-04 0.5827539E-02 Result GMRES:20, 2.5E-2, 1.0816168115744E-5, 1 2 40 0.1081617E-04 0.2997007E-02 NI: 2, NLI: 42, ERLI 0.1081617E-04, ERNI: 0.3031646E+01 T= 0.17E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.35E+00 TN= 0.14E+00, DT= 0.25E-01, DTNEW= 0.25E-01, TIMMON= 0.50E+00 Time integration at T= 0.19E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.1908161E+00 Max. and WRMS norm residual= 0.1975214E-01 0.2127211E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1220219E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1220219E+01 1 0.4174323E-01 0.3420962E-01 2 0.3949309E-02 0.3236558E-02 3 0.2184961E-03 0.1790630E-03 Result GMRES:3, 5.E-2, 2.1849610526704E-4, 0 1 3 0.2184961E-03 0.1222459E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2184961E-03 1 0.2559240E-04 0.1171298E+00 2 0.1950758E-05 0.8928115E-02 3 0.1251555E-06 0.5728044E-03 Result GMRES:3, 5.E-2, 1.2515552294856E-7, 0 2 6 0.1251555E-06 0.2196165E-03 NI: 1, NLI: 8, ERLI 0.1251555E-06, ERNI: 0.1222456E+01 Max. and WRMS norm residual= 0.1355601E-05 0.1250929E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2135531E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2135531E-04 1 0.1992937E-05 0.9332281E-01 2 0.1572085E-06 0.7361566E-02 3 0.1173999E-07 0.5497458E-03 Result GMRES:3, 2.5E-2, 1.1739989725323E-8, 0 1 3 0.1173999E-07 0.2195717E-04 NI: 2, NLI: 4, ERLI 0.1173999E-07, ERNI: 0.2195717E-04 T= 0.19E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.19E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.1908161E+00 Max. and WRMS norm residual= 0.1753565E+01 0.1846271E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.4974791E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4974791E+02 1 0.3409840E+01 0.6854238E-01 2 0.4493297E+00 0.9032132E-02 3 0.9754168E-01 0.1960719E-02 4 0.2392391E-01 0.4809029E-03 Result GMRES:4, 5.E-2, 2.3923914101712E-2, 0 1 4 0.2392391E-01 0.5078004E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2392391E-01 1 0.7716656E-02 0.3225499E+00 2 0.1561466E-02 0.6526799E-01 3 0.2669106E-03 0.1115664E-01 4 0.4781784E-04 0.1998747E-02 5 0.1338460E-04 0.5594653E-03 Result GMRES:5, 5.E-2, 1.3384599905593E-5, 0 2 9 0.1338460E-04 0.2289725E-01 NI: 1, NLI: 11, ERLI 0.1338460E-04, ERNI: 0.5077979E+02 Max. and WRMS norm residual= 0.3094341E-02 0.2656582E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.4522221E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4522221E-01 1 0.6638645E-02 0.1468005E+00 2 0.1480676E-02 0.3274224E-01 3 0.3495748E-03 0.7730157E-02 4 0.7588748E-04 0.1678102E-02 5 0.1602246E-04 0.3543052E-03 Result GMRES:5, 2.5E-2, 1.6022462933541E-5, 0 1 5 0.1602246E-04 0.4750662E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1602246E-04 1 0.4788072E-05 0.2988349E+00 2 0.9538123E-06 0.5952969E-01 3 0.2266874E-06 0.1414810E-01 4 0.4693517E-07 0.2929335E-02 5 0.7689398E-08 0.4799136E-03 Result GMRES:5, 2.5E-2, 7.6893979464305E-9, 0 2 10 0.7689398E-08 0.1563309E-04 NI: 2, NLI: 12, ERLI 0.7689398E-08, ERNI: 0.4750647E-01 T= 0.19E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.40E+01 Time integration at T= 0.19E+00, Grid level= 3, NPTS= 504 Nonlinear system solver at T = 0.1908161E+00 Max. and WRMS norm residual= 0.1916910E+01 0.2841553E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1008 # it. GCRO # it.GMRES Error Estimate 0 0 0.5354949E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5354949E+02 1 0.6859259E+01 0.1280920E+00 2 0.1937618E+01 0.3618369E-01 3 0.6848456E+00 0.1278902E-01 4 0.3049652E+00 0.5695016E-02 5 0.1052862E+00 0.1966147E-02 6 0.4460675E-01 0.8330005E-03 Result GMRES:6, 5.E-2, 4.4606750846351E-2, 0 1 6 0.4460675E-01 0.5559504E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4460675E-01 1 0.2354552E-01 0.5278465E+00 2 0.8638530E-02 0.1936597E+00 3 0.3631941E-02 0.8142133E-01 4 0.1415205E-02 0.3172625E-01 5 0.4647573E-03 0.1041899E-01 6 0.2086131E-03 0.4676716E-02 7 0.7965195E-04 0.1785648E-02 8 0.3043699E-04 0.6823405E-03 Result GMRES:8, 5.E-2, 3.0436992991637E-5, 0 2 14 0.3043699E-04 0.3996909E-01 NI: 1, NLI: 16, ERLI 0.3043699E-04, ERNI: 0.5559623E+02 Max. and WRMS norm residual= 0.4527005E-01 0.5557314E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1008 # it. GCRO # it.GMRES Error Estimate 0 0 0.9003113E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9003113E+00 1 0.1602947E+00 0.1780437E+00 2 0.4508375E-01 0.5007574E-01 3 0.2019675E-01 0.2243307E-01 4 0.7193727E-02 0.7990266E-02 5 0.3010172E-02 0.3343480E-02 6 0.1194837E-02 0.1327138E-02 7 0.4699223E-03 0.5219554E-03 Result GMRES:7, 2.5E-2, 4.6992228215141E-4, 0 1 7 0.4699223E-03 0.9540830E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4699223E-03 1 0.2496168E-03 0.5311874E+00 2 0.9448683E-04 0.2010691E+00 3 0.3897653E-04 0.8294250E-01 4 0.1550710E-04 0.3299929E-01 5 0.6220807E-05 0.1323795E-01 6 0.2535379E-05 0.5395316E-02 7 0.8934271E-06 0.1901223E-02 8 0.3840442E-06 0.8172504E-03 Result GMRES:8, 2.5E-2, 3.8404415959974E-7, 0 2 15 0.3840442E-06 0.4170478E-03 NI: 2, NLI: 17, ERLI 0.3840442E-06, ERNI: 0.9540812E+00 T= 0.19E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.32E+01 Time integration at T= 0.19E+00, Grid level= 4, NPTS= 969 Nonlinear system solver at T = 0.1908161E+00 Max. and WRMS norm residual= 0.3028557E+01 0.4579972E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1938 # it. GCRO # it.GMRES Error Estimate 0 0 0.6389391E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6389391E+02 1 0.1474183E+02 0.2307235E+00 2 0.5889121E+01 0.9217031E-01 3 0.3317937E+01 0.5192885E-01 4 0.2068996E+01 0.3238174E-01 5 0.1113940E+01 0.1743421E-01 6 0.6672771E+00 0.1044352E-01 7 0.3924024E+00 0.6141468E-02 8 0.2342278E+00 0.3665886E-02 9 0.1411502E+00 0.2209134E-02 10 0.8516566E-01 0.1332923E-02 11 0.5205080E-01 0.8146442E-03 12 0.3153397E-01 0.4935364E-03 Result GMRES:12, 5.E-2, 3.15339686364E-2, 0 1 12 0.3153397E-01 0.8102898E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3153397E-01 1 0.2202041E-01 0.6983077E+00 2 0.1264355E-01 0.4009500E+00 3 0.7564845E-02 0.2398951E+00 4 0.4628618E-02 0.1467820E+00 5 0.2749271E-02 0.8718443E-01 6 0.1721604E-02 0.5459524E-01 7 0.1041737E-02 0.3303538E-01 8 0.6510808E-03 0.2064697E-01 9 0.3962042E-03 0.1256436E-01 10 0.2480559E-03 0.7866307E-02 11 0.1523510E-03 0.4831331E-02 12 0.9464866E-04 0.3001483E-02 13 0.5832305E-04 0.1849531E-02 14 0.3630228E-04 0.1151212E-02 15 0.2239734E-04 0.7102608E-03 Result GMRES:15, 5.E-2, 2.2397343129704E-5, 0 2 27 0.2239734E-04 0.3052433E-01 NI: 1, NLI: 29, ERLI 0.2239734E-04, ERNI: 0.8103007E+02 Max. and WRMS norm residual= 0.1017152E+00 0.1610959E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1938 # it. GCRO # it.GMRES Error Estimate 0 0 0.2011003E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2011003E+01 1 0.5640058E+00 0.2804599E+00 2 0.2418933E+00 0.1202849E+00 3 0.1596737E+00 0.7940002E-01 4 0.7669443E-01 0.3813740E-01 5 0.4804389E-01 0.2389051E-01 6 0.2598918E-01 0.1292349E-01 7 0.1576676E-01 0.7840245E-02 8 0.9081914E-02 0.4516111E-02 9 0.5432891E-02 0.2701582E-02 10 0.3240363E-02 0.1611317E-02 11 0.1920320E-02 0.9549064E-03 Result GMRES:11, 2.5E-2, 1.920319819004E-3, 0 1 11 0.1920320E-02 0.2185053E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1920320E-02 1 0.1344341E-02 0.7000612E+00 2 0.7427105E-03 0.3867640E+00 3 0.4477207E-03 0.2331490E+00 4 0.2637656E-03 0.1373550E+00 5 0.1565506E-03 0.8152317E-01 6 0.9517745E-04 0.4956333E-01 7 0.5749877E-04 0.2994229E-01 8 0.3485667E-04 0.1815149E-01 9 0.2107442E-04 0.1097443E-01 10 0.1295163E-04 0.6744516E-02 11 0.7818118E-05 0.4071258E-02 12 0.4831302E-05 0.2515884E-02 13 0.2900768E-05 0.1510565E-02 14 0.1806176E-05 0.9405601E-03 Result GMRES:14, 2.5E-2, 1.8061762778255E-6, 0 2 25 0.1806176E-05 0.1764570E-02 NI: 2, NLI: 27, ERLI 0.1806176E-05, ERNI: 0.2185164E+01 T= 0.19E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.96E+00 Time integration at T= 0.19E+00, Grid level= 5, NPTS= 2309 Nonlinear system solver at T = 0.1908161E+00 Max. and WRMS norm residual= 0.3026908E+01 0.6035801E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.4623516E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4623516E+02 1 0.2361905E+02 0.5108459E+00 2 0.1194071E+02 0.2582603E+00 3 0.8039575E+01 0.1738844E+00 4 0.5689239E+01 0.1230500E+00 5 0.4118557E+01 0.8907846E-01 6 0.3061679E+01 0.6621970E-01 7 0.2287320E+01 0.4947144E-01 8 0.1726410E+01 0.3733977E-01 9 0.1312659E+01 0.2839093E-01 10 0.1003220E+01 0.2169821E-01 11 0.7693442E+00 0.1663981E-01 12 0.5908767E+00 0.1277981E-01 13 0.4537456E+00 0.9813864E-02 14 0.3482366E+00 0.7531855E-02 15 0.2674386E+00 0.5784312E-02 16 0.2057675E+00 0.4450454E-02 17 0.1585314E+00 0.3428807E-02 18 0.1222597E+00 0.2644300E-02 19 0.9436799E-01 0.2041044E-02 20 0.7295597E-01 0.1577932E-02 Result GMRES:20, 5.E-2, 7.2955967383617E-2, 1 1 20 0.7295597E-01 0.1021858E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7295597E-01 1 0.5862496E-01 0.8035664E+00 2 0.4430162E-01 0.6072377E+00 3 0.3412626E-01 0.4677651E+00 4 0.2654951E-01 0.3639114E+00 5 0.2067332E-01 0.2833671E+00 6 0.1612885E-01 0.2210765E+00 7 0.1257267E-01 0.1723323E+00 8 0.9854114E-02 0.1350693E+00 9 0.7675998E-02 0.1052141E+00 10 0.6028521E-02 0.8263232E-01 11 0.4704244E-02 0.6448060E-01 12 0.3694814E-02 0.5064444E-01 13 0.2892592E-02 0.3964847E-01 14 0.2269368E-02 0.3110599E-01 15 0.1782185E-02 0.2442823E-01 16 0.1396134E-02 0.1913667E-01 17 0.1097101E-02 0.1503786E-01 18 0.8606988E-03 0.1179751E-01 19 0.6758310E-03 0.9263547E-02 20 0.5306993E-03 0.7274242E-02 Result GMRES:20, 5.E-2, 5.3069934145298E-4, 1 2 40 0.5306993E-03 0.1272424E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5306993E-03 1 0.4306967E-03 0.8115644E+00 2 0.3300257E-03 0.6218694E+00 3 0.2581595E-03 0.4864515E+00 4 0.2022434E-03 0.3810885E+00 5 0.1590439E-03 0.2996875E+00 6 0.1248925E-03 0.2353356E+00 7 0.9816736E-04 0.1849774E+00 8 0.7712373E-04 0.1453247E+00 9 0.6061692E-04 0.1142208E+00 10 0.4761374E-04 0.8971886E-01 11 0.3742831E-04 0.7052639E-01 12 0.2939429E-04 0.5538784E-01 13 0.2310287E-04 0.4353288E-01 14 0.1815036E-04 0.3420082E-01 15 0.1425693E-04 0.2686442E-01 16 0.1120128E-04 0.2110664E-01 17 0.8793740E-05 0.1657010E-01 18 0.6900287E-05 0.1300225E-01 19 0.5411622E-05 0.1019715E-01 20 0.4227495E-05 0.7965895E-02 Result GMRES:20, 5.E-2, 4.2274950039427E-6, 1 3 60 0.4227495E-05 0.9658717E-03 NI: 1, NLI: 63, ERLI 0.4227495E-05, ERNI: 0.1021912E+03 Max. and WRMS norm residual= 0.1510490E+00 0.2694115E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.1721612E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1721612E+01 1 0.6490015E+00 0.3769732E+00 2 0.3542428E+00 0.2057623E+00 3 0.2699219E+00 0.1567844E+00 4 0.1772510E+00 0.1029564E+00 5 0.1330013E+00 0.7725396E-01 6 0.9622214E-01 0.5589073E-01 7 0.7142795E-01 0.4148900E-01 8 0.5334864E-01 0.3098762E-01 9 0.3966953E-01 0.2304209E-01 10 0.2995191E-01 0.1739760E-01 11 0.2228500E-01 0.1294427E-01 12 0.1679683E-01 0.9756458E-02 13 0.1254124E-01 0.7284590E-02 14 0.9474328E-02 0.5503173E-02 15 0.7156124E-02 0.4156642E-02 16 0.5418484E-02 0.3147332E-02 17 0.4125368E-02 0.2396225E-02 18 0.3136318E-02 0.1821734E-02 19 0.2394688E-02 0.1390957E-02 20 0.1832156E-02 0.1064210E-02 Result GMRES:20, 2.5E-2, 1.8321560784044E-3, 1 1 20 0.1832156E-02 0.3142134E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1832156E-02 1 0.1468769E-02 0.8016617E+00 2 0.1086695E-02 0.5931236E+00 3 0.8340105E-03 0.4552071E+00 4 0.6394124E-03 0.3489945E+00 5 0.4913813E-03 0.2681984E+00 6 0.3799001E-03 0.2073514E+00 7 0.2926256E-03 0.1597165E+00 8 0.2264316E-03 0.1235875E+00 9 0.1752381E-03 0.9564583E-01 10 0.1352308E-03 0.7380966E-01 11 0.1051291E-03 0.5738000E-01 12 0.8108499E-04 0.4425659E-01 13 0.6311497E-04 0.3444847E-01 14 0.4876772E-04 0.2661767E-01 15 0.3790662E-04 0.2068962E-01 16 0.2936165E-04 0.1602574E-01 17 0.2280577E-04 0.1244750E-01 18 0.1765190E-04 0.9634498E-02 19 0.1373898E-04 0.7498806E-02 20 0.1062007E-04 0.5796487E-02 Result GMRES:20, 2.5E-2, 1.0620069124262E-5, 1 2 40 0.1062007E-04 0.2985477E-02 NI: 2, NLI: 42, ERLI 0.1062007E-04, ERNI: 0.3142150E+01 T= 0.19E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.37E+00 TN= 0.17E+00, DT= 0.25E-01, DTNEW= 0.25E-01, TIMMON= 0.51E+00 Time integration at T= 0.22E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.2153368E+00 Max. and WRMS norm residual= 0.4805288E-01 0.5219349E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1134934E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1134934E+01 1 0.8704791E-01 0.7669866E-01 2 0.8956673E-02 0.7891801E-02 3 0.5399437E-03 0.4757490E-03 Result GMRES:3, 5.E-2, 5.3994368183753E-4, 0 1 3 0.5399437E-03 0.1152692E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5399437E-03 1 0.6024622E-04 0.1115787E+00 2 0.3967867E-05 0.7348668E-02 3 0.2164410E-06 0.4008585E-03 Result GMRES:3, 5.E-2, 2.1644101935201E-7, 0 2 6 0.2164410E-06 0.5387312E-03 NI: 1, NLI: 8, ERLI 0.2164410E-06, ERNI: 0.1152701E+01 Max. and WRMS norm residual= 0.4249301E-05 0.3382032E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.5635063E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5635063E-04 1 0.4047916E-05 0.7183443E-01 2 0.3260567E-06 0.5786212E-02 3 0.2426148E-07 0.4305450E-03 Result GMRES:3, 2.5E-2, 2.4261480964486E-8, 0 1 3 0.2426148E-07 0.5751415E-04 NI: 2, NLI: 4, ERLI 0.2426148E-07, ERNI: 0.5751415E-04 T= 0.22E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.22E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.2153368E+00 Max. and WRMS norm residual= 0.2584887E+01 0.2688192E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6167644E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6167644E+02 1 0.4239162E+01 0.6873227E-01 2 0.4719815E+00 0.7652541E-02 3 0.8985052E-01 0.1456805E-02 4 0.2293622E-01 0.3718798E-03 Result GMRES:4, 5.E-2, 2.293622295003E-2, 0 1 4 0.2293622E-01 0.6321792E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2293622E-01 1 0.7733217E-02 0.3371617E+00 2 0.1458915E-02 0.6360747E-01 3 0.2461931E-03 0.1073381E-01 4 0.4649067E-04 0.2026954E-02 5 0.1238808E-04 0.5401098E-03 Result GMRES:5, 5.E-2, 1.2388078218356E-5, 0 2 9 0.1238808E-04 0.2182417E-01 NI: 1, NLI: 11, ERLI 0.1238808E-04, ERNI: 0.6321775E+02 Max. and WRMS norm residual= 0.4461638E-02 0.6197369E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.1025699E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1025699E+00 1 0.1283047E-01 0.1250900E+00 2 0.2205710E-02 0.2150445E-01 3 0.5005157E-03 0.4879750E-02 4 0.1137905E-03 0.1109394E-02 5 0.2625008E-04 0.2559237E-03 Result GMRES:5, 2.5E-2, 2.6250077920495E-5, 0 1 5 0.2625008E-04 0.1079354E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2625008E-04 1 0.8014507E-05 0.3053136E+00 2 0.1648432E-05 0.6279721E-01 3 0.3707747E-06 0.1412471E-01 4 0.6957943E-07 0.2650637E-02 5 0.9927738E-08 0.3781984E-03 Result GMRES:5, 2.5E-2, 9.9277384344475E-9, 0 2 10 0.9927738E-08 0.2539143E-04 NI: 2, NLI: 12, ERLI 0.9927738E-08, ERNI: 0.1079351E+00 T= 0.22E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.22E+00, Grid level= 3, NPTS= 496 Nonlinear system solver at T = 0.2153368E+00 Max. and WRMS norm residual= 0.2674415E+01 0.2996536E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.5585176E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5585176E+02 1 0.7266916E+01 0.1301108E+00 2 0.1577978E+01 0.2825297E-01 3 0.4806767E+00 0.8606295E-02 4 0.2123711E+00 0.3802407E-02 5 0.7448325E-01 0.1333588E-02 6 0.2978298E-01 0.5332506E-03 Result GMRES:6, 5.E-2, 2.978298344022E-2, 0 1 6 0.2978298E-01 0.5862704E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2978298E-01 1 0.1536059E-01 0.5157506E+00 2 0.5500124E-02 0.1846734E+00 3 0.2330663E-02 0.7825486E-01 4 0.8449281E-03 0.2836949E-01 5 0.3035273E-03 0.1019130E-01 6 0.1301921E-03 0.4371359E-02 7 0.5274668E-04 0.1771034E-02 8 0.1868914E-04 0.6275105E-03 Result GMRES:8, 5.E-2, 1.8689135332451E-5, 0 2 14 0.1868914E-04 0.2647013E-01 NI: 1, NLI: 16, ERLI 0.1868914E-04, ERNI: 0.5862788E+02 Max. and WRMS norm residual= 0.1921153E-01 0.2650114E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.4113075E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4113075E+00 1 0.6592057E-01 0.1602708E+00 2 0.1740128E-01 0.4230723E-01 3 0.7294311E-02 0.1773445E-01 4 0.2843711E-02 0.6913834E-02 5 0.1041496E-02 0.2532160E-02 6 0.4398123E-03 0.1069303E-02 7 0.1620188E-03 0.3939117E-03 Result GMRES:7, 2.5E-2, 1.620188378566E-4, 0 1 7 0.1620188E-03 0.4227301E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1620188E-03 1 0.8399967E-04 0.5184562E+00 2 0.3259718E-04 0.2011938E+00 3 0.1229775E-04 0.7590320E-01 4 0.5019353E-05 0.3098006E-01 5 0.1936745E-05 0.1195383E-01 6 0.7486097E-06 0.4620510E-02 7 0.2442493E-06 0.1507536E-02 8 0.1016780E-06 0.6275688E-03 Result GMRES:8, 2.5E-2, 1.0167796043695E-7, 0 2 15 0.1016780E-06 0.1458879E-03 NI: 2, NLI: 17, ERLI 0.1016780E-06, ERNI: 0.4227301E+00 T= 0.22E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.22E+00, Grid level= 4, NPTS= 1037 Nonlinear system solver at T = 0.2153368E+00 Max. and WRMS norm residual= 0.2718604E+01 0.4450853E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2074 # it. GCRO # it.GMRES Error Estimate 0 0 0.6078205E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6078205E+02 1 0.1368200E+02 0.2250993E+00 2 0.5333679E+01 0.8775089E-01 3 0.2932832E+01 0.4825162E-01 4 0.1805098E+01 0.2969787E-01 5 0.9485295E+00 0.1560542E-01 6 0.5651726E+00 0.9298347E-02 7 0.3287606E+00 0.5408844E-02 8 0.1925642E+00 0.3168110E-02 9 0.1154221E+00 0.1898950E-02 10 0.6848331E-01 0.1126703E-02 11 0.4155244E-01 0.6836301E-03 Result GMRES:11, 5.E-2, 4.1552441382593E-2, 0 1 11 0.4155244E-01 0.7656746E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4155244E-01 1 0.2872390E-01 0.6912687E+00 2 0.1631549E-01 0.3926482E+00 3 0.9578282E-02 0.2305107E+00 4 0.5816313E-02 0.1399752E+00 5 0.3401210E-02 0.8185344E-01 6 0.2106126E-02 0.5068596E-01 7 0.1236030E-02 0.2974627E-01 8 0.7752354E-03 0.1865679E-01 9 0.4614618E-03 0.1110553E-01 10 0.2828153E-03 0.6806226E-02 11 0.1744088E-03 0.4197318E-02 12 0.1052737E-03 0.2533514E-02 13 0.6546051E-04 0.1575371E-02 14 0.3957579E-04 0.9524299E-03 Result GMRES:14, 5.E-2, 3.9575787639828E-5, 0 2 25 0.3957579E-04 0.4006580E-01 NI: 1, NLI: 27, ERLI 0.3957579E-04, ERNI: 0.7657020E+02 Max. and WRMS norm residual= 0.1166125E+00 0.1557760E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2074 # it. GCRO # it.GMRES Error Estimate 0 0 0.1913975E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1913975E+01 1 0.5121697E+00 0.2675947E+00 2 0.2028586E+00 0.1059881E+00 3 0.1325282E+00 0.6924235E-01 4 0.6108404E-01 0.3191475E-01 5 0.3912503E-01 0.2044176E-01 6 0.2059048E-01 0.1075796E-01 7 0.1253396E-01 0.6548651E-02 8 0.7060889E-02 0.3689122E-02 9 0.4237456E-02 0.2213955E-02 10 0.2466242E-02 0.1288544E-02 11 0.1467564E-02 0.7667624E-03 Result GMRES:11, 2.5E-2, 1.4675644046728E-3, 0 1 11 0.1467564E-02 0.2058478E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1467564E-02 1 0.1016617E-02 0.6927237E+00 2 0.5546313E-03 0.3779264E+00 3 0.3311520E-03 0.2256473E+00 4 0.1936136E-03 0.1319285E+00 5 0.1133158E-03 0.7721348E-01 6 0.6776355E-04 0.4617416E-01 7 0.4086449E-04 0.2784511E-01 8 0.2436847E-04 0.1660470E-01 9 0.1451716E-04 0.9892011E-02 10 0.8915359E-05 0.6074935E-02 11 0.5222678E-05 0.3558738E-02 12 0.3250402E-05 0.2214828E-02 13 0.1887051E-05 0.1285839E-02 14 0.1181645E-05 0.8051741E-03 Result GMRES:14, 2.5E-2, 1.1816447805097E-6, 0 2 25 0.1181645E-05 0.1351598E-02 NI: 2, NLI: 27, ERLI 0.1181645E-05, ERNI: 0.2058554E+01 T= 0.22E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.22E+00, Grid level= 5, NPTS= 2311 Nonlinear system solver at T = 0.2153368E+00 Max. and WRMS norm residual= 0.3000716E+01 0.6058776E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.4564334E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4564334E+02 1 0.2294412E+02 0.5026828E+00 2 0.1136471E+02 0.2489895E+00 3 0.7563621E+01 0.1657114E+00 4 0.5312137E+01 0.1163836E+00 5 0.3816884E+01 0.8362411E-01 6 0.2821102E+01 0.6180754E-01 7 0.2094963E+01 0.4589855E-01 8 0.1575634E+01 0.3452056E-01 9 0.1192850E+01 0.2613415E-01 10 0.9075374E+00 0.1988324E-01 11 0.6940298E+00 0.1520550E-01 12 0.5321002E+00 0.1165778E-01 13 0.4081763E+00 0.8942736E-02 14 0.3130531E+00 0.6858682E-02 15 0.2400248E+00 0.5258703E-02 16 0.1839999E+00 0.4031254E-02 17 0.1410709E+00 0.3090723E-02 18 0.1082186E+00 0.2370962E-02 19 0.8307948E-01 0.1820188E-02 20 0.6383373E-01 0.1398533E-02 Result GMRES:20, 5.E-2, 6.383372803192E-2, 1 1 20 0.6383373E-01 0.9979748E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6383373E-01 1 0.5095249E-01 0.7982063E+00 2 0.3827032E-01 0.5995313E+00 3 0.2922097E-01 0.4577669E+00 4 0.2257401E-01 0.3536376E+00 5 0.1745728E-01 0.2734805E+00 6 0.1351336E-01 0.2116963E+00 7 0.1047880E-01 0.1641578E+00 8 0.8141117E-02 0.1275363E+00 9 0.6325272E-02 0.9908982E-01 10 0.4924330E-02 0.7714307E-01 11 0.3831587E-02 0.6002450E-01 12 0.2987695E-02 0.4680433E-01 13 0.2326889E-02 0.3645234E-01 14 0.1814782E-02 0.2842983E-01 15 0.1415456E-02 0.2217410E-01 16 0.1102577E-02 0.1727264E-01 17 0.8605360E-03 0.1348090E-01 18 0.6708451E-03 0.1050926E-01 19 0.5233621E-03 0.8198834E-02 20 0.4082895E-03 0.6396140E-02 Result GMRES:20, 5.E-2, 4.0828948987337E-4, 1 2 40 0.4082895E-03 0.1102819E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4082895E-03 1 0.3295070E-03 0.8070425E+00 2 0.2506758E-03 0.6139659E+00 3 0.1948635E-03 0.4772681E+00 4 0.1516878E-03 0.3715202E+00 5 0.1185439E-03 0.2903429E+00 6 0.9248947E-04 0.2265291E+00 7 0.7225275E-04 0.1769645E+00 8 0.5640165E-04 0.1381413E+00 9 0.4405434E-04 0.1078998E+00 10 0.3439428E-04 0.8423993E-01 11 0.2686063E-04 0.6578819E-01 12 0.2097343E-04 0.5136901E-01 13 0.1638021E-04 0.4011910E-01 14 0.1278988E-04 0.3132553E-01 15 0.9987233E-05 0.2446116E-01 16 0.7796005E-05 0.1909431E-01 17 0.6086566E-05 0.1490748E-01 18 0.4744196E-05 0.1161969E-01 19 0.3699296E-05 0.9060472E-02 20 0.2872524E-05 0.7035507E-02 Result GMRES:20, 5.E-2, 2.8725236543685E-6, 1 3 60 0.2872524E-05 0.7286520E-03 NI: 1, NLI: 63, ERLI 0.2872524E-05, ERNI: 0.9980262E+02 Max. and WRMS norm residual= 0.1474457E+00 0.2620014E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.1658686E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1658686E+01 1 0.6132373E+00 0.3697128E+00 2 0.3242743E+00 0.1955008E+00 3 0.2458847E+00 0.1482407E+00 4 0.1602303E+00 0.9660074E-01 5 0.1192344E+00 0.7188489E-01 6 0.8591130E-01 0.5179480E-01 7 0.6313985E-01 0.3806619E-01 8 0.4711137E-01 0.2840283E-01 9 0.3475631E-01 0.2095413E-01 10 0.2620225E-01 0.1579699E-01 11 0.1950045E-01 0.1175657E-01 12 0.1471953E-01 0.8874212E-02 13 0.1101009E-01 0.6637842E-02 14 0.8269169E-02 0.4985374E-02 15 0.6208527E-02 0.3743040E-02 16 0.4666192E-02 0.2813186E-02 17 0.3528129E-02 0.2127063E-02 18 0.2663753E-02 0.1605942E-02 19 0.2021737E-02 0.1218879E-02 20 0.1535586E-02 0.9257846E-03 Result GMRES:20, 2.5E-2, 1.5355856581119E-3, 0 1 20 0.1535586E-02 0.2986027E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1535586E-02 1 0.1221094E-02 0.7951976E+00 2 0.9002566E-03 0.5862627E+00 3 0.6878683E-03 0.4479518E+00 4 0.5241148E-03 0.3413126E+00 5 0.4016262E-03 0.2615459E+00 6 0.3083198E-03 0.2007832E+00 7 0.2364660E-03 0.1539908E+00 8 0.1814854E-03 0.1181864E+00 9 0.1396229E-03 0.9092488E-01 10 0.1072982E-03 0.6987443E-01 11 0.8258125E-04 0.5377834E-01 12 0.6366184E-04 0.4145770E-01 13 0.4896594E-04 0.3188747E-01 14 0.3777863E-04 0.2460210E-01 15 0.2909977E-04 0.1895028E-01 16 0.2242336E-04 0.1460248E-01 17 0.1728948E-04 0.1125921E-01 18 0.1331814E-04 0.8673001E-02 19 0.1026529E-04 0.6684935E-02 20 0.7920696E-05 0.5158094E-02 Result GMRES:20, 2.5E-2, 7.9206955283401E-6, 1 2 40 0.7920696E-05 0.2456960E-02 NI: 2, NLI: 42, ERLI 0.7920696E-05, ERNI: 0.2986026E+01 T= 0.22E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.38E+00 TN= 0.19E+00, DT= 0.25E-01, DTNEW= 0.25E-01, TIMMON= 0.49E+00 Time integration at T= 0.24E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.2398575E+00 Max. and WRMS norm residual= 0.4835686E-01 0.5249624E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1436656E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1436656E+01 1 0.6708319E-01 0.4669397E-01 2 0.6784483E-02 0.4722412E-02 3 0.4451150E-03 0.3098271E-03 Result GMRES:3, 5.E-2, 4.4511497588481E-4, 0 1 3 0.4451150E-03 0.1453620E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4451150E-03 1 0.4846866E-04 0.1088902E+00 2 0.3873576E-05 0.8702417E-02 3 0.1683028E-06 0.3781107E-03 Result GMRES:3, 5.E-2, 1.6830275523667E-7, 0 2 6 0.1683028E-06 0.4432400E-03 NI: 1, NLI: 8, ERLI 0.1683028E-06, ERNI: 0.1453631E+01 Max. and WRMS norm residual= 0.5507132E-05 0.5304144E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.8791594E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8791594E-04 1 0.6648339E-05 0.7562154E-01 2 0.5758139E-06 0.6549596E-02 3 0.3841640E-07 0.4369674E-03 Result GMRES:3, 2.5E-2, 3.8416395899262E-8, 0 1 3 0.3841640E-07 0.8991400E-04 NI: 2, NLI: 4, ERLI 0.3841640E-07, ERNI: 0.8991400E-04 T= 0.24E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.24E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.2398575E+00 Max. and WRMS norm residual= 0.3020254E+01 0.3200241E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6462262E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6462262E+02 1 0.4833701E+01 0.7479891E-01 2 0.5556077E+00 0.8597728E-02 3 0.1204011E+00 0.1863142E-02 4 0.3160133E-01 0.4890134E-03 Result GMRES:4, 5.E-2, 3.1601325199135E-2, 0 1 4 0.3160133E-01 0.6646061E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3160133E-01 1 0.1032939E-01 0.3268657E+00 2 0.2064189E-02 0.6531971E-01 3 0.3460608E-03 0.1095083E-01 4 0.4924743E-04 0.1558398E-02 5 0.1359475E-04 0.4301956E-03 Result GMRES:5, 5.E-2, 1.3594751867504E-5, 0 2 9 0.1359475E-04 0.3017153E-01 NI: 1, NLI: 11, ERLI 0.1359475E-04, ERNI: 0.6646031E+02 Max. and WRMS norm residual= 0.6151064E-02 0.7591278E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.1247120E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1247120E+00 1 0.1507633E-01 0.1208891E+00 2 0.2460982E-02 0.1973331E-01 3 0.5476049E-03 0.4390954E-02 4 0.1183860E-03 0.9492745E-03 Result GMRES:4, 2.5E-2, 1.1838596598259E-4, 0 1 4 0.1183860E-03 0.1303026E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1183860E-03 1 0.3687914E-04 0.3115161E+00 2 0.7912380E-05 0.6683546E-01 3 0.1499814E-05 0.1266885E-01 4 0.2475432E-06 0.2090985E-02 5 0.6094372E-07 0.5147884E-03 Result GMRES:5, 2.5E-2, 6.094372475583E-8, 0 2 9 0.6094372E-07 0.1138522E-03 NI: 2, NLI: 11, ERLI 0.6094372E-07, ERNI: 0.1303026E+00 T= 0.24E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.37E+01 Time integration at T= 0.24E+00, Grid level= 3, NPTS= 496 Nonlinear system solver at T = 0.2398575E+00 Max. and WRMS norm residual= 0.3028870E+01 0.3377917E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.5981903E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5981903E+02 1 0.8214580E+01 0.1373239E+00 2 0.1574761E+01 0.2632542E-01 3 0.5553241E+00 0.9283402E-02 4 0.2387655E+00 0.3991465E-02 5 0.8515926E-01 0.1423615E-02 6 0.3508444E-01 0.5865097E-03 Result GMRES:6, 5.E-2, 3.50844371771E-2, 0 1 6 0.3508444E-01 0.6338507E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3508444E-01 1 0.1806825E-01 0.5149934E+00 2 0.6730282E-02 0.1918310E+00 3 0.2864631E-02 0.8164961E-01 4 0.1044848E-02 0.2978095E-01 5 0.3768222E-03 0.1074044E-01 6 0.1592088E-03 0.4537875E-02 7 0.6493265E-04 0.1850754E-02 8 0.2279141E-04 0.6496160E-03 Result GMRES:8, 5.E-2, 2.2791412700983E-5, 0 2 14 0.2279141E-04 0.3139698E-01 NI: 1, NLI: 16, ERLI 0.2279141E-04, ERNI: 0.6338546E+02 Max. and WRMS norm residual= 0.3680709E-01 0.3994298E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.6267826E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6267826E+00 1 0.1192220E+00 0.1902126E+00 2 0.3814976E-01 0.6086602E-01 3 0.1593871E-01 0.2542940E-01 4 0.5667091E-02 0.9041558E-02 5 0.2288621E-02 0.3651379E-02 6 0.8843999E-03 0.1411015E-02 7 0.3466233E-03 0.5530200E-03 Result GMRES:7, 2.5E-2, 3.4662334421682E-4, 0 1 7 0.3466233E-03 0.6558538E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3466233E-03 1 0.1815299E-03 0.5237095E+00 2 0.6680736E-04 0.1927376E+00 3 0.2681367E-04 0.7735678E-01 4 0.1031737E-04 0.2976537E-01 5 0.4099802E-05 0.1182783E-01 6 0.1582237E-05 0.4564715E-02 7 0.5443915E-06 0.1570556E-02 8 0.2321496E-06 0.6697460E-03 Result GMRES:8, 2.5E-2, 2.3214960920087E-7, 0 2 15 0.2321496E-06 0.3103423E-03 NI: 2, NLI: 17, ERLI 0.2321496E-06, ERNI: 0.6558567E+00 T= 0.24E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.24E+00, Grid level= 4, NPTS= 1067 Nonlinear system solver at T = 0.2398575E+00 Max. and WRMS norm residual= 0.3021290E+01 0.4439956E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2134 # it. GCRO # it.GMRES Error Estimate 0 0 0.6034396E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6034396E+02 1 0.1359117E+02 0.2252283E+00 2 0.5208852E+01 0.8631936E-01 3 0.2870184E+01 0.4756373E-01 4 0.1760393E+01 0.2917264E-01 5 0.9120092E+00 0.1511351E-01 6 0.5498486E+00 0.9111908E-02 7 0.3206779E+00 0.5314168E-02 8 0.1869775E+00 0.3098529E-02 9 0.1122312E+00 0.1859859E-02 10 0.6607742E-01 0.1095013E-02 11 0.4018395E-01 0.6659151E-03 Result GMRES:11, 5.E-2, 4.018395163253E-2, 0 1 11 0.4018395E-01 0.7591769E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4018395E-01 1 0.2791044E-01 0.6945667E+00 2 0.1571782E-01 0.3911467E+00 3 0.9299991E-02 0.2314355E+00 4 0.5596358E-02 0.1392685E+00 5 0.3270824E-02 0.8139627E-01 6 0.2037160E-02 0.5069587E-01 7 0.1185682E-02 0.2950636E-01 8 0.7398474E-03 0.1841151E-01 9 0.4389958E-03 0.1092465E-01 10 0.2691449E-03 0.6697820E-02 11 0.1648129E-03 0.4101461E-02 12 0.9951306E-04 0.2476438E-02 13 0.6146044E-04 0.1529477E-02 14 0.3739947E-04 0.9307065E-03 Result GMRES:14, 5.E-2, 3.739946612488E-5, 0 2 25 0.3739947E-04 0.3878349E-01 NI: 1, NLI: 27, ERLI 0.3739947E-04, ERNI: 0.7592034E+02 Max. and WRMS norm residual= 0.9702080E-01 0.1515224E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2134 # it. GCRO # it.GMRES Error Estimate 0 0 0.1850468E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1850468E+01 1 0.4981949E+00 0.2692264E+00 2 0.2042662E+00 0.1103862E+00 3 0.1339033E+00 0.7236187E-01 4 0.6330591E-01 0.3421075E-01 5 0.3910554E-01 0.2113278E-01 6 0.2131647E-01 0.1151950E-01 7 0.1260019E-01 0.6809188E-02 8 0.7239221E-02 0.3912102E-02 9 0.4210957E-02 0.2275617E-02 10 0.2499588E-02 0.1350787E-02 11 0.1454934E-02 0.7862519E-03 Result GMRES:11, 2.5E-2, 1.4549341688421E-3, 0 1 11 0.1454934E-02 0.1999956E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1454934E-02 1 0.1005307E-02 0.6909637E+00 2 0.5519545E-03 0.3793674E+00 3 0.3243813E-03 0.2229526E+00 4 0.1905322E-03 0.1309559E+00 5 0.1118421E-03 0.7687089E-01 6 0.6663169E-04 0.4579705E-01 7 0.3991252E-04 0.2743253E-01 8 0.2378999E-04 0.1635125E-01 9 0.1425377E-04 0.9796850E-02 10 0.8650312E-05 0.5945501E-02 11 0.5102715E-05 0.3507179E-02 12 0.3140207E-05 0.2158315E-02 13 0.1846375E-05 0.1269044E-02 14 0.1134970E-05 0.7800835E-03 Result GMRES:14, 2.5E-2, 1.1349700812453E-6, 0 2 25 0.1134970E-05 0.1340492E-02 NI: 2, NLI: 27, ERLI 0.1134970E-05, ERNI: 0.2000039E+01 T= 0.24E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.94E+00 Time integration at T= 0.24E+00, Grid level= 5, NPTS= 2309 Nonlinear system solver at T = 0.2398575E+00 Max. and WRMS norm residual= 0.3015277E+01 0.6134709E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.4600684E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4600684E+02 1 0.2302570E+02 0.5004844E+00 2 0.1134298E+02 0.2465499E+00 3 0.7523391E+01 0.1635277E+00 4 0.5277420E+01 0.1147095E+00 5 0.3781327E+01 0.8219055E-01 6 0.2787210E+01 0.6058251E-01 7 0.2063535E+01 0.4485280E-01 8 0.1547779E+01 0.3364237E-01 9 0.1167405E+01 0.2537460E-01 10 0.8859723E+00 0.1925740E-01 11 0.6763564E+00 0.1470121E-01 12 0.5176125E+00 0.1125077E-01 13 0.3967527E+00 0.8623777E-02 14 0.3045737E+00 0.6620183E-02 15 0.2339744E+00 0.5085644E-02 16 0.1797636E+00 0.3907324E-02 17 0.1379821E+00 0.2999164E-02 18 0.1058570E+00 0.2300898E-02 19 0.8120604E-01 0.1765086E-02 20 0.6235478E-01 0.1355337E-02 Result GMRES:20, 5.E-2, 6.2354775619309E-2, 1 1 20 0.6235478E-01 0.1003527E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6235478E-01 1 0.4967901E-01 0.7967155E+00 2 0.3728974E-01 0.5980253E+00 3 0.2843095E-01 0.4559547E+00 4 0.2187300E-01 0.3507830E+00 5 0.1689596E-01 0.2709650E+00 6 0.1305086E-01 0.2093002E+00 7 0.1008811E-01 0.1617857E+00 8 0.7809852E-02 0.1252487E+00 9 0.6055254E-02 0.9710972E-01 10 0.4697461E-02 0.7533442E-01 11 0.3638444E-02 0.5835069E-01 12 0.2835535E-02 0.4547422E-01 13 0.2192773E-02 0.3516608E-01 14 0.1710601E-02 0.2743337E-01 15 0.1326539E-02 0.2127406E-01 16 0.1032076E-02 0.1655167E-01 17 0.8029537E-03 0.1287718E-01 18 0.6248054E-03 0.1002017E-01 19 0.4865536E-03 0.7802989E-02 20 0.3789112E-03 0.6076699E-02 Result GMRES:20, 5.E-2, 3.7891117155276E-4, 1 2 40 0.3789112E-03 0.1081846E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3789112E-03 1 0.3056424E-03 0.8066335E+00 2 0.2321921E-03 0.6127876E+00 3 0.1803626E-03 0.4760024E+00 4 0.1402780E-03 0.3702133E+00 5 0.1095544E-03 0.2891294E+00 6 0.8542981E-04 0.2254613E+00 7 0.6669259E-04 0.1760111E+00 8 0.5204209E-04 0.1373464E+00 9 0.4062589E-04 0.1072174E+00 10 0.3169823E-04 0.8365609E-01 11 0.2475421E-04 0.6532985E-01 12 0.1931085E-04 0.5096405E-01 13 0.1508209E-04 0.3980376E-01 14 0.1177105E-04 0.3106545E-01 15 0.9189913E-05 0.2425348E-01 16 0.7174104E-05 0.1893347E-01 17 0.5598139E-05 0.1477428E-01 18 0.4366471E-05 0.1152373E-01 19 0.3404249E-05 0.8984293E-02 20 0.2643965E-05 0.6977798E-02 Result GMRES:20, 5.E-2, 2.6439654861004E-6, 1 3 60 0.2643965E-05 0.6751168E-03 NI: 1, NLI: 63, ERLI 0.2643965E-05, ERNI: 0.1003581E+03 Max. and WRMS norm residual= 0.1522830E+00 0.2685979E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.1697678E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1697678E+01 1 0.6229809E+00 0.3669606E+00 2 0.3235932E+00 0.1906093E+00 3 0.2451612E+00 0.1444097E+00 4 0.1594718E+00 0.9393523E-01 5 0.1182498E+00 0.6965385E-01 6 0.8523700E-01 0.5020799E-01 7 0.6241408E-01 0.3676438E-01 8 0.4659207E-01 0.2744459E-01 9 0.3421630E-01 0.2015477E-01 10 0.2580937E-01 0.1520275E-01 11 0.1916454E-01 0.1128868E-01 12 0.1446914E-01 0.8522902E-02 13 0.1084795E-01 0.6389874E-02 14 0.8177844E-02 0.4817076E-02 15 0.6155835E-02 0.3626032E-02 16 0.4617986E-02 0.2720178E-02 17 0.3481863E-02 0.2050956E-02 18 0.2615604E-02 0.1540695E-02 19 0.1978113E-02 0.1165187E-02 20 0.1493208E-02 0.8795588E-03 Result GMRES:20, 2.5E-2, 1.4932075356562E-3, 0 1 20 0.1493208E-02 0.3039195E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1493208E-02 1 0.1184151E-02 0.7930251E+00 2 0.8678442E-03 0.5811947E+00 3 0.6596271E-03 0.4417518E+00 4 0.5024660E-03 0.3365011E+00 5 0.3842809E-03 0.2573527E+00 6 0.2939380E-03 0.1968501E+00 7 0.2257161E-03 0.1511619E+00 8 0.1734040E-03 0.1161285E+00 9 0.1325905E-03 0.8879577E-01 10 0.1021238E-03 0.6839221E-01 11 0.7831260E-04 0.5244589E-01 12 0.6009922E-04 0.4024840E-01 13 0.4640636E-04 0.3107831E-01 14 0.3549256E-04 0.2376934E-01 15 0.2748334E-04 0.1840557E-01 16 0.2102869E-04 0.1408290E-01 17 0.1627542E-04 0.1089964E-01 18 0.1246748E-04 0.8349460E-02 19 0.9648525E-05 0.6461610E-02 20 0.7401450E-05 0.4956746E-02 Result GMRES:20, 2.5E-2, 7.4014503464575E-6, 1 2 40 0.7401450E-05 0.2370617E-02 NI: 2, NLI: 42, ERLI 0.7401450E-05, ERNI: 0.3039177E+01 T= 0.24E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.40E+00 TN= 0.22E+00, DT= 0.25E-01, DTNEW= 0.25E-01, TIMMON= 0.50E+00 Time integration at T= 0.26E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.2643782E+00 Max. and WRMS norm residual= 0.8839536E-01 0.7736831E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2705304E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2705304E+01 1 0.8019052E-01 0.2964196E-01 2 0.6063587E-02 0.2241370E-02 3 0.4980729E-03 0.1841098E-03 Result GMRES:3, 5.E-2, 4.9807292985011E-4, 0 1 3 0.4980729E-03 0.2722624E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4980729E-03 1 0.5546465E-04 0.1113585E+00 2 0.4638275E-05 0.9312441E-02 3 0.1659734E-06 0.3332312E-03 Result GMRES:3, 5.E-2, 1.6597342772472E-7, 0 2 6 0.1659734E-06 0.4942347E-03 NI: 1, NLI: 8, ERLI 0.1659734E-06, ERNI: 0.2722632E+01 Max. and WRMS norm residual= 0.7251226E-05 0.7406823E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1227671E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1227671E-03 1 0.9659451E-05 0.7868113E-01 2 0.8455433E-06 0.6887379E-02 3 0.5257480E-07 0.4282484E-03 Result GMRES:3, 2.5E-2, 5.2574796917579E-8, 0 1 3 0.5257480E-07 0.1256536E-03 NI: 2, NLI: 4, ERLI 0.5257480E-07, ERNI: 0.1256536E-03 T= 0.26E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.53E+01 Time integration at T= 0.26E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.2643782E+00 Max. and WRMS norm residual= 0.2670058E+01 0.3010855E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.5603014E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5603014E+02 1 0.4501332E+01 0.8033769E-01 2 0.5546593E+00 0.9899302E-02 3 0.1240472E+00 0.2213938E-02 4 0.3189563E-01 0.5692585E-03 Result GMRES:4, 5.E-2, 3.1895631556819E-2, 0 1 4 0.3189563E-01 0.5770179E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3189563E-01 1 0.1008882E-01 0.3163073E+00 2 0.2096747E-02 0.6573776E-01 3 0.3673120E-03 0.1151606E-01 4 0.4935114E-04 0.1547270E-02 5 0.1332471E-04 0.4177597E-03 Result GMRES:5, 5.E-2, 1.3324709005698E-5, 0 2 9 0.1332471E-04 0.3070490E-01 NI: 1, NLI: 11, ERLI 0.1332471E-04, ERNI: 0.5770146E+02 Max. and WRMS norm residual= 0.5690197E-02 0.6780409E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.1114013E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1114013E+00 1 0.1302745E-01 0.1169416E+00 2 0.2250612E-02 0.2020274E-01 3 0.5204060E-03 0.4671453E-02 4 0.1098879E-03 0.9864151E-03 Result GMRES:4, 2.5E-2, 1.0988794503103E-4, 0 1 4 0.1098879E-03 0.1157055E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1098879E-03 1 0.3274992E-04 0.2980301E+00 2 0.7100625E-05 0.6461696E-01 3 0.1379509E-05 0.1255378E-01 4 0.2291190E-06 0.2085024E-02 5 0.5802208E-07 0.5280113E-03 Result GMRES:5, 2.5E-2, 5.8022077878476E-8, 0 2 9 0.5802208E-07 0.1061201E-03 NI: 2, NLI: 11, ERLI 0.5802208E-07, ERNI: 0.1157060E+00 T= 0.26E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.42E+01 Time integration at T= 0.26E+00, Grid level= 3, NPTS= 496 Nonlinear system solver at T = 0.2643782E+00 Max. and WRMS norm residual= 0.2693769E+01 0.3289538E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.5722092E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5722092E+02 1 0.7688965E+01 0.1343733E+00 2 0.1786406E+01 0.3121946E-01 3 0.6749783E+00 0.1179601E-01 4 0.2831205E+00 0.4947849E-02 5 0.9921880E-01 0.1733960E-02 6 0.4187711E-01 0.7318496E-03 Result GMRES:6, 5.E-2, 4.1877110089983E-2, 0 1 6 0.4187711E-01 0.6002515E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4187711E-01 1 0.2173994E-01 0.5191365E+00 2 0.8126575E-02 0.1940577E+00 3 0.3318024E-02 0.7923240E-01 4 0.1285843E-02 0.3070516E-01 5 0.4268363E-03 0.1019259E-01 6 0.1835515E-03 0.4383098E-02 7 0.7245657E-04 0.1730219E-02 8 0.2559089E-04 0.6110950E-03 Result GMRES:8, 5.E-2, 2.5590891326568E-5, 0 2 14 0.2559089E-04 0.3794456E-01 NI: 1, NLI: 16, ERLI 0.2559089E-04, ERNI: 0.6002532E+02 Max. and WRMS norm residual= 0.5228674E-01 0.6146773E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.9691917E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9691917E+00 1 0.1762054E+00 0.1818066E+00 2 0.5427528E-01 0.5600056E-01 3 0.2300217E-01 0.2373335E-01 4 0.7987438E-02 0.8241340E-02 5 0.3223918E-02 0.3326399E-02 6 0.1246195E-02 0.1285809E-02 7 0.4850995E-03 0.5005197E-03 Result GMRES:7, 2.5E-2, 4.8509953135248E-4, 0 1 7 0.4850995E-03 0.1022590E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4850995E-03 1 0.2528049E-03 0.5211402E+00 2 0.9350869E-04 0.1927619E+00 3 0.3778761E-04 0.7789661E-01 4 0.1448591E-04 0.2986173E-01 5 0.5734319E-05 0.1182091E-01 6 0.2235550E-05 0.4608436E-02 7 0.7687336E-06 0.1584693E-02 8 0.3301550E-06 0.6805922E-03 Result GMRES:8, 2.5E-2, 3.3015497174671E-7, 0 2 15 0.3301550E-06 0.4326577E-03 NI: 2, NLI: 17, ERLI 0.3301550E-06, ERNI: 0.1022590E+01 T= 0.26E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.26E+00, Grid level= 4, NPTS= 1067 Nonlinear system solver at T = 0.2643782E+00 Max. and WRMS norm residual= 0.2706301E+01 0.4461855E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2134 # it. GCRO # it.GMRES Error Estimate 0 0 0.6061845E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6061845E+02 1 0.1364760E+02 0.2251394E+00 2 0.5250551E+01 0.8661638E-01 3 0.2880632E+01 0.4752072E-01 4 0.1761509E+01 0.2905897E-01 5 0.9123489E+00 0.1505068E-01 6 0.5522350E+00 0.9110016E-02 7 0.3193667E+00 0.5268474E-02 8 0.1866787E+00 0.3079569E-02 9 0.1123067E+00 0.1852681E-02 10 0.6559595E-01 0.1082112E-02 11 0.4006775E-01 0.6609828E-03 Result GMRES:11, 5.E-2, 4.0067753526557E-2, 0 1 11 0.4006775E-01 0.7615316E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4006775E-01 1 0.2784555E-01 0.6949615E+00 2 0.1566986E-01 0.3910841E+00 3 0.9306716E-02 0.2322745E+00 4 0.5617692E-02 0.1402048E+00 5 0.3267463E-02 0.8154845E-01 6 0.2049654E-02 0.5115471E-01 7 0.1189945E-02 0.2969831E-01 8 0.7425642E-03 0.1853271E-01 9 0.4396698E-03 0.1097316E-01 10 0.2706625E-03 0.6755121E-02 11 0.1645085E-03 0.4105758E-02 12 0.1001947E-03 0.2500632E-02 13 0.6120919E-04 0.1527642E-02 14 0.3769846E-04 0.9408679E-03 Result GMRES:14, 5.E-2, 3.769846311764E-5, 0 2 25 0.3769846E-04 0.3859420E-01 NI: 1, NLI: 27, ERLI 0.3769846E-04, ERNI: 0.7615572E+02 Max. and WRMS norm residual= 0.1171127E+00 0.1601713E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2134 # it. GCRO # it.GMRES Error Estimate 0 0 0.1963760E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1963760E+01 1 0.5154245E+00 0.2624682E+00 2 0.1990315E+00 0.1013522E+00 3 0.1314044E+00 0.6691469E-01 4 0.6170106E-01 0.3141986E-01 5 0.3884677E-01 0.1978183E-01 6 0.2031451E-01 0.1034470E-01 7 0.1238680E-01 0.6307693E-02 8 0.6970645E-02 0.3549642E-02 9 0.4120341E-02 0.2098190E-02 10 0.2416239E-02 0.1230415E-02 11 0.1420548E-02 0.7233817E-03 Result GMRES:11, 2.5E-2, 1.4205480304769E-3, 0 1 11 0.1420548E-02 0.2103556E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1420548E-02 1 0.9803762E-03 0.6901394E+00 2 0.5383069E-03 0.3789431E+00 3 0.3163457E-03 0.2226927E+00 4 0.1857904E-03 0.1307879E+00 5 0.1089916E-03 0.7672501E-01 6 0.6499574E-04 0.4575399E-01 7 0.3874937E-04 0.2727776E-01 8 0.2315948E-04 0.1630320E-01 9 0.1377209E-04 0.9694917E-02 10 0.8440612E-05 0.5941800E-02 11 0.4885469E-05 0.3439144E-02 12 0.3055545E-05 0.2150962E-02 13 0.1756220E-05 0.1236298E-02 14 0.1099213E-05 0.7737947E-03 Result GMRES:14, 2.5E-2, 1.0992125388478E-6, 0 2 25 0.1099213E-05 0.1308183E-02 NI: 2, NLI: 27, ERLI 0.1099213E-05, ERNI: 0.2103631E+01 T= 0.26E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.26E+00, Grid level= 5, NPTS= 2311 Nonlinear system solver at T = 0.2643782E+00 Max. and WRMS norm residual= 0.3017223E+01 0.6163211E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.4616346E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4616346E+02 1 0.2308235E+02 0.5000135E+00 2 0.1136306E+02 0.2461483E+00 3 0.7529750E+01 0.1631106E+00 4 0.5280556E+01 0.1143882E+00 5 0.3784248E+01 0.8197497E-01 6 0.2791540E+01 0.6047078E-01 7 0.2069874E+01 0.4483793E-01 8 0.1554874E+01 0.3368191E-01 9 0.1174863E+01 0.2545006E-01 10 0.8933737E+00 0.1935240E-01 11 0.6830705E+00 0.1479678E-01 12 0.5233706E+00 0.1133733E-01 13 0.4017612E+00 0.8703014E-02 14 0.3089820E+00 0.6693216E-02 15 0.2378941E+00 0.5153299E-02 16 0.1833598E+00 0.3971968E-02 17 0.1413681E+00 0.3062339E-02 18 0.1089011E+00 0.2359032E-02 19 0.8381183E-01 0.1815545E-02 20 0.6444994E-01 0.1396125E-02 Result GMRES:20, 5.E-2, 6.4449941114605E-2, 1 1 20 0.6444994E-01 0.1006719E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6444994E-01 1 0.5133099E-01 0.7964475E+00 2 0.3853403E-01 0.5978909E+00 3 0.2947436E-01 0.4573218E+00 4 0.2263288E-01 0.3511700E+00 5 0.1747446E-01 0.2711323E+00 6 0.1347598E-01 0.2090923E+00 7 0.1040093E-01 0.1613800E+00 8 0.8043026E-02 0.1247949E+00 9 0.6224226E-02 0.9657459E-01 10 0.4817269E-02 0.7474436E-01 11 0.3734112E-02 0.5793817E-01 12 0.2898901E-02 0.4497911E-01 13 0.2249234E-02 0.3489893E-01 14 0.1748569E-02 0.2713066E-01 15 0.1359845E-02 0.2109925E-01 16 0.1056651E-02 0.1639491E-01 17 0.8225884E-03 0.1276321E-01 18 0.6396035E-03 0.9924035E-02 19 0.4975694E-03 0.7720246E-02 20 0.3873329E-03 0.6009825E-02 Result GMRES:20, 5.E-2, 3.8733285082616E-4, 1 2 40 0.3873329E-03 0.1121317E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3873329E-03 1 0.3123208E-03 0.8063370E+00 2 0.2370378E-03 0.6119743E+00 3 0.1841471E-03 0.4754235E+00 4 0.1431467E-03 0.3695703E+00 5 0.1117830E-03 0.2885968E+00 6 0.8712430E-04 0.2249339E+00 7 0.6799781E-04 0.1755539E+00 8 0.5303191E-04 0.1369156E+00 9 0.4138316E-04 0.1068413E+00 10 0.3227810E-04 0.8333426E-01 11 0.2518636E-04 0.6502511E-01 12 0.1964790E-04 0.5072613E-01 13 0.1533198E-04 0.3958347E-01 14 0.1196104E-04 0.3088051E-01 15 0.9332031E-05 0.2409305E-01 16 0.7278128E-05 0.1879037E-01 17 0.5677408E-05 0.1465770E-01 18 0.4420811E-05 0.1141347E-01 19 0.3445283E-05 0.8894890E-02 20 0.2671535E-05 0.6897260E-02 Result GMRES:20, 5.E-2, 2.6715352139937E-6, 1 3 60 0.2671535E-05 0.6867270E-03 NI: 1, NLI: 63, ERLI 0.2671535E-05, ERNI: 0.1006777E+03 Max. and WRMS norm residual= 0.1561253E+00 0.2733204E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.1728007E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1728007E+01 1 0.6320531E+00 0.3657700E+00 2 0.3245768E+00 0.1878330E+00 3 0.2459326E+00 0.1423216E+00 4 0.1599728E+00 0.9257649E-01 5 0.1184177E+00 0.6852849E-01 6 0.8549979E-01 0.4947885E-01 7 0.6250219E-01 0.3617010E-01 8 0.4671208E-01 0.2703235E-01 9 0.3428920E-01 0.1984321E-01 10 0.2590000E-01 0.1498836E-01 11 0.1924583E-01 0.1113759E-01 12 0.1454847E-01 0.8419223E-02 13 0.1094560E-01 0.6334234E-02 14 0.8266166E-02 0.4783642E-02 15 0.6260865E-02 0.3623172E-02 16 0.4727165E-02 0.2735617E-02 17 0.3582604E-02 0.2073258E-02 18 0.2700468E-02 0.1562764E-02 19 0.2041500E-02 0.1181419E-02 20 0.1542165E-02 0.8924531E-03 Result GMRES:20, 2.5E-2, 1.5421649777586E-3, 0 1 20 0.1542165E-02 0.3084422E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1542165E-02 1 0.1218699E-02 0.7902518E+00 2 0.8938343E-03 0.5795970E+00 3 0.6774813E-03 0.4393053E+00 4 0.5139137E-03 0.3332417E+00 5 0.3924276E-03 0.2544654E+00 6 0.3001391E-03 0.1946219E+00 7 0.2298236E-03 0.1490266E+00 8 0.1763129E-03 0.1143282E+00 9 0.1352507E-03 0.8770183E-01 10 0.1039245E-03 0.6738874E-01 11 0.7982852E-04 0.5176393E-01 12 0.6128708E-04 0.3974094E-01 13 0.4711335E-04 0.3055013E-01 14 0.3619673E-04 0.2347137E-01 15 0.2781979E-04 0.1803944E-01 16 0.2139218E-04 0.1387153E-01 17 0.1644722E-04 0.1066502E-01 18 0.1265282E-04 0.8204582E-02 19 0.9737405E-05 0.6314114E-02 20 0.7499036E-05 0.4862668E-02 Result GMRES:20, 2.5E-2, 7.4990362885268E-6, 1 2 40 0.7499036E-05 0.2417198E-02 NI: 2, NLI: 42, ERLI 0.7499036E-05, ERNI: 0.3084393E+01 T= 0.26E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.41E+00 TN= 0.24E+00, DT= 0.25E-01, DTNEW= 0.25E-01, TIMMON= 0.50E+00 Time integration at T= 0.29E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.2888990E+00 Max. and WRMS norm residual= 0.1623529E+00 0.1419977E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.5525738E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5525738E+01 1 0.1503078E+00 0.2720140E-01 2 0.1053984E-01 0.1907408E-02 3 0.7825380E-03 0.1416169E-03 Result GMRES:3, 5.E-2, 7.8253798782004E-4, 0 1 3 0.7825380E-03 0.5550340E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7825380E-03 1 0.7733980E-04 0.9883201E-01 2 0.6671307E-05 0.8525218E-02 3 0.3710545E-06 0.4741681E-03 Result GMRES:3, 5.E-2, 3.7105454429435E-7, 0 2 6 0.3710545E-06 0.7792550E-03 NI: 1, NLI: 8, ERLI 0.3710545E-06, ERNI: 0.5550342E+01 Max. and WRMS norm residual= 0.9489408E-05 0.9205241E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1524751E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1524751E-03 1 0.1209277E-04 0.7930976E-01 2 0.1033810E-05 0.6780185E-02 3 0.6576940E-07 0.4313451E-03 Result GMRES:3, 2.5E-2, 6.5769404581778E-8, 0 1 3 0.6576940E-07 0.1557135E-03 NI: 2, NLI: 4, ERLI 0.6576940E-07, ERNI: 0.1557135E-03 T= 0.29E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.52E+01 Time integration at T= 0.29E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.2888990E+00 Max. and WRMS norm residual= 0.1840452E+01 0.2149148E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.3869492E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3869492E+02 1 0.3087905E+01 0.7980130E-01 2 0.3999614E+00 0.1033628E-01 3 0.8305009E-01 0.2146279E-02 4 0.2137750E-01 0.5524627E-03 Result GMRES:4, 5.E-2, 2.137750212106E-2, 0 1 4 0.2137750E-01 0.3973546E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2137750E-01 1 0.6730386E-02 0.3148350E+00 2 0.1390569E-02 0.6504826E-01 3 0.2439649E-03 0.1141223E-01 4 0.3616395E-04 0.1691683E-02 5 0.9448630E-05 0.4419894E-03 Result GMRES:5, 5.E-2, 9.4486302436199E-6, 0 2 9 0.9448630E-05 0.2067111E-01 NI: 1, NLI: 11, ERLI 0.9448630E-05, ERNI: 0.3973520E+02 Max. and WRMS norm residual= 0.3635894E-02 0.4590832E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.7574820E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7574820E-01 1 0.8268255E-02 0.1091545E+00 2 0.1426270E-02 0.1882909E-01 3 0.3288609E-03 0.4341501E-02 4 0.7180190E-04 0.9479024E-03 Result GMRES:4, 2.5E-2, 7.1801901993173E-5, 0 1 4 0.7180190E-04 0.7923700E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7180190E-04 1 0.2109981E-04 0.2938615E+00 2 0.4607285E-05 0.6416661E-01 3 0.8764551E-06 0.1220657E-01 4 0.1379778E-06 0.1921645E-02 5 0.3492937E-07 0.4864685E-03 Result GMRES:5, 2.5E-2, 3.4929365675712E-8, 0 2 9 0.3492937E-07 0.6967510E-04 NI: 2, NLI: 11, ERLI 0.3492937E-07, ERNI: 0.7923748E-01 T= 0.29E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.48E+01 Time integration at T= 0.29E+00, Grid level= 3, NPTS= 460 Nonlinear system solver at T = 0.2888990E+00 Max. and WRMS norm residual= 0.1891732E+01 0.3005514E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 920 # it. GCRO # it.GMRES Error Estimate 0 0 0.5473927E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5473927E+02 1 0.6842706E+01 0.1250054E+00 2 0.1900639E+01 0.3472168E-01 3 0.6686589E+00 0.1221534E-01 4 0.2921410E+00 0.5336955E-02 5 0.9858420E-01 0.1800978E-02 6 0.4067159E-01 0.7430056E-03 Result GMRES:6, 5.E-2, 4.0671586528405E-2, 0 1 6 0.4067159E-01 0.5666412E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4067159E-01 1 0.2110853E-01 0.5189994E+00 2 0.7500385E-02 0.1844134E+00 3 0.3068488E-02 0.7544548E-01 4 0.1198834E-02 0.2947597E-01 5 0.3655205E-03 0.8987121E-02 6 0.1655661E-03 0.4070804E-02 7 0.6182028E-04 0.1519987E-02 8 0.2220420E-04 0.5459389E-03 Result GMRES:8, 5.E-2, 2.2204200176737E-5, 0 2 14 0.2220420E-04 0.3632195E-01 NI: 1, NLI: 16, ERLI 0.2220420E-04, ERNI: 0.5666496E+02 Max. and WRMS norm residual= 0.3986029E-01 0.5655559E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 920 # it. GCRO # it.GMRES Error Estimate 0 0 0.8904809E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8904809E+00 1 0.1563066E+00 0.1755306E+00 2 0.4627132E-01 0.5196218E-01 3 0.2010768E-01 0.2258070E-01 4 0.6805406E-02 0.7642395E-02 5 0.2718413E-02 0.3052747E-02 6 0.1051802E-02 0.1181161E-02 7 0.3977664E-03 0.4466872E-03 Result GMRES:7, 2.5E-2, 3.9776638693815E-4, 0 1 7 0.3977664E-03 0.9434490E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3977664E-03 1 0.2034482E-03 0.5114765E+00 2 0.7704330E-04 0.1936898E+00 3 0.3082062E-04 0.7748422E-01 4 0.1185514E-04 0.2980428E-01 5 0.4756296E-05 0.1195751E-01 6 0.1832713E-05 0.4607512E-02 7 0.6357762E-06 0.1598366E-02 8 0.2749856E-06 0.6913245E-03 Result GMRES:8, 2.5E-2, 2.7498564867769E-7, 0 2 15 0.2749856E-06 0.3549245E-03 NI: 2, NLI: 17, ERLI 0.2749856E-06, ERNI: 0.9434480E+00 T= 0.29E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.29E+00, Grid level= 4, NPTS= 979 Nonlinear system solver at T = 0.2888990E+00 Max. and WRMS norm residual= 0.3021090E+01 0.4675231E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1958 # it. GCRO # it.GMRES Error Estimate 0 0 0.6349623E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6349623E+02 1 0.1436986E+02 0.2263105E+00 2 0.5459171E+01 0.8597630E-01 3 0.3005979E+01 0.4734107E-01 4 0.1845099E+01 0.2905840E-01 5 0.9624138E+00 0.1515702E-01 6 0.5881741E+00 0.9263134E-02 7 0.3352756E+00 0.5280243E-02 8 0.1947582E+00 0.3067240E-02 9 0.1175365E+00 0.1851079E-02 10 0.6894274E-01 0.1085777E-02 11 0.4173965E-01 0.6573563E-03 Result GMRES:11, 5.E-2, 4.1739648890568E-2, 0 1 11 0.4173965E-01 0.7978591E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4173965E-01 1 0.2899527E-01 0.6946697E+00 2 0.1632455E-01 0.3911042E+00 3 0.9698268E-02 0.2323515E+00 4 0.5863025E-02 0.1404666E+00 5 0.3414291E-02 0.8179970E-01 6 0.2131694E-02 0.5107121E-01 7 0.1242030E-02 0.2975659E-01 8 0.7741557E-03 0.1854725E-01 9 0.4558433E-03 0.1092111E-01 10 0.2815723E-03 0.6745920E-02 11 0.1699252E-03 0.4071074E-02 12 0.1039832E-03 0.2491234E-02 13 0.6312475E-04 0.1512345E-02 14 0.3878074E-04 0.9291103E-03 Result GMRES:14, 5.E-2, 3.8780739244703E-5, 0 2 25 0.3878074E-04 0.4036576E-01 NI: 1, NLI: 27, ERLI 0.3878074E-04, ERNI: 0.7978841E+02 Max. and WRMS norm residual= 0.9767721E-01 0.1616829E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1958 # it. GCRO # it.GMRES Error Estimate 0 0 0.1974882E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1974882E+01 1 0.5264199E+00 0.2665577E+00 2 0.2134901E+00 0.1081028E+00 3 0.1401886E+00 0.7098580E-01 4 0.6585230E-01 0.3334493E-01 5 0.4068458E-01 0.2060102E-01 6 0.2230287E-01 0.1129327E-01 7 0.1308769E-01 0.6627075E-02 8 0.7586548E-02 0.3841520E-02 9 0.4408841E-02 0.2232458E-02 10 0.2610875E-02 0.1322041E-02 11 0.1509140E-02 0.7641671E-03 Result GMRES:11, 2.5E-2, 1.5091395760872E-3, 0 1 11 0.1509140E-02 0.2130526E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1509140E-02 1 0.1043489E-02 0.6914466E+00 2 0.5699263E-03 0.3776498E+00 3 0.3340415E-03 0.2213456E+00 4 0.1976946E-03 0.1309982E+00 5 0.1143892E-03 0.7579765E-01 6 0.6846430E-04 0.4536645E-01 7 0.4094752E-04 0.2713302E-01 8 0.2414240E-04 0.1599746E-01 9 0.1456703E-04 0.9652539E-02 10 0.8785792E-05 0.5821723E-02 11 0.5204477E-05 0.3448639E-02 12 0.3166966E-05 0.2098524E-02 13 0.1886594E-05 0.1250112E-02 14 0.1140603E-05 0.7557966E-03 Result GMRES:14, 2.5E-2, 1.1406026134425E-6, 0 2 25 0.1140603E-05 0.1385839E-02 NI: 2, NLI: 27, ERLI 0.1140603E-05, ERNI: 0.2130612E+01 T= 0.29E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.97E+00 Time integration at T= 0.29E+00, Grid level= 5, NPTS= 2309 Nonlinear system solver at T = 0.2888990E+00 Max. and WRMS norm residual= 0.3020274E+01 0.6188916E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.4631797E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4631797E+02 1 0.2314419E+02 0.4996805E+00 2 0.1138056E+02 0.2457050E+00 3 0.7536116E+01 0.1627039E+00 4 0.5286881E+01 0.1141432E+00 5 0.3784610E+01 0.8170933E-01 6 0.2788605E+01 0.6020568E-01 7 0.2064160E+01 0.4456499E-01 8 0.1547820E+01 0.3341726E-01 9 0.1167196E+01 0.2519963E-01 10 0.8862433E+00 0.1913390E-01 11 0.6764910E+00 0.1460537E-01 12 0.5177556E+00 0.1117829E-01 13 0.3972501E+00 0.8576586E-02 14 0.3053445E+00 0.6592355E-02 15 0.2350336E+00 0.5074351E-02 16 0.1812537E+00 0.3913249E-02 17 0.1399041E+00 0.3020514E-02 18 0.1080288E+00 0.2332331E-02 19 0.8339678E-01 0.1800527E-02 20 0.6433875E-01 0.1389067E-02 Result GMRES:20, 5.E-2, 6.4338751646406E-2, 1 1 20 0.6433875E-01 0.1009954E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6433875E-01 1 0.5136640E-01 0.7983743E+00 2 0.3854857E-01 0.5991501E+00 3 0.2952612E-01 0.4589166E+00 4 0.2267107E-01 0.3523704E+00 5 0.1749613E-01 0.2719376E+00 6 0.1348702E-01 0.2096251E+00 7 0.1040014E-01 0.1616466E+00 8 0.8030140E-02 0.1248103E+00 9 0.6211354E-02 0.9654142E-01 10 0.4801283E-02 0.7462506E-01 11 0.3716490E-02 0.5776442E-01 12 0.2879048E-02 0.4474827E-01 13 0.2232426E-02 0.3469800E-01 14 0.1732088E-02 0.2692138E-01 15 0.1343097E-02 0.2087540E-01 16 0.1044859E-02 0.1623996E-01 17 0.8086333E-03 0.1256837E-01 18 0.6304807E-03 0.9799393E-02 19 0.4877740E-03 0.7581341E-02 20 0.3803247E-03 0.5911286E-02 Result GMRES:20, 5.E-2, 3.803247338535E-4, 1 2 40 0.3803247E-03 0.1120634E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3803247E-03 1 0.3071277E-03 0.8075407E+00 2 0.2324662E-03 0.6112308E+00 3 0.1806933E-03 0.4751028E+00 4 0.1403382E-03 0.3689958E+00 5 0.1096578E-03 0.2883267E+00 6 0.8547179E-04 0.2247337E+00 7 0.6673745E-04 0.1754749E+00 8 0.5209547E-04 0.1369763E+00 9 0.4065429E-04 0.1068936E+00 10 0.3173479E-04 0.8344129E-01 11 0.2478492E-04 0.6516777E-01 12 0.1933462E-04 0.5083713E-01 13 0.1510430E-04 0.3971421E-01 14 0.1178398E-04 0.3098401E-01 15 0.9201145E-05 0.2419286E-01 16 0.7180107E-05 0.1887888E-01 17 0.5600181E-05 0.1472474E-01 18 0.4365591E-05 0.1147859E-01 19 0.3402594E-05 0.8946549E-02 20 0.2638406E-05 0.6937245E-02 Result GMRES:20, 5.E-2, 2.6384058635423E-6, 1 3 60 0.2638406E-05 0.6744479E-03 NI: 1, NLI: 63, ERLI 0.2638406E-05, ERNI: 0.1010006E+03 Max. and WRMS norm residual= 0.1594029E+00 0.2771696E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.1752717E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1752717E+01 1 0.6396108E+00 0.3649253E+00 2 0.3256836E+00 0.1858164E+00 3 0.2467754E+00 0.1407959E+00 4 0.1605406E+00 0.9159529E-01 5 0.1186673E+00 0.6770477E-01 6 0.8577345E-01 0.4893742E-01 7 0.6259286E-01 0.3571190E-01 8 0.4680737E-01 0.2670561E-01 9 0.3430553E-01 0.1957277E-01 10 0.2591300E-01 0.1478447E-01 11 0.1922043E-01 0.1096607E-01 12 0.1453091E-01 0.8290507E-02 13 0.1091781E-01 0.6229078E-02 14 0.8245689E-02 0.4704518E-02 15 0.6253852E-02 0.3568090E-02 16 0.4722244E-02 0.2694242E-02 17 0.3591558E-02 0.2049137E-02 18 0.2714661E-02 0.1548830E-02 19 0.2059945E-02 0.1175287E-02 20 0.1555377E-02 0.8874091E-03 Result GMRES:20, 2.5E-2, 1.5553771421673E-3, 0 1 20 0.1555377E-02 0.3121818E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1555377E-02 1 0.1228503E-02 0.7898423E+00 2 0.9004684E-03 0.5789390E+00 3 0.6826110E-03 0.4388717E+00 4 0.5159847E-03 0.3317425E+00 5 0.3929056E-03 0.2526112E+00 6 0.2994402E-03 0.1925193E+00 7 0.2280408E-03 0.1466145E+00 8 0.1755483E-03 0.1128654E+00 9 0.1338555E-03 0.8605981E-01 10 0.1028282E-03 0.6611141E-01 11 0.7933979E-04 0.5101000E-01 12 0.6064233E-04 0.3898883E-01 13 0.4677969E-04 0.3007611E-01 14 0.3587520E-04 0.2306528E-01 15 0.2757242E-04 0.1772716E-01 16 0.2115514E-04 0.1360129E-01 17 0.1630654E-04 0.1048398E-01 18 0.1246585E-04 0.8014683E-02 19 0.9658555E-05 0.6209783E-02 20 0.7381433E-05 0.4745751E-02 Result GMRES:20, 2.5E-2, 7.3814331633381E-6, 1 2 40 0.7381433E-05 0.2457506E-02 NI: 2, NLI: 42, ERLI 0.7381433E-05, ERNI: 0.3121788E+01 T= 0.29E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.42E+00 TN= 0.26E+00, DT= 0.25E-01, DTNEW= 0.25E-01, TIMMON= 0.50E+00 Time integration at T= 0.31E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.3134197E+00 Max. and WRMS norm residual= 0.3038903E+00 0.2697905E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1116432E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1116432E+02 1 0.3104981E+00 0.2781164E-01 2 0.2240019E-01 0.2006409E-02 3 0.1563169E-02 0.1400147E-03 Result GMRES:3, 5.E-2, 1.5631689189953E-3, 0 1 3 0.1563169E-02 0.1120865E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1563169E-02 1 0.1463120E-03 0.9359958E-01 2 0.1190242E-04 0.7614288E-02 3 0.8127676E-06 0.5199487E-03 Result GMRES:3, 5.E-2, 8.1276758254376E-7, 0 2 6 0.8127676E-06 0.1558279E-02 NI: 1, NLI: 8, ERLI 0.8127676E-06, ERNI: 0.1120865E+02 Max. and WRMS norm residual= 0.2438656E-04 0.1733793E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2865936E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2865936E-03 1 0.2043444E-04 0.7130110E-01 2 0.1394438E-05 0.4865559E-02 3 0.9479618E-07 0.3307687E-03 Result GMRES:3, 2.5E-2, 9.4796183508067E-8, 0 1 3 0.9479618E-07 0.2910308E-03 NI: 2, NLI: 4, ERLI 0.9479618E-07, ERNI: 0.2910308E-03 T= 0.31E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.51E+01 Time integration at T= 0.31E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.3134197E+00 Max. and WRMS norm residual= 0.9359432E+00 0.1161570E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.2188484E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2188484E+02 1 0.1551303E+01 0.7088483E-01 2 0.2387419E+00 0.1090901E-01 3 0.4341220E-01 0.1983665E-02 4 0.1134411E-01 0.5183545E-03 Result GMRES:4, 5.E-2, 1.134410554803E-2, 0 1 4 0.1134411E-01 0.2216961E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1134411E-01 1 0.3577455E-02 0.3153581E+00 2 0.7394405E-03 0.6518280E-01 3 0.1285192E-03 0.1132917E-01 4 0.2345828E-04 0.2067883E-02 5 0.5964431E-05 0.5257736E-03 Result GMRES:5, 5.E-2, 5.9644309146617E-6, 0 2 9 0.5964431E-05 0.1106960E-01 NI: 1, NLI: 11, ERLI 0.5964431E-05, ERNI: 0.2216940E+02 Max. and WRMS norm residual= 0.2103000E-02 0.3017489E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.4997941E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4997941E-01 1 0.5556569E-02 0.1111772E+00 2 0.9081464E-03 0.1817041E-01 3 0.2113810E-03 0.4229363E-02 4 0.4825626E-04 0.9655228E-03 Result GMRES:4, 2.5E-2, 4.8256261379511E-5, 0 1 4 0.4825626E-04 0.5305449E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4825626E-04 1 0.1416799E-04 0.2935990E+00 2 0.3144138E-05 0.6515503E-01 3 0.5864944E-06 0.1215375E-01 4 0.8611174E-07 0.1784468E-02 5 0.2204232E-07 0.4567763E-03 Result GMRES:5, 2.5E-2, 2.2042318281988E-8, 0 2 9 0.2204232E-07 0.4699566E-04 NI: 2, NLI: 11, ERLI 0.2204232E-07, ERNI: 0.5305463E-01 T= 0.31E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.53E+01 Time integration at T= 0.31E+00, Grid level= 3, NPTS= 492 Nonlinear system solver at T = 0.3134197E+00 Max. and WRMS norm residual= 0.2627630E+01 0.3020980E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 984 # it. GCRO # it.GMRES Error Estimate 0 0 0.5608319E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5608319E+02 1 0.7316280E+01 0.1304541E+00 2 0.1630467E+01 0.2907229E-01 3 0.5228793E+00 0.9323280E-02 4 0.2319802E+00 0.4136358E-02 5 0.7834510E-01 0.1396945E-02 6 0.3120768E-01 0.5564533E-03 Result GMRES:6, 5.E-2, 3.1207677374062E-2, 0 1 6 0.3120768E-01 0.5888515E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3120768E-01 1 0.1602825E-01 0.5135996E+00 2 0.5673721E-02 0.1818053E+00 3 0.2375418E-02 0.7611645E-01 4 0.8903509E-03 0.2852987E-01 5 0.3059865E-03 0.9804847E-02 6 0.1307256E-03 0.4188891E-02 7 0.5383609E-04 0.1725091E-02 8 0.1895976E-04 0.6075351E-03 Result GMRES:8, 5.E-2, 1.8959759573716E-5, 0 2 14 0.1895976E-04 0.2750383E-01 NI: 1, NLI: 16, ERLI 0.1895976E-04, ERNI: 0.5888574E+02 Max. and WRMS norm residual= 0.1899895E-01 0.2602862E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 984 # it. GCRO # it.GMRES Error Estimate 0 0 0.4024541E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4024541E+00 1 0.6638564E-01 0.1649521E+00 2 0.2078055E-01 0.5163458E-01 3 0.9155137E-02 0.2274828E-01 4 0.3215709E-02 0.7990251E-02 5 0.1196902E-02 0.2974009E-02 6 0.4958556E-03 0.1232080E-02 7 0.1869561E-03 0.4645402E-03 Result GMRES:7, 2.5E-2, 1.8695611820547E-4, 0 1 7 0.1869561E-03 0.4141020E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1869561E-03 1 0.9532087E-04 0.5098569E+00 2 0.3711826E-04 0.1985399E+00 3 0.1396816E-04 0.7471360E-01 4 0.5523357E-05 0.2954360E-01 5 0.2208635E-05 0.1181366E-01 6 0.8626321E-06 0.4614089E-02 7 0.2758543E-06 0.1475503E-02 8 0.1206475E-06 0.6453254E-03 Result GMRES:8, 2.5E-2, 1.2064753000773E-7, 0 2 15 0.1206475E-06 0.1678692E-03 NI: 2, NLI: 17, ERLI 0.1206475E-06, ERNI: 0.4141009E+00 T= 0.31E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.28E+01 Time integration at T= 0.31E+00, Grid level= 4, NPTS= 1039 Nonlinear system solver at T = 0.3134197E+00 Max. and WRMS norm residual= 0.2734183E+01 0.4552917E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2078 # it. GCRO # it.GMRES Error Estimate 0 0 0.6181850E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6181850E+02 1 0.1397452E+02 0.2260572E+00 2 0.5347851E+01 0.8650891E-01 3 0.2929560E+01 0.4738971E-01 4 0.1791792E+01 0.2898472E-01 5 0.9298959E+00 0.1504236E-01 6 0.5672956E+00 0.9176795E-02 7 0.3235287E+00 0.5233526E-02 8 0.1889775E+00 0.3056974E-02 9 0.1139704E+00 0.1843629E-02 10 0.6661445E-01 0.1077581E-02 11 0.4060128E-01 0.6567821E-03 Result GMRES:11, 5.E-2, 4.0601280827779E-2, 0 1 11 0.4060128E-01 0.7759373E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4060128E-01 1 0.2816904E-01 0.6937969E+00 2 0.1584580E-01 0.3902784E+00 3 0.9400090E-02 0.2315220E+00 4 0.5715445E-02 0.1407701E+00 5 0.3315347E-02 0.8165621E-01 6 0.2080031E-02 0.5123068E-01 7 0.1208508E-02 0.2976527E-01 8 0.7571782E-03 0.1864912E-01 9 0.4466540E-03 0.1100098E-01 10 0.2737483E-03 0.6742356E-02 11 0.1671357E-03 0.4116512E-02 12 0.1014786E-03 0.2499394E-02 13 0.6190857E-04 0.1524794E-02 14 0.3792320E-04 0.9340395E-03 Result GMRES:14, 5.E-2, 3.7923201990615E-5, 0 2 25 0.3792320E-04 0.3913142E-01 NI: 1, NLI: 27, ERLI 0.3792320E-04, ERNI: 0.7759602E+02 Max. and WRMS norm residual= 0.1174633E+00 0.1667056E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2078 # it. GCRO # it.GMRES Error Estimate 0 0 0.2046346E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2046346E+01 1 0.5320832E+00 0.2600163E+00 2 0.2032016E+00 0.9929975E-01 3 0.1343265E+00 0.6564215E-01 4 0.6201870E-01 0.3030705E-01 5 0.3856710E-01 0.1884681E-01 6 0.2063831E-01 0.1008544E-01 7 0.1257937E-01 0.6147238E-02 8 0.7119757E-02 0.3479254E-02 9 0.4241590E-02 0.2072763E-02 10 0.2480644E-02 0.1212231E-02 11 0.1445530E-02 0.7063958E-03 Result GMRES:11, 2.5E-2, 1.4455300303772E-3, 0 1 11 0.1445530E-02 0.2187037E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1445530E-02 1 0.9980350E-03 0.6904284E+00 2 0.5451562E-03 0.3771324E+00 3 0.3200998E-03 0.2214411E+00 4 0.1889118E-03 0.1306868E+00 5 0.1096880E-03 0.7588084E-01 6 0.6565931E-04 0.4542231E-01 7 0.3928554E-04 0.2717726E-01 8 0.2318596E-04 0.1603976E-01 9 0.1376249E-04 0.9520724E-02 10 0.8466272E-05 0.5856864E-02 11 0.4891762E-05 0.3384061E-02 12 0.3031208E-05 0.2096953E-02 13 0.1760792E-05 0.1218094E-02 14 0.1086450E-05 0.7515931E-03 Result GMRES:14, 2.5E-2, 1.0864503673461E-6, 0 2 25 0.1086450E-05 0.1330727E-02 NI: 2, NLI: 27, ERLI 0.1086450E-05, ERNI: 0.2187113E+01 T= 0.31E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.31E+00, Grid level= 5, NPTS= 2311 Nonlinear system solver at T = 0.3134197E+00 Max. and WRMS norm residual= 0.3029558E+01 0.6204445E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.4640019E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4640019E+02 1 0.2317962E+02 0.4995588E+00 2 0.1139324E+02 0.2455430E+00 3 0.7540721E+01 0.1625149E+00 4 0.5289613E+01 0.1139998E+00 5 0.3788366E+01 0.8164549E-01 6 0.2794496E+01 0.6022596E-01 7 0.2071927E+01 0.4465341E-01 8 0.1556166E+01 0.3353793E-01 9 0.1175983E+01 0.2534436E-01 10 0.8942881E+00 0.1927337E-01 11 0.6836867E+00 0.1473457E-01 12 0.5238900E+00 0.1129069E-01 13 0.4023096E+00 0.8670432E-02 14 0.3094245E+00 0.6668606E-02 15 0.2383563E+00 0.5136968E-02 16 0.1839668E+00 0.3964787E-02 17 0.1421322E+00 0.3063183E-02 18 0.1098596E+00 0.2367655E-02 19 0.8498571E-01 0.1831581E-02 20 0.6575182E-01 0.1417059E-02 Result GMRES:20, 5.E-2, 6.5751820634134E-2, 1 1 20 0.6575182E-01 0.1011813E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6575182E-01 1 0.5272305E-01 0.8018493E+00 2 0.3967951E-01 0.6034739E+00 3 0.3049071E-01 0.4637242E+00 4 0.2343566E-01 0.3564261E+00 5 0.1808905E-01 0.2751110E+00 6 0.1394674E-01 0.2121118E+00 7 0.1075655E-01 0.1635931E+00 8 0.8299739E-02 0.1262283E+00 9 0.6410836E-02 0.9750050E-01 10 0.4947848E-02 0.7525036E-01 11 0.3826291E-02 0.5819292E-01 12 0.2961333E-02 0.4503803E-01 13 0.2291778E-02 0.3485497E-01 14 0.1776340E-02 0.2701583E-01 15 0.1377865E-02 0.2095554E-01 16 0.1068246E-02 0.1624664E-01 17 0.8299260E-03 0.1262210E-01 18 0.6445140E-03 0.9802223E-02 19 0.5008468E-03 0.7617231E-02 20 0.3895565E-03 0.5924650E-02 Result GMRES:20, 5.E-2, 3.8955653329665E-4, 1 2 40 0.3895565E-03 0.1142661E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3895565E-03 1 0.3139424E-03 0.8058970E+00 2 0.2380270E-03 0.6110205E+00 3 0.1848830E-03 0.4745987E+00 4 0.1436790E-03 0.3688271E+00 5 0.1121643E-03 0.2879283E+00 6 0.8743057E-04 0.2244362E+00 7 0.6823360E-04 0.1751571E+00 8 0.5321730E-04 0.1366100E+00 9 0.4153052E-04 0.1066097E+00 10 0.3239582E-04 0.8316075E-01 11 0.2527759E-04 0.6488812E-01 12 0.1972112E-04 0.5062454E-01 13 0.1538740E-04 0.3949979E-01 14 0.1200315E-04 0.3081235E-01 15 0.9362790E-05 0.2403448E-01 16 0.7298979E-05 0.1873664E-01 17 0.5691114E-05 0.1460921E-01 18 0.4426773E-05 0.1136362E-01 19 0.3448685E-05 0.8852849E-02 20 0.2669190E-05 0.6851868E-02 Result GMRES:20, 5.E-2, 2.6691899624392E-6, 1 3 60 0.2669190E-05 0.6870990E-03 NI: 1, NLI: 63, ERLI 0.2669190E-05, ERNI: 0.1011856E+03 Max. and WRMS norm residual= 0.1623854E+00 0.2799587E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.1770633E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1770633E+01 1 0.6451400E+00 0.3643555E+00 2 0.3264446E+00 0.1843660E+00 3 0.2473344E+00 0.1396869E+00 4 0.1609170E+00 0.9088106E-01 5 0.1188138E+00 0.6710241E-01 6 0.8597233E-01 0.4855456E-01 7 0.6267685E-01 0.3539798E-01 8 0.4691085E-01 0.2649382E-01 9 0.3438706E-01 0.1942077E-01 10 0.2598447E-01 0.1467524E-01 11 0.1929828E-01 0.1089908E-01 12 0.1459169E-01 0.8240943E-02 13 0.1098191E-01 0.6202251E-02 14 0.8297825E-02 0.4686360E-02 15 0.6302993E-02 0.3559739E-02 16 0.4769810E-02 0.2693844E-02 17 0.3637006E-02 0.2054070E-02 18 0.2761058E-02 0.1559361E-02 19 0.2102809E-02 0.1187603E-02 20 0.1598323E-02 0.9026844E-03 Result GMRES:20, 2.5E-2, 1.5983230525819E-3, 0 1 20 0.1598323E-02 0.3148843E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1598323E-02 1 0.1265199E-02 0.7915787E+00 2 0.9299106E-03 0.5818039E+00 3 0.7065419E-03 0.4420520E+00 4 0.5341030E-03 0.3341646E+00 5 0.4066154E-03 0.2544012E+00 6 0.3094921E-03 0.1936355E+00 7 0.2354377E-03 0.1473029E+00 8 0.1797252E-03 0.1124461E+00 9 0.1372525E-03 0.8587280E-01 10 0.1049562E-03 0.6566647E-01 11 0.8058084E-04 0.5041586E-01 12 0.6179339E-04 0.3866139E-01 13 0.4746655E-04 0.2969772E-01 14 0.3654474E-04 0.2286443E-01 15 0.2805608E-04 0.1755345E-01 16 0.2154537E-04 0.1347999E-01 17 0.1658388E-04 0.1037580E-01 18 0.1270469E-04 0.7948765E-02 19 0.9769825E-05 0.6112547E-02 20 0.7511180E-05 0.4699413E-02 Result GMRES:20, 2.5E-2, 7.5111799984735E-6, 1 2 40 0.7511180E-05 0.2541409E-02 NI: 2, NLI: 42, ERLI 0.7511180E-05, ERNI: 0.3148837E+01 T= 0.31E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.43E+00 TN= 0.29E+00, DT= 0.25E-01, DTNEW= 0.24E-01, TIMMON= 0.50E+00 Time integration at T= 0.34E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.3370949E+00 Max. and WRMS norm residual= 0.5767027E+00 0.5092078E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2064239E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2064239E+02 1 0.5632264E+00 0.2728494E-01 2 0.3908828E-01 0.1893593E-02 3 0.2629575E-02 0.1273871E-03 Result GMRES:3, 5.E-2, 2.629575393219E-3, 0 1 3 0.2629575E-02 0.2072516E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2629575E-02 1 0.2374702E-03 0.9030743E-01 2 0.1914422E-04 0.7280346E-02 3 0.1257706E-05 0.4782925E-03 Result GMRES:3, 5.E-2, 1.2577061758344E-6, 0 2 6 0.1257706E-05 0.2622218E-02 NI: 1, NLI: 8, ERLI 0.1257706E-05, ERNI: 0.2072516E+02 Max. and WRMS norm residual= 0.1168050E-03 0.8270808E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1328856E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1328856E-02 1 0.9140246E-04 0.6878280E-01 2 0.6228016E-05 0.4686748E-02 3 0.4388670E-06 0.3302591E-03 Result GMRES:3, 2.5E-2, 4.3886697977401E-7, 0 1 3 0.4388670E-06 0.1350926E-02 NI: 2, NLI: 4, ERLI 0.4388670E-06, ERNI: 0.1350926E-02 T= 0.34E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.48E+01 Time integration at T= 0.34E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.3370949E+00 Max. and WRMS norm residual= 0.6085604E+00 0.6737133E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1694919E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1694919E+02 1 0.1004819E+01 0.5928419E-01 2 0.1812056E+00 0.1069111E-01 3 0.3804426E-01 0.2244606E-02 4 0.8752239E-02 0.5163810E-03 Result GMRES:4, 5.E-2, 8.7522390631244E-3, 0 1 4 0.8752239E-02 0.1703742E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8752239E-02 1 0.2536175E-02 0.2897744E+00 2 0.5172819E-03 0.5910280E-01 3 0.8289797E-04 0.9471630E-02 4 0.1510771E-04 0.1726154E-02 5 0.3971523E-05 0.4537722E-03 Result GMRES:5, 5.E-2, 3.9715226215356E-6, 0 2 9 0.3971523E-05 0.8503298E-02 NI: 1, NLI: 11, ERLI 0.3971523E-05, ERNI: 0.1703747E+02 Max. and WRMS norm residual= 0.8919891E-03 0.1244572E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.2002174E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2002174E-01 1 0.2296502E-02 0.1147004E+00 2 0.3655079E-03 0.1825556E-01 3 0.8569821E-04 0.4280259E-02 4 0.1890977E-04 0.9444621E-03 Result GMRES:4, 2.5E-2, 1.8909771097257E-5, 0 1 4 0.1890977E-04 0.2135987E-01 NI: 2, NLI: 5, ERLI 0.1890977E-04, ERNI: 0.2135987E-01 T= 0.34E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.52E+01 Time integration at T= 0.34E+00, Grid level= 3, NPTS= 512 Nonlinear system solver at T = 0.3370949E+00 Max. and WRMS norm residual= 0.3029277E+01 0.3385478E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1024 # it. GCRO # it.GMRES Error Estimate 0 0 0.5822023E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5822023E+02 1 0.7793374E+01 0.1338602E+00 2 0.1467322E+01 0.2520296E-01 3 0.5251745E+00 0.9020481E-02 4 0.2205187E+00 0.3787664E-02 5 0.7474451E-01 0.1283824E-02 6 0.2989354E-01 0.5134561E-03 Result GMRES:6, 5.E-2, 2.9893535238227E-2, 0 1 6 0.2989354E-01 0.6170298E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2989354E-01 1 0.1504870E-01 0.5034099E+00 2 0.5400387E-02 0.1806540E+00 3 0.2189882E-02 0.7325603E-01 4 0.8285451E-03 0.2771653E-01 5 0.2849985E-03 0.9533784E-02 6 0.1175044E-03 0.3930762E-02 7 0.4772164E-04 0.1596387E-02 8 0.1603872E-04 0.5365282E-03 Result GMRES:8, 5.E-2, 1.603872440606E-5, 0 2 14 0.1603872E-04 0.2662439E-01 NI: 1, NLI: 16, ERLI 0.1603872E-04, ERNI: 0.6170310E+02 Max. and WRMS norm residual= 0.3330978E-01 0.3766662E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1024 # it. GCRO # it.GMRES Error Estimate 0 0 0.5751703E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5751703E+00 1 0.1042472E+00 0.1812458E+00 2 0.3050792E-01 0.5304154E-01 3 0.1253178E-01 0.2178795E-01 4 0.4424541E-02 0.7692575E-02 5 0.1736160E-02 0.3018515E-02 6 0.6475570E-03 0.1125853E-02 7 0.2467196E-03 0.4289505E-03 Result GMRES:7, 2.5E-2, 2.467195978234E-4, 0 1 7 0.2467196E-03 0.6013612E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2467196E-03 1 0.1262552E-03 0.5117355E+00 2 0.4559159E-04 0.1847911E+00 3 0.1805073E-04 0.7316293E-01 4 0.6631401E-05 0.2687829E-01 5 0.2664954E-05 0.1080155E-01 6 0.9798627E-06 0.3971564E-02 7 0.3208876E-06 0.1300617E-02 8 0.1405291E-06 0.5695904E-03 Result GMRES:8, 2.5E-2, 1.4052911138765E-7, 0 2 15 0.1405291E-06 0.2209828E-03 NI: 2, NLI: 17, ERLI 0.1405291E-06, ERNI: 0.6013626E+00 T= 0.34E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.34E+00, Grid level= 4, NPTS= 1077 Nonlinear system solver at T = 0.3370949E+00 Max. and WRMS norm residual= 0.3010741E+01 0.4459196E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.5913315E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5913315E+02 1 0.1304758E+02 0.2206475E+00 2 0.4814028E+01 0.8140996E-01 3 0.2591783E+01 0.4382962E-01 4 0.1574022E+01 0.2661826E-01 5 0.8064069E+00 0.1363714E-01 6 0.4838151E+00 0.8181792E-02 7 0.2714434E+00 0.4590376E-02 8 0.1583990E+00 0.2678684E-02 9 0.9446047E-01 0.1597420E-02 10 0.5421299E-01 0.9167953E-03 11 0.3295726E-01 0.5573398E-03 Result GMRES:11, 5.E-2, 3.2957256076213E-2, 0 1 11 0.3295726E-01 0.7387030E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3295726E-01 1 0.2280640E-01 0.6919995E+00 2 0.1255365E-01 0.3809069E+00 3 0.7394708E-02 0.2243727E+00 4 0.4442950E-02 0.1348095E+00 5 0.2527999E-02 0.7670538E-01 6 0.1570582E-02 0.4765512E-01 7 0.9022356E-03 0.2737593E-01 8 0.5564981E-03 0.1688545E-01 9 0.3257920E-03 0.9885289E-02 10 0.1972495E-03 0.5985010E-02 11 0.1184942E-03 0.3595391E-02 12 0.7105840E-04 0.2156078E-02 13 0.4286095E-04 0.1300501E-02 14 0.2592116E-04 0.7865086E-03 Result GMRES:14, 5.E-2, 2.5921164018326E-5, 0 2 25 0.2592116E-04 0.3166782E-01 NI: 1, NLI: 27, ERLI 0.2592116E-04, ERNI: 0.7387194E+02 Max. and WRMS norm residual= 0.9187831E-01 0.1458957E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.1742975E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1742975E+01 1 0.4520408E+00 0.2593501E+00 2 0.1781137E+00 0.1021894E+00 3 0.1157269E+00 0.6639620E-01 4 0.5362240E-01 0.3076487E-01 5 0.3267755E-01 0.1874815E-01 6 0.1770261E-01 0.1015655E-01 7 0.1028542E-01 0.5901072E-02 8 0.5960167E-02 0.3419536E-02 9 0.3391526E-02 0.1945826E-02 10 0.2013307E-02 0.1155098E-02 11 0.1149967E-02 0.6597724E-03 Result GMRES:11, 2.5E-2, 1.1499669162822E-3, 0 1 11 0.1149967E-02 0.1875887E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1149967E-02 1 0.7807839E-03 0.6789620E+00 2 0.4250439E-03 0.3696141E+00 3 0.2449211E-03 0.2129810E+00 4 0.1428989E-03 0.1242635E+00 5 0.8183621E-04 0.7116397E-01 6 0.4846410E-04 0.4214391E-01 7 0.2854923E-04 0.2482613E-01 8 0.1672211E-04 0.1454139E-01 9 0.9874852E-05 0.8587075E-02 10 0.5899976E-05 0.5130562E-02 11 0.3442384E-05 0.2993464E-02 12 0.2075742E-05 0.1805045E-02 13 0.1223493E-05 0.1063937E-02 14 0.7267476E-06 0.6319726E-03 Result GMRES:14, 2.5E-2, 7.2674759135593E-7, 0 2 25 0.7267476E-06 0.1062967E-02 NI: 2, NLI: 27, ERLI 0.7267476E-06, ERNI: 0.1875954E+01 T= 0.34E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.10E+01 Time integration at T= 0.34E+00, Grid level= 5, NPTS= 2309 Nonlinear system solver at T = 0.3370949E+00 Max. and WRMS norm residual= 0.3026042E+01 0.6186559E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.4549964E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4549964E+02 1 0.2232489E+02 0.4906608E+00 2 0.1073756E+02 0.2359922E+00 3 0.7018813E+01 0.1542608E+00 4 0.4885959E+01 0.1073846E+00 5 0.3465979E+01 0.7617596E-01 6 0.2534540E+01 0.5570460E-01 7 0.1861888E+01 0.4092094E-01 8 0.1385713E+01 0.3045546E-01 9 0.1037660E+01 0.2280589E-01 10 0.7822741E+00 0.1719297E-01 11 0.5930195E+00 0.1303350E-01 12 0.4508075E+00 0.9907934E-02 13 0.3435330E+00 0.7550234E-02 14 0.2622744E+00 0.5764317E-02 15 0.2005995E+00 0.4408815E-02 16 0.1537318E+00 0.3378747E-02 17 0.1179297E+00 0.2591882E-02 18 0.9057565E-01 0.1990689E-02 19 0.6962737E-01 0.1530284E-02 20 0.5355721E-01 0.1177091E-02 Result GMRES:20, 5.E-2, 5.3557210016068E-2, 1 1 20 0.5355721E-01 0.9803781E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5355721E-01 1 0.4275803E-01 0.7983617E+00 2 0.3202577E-01 0.5979730E+00 3 0.2453438E-01 0.4580967E+00 4 0.1879571E-01 0.3509463E+00 5 0.1443135E-01 0.2694568E+00 6 0.1106139E-01 0.2065340E+00 7 0.8474897E-02 0.1582401E+00 8 0.6496571E-02 0.1213015E+00 9 0.4984236E-02 0.9306377E-01 10 0.3818352E-02 0.7129482E-01 11 0.2931195E-02 0.5473016E-01 12 0.2251341E-02 0.4203619E-01 13 0.1730254E-02 0.3230666E-01 14 0.1331416E-02 0.2485970E-01 15 0.1024547E-02 0.1912996E-01 16 0.7880219E-03 0.1471365E-01 17 0.6077704E-03 0.1134806E-01 18 0.4681135E-03 0.8740438E-02 19 0.3602783E-03 0.6726981E-02 20 0.2787788E-03 0.5205252E-02 Result GMRES:20, 5.E-2, 2.7877879069635E-4, 1 2 40 0.2787788E-03 0.9177473E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2787788E-03 1 0.2229176E-03 0.7996218E+00 2 0.1677023E-03 0.6015604E+00 3 0.1287304E-03 0.4617656E+00 4 0.9941154E-04 0.3565965E+00 5 0.7687359E-04 0.2757512E+00 6 0.5954701E-04 0.2135995E+00 7 0.4613677E-04 0.1654960E+00 8 0.3576513E-04 0.1282921E+00 9 0.2772560E-04 0.9945376E-01 10 0.2149179E-04 0.7709262E-01 11 0.1666826E-04 0.5979028E-01 12 0.1292019E-04 0.4634568E-01 13 0.1001985E-04 0.3594192E-01 14 0.7765053E-05 0.2785382E-01 15 0.6021557E-05 0.2159977E-01 16 0.4663650E-05 0.1672885E-01 17 0.3613283E-05 0.1296111E-01 18 0.2794579E-05 0.1002436E-01 19 0.2162834E-05 0.7758244E-02 20 0.1663175E-05 0.5965932E-02 Result GMRES:20, 5.E-2, 1.6631754389054E-6, 1 3 60 0.1663175E-05 0.4835678E-03 NI: 1, NLI: 63, ERLI 0.1663175E-05, ERNI: 0.9804044E+02 Max. and WRMS norm residual= 0.1548894E+00 0.2642094E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4618 # it. GCRO # it.GMRES Error Estimate 0 0 0.1652254E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1652254E+01 1 0.5921534E+00 0.3583913E+00 2 0.2938631E+00 0.1778559E+00 3 0.2211117E+00 0.1338243E+00 4 0.1429240E+00 0.8650243E-01 5 0.1046179E+00 0.6331827E-01 6 0.7530642E-01 0.4557800E-01 7 0.5442836E-01 0.3294189E-01 8 0.4049879E-01 0.2451124E-01 9 0.2944095E-01 0.1781866E-01 10 0.2209991E-01 0.1337561E-01 11 0.1628133E-01 0.9854014E-02 12 0.1222461E-01 0.7398748E-02 13 0.9126873E-02 0.5523893E-02 14 0.6846686E-02 0.4143847E-02 15 0.5163811E-02 0.3125313E-02 16 0.3875702E-02 0.2345706E-02 17 0.2938594E-02 0.1778537E-02 18 0.2213203E-02 0.1339505E-02 19 0.1678789E-02 0.1016060E-02 20 0.1269159E-02 0.7681380E-03 Result GMRES:20, 2.5E-2, 1.2691589126127E-3, 0 1 20 0.1269159E-02 0.2906543E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1269159E-02 1 0.1003828E-02 0.7909394E+00 2 0.7343084E-03 0.5785788E+00 3 0.5552058E-03 0.4374596E+00 4 0.4172900E-03 0.3287926E+00 5 0.3159599E-03 0.2489522E+00 6 0.2390943E-03 0.1883880E+00 7 0.1805922E-03 0.1422928E+00 8 0.1369485E-03 0.1079050E+00 9 0.1034764E-03 0.8153149E-01 10 0.7837397E-04 0.6175269E-01 11 0.5950685E-04 0.4688684E-01 12 0.4530595E-04 0.3569762E-01 13 0.3444517E-04 0.2714016E-01 14 0.2624152E-04 0.2067631E-01 15 0.2017534E-04 0.1589662E-01 16 0.1525992E-04 0.1202364E-01 17 0.1175362E-04 0.9260952E-02 18 0.8922991E-05 0.7030634E-02 19 0.6828054E-05 0.5379983E-02 20 0.5210467E-05 0.4105448E-02 Result GMRES:20, 2.5E-2, 5.2104665452239E-6, 1 2 40 0.5210467E-05 0.2013370E-02 NI: 2, NLI: 42, ERLI 0.5210467E-05, ERNI: 0.2906547E+01 T= 0.34E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.43E+00 TN= 0.31E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.36E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.3607701E+00 Max. and WRMS norm residual= 0.1012648E+01 0.8911919E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3577000E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3577000E+02 1 0.9671477E+00 0.2703796E-01 2 0.6773469E-01 0.1893617E-02 3 0.4585062E-02 0.1281818E-03 Result GMRES:3, 5.E-2, 4.5850618965433E-3, 0 1 3 0.4585062E-02 0.3591077E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4585062E-02 1 0.4232046E-03 0.9230074E-01 2 0.3352283E-04 0.7311314E-02 3 0.2159333E-05 0.4709495E-03 Result GMRES:3, 5.E-2, 2.1593326937937E-6, 0 2 6 0.2159333E-05 0.4575457E-02 NI: 1, NLI: 8, ERLI 0.2159333E-05, ERNI: 0.3591077E+02 Max. and WRMS norm residual= 0.2895888E-03 0.1975030E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3150731E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3150731E-02 1 0.2108623E-03 0.6692488E-01 2 0.1290027E-04 0.4094372E-02 3 0.8414916E-06 0.2670782E-03 Result GMRES:3, 2.5E-2, 8.4149159652409E-7, 0 1 3 0.8414916E-06 0.3196133E-02 NI: 2, NLI: 4, ERLI 0.8414916E-06, ERNI: 0.3196133E-02 T= 0.36E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.44E+01 Time integration at T= 0.36E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.3607701E+00 Max. and WRMS norm residual= 0.1068388E+01 0.1030890E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.2733669E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2733669E+02 1 0.1816263E+01 0.6644048E-01 2 0.2651556E+00 0.9699623E-02 3 0.6067913E-01 0.2219695E-02 4 0.1266428E-01 0.4632705E-03 Result GMRES:4, 5.E-2, 1.2664282750289E-2, 0 1 4 0.1266428E-01 0.2781481E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1266428E-01 1 0.3494838E-02 0.2759602E+00 2 0.7133588E-03 0.5632840E-01 3 0.1271489E-03 0.1003996E-01 4 0.2024285E-04 0.1598420E-02 5 0.5396785E-05 0.4261422E-03 Result GMRES:5, 5.E-2, 5.3967848846108E-6, 0 2 9 0.5396785E-05 0.1226024E-01 NI: 1, NLI: 11, ERLI 0.5396785E-05, ERNI: 0.2781471E+02 Max. and WRMS norm residual= 0.8080684E-03 0.5919425E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.9410368E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9410368E-02 1 0.1843480E-02 0.1958988E+00 2 0.4167843E-03 0.4428990E-01 3 0.8574044E-04 0.9111273E-02 4 0.1676429E-04 0.1781471E-02 5 0.3565264E-05 0.3788655E-03 Result GMRES:5, 2.5E-2, 3.5652637823581E-6, 0 1 5 0.3565264E-05 0.9689095E-02 NI: 2, NLI: 6, ERLI 0.3565264E-05, ERNI: 0.9689095E-02 T= 0.36E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.48E+01 Time integration at T= 0.36E+00, Grid level= 3, NPTS= 512 Nonlinear system solver at T = 0.3607701E+00 Max. and WRMS norm residual= 0.2796574E+01 0.3331829E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1024 # it. GCRO # it.GMRES Error Estimate 0 0 0.5580866E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5580866E+02 1 0.7282613E+01 0.1304925E+00 2 0.1625108E+01 0.2911928E-01 3 0.6071943E+00 0.1087993E-01 4 0.2475514E+00 0.4435717E-02 5 0.8536771E-01 0.1529650E-02 6 0.3475789E-01 0.6228046E-03 Result GMRES:6, 5.E-2, 3.475788957011E-2, 0 1 6 0.3475789E-01 0.5856752E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3475789E-01 1 0.1739696E-01 0.5005182E+00 2 0.6311084E-02 0.1815727E+00 3 0.2471987E-02 0.7112017E-01 4 0.9629502E-03 0.2770451E-01 5 0.3034899E-03 0.8731538E-02 6 0.1253895E-03 0.3607511E-02 7 0.5050072E-04 0.1452928E-02 8 0.1674520E-04 0.4817668E-03 Result GMRES:8, 5.E-2, 1.6745198317274E-5, 0 2 14 0.1674520E-04 0.3153417E-01 NI: 1, NLI: 16, ERLI 0.1674520E-04, ERNI: 0.5856745E+02 Max. and WRMS norm residual= 0.4715163E-01 0.5739502E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1024 # it. GCRO # it.GMRES Error Estimate 0 0 0.8748793E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8748793E+00 1 0.1522945E+00 0.1740748E+00 2 0.4338006E-01 0.4958405E-01 3 0.1784365E-01 0.2039555E-01 4 0.6161924E-02 0.7043171E-02 5 0.2418352E-02 0.2764212E-02 6 0.8997379E-03 0.1028414E-02 7 0.3412372E-03 0.3900392E-03 Result GMRES:7, 2.5E-2, 3.4123721850378E-4, 0 1 7 0.3412372E-03 0.9211679E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3412372E-03 1 0.1736395E-03 0.5088528E+00 2 0.6291366E-04 0.1843693E+00 3 0.2471461E-04 0.7242649E-01 4 0.8990299E-05 0.2634618E-01 5 0.3582474E-05 0.1049849E-01 6 0.1327827E-05 0.3891214E-02 7 0.4304633E-06 0.1261478E-02 8 0.1879585E-06 0.5508148E-03 Result GMRES:8, 2.5E-2, 1.8795852023847E-7, 0 2 15 0.1879585E-06 0.3042097E-03 NI: 2, NLI: 17, ERLI 0.1879585E-06, ERNI: 0.9211685E+00 T= 0.36E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.29E+01 Time integration at T= 0.36E+00, Grid level= 4, NPTS= 1077 Nonlinear system solver at T = 0.3607701E+00 Max. and WRMS norm residual= 0.2790032E+01 0.4495068E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.5931820E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5931820E+02 1 0.1297966E+02 0.2188142E+00 2 0.4816773E+01 0.8120228E-01 3 0.2572224E+01 0.4336315E-01 4 0.1550336E+01 0.2613593E-01 5 0.7908784E+00 0.1333281E-01 6 0.4720142E+00 0.7957325E-02 7 0.2645586E+00 0.4459991E-02 8 0.1536971E+00 0.2591061E-02 9 0.9144425E-01 0.1541588E-02 10 0.5226904E-01 0.8811636E-03 11 0.3177126E-01 0.5356072E-03 Result GMRES:11, 5.E-2, 3.177125757439E-2, 0 1 11 0.3177126E-01 0.7395638E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3177126E-01 1 0.2191876E-01 0.6898926E+00 2 0.1206916E-01 0.3798767E+00 3 0.7084038E-02 0.2229700E+00 4 0.4243167E-02 0.1335536E+00 5 0.2406349E-02 0.7573980E-01 6 0.1501816E-02 0.4726965E-01 7 0.8551399E-03 0.2691552E-01 8 0.5268846E-03 0.1658369E-01 9 0.3089993E-03 0.9725750E-02 10 0.1857736E-03 0.5847222E-02 11 0.1114400E-03 0.3507573E-02 12 0.6690554E-04 0.2105851E-02 13 0.3984648E-04 0.1254168E-02 14 0.2425618E-04 0.7634630E-03 Result GMRES:14, 5.E-2, 2.4256180659418E-5, 0 2 25 0.2425618E-04 0.3047870E-01 NI: 1, NLI: 27, ERLI 0.2425618E-04, ERNI: 0.7395798E+02 Max. and WRMS norm residual= 0.1103348E+00 0.1562385E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.1869979E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1869979E+01 1 0.4710365E+00 0.2518940E+00 2 0.1749446E+00 0.9355429E-01 3 0.1139118E+00 0.6091610E-01 4 0.5188976E-01 0.2774884E-01 5 0.3192152E-01 0.1707052E-01 6 0.1706939E-01 0.9128119E-02 7 0.1008925E-01 0.5395381E-02 8 0.5661231E-02 0.3027430E-02 9 0.3302057E-02 0.1765825E-02 10 0.1923786E-02 0.1028774E-02 11 0.1108820E-02 0.5929582E-03 Result GMRES:11, 2.5E-2, 1.10881960473E-3, 0 1 11 0.1108820E-02 0.1992748E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1108820E-02 1 0.7532190E-03 0.6792981E+00 2 0.4054198E-03 0.3656319E+00 3 0.2354665E-03 0.2123578E+00 4 0.1354482E-03 0.1221553E+00 5 0.7804342E-04 0.7038423E-01 6 0.4621975E-04 0.4168374E-01 7 0.2687636E-04 0.2423871E-01 8 0.1591519E-04 0.1435328E-01 9 0.9185731E-05 0.8284243E-02 10 0.5567197E-05 0.5020832E-02 11 0.3172382E-05 0.2861044E-02 12 0.1929575E-05 0.1740207E-02 13 0.1119507E-05 0.1009639E-02 14 0.6703366E-06 0.6045498E-03 Result GMRES:14, 2.5E-2, 6.703366456689E-7, 0 2 25 0.6703366E-06 0.1026445E-02 NI: 2, NLI: 27, ERLI 0.6703366E-06, ERNI: 0.1992808E+01 T= 0.36E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.36E+00, Grid level= 5, NPTS= 2311 Nonlinear system solver at T = 0.3607701E+00 Max. and WRMS norm residual= 0.3053609E+01 0.6233852E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.4567187E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4567187E+02 1 0.2231913E+02 0.4886844E+00 2 0.1068668E+02 0.2339881E+00 3 0.6963539E+01 0.1524689E+00 4 0.4837985E+01 0.1059292E+00 5 0.3427540E+01 0.7504707E-01 6 0.2505391E+01 0.5485632E-01 7 0.1841187E+01 0.4031338E-01 8 0.1370936E+01 0.3001707E-01 9 0.1027600E+01 0.2249963E-01 10 0.7750572E+00 0.1697012E-01 11 0.5877825E+00 0.1286968E-01 12 0.4467812E+00 0.9782416E-02 13 0.3403073E+00 0.7451137E-02 14 0.2596757E+00 0.5685683E-02 15 0.1984950E+00 0.4346111E-02 16 0.1520060E+00 0.3328220E-02 17 0.1165314E+00 0.2551493E-02 18 0.8941099E-01 0.1957682E-02 19 0.6867410E-01 0.1503641E-02 20 0.5277882E-01 0.1155609E-02 Result GMRES:20, 5.E-2, 5.2778824089557E-2, 1 1 20 0.5277882E-01 0.9818019E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5277882E-01 1 0.4210878E-01 0.7978348E+00 2 0.3152335E-01 0.5972727E+00 3 0.2417678E-01 0.4580773E+00 4 0.1854950E-01 0.3514573E+00 5 0.1428250E-01 0.2706104E+00 6 0.1096978E-01 0.2078444E+00 7 0.8409559E-02 0.1593359E+00 8 0.6440236E-02 0.1220231E+00 9 0.4933332E-02 0.9347181E-01 10 0.3775310E-02 0.7153078E-01 11 0.2893559E-02 0.5482423E-01 12 0.2217337E-02 0.4201188E-01 13 0.1699287E-02 0.3219637E-01 14 0.1304075E-02 0.2470830E-01 15 0.1001109E-02 0.1896801E-01 16 0.7684448E-03 0.1455972E-01 17 0.5907908E-03 0.1119371E-01 18 0.4539471E-03 0.8600932E-02 19 0.3491495E-03 0.6615334E-02 20 0.2687830E-03 0.5092630E-02 Result GMRES:20, 5.E-2, 2.6878300220342E-4, 1 2 40 0.2687830E-03 0.9010988E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2687830E-03 1 0.2146539E-03 0.7986142E+00 2 0.1609482E-03 0.5988037E+00 3 0.1237411E-03 0.4603754E+00 4 0.9533249E-04 0.3546820E+00 5 0.7367498E-04 0.2741058E+00 6 0.5696772E-04 0.2119469E+00 7 0.4404910E-04 0.1638835E+00 8 0.3407851E-04 0.1267882E+00 9 0.2636432E-04 0.9808775E-01 10 0.2039997E-04 0.7589755E-01 11 0.1578403E-04 0.5872407E-01 12 0.1221316E-04 0.4543873E-01 13 0.9450324E-05 0.3515968E-01 14 0.7311049E-05 0.2720056E-01 15 0.5655272E-05 0.2104029E-01 16 0.4372503E-05 0.1626778E-01 17 0.3380854E-05 0.1257838E-01 18 0.2608733E-05 0.9705720E-02 19 0.2015016E-05 0.7496814E-02 20 0.1547131E-05 0.5756060E-02 Result GMRES:20, 5.E-2, 1.5471310159715E-6, 1 3 60 0.1547131E-05 0.4612485E-03 NI: 1, NLI: 63, ERLI 0.1547131E-05, ERNI: 0.9818250E+02 Max. and WRMS norm residual= 0.1587705E+00 0.2662198E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.1661142E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1661142E+01 1 0.5927032E+00 0.3568048E+00 2 0.2919324E+00 0.1757421E+00 3 0.2192776E+00 0.1320042E+00 4 0.1415763E+00 0.8522834E-01 5 0.1033600E+00 0.6222229E-01 6 0.7438302E-01 0.4477826E-01 7 0.5364019E-01 0.3229116E-01 8 0.3989091E-01 0.2401416E-01 9 0.2897200E-01 0.1744102E-01 10 0.2172591E-01 0.1307890E-01 11 0.1600952E-01 0.9637663E-02 12 0.1200389E-01 0.7226287E-02 13 0.8968127E-02 0.5398773E-02 14 0.6720527E-02 0.4045728E-02 15 0.5067216E-02 0.3050442E-02 16 0.3805017E-02 0.2290603E-02 17 0.2881189E-02 0.1734463E-02 18 0.2172970E-02 0.1308118E-02 19 0.1646903E-02 0.9914284E-03 Result GMRES:19, 2.5E-2, 1.6469028885219E-3, 0 1 19 0.1646903E-02 0.2913009E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1646903E-02 1 0.1304425E-02 0.7920475E+00 2 0.9542743E-03 0.5794357E+00 3 0.7259362E-03 0.4407887E+00 4 0.5476117E-03 0.3325100E+00 5 0.4158210E-03 0.2524866E+00 6 0.3148190E-03 0.1911582E+00 7 0.2379941E-03 0.1445101E+00 8 0.1801753E-03 0.1094025E+00 9 0.1363166E-03 0.8277147E-01 10 0.1030407E-03 0.6256634E-01 11 0.7788756E-04 0.4729336E-01 12 0.5892418E-04 0.3577878E-01 13 0.4454782E-04 0.2704945E-01 14 0.3373080E-04 0.2048135E-01 15 0.2559291E-04 0.1554002E-01 16 0.1942444E-04 0.1179452E-01 17 0.1477142E-04 0.8969213E-02 18 0.1124543E-04 0.6828231E-02 19 0.8583661E-05 0.5212002E-02 20 0.6539079E-05 0.3970531E-02 Result GMRES:20, 2.5E-2, 6.5390794575832E-6, 1 2 39 0.6539079E-05 0.2590747E-02 NI: 2, NLI: 41, ERLI 0.6539079E-05, ERNI: 0.2913033E+01 T= 0.36E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.44E+00 TN= 0.34E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.38E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.3844452E+00 Max. and WRMS norm residual= 0.1660251E+01 0.1464229E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.5414692E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5414692E+02 1 0.1407454E+01 0.2599324E-01 2 0.9960152E-01 0.1839468E-02 3 0.7115758E-02 0.1314158E-03 Result GMRES:3, 5.E-2, 7.115758422461E-3, 0 1 3 0.7115758E-02 0.5438573E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7115758E-02 1 0.7081107E-03 0.9951303E-01 2 0.5572646E-04 0.7831415E-02 3 0.3191554E-05 0.4485191E-03 Result GMRES:3, 5.E-2, 3.1915535171852E-6, 0 2 6 0.3191554E-05 0.7109127E-02 NI: 1, NLI: 8, ERLI 0.3191554E-05, ERNI: 0.5438576E+02 Max. and WRMS norm residual= 0.6366702E-03 0.4499415E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.7171760E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7171760E-02 1 0.4811157E-03 0.6708475E-01 2 0.3220006E-04 0.4489841E-02 3 0.2279937E-05 0.3179048E-03 Result GMRES:3, 2.5E-2, 2.2799367656023E-6, 0 1 3 0.2279937E-05 0.7268946E-02 NI: 2, NLI: 4, ERLI 0.2279937E-05, ERNI: 0.7268946E-02 T= 0.38E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.37E+01 Time integration at T= 0.38E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.3844452E+00 Max. and WRMS norm residual= 0.1720142E+01 0.1692143E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.4219088E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4219088E+02 1 0.2804170E+01 0.6646390E-01 2 0.3724113E+00 0.8826821E-02 3 0.8019644E-01 0.1900801E-02 4 0.1717665E-01 0.4071175E-03 Result GMRES:4, 5.E-2, 1.7176645656168E-2, 0 1 4 0.1717665E-01 0.4308808E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1717665E-01 1 0.4819023E-02 0.2805567E+00 2 0.9457734E-03 0.5506159E-01 3 0.1631098E-03 0.9496023E-02 4 0.2636103E-04 0.1534702E-02 5 0.7135236E-05 0.4154033E-03 Result GMRES:5, 5.E-2, 7.1352358489581E-6, 0 2 9 0.7135236E-05 0.1656510E-01 NI: 1, NLI: 11, ERLI 0.7135236E-05, ERNI: 0.4308792E+02 Max. and WRMS norm residual= 0.2647085E-02 0.2514729E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.4008836E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4008836E-01 1 0.5390739E-02 0.1344714E+00 2 0.1069444E-02 0.2667716E-01 3 0.2413676E-03 0.6020890E-02 4 0.4555176E-04 0.1136284E-02 5 0.9082626E-05 0.2265652E-03 Result GMRES:5, 2.5E-2, 9.0826263278359E-6, 0 1 5 0.9082626E-05 0.4222981E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9082626E-05 1 0.2665688E-05 0.2934931E+00 2 0.4868162E-06 0.5359862E-01 3 0.1048648E-06 0.1154565E-01 4 0.2086415E-07 0.2297149E-02 5 0.3116046E-08 0.3430776E-03 Result GMRES:5, 2.5E-2, 3.1160458606785E-9, 0 2 10 0.3116046E-08 0.8937882E-05 NI: 2, NLI: 12, ERLI 0.3116046E-08, ERNI: 0.4222981E-01 T= 0.38E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.42E+01 Time integration at T= 0.38E+00, Grid level= 3, NPTS= 508 Nonlinear system solver at T = 0.3844452E+00 Max. and WRMS norm residual= 0.1973201E+01 0.2907927E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1016 # it. GCRO # it.GMRES Error Estimate 0 0 0.5067585E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5067585E+02 1 0.6149439E+01 0.1213485E+00 2 0.1664377E+01 0.3284360E-01 3 0.5804336E+00 0.1145385E-01 4 0.2491747E+00 0.4917030E-02 5 0.8472500E-01 0.1671901E-02 6 0.3431762E-01 0.6771988E-03 Result GMRES:6, 5.E-2, 3.4317620755536E-2, 0 1 6 0.3431762E-01 0.5240650E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3431762E-01 1 0.1716406E-01 0.5001529E+00 2 0.6014690E-02 0.1752653E+00 3 0.2341369E-02 0.6822644E-01 4 0.9107759E-03 0.2653960E-01 5 0.2649243E-03 0.7719776E-02 6 0.1142579E-03 0.3329424E-02 7 0.4309510E-04 0.1255772E-02 8 0.1557014E-04 0.4537069E-03 Result GMRES:8, 5.E-2, 1.5570141025148E-5, 0 2 14 0.1557014E-04 0.3087336E-01 NI: 1, NLI: 16, ERLI 0.1557014E-04, ERNI: 0.5240695E+02 Max. and WRMS norm residual= 0.3905213E-01 0.5301060E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1016 # it. GCRO # it.GMRES Error Estimate 0 0 0.8075241E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8075241E+00 1 0.1380940E+00 0.1710091E+00 2 0.3844654E-01 0.4761040E-01 3 0.1584197E-01 0.1961795E-01 4 0.5392655E-02 0.6678012E-02 5 0.2139282E-02 0.2649186E-02 6 0.7926318E-03 0.9815581E-03 Result GMRES:6, 2.5E-2, 7.92631803512E-4, 0 1 6 0.7926318E-03 0.8547689E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7926318E-03 1 0.3955129E-03 0.4989869E+00 2 0.1470040E-03 0.1854632E+00 3 0.5613286E-04 0.7081832E-01 4 0.2133045E-04 0.2691092E-01 5 0.8087668E-05 0.1020356E-01 6 0.2704416E-05 0.3411945E-02 7 0.1202422E-05 0.1517000E-02 8 0.3884983E-06 0.4901372E-03 Result GMRES:8, 2.5E-2, 3.8849834978092E-7, 0 2 14 0.3884983E-06 0.7066631E-03 NI: 2, NLI: 16, ERLI 0.3884983E-06, ERNI: 0.8547647E+00 T= 0.38E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.38E+00, Grid level= 4, NPTS= 979 Nonlinear system solver at T = 0.3844452E+00 Max. and WRMS norm residual= 0.3026072E+01 0.4718740E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1958 # it. GCRO # it.GMRES Error Estimate 0 0 0.6226011E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6226011E+02 1 0.1365403E+02 0.2193061E+00 2 0.5017415E+01 0.8058795E-01 3 0.2681943E+01 0.4307642E-01 4 0.1623654E+01 0.2607856E-01 5 0.8296678E+00 0.1332583E-01 6 0.4955707E+00 0.7959682E-02 7 0.2783543E+00 0.4470829E-02 8 0.1615057E+00 0.2594048E-02 9 0.9523740E-01 0.1529670E-02 10 0.5515735E-01 0.8859180E-03 11 0.3317682E-01 0.5328745E-03 Result GMRES:11, 5.E-2, 3.3176823057954E-2, 0 1 11 0.3317682E-01 0.7766153E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3317682E-01 1 0.2283450E-01 0.6882667E+00 2 0.1264960E-01 0.3812783E+00 3 0.7394430E-02 0.2228794E+00 4 0.4426896E-02 0.1334334E+00 5 0.2519904E-02 0.7595376E-01 6 0.1569542E-02 0.4730839E-01 7 0.8928076E-03 0.2691058E-01 8 0.5495834E-03 0.1656528E-01 9 0.3237181E-03 0.9757356E-02 10 0.1939068E-03 0.5844647E-02 11 0.1160034E-03 0.3496521E-02 12 0.7008342E-04 0.2112421E-02 13 0.4149438E-04 0.1250704E-02 14 0.2516878E-04 0.7586254E-03 Result GMRES:14, 5.E-2, 2.5168781548747E-5, 0 2 25 0.2516878E-04 0.3197381E-01 NI: 1, NLI: 27, ERLI 0.2516878E-04, ERNI: 0.7766321E+02 Max. and WRMS norm residual= 0.9210410E-01 0.1531287E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1958 # it. GCRO # it.GMRES Error Estimate 0 0 0.1819309E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1819309E+01 1 0.4689372E+00 0.2577557E+00 2 0.1826638E+00 0.1004028E+00 3 0.1185379E+00 0.6515544E-01 4 0.5464246E-01 0.3003473E-01 5 0.3324883E-01 0.1827553E-01 6 0.1795447E-01 0.9868843E-02 7 0.1040172E-01 0.5717399E-02 8 0.5963044E-02 0.3277642E-02 9 0.3421996E-02 0.1880932E-02 10 0.2024302E-02 0.1112676E-02 11 0.1152753E-02 0.6336214E-03 Result GMRES:11, 2.5E-2, 1.1527531397045E-3, 0 1 11 0.1152753E-02 0.1957062E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1152753E-02 1 0.7863038E-03 0.6821094E+00 2 0.4235929E-03 0.3674619E+00 3 0.2446104E-03 0.2121967E+00 4 0.1424614E-03 0.1235836E+00 5 0.8132867E-04 0.7055168E-01 6 0.4810663E-04 0.4173194E-01 7 0.2818581E-04 0.2445086E-01 8 0.1654641E-04 0.1435382E-01 9 0.9686118E-05 0.8402596E-02 10 0.5732221E-05 0.4972636E-02 11 0.3385789E-05 0.2937132E-02 12 0.1980682E-05 0.1718219E-02 13 0.1189670E-05 0.1032025E-02 14 0.7004585E-06 0.6076396E-03 Result GMRES:14, 2.5E-2, 7.0045845035067E-7, 0 2 25 0.7004585E-06 0.1066928E-02 NI: 2, NLI: 27, ERLI 0.7004585E-06, ERNI: 0.1957137E+01 T= 0.38E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.38E+00, Grid level= 5, NPTS= 2305 Nonlinear system solver at T = 0.3844452E+00 Max. and WRMS norm residual= 0.3061232E+01 0.6252149E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4610 # it. GCRO # it.GMRES Error Estimate 0 0 0.4579109E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4579109E+02 1 0.2236423E+02 0.4883969E+00 2 0.1070301E+02 0.2337356E+00 3 0.6969978E+01 0.1522125E+00 4 0.4843203E+01 0.1057674E+00 5 0.3427097E+01 0.7484201E-01 6 0.2500894E+01 0.5461530E-01 7 0.1833737E+01 0.4004571E-01 8 0.1362334E+01 0.2975108E-01 9 0.1018654E+01 0.2224569E-01 10 0.7667884E+00 0.1674536E-01 11 0.5803952E+00 0.1267485E-01 12 0.4405358E+00 0.9620557E-02 13 0.3351857E+00 0.7319888E-02 14 0.2555491E+00 0.5580761E-02 15 0.1951925E+00 0.4262674E-02 16 0.1493739E+00 0.3262074E-02 17 0.1144437E+00 0.2499257E-02 18 0.8778484E-01 0.1917072E-02 19 0.6740025E-01 0.1471907E-02 20 0.5179154E-01 0.1131040E-02 Result GMRES:20, 5.E-2, 5.1791544021421E-2, 1 1 20 0.5179154E-01 0.9842152E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5179154E-01 1 0.4132105E-01 0.7978340E+00 2 0.3093920E-01 0.5973794E+00 3 0.2373039E-01 0.4581904E+00 4 0.1822437E-01 0.3518792E+00 5 0.1405574E-01 0.2713907E+00 6 0.1082799E-01 0.2090687E+00 7 0.8327942E-02 0.1607973E+00 8 0.6396304E-02 0.1235009E+00 9 0.4906537E-02 0.9473626E-01 10 0.3754517E-02 0.7249286E-01 11 0.2877754E-02 0.5556418E-01 12 0.2205484E-02 0.4258387E-01 13 0.1689770E-02 0.3262637E-01 14 0.1296114E-02 0.2502558E-01 15 0.9943039E-03 0.1919819E-01 16 0.7630287E-03 0.1473269E-01 17 0.5865787E-03 0.1132576E-01 18 0.4506197E-03 0.8700643E-02 19 0.3461108E-03 0.6682767E-02 20 0.2661747E-03 0.5139346E-02 Result GMRES:20, 5.E-2, 2.6617467285746E-4, 1 2 40 0.2661747E-03 0.8850429E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2661747E-03 1 0.2124767E-03 0.7982605E+00 2 0.1589905E-03 0.5973163E+00 3 0.1217805E-03 0.4575210E+00 4 0.9395602E-04 0.3529863E+00 5 0.7208787E-04 0.2708292E+00 6 0.5589676E-04 0.2100003E+00 7 0.4294081E-04 0.1613257E+00 8 0.3328052E-04 0.1250326E+00 9 0.2565943E-04 0.9640070E-01 10 0.1987230E-04 0.7465885E-01 11 0.1536683E-04 0.5773212E-01 12 0.1189138E-04 0.4467510E-01 13 0.9204586E-05 0.3458100E-01 14 0.7122372E-05 0.2675826E-01 15 0.5511788E-05 0.2070741E-01 16 0.4264357E-05 0.1602090E-01 17 0.3297274E-05 0.1238763E-01 18 0.2546358E-05 0.9566494E-02 19 0.1967096E-05 0.7390245E-02 20 0.1509848E-05 0.5672395E-02 Result GMRES:20, 5.E-2, 1.5098478136164E-6, 1 3 60 0.1509848E-05 0.4555798E-03 NI: 1, NLI: 63, ERLI 0.1509848E-05, ERNI: 0.9842368E+02 Max. and WRMS norm residual= 0.1623397E+00 0.2679802E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4610 # it. GCRO # it.GMRES Error Estimate 0 0 0.1672257E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1672257E+01 1 0.5962134E+00 0.3565322E+00 2 0.2925896E+00 0.1749669E+00 3 0.2196964E+00 0.1313772E+00 4 0.1418626E+00 0.8483306E-01 5 0.1034794E+00 0.6188012E-01 6 0.7449669E-01 0.4454860E-01 7 0.5366581E-01 0.3209185E-01 8 0.3991113E-01 0.2386663E-01 9 0.2894610E-01 0.1730960E-01 10 0.2170092E-01 0.1297702E-01 11 0.1596380E-01 0.9546264E-02 12 0.1196509E-01 0.7155057E-02 13 0.8923493E-02 0.5336198E-02 14 0.6682298E-02 0.3995976E-02 15 0.5034153E-02 0.3010395E-02 16 0.3772697E-02 0.2256051E-02 17 0.2857155E-02 0.1708562E-02 18 0.2149431E-02 0.1285347E-02 19 0.1629813E-02 0.9746191E-03 Result GMRES:19, 2.5E-2, 1.6298133132882E-3, 0 1 19 0.1629813E-02 0.2929267E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1629813E-02 1 0.1292873E-02 0.7932642E+00 2 0.9443402E-03 0.5794162E+00 3 0.7199970E-03 0.4417665E+00 4 0.5434621E-03 0.3334505E+00 5 0.4140825E-03 0.2540674E+00 6 0.3149241E-03 0.1932271E+00 7 0.2386496E-03 0.1464276E+00 8 0.1813996E-03 0.1113008E+00 9 0.1370917E-03 0.8411496E-01 10 0.1039842E-03 0.6380132E-01 11 0.7875785E-04 0.4832324E-01 12 0.5945808E-04 0.3648153E-01 13 0.4507656E-04 0.2765750E-01 14 0.3391291E-04 0.2080785E-01 15 0.2572055E-04 0.1578128E-01 16 0.1935334E-04 0.1187458E-01 17 0.1479283E-04 0.9076396E-02 18 0.1108825E-04 0.6803384E-02 19 0.8538033E-05 0.5238657E-02 20 0.6466726E-05 0.3967771E-02 Result GMRES:20, 2.5E-2, 6.4667257162697E-6, 1 2 39 0.6466726E-05 0.2568626E-02 NI: 2, NLI: 41, ERLI 0.6466726E-05, ERNI: 0.2929289E+01 T= 0.38E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.44E+00 TN= 0.36E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.41E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.4081204E+00 Max. and WRMS norm residual= 0.2432449E+01 0.2165754E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6816492E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6816492E+02 1 0.1741904E+01 0.2555426E-01 2 0.1314872E+00 0.1928958E-02 3 0.1043981E-01 0.1531551E-03 Result GMRES:3, 5.E-2, 1.0439805068258E-2, 0 1 3 0.1043981E-01 0.6854398E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1043981E-01 1 0.1093358E-02 0.1047297E+00 2 0.8587996E-04 0.8226204E-02 3 0.3791466E-05 0.3631740E-03 Result GMRES:3, 5.E-2, 3.7914660379702E-6, 0 2 6 0.3791466E-05 0.1044301E-01 NI: 1, NLI: 8, ERLI 0.3791466E-05, ERNI: 0.6854412E+02 Max. and WRMS norm residual= 0.8116538E-03 0.7165336E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1140163E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1140163E-01 1 0.7991064E-03 0.7008706E-01 2 0.6331126E-04 0.5552828E-02 3 0.4585936E-05 0.4022178E-03 Result GMRES:3, 2.5E-2, 4.5859363584544E-6, 0 1 3 0.4585936E-05 0.1158414E-01 NI: 2, NLI: 4, ERLI 0.4585936E-05, ERNI: 0.1158414E-01 T= 0.41E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.29E+01 Time integration at T= 0.41E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.4081204E+00 Max. and WRMS norm residual= 0.2459493E+01 0.2495489E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.5575781E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5575781E+02 1 0.3683894E+01 0.6606956E-01 2 0.4218868E+00 0.7566415E-02 3 0.7285837E-01 0.1306693E-02 4 0.1655620E-01 0.2969306E-03 Result GMRES:4, 5.E-2, 1.6556200280829E-2, 0 1 4 0.1655620E-01 0.5709662E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1655620E-01 1 0.4955785E-02 0.2993311E+00 2 0.8701634E-03 0.5255816E-01 3 0.1516251E-03 0.9158208E-02 4 0.2881210E-04 0.1740260E-02 5 0.7321117E-05 0.4421979E-03 Result GMRES:5, 5.E-2, 7.3211172747022E-6, 0 2 9 0.7321117E-05 0.1590002E-01 NI: 1, NLI: 11, ERLI 0.7321117E-05, ERNI: 0.5709668E+02 Max. and WRMS norm residual= 0.3650384E-02 0.4737316E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.7540033E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7540033E-01 1 0.8838973E-02 0.1172272E+00 2 0.1354701E-02 0.1796678E-01 3 0.2999987E-03 0.3978745E-02 4 0.6209012E-04 0.8234727E-03 Result GMRES:4, 2.5E-2, 6.2090120159494E-5, 0 1 4 0.6209012E-04 0.7944508E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6209012E-04 1 0.1712852E-04 0.2758655E+00 2 0.3705365E-05 0.5967721E-01 3 0.6863074E-06 0.1105341E-01 4 0.1027471E-06 0.1654807E-02 5 0.2610477E-07 0.4204336E-03 Result GMRES:5, 2.5E-2, 2.6104770350609E-8, 0 2 9 0.2610477E-07 0.6011185E-04 NI: 2, NLI: 11, ERLI 0.2610477E-07, ERNI: 0.7944480E-01 T= 0.41E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.41E+00, Grid level= 3, NPTS= 500 Nonlinear system solver at T = 0.4081204E+00 Max. and WRMS norm residual= 0.2512503E+01 0.2944844E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.5298272E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5298272E+02 1 0.6581355E+01 0.1242170E+00 2 0.1494213E+01 0.2820190E-01 3 0.4692417E+00 0.8856504E-02 4 0.2022862E+00 0.3817965E-02 5 0.6909809E-01 0.1304163E-02 6 0.2731221E-01 0.5154928E-03 Result GMRES:6, 5.E-2, 2.7312210576927E-2, 0 1 6 0.2731221E-01 0.5539290E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2731221E-01 1 0.1371342E-01 0.5020986E+00 2 0.4692542E-02 0.1718111E+00 3 0.1873232E-02 0.6858589E-01 4 0.6826619E-03 0.2499475E-01 5 0.2243035E-03 0.8212571E-02 6 0.8938727E-04 0.3272795E-02 7 0.3701807E-04 0.1355367E-02 8 0.1304933E-04 0.4777836E-03 Result GMRES:8, 5.E-2, 1.3049325944749E-5, 0 2 14 0.1304933E-04 0.2415823E-01 NI: 1, NLI: 16, ERLI 0.1304933E-04, ERNI: 0.5539326E+02 Max. and WRMS norm residual= 0.2045351E-01 0.2726493E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.4099142E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4099142E+00 1 0.6733096E-01 0.1642562E+00 2 0.1939035E-01 0.4730343E-01 3 0.7928970E-02 0.1934300E-01 4 0.2703612E-02 0.6595554E-02 5 0.1063975E-02 0.2595603E-02 6 0.4089596E-03 0.9976712E-03 Result GMRES:6, 2.5E-2, 4.0895960842444E-4, 0 1 6 0.4089596E-03 0.4261166E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4089596E-03 1 0.2047565E-03 0.5006767E+00 2 0.7725098E-04 0.1888964E+00 3 0.2869396E-04 0.7016332E-01 4 0.1102135E-04 0.2694972E-01 5 0.3983738E-05 0.9741152E-02 6 0.1360848E-05 0.3327586E-02 7 0.6109120E-06 0.1493820E-02 8 0.1906075E-06 0.4660790E-03 Result GMRES:8, 2.5E-2, 1.9060749588331E-7, 0 2 14 0.1906075E-06 0.3682343E-03 NI: 2, NLI: 16, ERLI 0.1906075E-06, ERNI: 0.4261126E+00 T= 0.41E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.41E+00, Grid level= 4, NPTS= 1007 Nonlinear system solver at T = 0.4081204E+00 Max. and WRMS norm residual= 0.2857653E+01 0.4661487E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2014 # it. GCRO # it.GMRES Error Estimate 0 0 0.6150039E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6150039E+02 1 0.1344832E+02 0.2186705E+00 2 0.4981663E+01 0.8100215E-01 3 0.2663048E+01 0.4330133E-01 4 0.1602588E+01 0.2605818E-01 5 0.8169812E+00 0.1328416E-01 6 0.4869367E+00 0.7917620E-02 7 0.2740095E+00 0.4455411E-02 8 0.1587710E+00 0.2581626E-02 9 0.9369712E-01 0.1523521E-02 10 0.5412650E-01 0.8801001E-03 11 0.3269308E-01 0.5315915E-03 Result GMRES:11, 5.E-2, 3.269308147035E-2, 0 1 11 0.3269308E-01 0.7663559E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3269308E-01 1 0.2245303E-01 0.6867823E+00 2 0.1246319E-01 0.3812181E+00 3 0.7299019E-02 0.2232588E+00 4 0.4367837E-02 0.1336013E+00 5 0.2486046E-02 0.7604196E-01 6 0.1553570E-02 0.4751985E-01 7 0.8783155E-03 0.2686548E-01 8 0.5440584E-03 0.1664139E-01 9 0.3205200E-03 0.9803910E-02 10 0.1913870E-03 0.5854053E-02 11 0.1151388E-03 0.3521810E-02 12 0.6905782E-04 0.2112307E-02 13 0.4125258E-04 0.1261814E-02 14 0.2476564E-04 0.7575193E-03 Result GMRES:14, 5.E-2, 2.4765640513463E-5, 0 2 25 0.2476564E-04 0.3146109E-01 NI: 1, NLI: 27, ERLI 0.2476564E-04, ERNI: 0.7663727E+02 Max. and WRMS norm residual= 0.1102700E+00 0.1636252E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2014 # it. GCRO # it.GMRES Error Estimate 0 0 0.1960534E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1960534E+01 1 0.4923229E+00 0.2511168E+00 2 0.1834997E+00 0.9359683E-01 3 0.1191763E+00 0.6078768E-01 4 0.5444048E-01 0.2776819E-01 5 0.3338243E-01 0.1702722E-01 6 0.1776608E-01 0.9061859E-02 7 0.1035736E-01 0.5282928E-02 8 0.5892210E-02 0.3005411E-02 9 0.3433542E-02 0.1751330E-02 10 0.1999177E-02 0.1019711E-02 11 0.1153822E-02 0.5885247E-03 Result GMRES:11, 2.5E-2, 1.153822450425E-3, 0 1 11 0.1153822E-02 0.2087433E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1153822E-02 1 0.7897895E-03 0.6844983E+00 2 0.4245726E-03 0.3679705E+00 3 0.2465028E-03 0.2136402E+00 4 0.1425965E-03 0.1235862E+00 5 0.8164715E-04 0.7076232E-01 6 0.4811007E-04 0.4169625E-01 7 0.2820622E-04 0.2444589E-01 8 0.1663071E-04 0.1441358E-01 9 0.9663201E-05 0.8374946E-02 10 0.5750363E-05 0.4983751E-02 11 0.3356255E-05 0.2908814E-02 12 0.1980276E-05 0.1716275E-02 13 0.1166631E-05 0.1011101E-02 14 0.6994685E-06 0.6062185E-03 Result GMRES:14, 2.5E-2, 6.9946847633603E-7, 0 2 25 0.6994685E-06 0.1064981E-02 NI: 2, NLI: 27, ERLI 0.6994685E-06, ERNI: 0.2087491E+01 T= 0.41E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.41E+00, Grid level= 5, NPTS= 2331 Nonlinear system solver at T = 0.4081204E+00 Max. and WRMS norm residual= 0.3068134E+01 0.6224036E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4662 # it. GCRO # it.GMRES Error Estimate 0 0 0.4557213E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4557213E+02 1 0.2224493E+02 0.4881257E+00 2 0.1064608E+02 0.2336095E+00 3 0.6930016E+01 0.1520670E+00 4 0.4813338E+01 0.1056202E+00 5 0.3404029E+01 0.7469542E-01 6 0.2483564E+01 0.5449743E-01 7 0.1820303E+01 0.3994334E-01 8 0.1351470E+01 0.2965562E-01 9 0.1008565E+01 0.2213117E-01 10 0.7572659E+00 0.1661686E-01 11 0.5718085E+00 0.1254733E-01 12 0.4333920E+00 0.9510023E-02 13 0.3296550E+00 0.7233697E-02 14 0.2512190E+00 0.5512558E-02 15 0.1917635E+00 0.4207913E-02 16 0.1466693E+00 0.3218400E-02 17 0.1123390E+00 0.2465082E-02 18 0.8617756E-01 0.1891015E-02 19 0.6617321E-01 0.1452054E-02 20 0.5085469E-01 0.1115916E-02 Result GMRES:20, 5.E-2, 5.0854686303034E-2, 1 1 20 0.5085469E-01 0.9793056E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5085469E-01 1 0.4059382E-01 0.7982316E+00 2 0.3040083E-01 0.5977979E+00 3 0.2331293E-01 0.4584224E+00 4 0.1792044E-01 0.3523852E+00 5 0.1383012E-01 0.2719537E+00 6 0.1066911E-01 0.2097961E+00 7 0.8216068E-02 0.1615597E+00 8 0.6335894E-02 0.1245882E+00 9 0.4873682E-02 0.9583546E-01 10 0.3740216E-02 0.7354713E-01 11 0.2871000E-02 0.5645498E-01 12 0.2197389E-02 0.4320917E-01 13 0.1684338E-02 0.3312060E-01 14 0.1291942E-02 0.2540457E-01 15 0.9901600E-03 0.1947038E-01 16 0.7596462E-03 0.1493758E-01 17 0.5829154E-03 0.1146237E-01 18 0.4473419E-03 0.8796474E-02 19 0.3434838E-03 0.6754222E-02 20 0.2639230E-03 0.5189748E-02 Result GMRES:20, 5.E-2, 2.6392300653378E-4, 1 2 40 0.2639230E-03 0.8688189E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2639230E-03 1 0.2102673E-03 0.7966994E+00 2 0.1573272E-03 0.5961101E+00 3 0.1203105E-03 0.4558545E+00 4 0.9258590E-04 0.3508065E+00 5 0.7124204E-04 0.2699349E+00 6 0.5498769E-04 0.2083474E+00 7 0.4239074E-04 0.1606178E+00 8 0.3275805E-04 0.1241197E+00 9 0.2528645E-04 0.9580997E-01 10 0.1955408E-04 0.7409008E-01 11 0.1510379E-04 0.5722801E-01 12 0.1168345E-04 0.4426840E-01 13 0.9029164E-05 0.3421136E-01 14 0.6983866E-05 0.2646176E-01 15 0.5397845E-05 0.2045235E-01 16 0.4173709E-05 0.1581411E-01 17 0.3224884E-05 0.1221903E-01 18 0.2489401E-05 0.9432298E-02 19 0.1920875E-05 0.7278165E-02 20 0.1475058E-05 0.5588971E-02 Result GMRES:20, 5.E-2, 1.4750581025161E-6, 1 3 60 0.1475058E-05 0.4511540E-03 NI: 1, NLI: 63, ERLI 0.1475058E-05, ERNI: 0.9793262E+02 Max. and WRMS norm residual= 0.1655815E+00 0.2674312E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4662 # it. GCRO # it.GMRES Error Estimate 0 0 0.1668936E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1668936E+01 1 0.5947071E+00 0.3563390E+00 2 0.2910856E+00 0.1744138E+00 3 0.2185053E+00 0.1309249E+00 4 0.1411138E+00 0.8455314E-01 5 0.1028730E+00 0.6163986E-01 6 0.7409025E-01 0.4439370E-01 7 0.5334624E-01 0.3196421E-01 8 0.3968253E-01 0.2377714E-01 9 0.2877374E-01 0.1724077E-01 10 0.2157726E-01 0.1292875E-01 11 0.1586941E-01 0.9508696E-02 12 0.1189666E-01 0.7128289E-02 13 0.8871703E-02 0.5315783E-02 14 0.6642352E-02 0.3979991E-02 15 0.5003254E-02 0.2997870E-02 16 0.3748971E-02 0.2246324E-02 17 0.2839485E-02 0.1701374E-02 18 0.2135601E-02 0.1279618E-02 19 0.1619871E-02 0.9706009E-03 Result GMRES:19, 2.5E-2, 1.6198710512055E-3, 0 1 19 0.1619871E-02 0.2920750E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1619871E-02 1 0.1285067E-02 0.7933145E+00 2 0.9384311E-03 0.5793246E+00 3 0.7154988E-03 0.4417011E+00 4 0.5400757E-03 0.3334066E+00 5 0.4122448E-03 0.2544924E+00 6 0.3139495E-03 0.1938114E+00 7 0.2387233E-03 0.1473718E+00 8 0.1821617E-03 0.1124544E+00 9 0.1381317E-03 0.8527326E-01 10 0.1048216E-03 0.6470983E-01 11 0.7952904E-04 0.4909591E-01 12 0.6012670E-04 0.3711820E-01 13 0.4567141E-04 0.2819447E-01 14 0.3437473E-04 0.2122066E-01 15 0.2607854E-04 0.1609915E-01 16 0.1958900E-04 0.1209294E-01 17 0.1486118E-04 0.9174299E-02 18 0.1118109E-04 0.6902457E-02 19 0.8500963E-05 0.5247926E-02 20 0.6441144E-05 0.3976332E-02 Result GMRES:20, 2.5E-2, 6.4411444872672E-6, 1 2 39 0.6441144E-05 0.2546756E-02 NI: 2, NLI: 41, ERLI 0.6441144E-05, ERNI: 0.2920771E+01 T= 0.41E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.43E+00 TN= 0.38E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.43E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.4317956E+00 Max. and WRMS norm residual= 0.2977763E+01 0.2713317E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.7023729E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7023729E+02 1 0.2081442E+01 0.2963444E-01 2 0.1729445E+00 0.2462289E-02 3 0.1325591E-01 0.1887304E-03 Result GMRES:3, 5.E-2, 1.3255910654504E-2, 0 1 3 0.1325591E-01 0.7077131E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1325591E-01 1 0.1296771E-02 0.9782584E-01 2 0.1157720E-03 0.8733610E-02 3 0.4795587E-05 0.3617697E-03 Result GMRES:3, 5.E-2, 4.7955873512967E-6, 0 2 6 0.4795587E-05 0.1323735E-01 NI: 1, NLI: 8, ERLI 0.4795587E-05, ERNI: 0.7077157E+02 Max. and WRMS norm residual= 0.9512076E-03 0.1020740E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1620009E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1620009E-01 1 0.1239713E-02 0.7652509E-01 2 0.1034173E-03 0.6383747E-02 3 0.6563852E-05 0.4051739E-03 Result GMRES:3, 2.5E-2, 6.5638520361312E-6, 0 1 3 0.6563852E-05 0.1652618E-01 NI: 2, NLI: 4, ERLI 0.6563852E-05, ERNI: 0.1652618E-01 T= 0.43E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.36E+01 Time integration at T= 0.43E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.4317956E+00 Max. and WRMS norm residual= 0.2987077E+01 0.3116009E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.6186984E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6186984E+02 1 0.4399127E+01 0.7110293E-01 2 0.4990181E+00 0.8065611E-02 3 0.8818215E-01 0.1425285E-02 4 0.2207113E-01 0.3567348E-03 Result GMRES:4, 5.E-2, 2.2071127425257E-2, 0 1 4 0.2207113E-01 0.6353347E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2207113E-01 1 0.7143232E-02 0.3236460E+00 2 0.1243022E-02 0.5631890E-01 3 0.2192591E-03 0.9934204E-02 4 0.3704903E-04 0.1678620E-02 5 0.9049896E-05 0.4100332E-03 Result GMRES:5, 5.E-2, 9.0498959563144E-6, 0 2 9 0.9049896E-05 0.2105341E-01 NI: 1, NLI: 11, ERLI 0.9049896E-05, ERNI: 0.6353356E+02 Max. and WRMS norm residual= 0.5155059E-02 0.6529750E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1036658E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1036658E+00 1 0.1165760E-01 0.1124536E+00 2 0.1563017E-02 0.1507746E-01 3 0.3385240E-03 0.3265531E-02 4 0.7449540E-04 0.7186109E-03 Result GMRES:4, 2.5E-2, 7.449540492899E-5, 0 1 4 0.7449540E-04 0.1085450E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7449540E-04 1 0.2214007E-04 0.2972004E+00 2 0.4633081E-05 0.6219285E-01 3 0.8577589E-06 0.1151425E-01 4 0.1375673E-06 0.1846655E-02 5 0.3597795E-07 0.4829552E-03 Result GMRES:5, 2.5E-2, 3.5977946011053E-8, 0 2 9 0.3597795E-07 0.7236528E-04 NI: 2, NLI: 11, ERLI 0.3597795E-07, ERNI: 0.1085449E+00 T= 0.43E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.34E+01 Time integration at T= 0.43E+00, Grid level= 3, NPTS= 500 Nonlinear system solver at T = 0.4317956E+00 Max. and WRMS norm residual= 0.2998340E+01 0.3393819E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.5856932E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5856932E+02 1 0.7741803E+01 0.1321819E+00 2 0.1432593E+01 0.2445979E-01 3 0.4823595E+00 0.8235703E-02 4 0.2031516E+00 0.3468567E-02 5 0.6942300E-01 0.1185313E-02 6 0.2792074E-01 0.4767127E-03 Result GMRES:6, 5.E-2, 2.79207378205E-2, 0 1 6 0.2792074E-01 0.6203613E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2792074E-01 1 0.1399544E-01 0.5012559E+00 2 0.5040125E-02 0.1805155E+00 3 0.2036197E-02 0.7292775E-01 4 0.7522065E-03 0.2694078E-01 5 0.2594899E-03 0.9293804E-02 6 0.1043753E-03 0.3738270E-02 7 0.4243165E-04 0.1519718E-02 8 0.1445463E-04 0.5177022E-03 Result GMRES:8, 5.E-2, 1.4454626787355E-5, 0 2 14 0.1445463E-04 0.2479096E-01 NI: 1, NLI: 16, ERLI 0.1445463E-04, ERNI: 0.6203622E+02 Max. and WRMS norm residual= 0.2616197E-01 0.3209320E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.4859599E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4859599E+00 1 0.8611316E-01 0.1772022E+00 2 0.2494406E-01 0.5132946E-01 3 0.1042645E-01 0.2145537E-01 4 0.3715455E-02 0.7645599E-02 5 0.1399120E-02 0.2879084E-02 6 0.5345498E-03 0.1099987E-02 7 0.2005563E-03 0.4127012E-03 Result GMRES:7, 2.5E-2, 2.0055625212736E-4, 0 1 7 0.2005563E-03 0.5056183E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2005563E-03 1 0.1028816E-03 0.5129811E+00 2 0.3644583E-04 0.1817237E+00 3 0.1424107E-04 0.7100787E-01 4 0.5142074E-05 0.2563906E-01 5 0.2064104E-05 0.1029189E-01 6 0.7586186E-06 0.3782573E-02 7 0.2460693E-06 0.1226934E-02 8 0.1044541E-06 0.5208218E-03 Result GMRES:8, 2.5E-2, 1.0445406586962E-7, 0 2 15 0.1044541E-06 0.1786721E-03 NI: 2, NLI: 17, ERLI 0.1044541E-06, ERNI: 0.5056198E+00 T= 0.43E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.43E+00, Grid level= 4, NPTS= 1077 Nonlinear system solver at T = 0.4317956E+00 Max. and WRMS norm residual= 0.3017574E+01 0.4504568E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.5942938E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5942938E+02 1 0.1301962E+02 0.2190772E+00 2 0.4781480E+01 0.8045650E-01 3 0.2554030E+01 0.4297588E-01 4 0.1545018E+01 0.2599755E-01 5 0.7876019E+00 0.1325274E-01 6 0.4703198E+00 0.7913927E-02 7 0.2645632E+00 0.4451723E-02 8 0.1539379E+00 0.2590266E-02 9 0.9053025E-01 0.1523325E-02 10 0.5245862E-01 0.8827051E-03 11 0.3172449E-01 0.5338183E-03 Result GMRES:11, 5.E-2, 3.1724492693289E-2, 0 1 11 0.3172449E-01 0.7408640E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3172449E-01 1 0.2188845E-01 0.6899543E+00 2 0.1213349E-01 0.3824645E+00 3 0.7137275E-02 0.2249768E+00 4 0.4258852E-02 0.1342449E+00 5 0.2435093E-02 0.7675750E-01 6 0.1521497E-02 0.4795970E-01 7 0.8564240E-03 0.2699567E-01 8 0.5329548E-03 0.1679948E-01 9 0.3127263E-03 0.9857567E-02 10 0.1870965E-03 0.5897542E-02 11 0.1132597E-03 0.3570102E-02 12 0.6729932E-04 0.2121368E-02 13 0.4055714E-04 0.1278417E-02 14 0.2435074E-04 0.7675692E-03 Result GMRES:14, 5.E-2, 2.4350742573492E-5, 0 2 25 0.2435074E-04 0.3055659E-01 NI: 1, NLI: 27, ERLI 0.2435074E-04, ERNI: 0.7408797E+02 Max. and WRMS norm residual= 0.9202580E-01 0.1459716E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.1732975E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1732975E+01 1 0.4461040E+00 0.2574209E+00 2 0.1724845E+00 0.9953081E-01 3 0.1120156E+00 0.6463772E-01 4 0.5146258E-01 0.2969608E-01 5 0.3138626E-01 0.1811120E-01 6 0.1688474E-01 0.9743207E-02 7 0.9833315E-02 0.5674238E-02 8 0.5641574E-02 0.3255427E-02 9 0.3238297E-02 0.1868634E-02 10 0.1916742E-02 0.1106041E-02 11 0.1100827E-02 0.6352239E-03 Result GMRES:11, 2.5E-2, 1.1008273255722E-3, 0 1 11 0.1100827E-02 0.1862850E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1100827E-02 1 0.7514642E-03 0.6826358E+00 2 0.4096070E-03 0.3720901E+00 3 0.2363045E-03 0.2146608E+00 4 0.1372995E-03 0.1247239E+00 5 0.7854993E-04 0.7135536E-01 6 0.4647260E-04 0.4221606E-01 7 0.2726029E-04 0.2476346E-01 8 0.1609298E-04 0.1461898E-01 9 0.9364979E-05 0.8507219E-02 10 0.5593722E-05 0.5081380E-02 11 0.3252103E-05 0.2954235E-02 12 0.1937991E-05 0.1760486E-02 13 0.1133389E-05 0.1029579E-02 14 0.6778475E-06 0.6157619E-03 Result GMRES:14, 2.5E-2, 6.7784748106084E-7, 0 2 25 0.6778475E-06 0.1021167E-02 NI: 2, NLI: 27, ERLI 0.6778475E-06, ERNI: 0.1862923E+01 T= 0.43E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.43E+00, Grid level= 5, NPTS= 2389 Nonlinear system solver at T = 0.4317956E+00 Max. and WRMS norm residual= 0.3073715E+01 0.6151262E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4778 # it. GCRO # it.GMRES Error Estimate 0 0 0.4503594E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4503594E+02 1 0.2197223E+02 0.4878820E+00 2 0.1051440E+02 0.2334669E+00 3 0.6842737E+01 0.1519395E+00 4 0.4753206E+01 0.1055425E+00 5 0.3363334E+01 0.7468109E-01 6 0.2455219E+01 0.5451689E-01 7 0.1800177E+01 0.3997200E-01 8 0.1337333E+01 0.2969479E-01 9 0.9997268E+00 0.2219842E-01 10 0.7523980E+00 0.1670661E-01 11 0.5693144E+00 0.1264133E-01 12 0.4320782E+00 0.9594074E-02 13 0.3287161E+00 0.7298972E-02 14 0.2506268E+00 0.5565039E-02 15 0.1914280E+00 0.4250561E-02 16 0.1464908E+00 0.3252754E-02 17 0.1122313E+00 0.2492039E-02 18 0.8607864E-01 0.1911332E-02 19 0.6609048E-01 0.1467505E-02 20 0.5078373E-01 0.1127627E-02 Result GMRES:20, 5.E-2, 5.0783730387376E-2, 1 1 20 0.5078373E-01 0.9675126E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5078373E-01 1 0.4051702E-01 0.7978347E+00 2 0.3034070E-01 0.5974491E+00 3 0.2326918E-01 0.4582015E+00 4 0.1787468E-01 0.3519766E+00 5 0.1379468E-01 0.2716358E+00 6 0.1064113E-01 0.2095381E+00 7 0.8205792E-02 0.1615831E+00 8 0.6330817E-02 0.1246623E+00 9 0.4884854E-02 0.9618935E-01 10 0.3760140E-02 0.7404221E-01 11 0.2895237E-02 0.5701111E-01 12 0.2223644E-02 0.4378654E-01 13 0.1704347E-02 0.3356089E-01 14 0.1307277E-02 0.2574203E-01 15 0.1002435E-02 0.1973930E-01 16 0.7687655E-03 0.1513803E-01 17 0.5900519E-03 0.1161892E-01 18 0.4526950E-03 0.8914173E-02 19 0.3474563E-03 0.6841881E-02 20 0.2671006E-03 0.5259570E-02 Result GMRES:20, 5.E-2, 2.6710056731684E-4, 1 2 40 0.2671006E-03 0.8681212E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2671006E-03 1 0.2128900E-03 0.7970406E+00 2 0.1594722E-03 0.5970493E+00 3 0.1216628E-03 0.4554944E+00 4 0.9367524E-04 0.3507115E+00 5 0.7205125E-04 0.2697533E+00 6 0.5546339E-04 0.2076498E+00 7 0.4271770E-04 0.1599311E+00 8 0.3300924E-04 0.1235835E+00 9 0.2534561E-04 0.9489162E-01 10 0.1965008E-04 0.7356808E-01 11 0.1508388E-04 0.5647268E-01 12 0.1169383E-04 0.4378062E-01 13 0.9006155E-05 0.3371822E-01 14 0.6976304E-05 0.2611864E-01 15 0.5388889E-05 0.2017551E-01 16 0.4169656E-05 0.1561081E-01 17 0.3223498E-05 0.1206848E-01 18 0.2488510E-05 0.9316751E-02 19 0.1920999E-05 0.7192043E-02 20 0.1475360E-05 0.5523612E-02 Result GMRES:20, 5.E-2, 1.4753599268429E-6, 1 3 60 0.1475360E-05 0.4596676E-03 NI: 1, NLI: 63, ERLI 0.1475360E-05, ERNI: 0.9675331E+02 Max. and WRMS norm residual= 0.1681940E+00 0.2647159E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4778 # it. GCRO # it.GMRES Error Estimate 0 0 0.1652068E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1652068E+01 1 0.5884737E+00 0.3562044E+00 2 0.2875722E+00 0.1740681E+00 3 0.2158213E+00 0.1306371E+00 4 0.1393951E+00 0.8437615E-01 5 0.1015821E+00 0.6148788E-01 6 0.7317763E-01 0.4429457E-01 7 0.5267089E-01 0.3188180E-01 8 0.3918197E-01 0.2371693E-01 9 0.2840478E-01 0.1719347E-01 10 0.2129411E-01 0.1288937E-01 11 0.1566246E-01 0.9480519E-02 12 0.1173703E-01 0.7104448E-02 13 0.8753011E-02 0.5298216E-02 14 0.6553742E-02 0.3966994E-02 15 0.4937193E-02 0.2988493E-02 16 0.3699694E-02 0.2239433E-02 17 0.2801843E-02 0.1695961E-02 18 0.2107988E-02 0.1275970E-02 19 0.1598479E-02 0.9675627E-03 Result GMRES:19, 2.5E-2, 1.5984790195026E-3, 0 1 19 0.1598479E-02 0.2889223E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1598479E-02 1 0.1267840E-02 0.7931540E+00 2 0.9263998E-03 0.5795508E+00 3 0.7063776E-03 0.4419061E+00 4 0.5336076E-03 0.3338221E+00 5 0.4073251E-03 0.2548204E+00 6 0.3107011E-03 0.1943730E+00 7 0.2366413E-03 0.1480415E+00 8 0.1811427E-03 0.1133219E+00 9 0.1378379E-03 0.8623065E-01 10 0.1052078E-03 0.6581741E-01 11 0.8003263E-04 0.5006799E-01 12 0.6067212E-04 0.3795616E-01 13 0.4614157E-04 0.2886592E-01 14 0.3489128E-04 0.2182780E-01 15 0.2652466E-04 0.1659369E-01 16 0.1997406E-04 0.1249567E-01 17 0.1514551E-04 0.9474950E-02 18 0.1138710E-04 0.7123708E-02 19 0.8619644E-05 0.5392404E-02 20 0.6515293E-05 0.4075933E-02 Result GMRES:20, 2.5E-2, 6.5152933561736E-6, 1 2 39 0.6515293E-05 0.2516766E-02 NI: 2, NLI: 41, ERLI 0.6515293E-05, ERNI: 0.2889242E+01 T= 0.43E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.43E+00 TN= 0.41E+00, DT= 0.24E-01, DTNEW= 0.25E-01, TIMMON= 0.48E+00 Time integration at T= 0.46E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.4565002E+00 Max. and WRMS norm residual= 0.2867674E+01 0.2682942E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6160025E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6160025E+02 1 0.2337330E+01 0.3794352E-01 2 0.2099272E+00 0.3407895E-02 3 0.1476801E-01 0.2397395E-03 Result GMRES:3, 5.E-2, 1.476801138679E-2, 0 1 3 0.1476801E-01 0.6222745E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1476801E-01 1 0.1465275E-02 0.9921949E-01 2 0.1401618E-03 0.9490903E-02 3 0.6368725E-05 0.4312514E-03 Result GMRES:3, 5.E-2, 6.3687254869307E-6, 0 2 6 0.6368725E-05 0.1475783E-01 NI: 1, NLI: 8, ERLI 0.6368725E-05, ERNI: 0.6222773E+02 Max. and WRMS norm residual= 0.9637366E-03 0.1039044E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1706711E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1706711E-01 1 0.1406876E-02 0.8243198E-01 2 0.1164886E-03 0.6825325E-02 3 0.7598856E-05 0.4452339E-03 Result GMRES:3, 2.5E-2, 7.598856162863E-6, 0 1 3 0.7598856E-05 0.1738836E-01 NI: 2, NLI: 4, ERLI 0.7598856E-05, ERNI: 0.1738836E-01 T= 0.46E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.42E+01 Time integration at T= 0.46E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.4565002E+00 Max. and WRMS norm residual= 0.2897347E+01 0.3087017E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.5850071E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5850071E+02 1 0.4726617E+01 0.8079590E-01 2 0.6302789E+00 0.1077387E-01 3 0.1369153E+00 0.2340405E-02 4 0.3534767E-01 0.6042264E-03 Result GMRES:4, 5.E-2, 3.5347673937286E-2, 0 1 4 0.3534767E-01 0.6020397E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3534767E-01 1 0.1122746E-01 0.3176295E+00 2 0.2230341E-02 0.6309725E-01 3 0.4276271E-03 0.1209774E-01 4 0.6091993E-04 0.1723450E-02 5 0.1619594E-04 0.4581896E-03 Result GMRES:5, 5.E-2, 1.6195936125047E-5, 0 2 9 0.1619594E-04 0.3393010E-01 NI: 1, NLI: 11, ERLI 0.1619594E-04, ERNI: 0.6020385E+02 Max. and WRMS norm residual= 0.5331490E-02 0.6755912E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1110416E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1110416E+00 1 0.1330858E-01 0.1198522E+00 2 0.2225209E-02 0.2003942E-01 3 0.5510599E-03 0.4962643E-02 4 0.1140744E-03 0.1027312E-02 5 0.2269805E-04 0.2044103E-03 Result GMRES:5, 2.5E-2, 2.2698048749967E-5, 0 1 5 0.2269805E-04 0.1154913E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2269805E-04 1 0.6578781E-05 0.2898391E+00 2 0.1367501E-05 0.6024753E-01 3 0.2993953E-06 0.1319035E-01 4 0.6111210E-07 0.2692395E-02 5 0.1056430E-07 0.4654279E-03 Result GMRES:5, 2.5E-2, 1.0564304300636E-8, 0 2 10 0.1056430E-07 0.2190373E-04 NI: 2, NLI: 12, ERLI 0.1056430E-07, ERNI: 0.1154912E+00 T= 0.46E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.40E+01 Time integration at T= 0.46E+00, Grid level= 3, NPTS= 500 Nonlinear system solver at T = 0.4565002E+00 Max. and WRMS norm residual= 0.2926958E+01 0.3454498E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.5991069E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5991069E+02 1 0.8198208E+01 0.1368405E+00 2 0.1830724E+01 0.3055755E-01 3 0.7062353E+00 0.1178813E-01 4 0.2965284E+00 0.4949507E-02 5 0.1041630E+00 0.1738638E-02 6 0.4310445E-01 0.7194784E-03 Result GMRES:6, 5.E-2, 4.3104446839154E-2, 0 1 6 0.4310445E-01 0.6315584E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4310445E-01 1 0.2199253E-01 0.5102148E+00 2 0.8283047E-02 0.1921622E+00 3 0.3370112E-02 0.7818479E-01 4 0.1320767E-02 0.3064108E-01 5 0.4414455E-03 0.1024130E-01 6 0.1797007E-03 0.4168959E-02 7 0.7616887E-04 0.1767077E-02 8 0.2608329E-04 0.6051184E-03 Result GMRES:8, 5.E-2, 2.6083294312397E-5, 0 2 14 0.2608329E-04 0.3891251E-01 NI: 1, NLI: 16, ERLI 0.2608329E-04, ERNI: 0.6315579E+02 Max. and WRMS norm residual= 0.4928655E-01 0.6056382E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.9551247E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9551247E+00 1 0.1736950E+00 0.1818559E+00 2 0.5036673E-01 0.5273314E-01 3 0.2166937E-01 0.2268747E-01 4 0.7865996E-02 0.8235569E-02 5 0.3089464E-02 0.3234619E-02 6 0.1178165E-02 0.1233520E-02 7 0.4550654E-03 0.4764460E-03 Result GMRES:7, 2.5E-2, 4.5506536487273E-4, 0 1 7 0.4550654E-03 0.1005946E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4550654E-03 1 0.2380454E-03 0.5231016E+00 2 0.8594441E-04 0.1888617E+00 3 0.3448398E-04 0.7577808E-01 4 0.1296382E-04 0.2848781E-01 5 0.5308305E-05 0.1166493E-01 6 0.2023926E-05 0.4447550E-02 7 0.6658989E-06 0.1463304E-02 8 0.2937511E-06 0.6455140E-03 Result GMRES:8, 2.5E-2, 2.9375108166643E-7, 0 2 15 0.2937511E-06 0.4010739E-03 NI: 2, NLI: 17, ERLI 0.2937511E-06, ERNI: 0.1005948E+01 T= 0.46E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.46E+00, Grid level= 4, NPTS= 1077 Nonlinear system solver at T = 0.4565002E+00 Max. and WRMS norm residual= 0.2937340E+01 0.4537749E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.6159386E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6159386E+02 1 0.1395072E+02 0.2264953E+00 2 0.5326956E+01 0.8648518E-01 3 0.2924613E+01 0.4748222E-01 4 0.1783270E+01 0.2895207E-01 5 0.9258793E+00 0.1503201E-01 6 0.5610323E+00 0.9108574E-02 7 0.3200572E+00 0.5196252E-02 8 0.1890591E+00 0.3069447E-02 9 0.1129346E+00 0.1833537E-02 10 0.6620059E-01 0.1074792E-02 11 0.4079970E-01 0.6623988E-03 Result GMRES:11, 5.E-2, 4.0799700279626E-2, 0 1 11 0.4079970E-01 0.7722674E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4079970E-01 1 0.2845839E-01 0.6975146E+00 2 0.1605077E-01 0.3934040E+00 3 0.9568503E-02 0.2345239E+00 4 0.5813289E-02 0.1424836E+00 5 0.3373662E-02 0.8268839E-01 6 0.2143136E-02 0.5252822E-01 7 0.1226038E-02 0.3005017E-01 8 0.7755798E-03 0.1900945E-01 9 0.4615899E-03 0.1131356E-01 10 0.2810866E-03 0.6889428E-02 11 0.1727006E-03 0.4232890E-02 12 0.1043983E-03 0.2558800E-02 13 0.6351241E-04 0.1556688E-02 14 0.3893669E-04 0.9543377E-03 Result GMRES:14, 5.E-2, 3.8936691197985E-5, 0 2 25 0.3893669E-04 0.3924967E-01 NI: 1, NLI: 27, ERLI 0.3893669E-04, ERNI: 0.7722892E+02 Max. and WRMS norm residual= 0.1207480E+00 0.1720942E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2154 # it. GCRO # it.GMRES Error Estimate 0 0 0.2119379E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2119379E+01 1 0.5464946E+00 0.2578561E+00 2 0.2104579E+00 0.9930171E-01 3 0.1382993E+00 0.6525463E-01 4 0.6424930E-01 0.3031516E-01 5 0.3990553E-01 0.1882888E-01 6 0.2158045E-01 0.1018244E-01 7 0.1284578E-01 0.6061106E-02 8 0.7460022E-02 0.3519910E-02 9 0.4334778E-02 0.2045306E-02 10 0.2593047E-02 0.1223494E-02 11 0.1515140E-02 0.7148981E-03 Result GMRES:11, 2.5E-2, 1.5151397595557E-3, 0 1 11 0.1515140E-02 0.2259769E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1515140E-02 1 0.1045916E-02 0.6903099E+00 2 0.5782527E-03 0.3816498E+00 3 0.3400988E-03 0.2244670E+00 4 0.2003827E-03 0.1322536E+00 5 0.1173536E-03 0.7745396E-01 6 0.6988861E-04 0.4612684E-01 7 0.4179495E-04 0.2758488E-01 8 0.2505903E-04 0.1653909E-01 9 0.1472641E-04 0.9719503E-02 10 0.9022434E-05 0.5954852E-02 11 0.5232010E-05 0.3453154E-02 12 0.3203723E-05 0.2114474E-02 13 0.1865480E-05 0.1231226E-02 14 0.1147113E-05 0.7571002E-03 Result GMRES:14, 2.5E-2, 1.1471126019608E-6, 0 2 25 0.1147113E-05 0.1403059E-02 NI: 2, NLI: 27, ERLI 0.1147113E-05, ERNI: 0.2259846E+01 T= 0.46E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.46E+00, Grid level= 5, NPTS= 2335 Nonlinear system solver at T = 0.4565002E+00 Max. and WRMS norm residual= 0.3096477E+01 0.6265762E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4670 # it. GCRO # it.GMRES Error Estimate 0 0 0.4678142E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4678142E+02 1 0.2332088E+02 0.4985073E+00 2 0.1144556E+02 0.2446603E+00 3 0.7558158E+01 0.1615632E+00 4 0.5300732E+01 0.1133085E+00 5 0.3787036E+01 0.8095171E-01 6 0.2787792E+01 0.5959187E-01 7 0.2061626E+01 0.4406934E-01 8 0.1544024E+01 0.3300507E-01 9 0.1162222E+01 0.2484366E-01 10 0.8801269E+00 0.1881360E-01 11 0.6702389E+00 0.1432703E-01 12 0.5122698E+00 0.1095028E-01 13 0.3928769E+00 0.8398140E-02 14 0.3018451E+00 0.6452243E-02 15 0.2322935E+00 0.4965507E-02 16 0.1791125E+00 0.3828709E-02 17 0.1382965E+00 0.2956227E-02 18 0.1069449E+00 0.2286054E-02 19 0.8277800E-01 0.1769463E-02 20 0.6412411E-01 0.1370717E-02 Result GMRES:20, 5.E-2, 6.4124108215941E-2, 1 1 20 0.6412411E-01 0.1019636E+03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6412411E-01 1 0.5155818E-01 0.8040373E+00 2 0.3894615E-01 0.6073559E+00 3 0.3011303E-01 0.4696054E+00 4 0.2333512E-01 0.3639056E+00 5 0.1815692E-01 0.2831529E+00 6 0.1412397E-01 0.2202599E+00 7 0.1097354E-01 0.1711297E+00 8 0.8544651E-02 0.1332518E+00 9 0.6645344E-02 0.1036325E+00 10 0.5164618E-02 0.8054097E-01 11 0.4019977E-02 0.6269057E-01 12 0.3118328E-02 0.4862957E-01 13 0.2419050E-02 0.3772450E-01 14 0.1873853E-02 0.2922228E-01 15 0.1447775E-02 0.2257771E-01 16 0.1119308E-02 0.1745534E-01 17 0.8654254E-03 0.1349610E-01 18 0.6690775E-03 0.1043410E-01 19 0.5175204E-03 0.8070606E-02 20 0.4004184E-03 0.6244428E-02 Result GMRES:20, 5.E-2, 4.0041836545616E-4, 1 2 40 0.4004184E-03 0.1114744E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4004184E-03 1 0.3208812E-03 0.8013648E+00 2 0.2424936E-03 0.6056007E+00 3 0.1862554E-03 0.4651520E+00 4 0.1443875E-03 0.3605916E+00 5 0.1118164E-03 0.2792488E+00 6 0.8669067E-04 0.2165002E+00 7 0.6725826E-04 0.1679700E+00 8 0.5219363E-04 0.1303477E+00 9 0.4052904E-04 0.1012167E+00 10 0.3151137E-04 0.7869613E-01 11 0.2448205E-04 0.6114118E-01 12 0.1906304E-04 0.4760780E-01 13 0.1482457E-04 0.3702270E-01 14 0.1155008E-04 0.2884502E-01 15 0.8986431E-05 0.2244261E-01 16 0.7001987E-05 0.1748668E-01 17 0.5447533E-05 0.1360460E-01 18 0.4239365E-05 0.1058734E-01 19 0.3293928E-05 0.8226216E-02 20 0.2551138E-05 0.6371180E-02 Result GMRES:20, 5.E-2, 2.5511375894405E-6, 1 3 60 0.2551138E-05 0.7043366E-03 NI: 1, NLI: 63, ERLI 0.2551138E-05, ERNI: 0.1019664E+03 Max. and WRMS norm residual= 0.1843813E+00 0.2904952E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4670 # it. GCRO # it.GMRES Error Estimate 0 0 0.1838358E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1838358E+01 1 0.6670138E+00 0.3628312E+00 2 0.3315814E+00 0.1803682E+00 3 0.2508929E+00 0.1364766E+00 4 0.1632917E+00 0.8882472E-01 5 0.1200999E+00 0.6532997E-01 6 0.8713414E-01 0.4739780E-01 7 0.6327519E-01 0.3441940E-01 8 0.4742543E-01 0.2579771E-01 9 0.3466591E-01 0.1885699E-01 10 0.2619963E-01 0.1425164E-01 11 0.1941776E-01 0.1056255E-01 12 0.1467360E-01 0.7981904E-02 13 0.1102513E-01 0.5997268E-02 14 0.8321325E-02 0.4526498E-02 15 0.6315427E-02 0.3435362E-02 16 0.4770007E-02 0.2594710E-02 17 0.3640785E-02 0.1980454E-02 18 0.2759814E-02 0.1501238E-02 19 0.2109963E-02 0.1147743E-02 20 0.1607233E-02 0.8742761E-03 Result GMRES:20, 2.5E-2, 1.6072328031474E-3, 0 1 20 0.1607233E-02 0.3251316E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1607233E-02 1 0.1282323E-02 0.7978452E+00 2 0.9484967E-03 0.5901427E+00 3 0.7278074E-03 0.4528326E+00 4 0.5556975E-03 0.3457480E+00 5 0.4273360E-03 0.2658831E+00 6 0.3289678E-03 0.2046796E+00 7 0.2525804E-03 0.1571523E+00 8 0.1950170E-03 0.1213371E+00 9 0.1497241E-03 0.9315647E-01 10 0.1153303E-03 0.7175709E-01 11 0.8863932E-04 0.5515027E-01 12 0.6790671E-04 0.4225070E-01 13 0.5208491E-04 0.3240657E-01 14 0.3978833E-04 0.2475580E-01 15 0.3048702E-04 0.1896864E-01 16 0.2323592E-04 0.1445709E-01 17 0.1773897E-04 0.1103697E-01 18 0.1348132E-04 0.8387904E-02 19 0.1027510E-04 0.6393038E-02 20 0.7814343E-05 0.4861986E-02 Result GMRES:20, 2.5E-2, 7.8143432846976E-6, 1 2 40 0.7814343E-05 0.2574526E-02 NI: 2, NLI: 42, ERLI 0.7814343E-05, ERNI: 0.3251319E+01 T= 0.46E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.42E+00 TN= 0.43E+00, DT= 0.25E-01, DTNEW= 0.24E-01, TIMMON= 0.51E+00 Time integration at T= 0.48E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.4801306E+00 Max. and WRMS norm residual= 0.2142105E+01 0.2054128E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.4144354E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4144354E+02 1 0.1728988E+01 0.4171912E-01 2 0.1535615E+00 0.3705317E-02 3 0.9870978E-02 0.2381789E-03 Result GMRES:3, 5.E-2, 9.8709780965163E-3, 0 1 3 0.9870978E-02 0.4192329E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9870978E-02 1 0.9674476E-03 0.9800930E-01 2 0.8727683E-04 0.8841761E-02 3 0.3991483E-05 0.4043655E-03 Result GMRES:3, 5.E-2, 3.9914832234033E-6, 0 2 6 0.3991483E-05 0.9891128E-02 NI: 1, NLI: 8, ERLI 0.3991483E-05, ERNI: 0.4192347E+02 Max. and WRMS norm residual= 0.5289582E-03 0.5891246E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.9384791E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9384791E-02 1 0.7635423E-03 0.8135954E-01 2 0.5873953E-04 0.6259012E-02 3 0.3813761E-05 0.4063768E-03 Result GMRES:3, 2.5E-2, 3.8137614155355E-6, 0 1 3 0.3813761E-05 0.9510390E-02 NI: 2, NLI: 4, ERLI 0.3813761E-05, ERNI: 0.9510390E-02 T= 0.48E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.46E+01 Time integration at T= 0.48E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.4801306E+00 Max. and WRMS norm residual= 0.2128995E+01 0.2438001E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.4295124E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4295124E+02 1 0.3457965E+01 0.8050907E-01 2 0.4859047E+00 0.1131294E-01 3 0.1060420E+00 0.2468892E-02 4 0.2619046E-01 0.6097719E-03 Result GMRES:4, 5.E-2, 2.6190458886072E-2, 0 1 4 0.2619046E-01 0.4408798E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2619046E-01 1 0.7821096E-02 0.2986239E+00 2 0.1570449E-02 0.5996265E-01 3 0.2989757E-03 0.1141544E-01 4 0.3985634E-04 0.1521789E-02 5 0.1004226E-04 0.3834322E-03 Result GMRES:5, 5.E-2, 1.0042264280332E-5, 0 2 9 0.1004226E-04 0.2537212E-01 NI: 1, NLI: 11, ERLI 0.1004226E-04, ERNI: 0.4408778E+02 Max. and WRMS norm residual= 0.3630671E-02 0.4675737E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.7475882E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7475882E-01 1 0.8537802E-02 0.1142046E+00 2 0.1525965E-02 0.2041184E-01 3 0.3663942E-03 0.4901017E-02 4 0.7306332E-04 0.9773204E-03 Result GMRES:4, 2.5E-2, 7.3063322559133E-5, 0 1 4 0.7306332E-04 0.7774198E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7306332E-04 1 0.1989253E-04 0.2722642E+00 2 0.4379997E-05 0.5994796E-01 3 0.8880564E-06 0.1215461E-01 4 0.1239672E-06 0.1696708E-02 5 0.2954203E-07 0.4043346E-03 Result GMRES:5, 2.5E-2, 2.9542031590709E-8, 0 2 9 0.2954203E-07 0.7088356E-04 NI: 2, NLI: 11, ERLI 0.2954203E-07, ERNI: 0.7774239E-01 T= 0.48E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.45E+01 Time integration at T= 0.48E+00, Grid level= 3, NPTS= 468 Nonlinear system solver at T = 0.4801306E+00 Max. and WRMS norm residual= 0.2115857E+01 0.3071248E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 936 # it. GCRO # it.GMRES Error Estimate 0 0 0.5325236E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5325236E+02 1 0.6563202E+01 0.1232471E+00 2 0.1763791E+01 0.3312137E-01 3 0.6299639E+00 0.1182978E-01 4 0.2715750E+00 0.5099775E-02 5 0.9085722E-01 0.1706163E-02 6 0.3659053E-01 0.6871156E-03 Result GMRES:6, 5.E-2, 3.6590527720587E-2, 0 1 6 0.3659053E-01 0.5511764E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3659053E-01 1 0.1836367E-01 0.5018695E+00 2 0.6598708E-02 0.1803392E+00 3 0.2610223E-02 0.7133602E-01 4 0.1010707E-02 0.2762210E-01 5 0.2942831E-03 0.8042604E-02 6 0.1256447E-03 0.3433805E-02 7 0.4915943E-04 0.1343501E-02 8 0.1747500E-04 0.4775827E-03 Result GMRES:8, 5.E-2, 1.747500413792E-5, 0 2 14 0.1747500E-04 0.3317526E-01 NI: 1, NLI: 16, ERLI 0.1747500E-04, ERNI: 0.5511814E+02 Max. and WRMS norm residual= 0.4159899E-01 0.5773583E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 936 # it. GCRO # it.GMRES Error Estimate 0 0 0.8847106E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8847106E+00 1 0.1534943E+00 0.1734966E+00 2 0.4292882E-01 0.4852300E-01 3 0.1814654E-01 0.2051127E-01 4 0.6444366E-02 0.7284151E-02 5 0.2492865E-02 0.2817718E-02 6 0.9184302E-03 0.1038114E-02 7 0.3455712E-03 0.3906037E-03 Result GMRES:7, 2.5E-2, 3.4557122893673E-4, 0 1 7 0.3455712E-03 0.9361613E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3455712E-03 1 0.1761919E-03 0.5098571E+00 2 0.6220141E-04 0.1799959E+00 3 0.2412273E-04 0.6980537E-01 4 0.8910409E-05 0.2578458E-01 5 0.3681742E-05 0.1065408E-01 6 0.1392532E-05 0.4029654E-02 7 0.4338382E-06 0.1255424E-02 8 0.1846647E-06 0.5343753E-03 Result GMRES:8, 2.5E-2, 1.8466472284094E-7, 0 2 15 0.1846647E-06 0.3059731E-03 NI: 2, NLI: 17, ERLI 0.1846647E-06, ERNI: 0.9361614E+00 T= 0.48E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.48E+00, Grid level= 4, NPTS= 983 Nonlinear system solver at T = 0.4801306E+00 Max. and WRMS norm residual= 0.2987946E+01 0.4681204E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1966 # it. GCRO # it.GMRES Error Estimate 0 0 0.6203881E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6203881E+02 1 0.1366054E+02 0.2201934E+00 2 0.5041959E+01 0.8127105E-01 3 0.2702497E+01 0.4356140E-01 4 0.1637748E+01 0.2639877E-01 5 0.8378466E+00 0.1350520E-01 6 0.5015830E+00 0.8084987E-02 7 0.2821695E+00 0.4548274E-02 8 0.1638602E+00 0.2641254E-02 9 0.9672315E-01 0.1559075E-02 10 0.5659023E-01 0.9121747E-03 11 0.3391437E-01 0.5466637E-03 Result GMRES:11, 5.E-2, 3.3914366556729E-2, 0 1 11 0.3391437E-01 0.7738565E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3391437E-01 1 0.2334526E-01 0.6883590E+00 2 0.1303647E-01 0.3843936E+00 3 0.7653168E-02 0.2256615E+00 4 0.4592707E-02 0.1354207E+00 5 0.2646322E-02 0.7802952E-01 6 0.1645025E-02 0.4850527E-01 7 0.9386171E-03 0.2767609E-01 8 0.5850054E-03 0.1724949E-01 9 0.3407739E-03 0.1004807E-01 10 0.2067547E-03 0.6096375E-02 11 0.1246450E-03 0.3675285E-02 12 0.7495953E-04 0.2210259E-02 13 0.4485403E-04 0.1322567E-02 14 0.2708922E-04 0.7987537E-03 Result GMRES:14, 5.E-2, 2.7089224595238E-5, 0 2 25 0.2708922E-04 0.3273751E-01 NI: 1, NLI: 27, ERLI 0.2708922E-04, ERNI: 0.7738736E+02 Max. and WRMS norm residual= 0.9130711E-01 0.1523377E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1966 # it. GCRO # it.GMRES Error Estimate 0 0 0.1815717E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1815717E+01 1 0.4688829E+00 0.2582357E+00 2 0.1811531E+00 0.9976944E-01 3 0.1179090E+00 0.6493799E-01 4 0.5419596E-01 0.2984824E-01 5 0.3318202E-01 0.1827489E-01 6 0.1783328E-01 0.9821617E-02 7 0.1041689E-01 0.5737067E-02 8 0.5963504E-02 0.3284379E-02 9 0.3463528E-02 0.1907526E-02 10 0.2035551E-02 0.1121073E-02 11 0.1173206E-02 0.6461394E-03 Result GMRES:11, 2.5E-2, 1.1732063553636E-3, 0 1 11 0.1173206E-02 0.1950772E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1173206E-02 1 0.8054083E-03 0.6865018E+00 2 0.4361388E-03 0.3717495E+00 3 0.2543785E-03 0.2168233E+00 4 0.1497569E-03 0.1276475E+00 5 0.8535073E-04 0.7274997E-01 6 0.5067395E-04 0.4319270E-01 7 0.2969071E-04 0.2530732E-01 8 0.1753681E-04 0.1494776E-01 9 0.1035269E-04 0.8824266E-02 10 0.6147472E-05 0.5239890E-02 11 0.3627628E-05 0.3092063E-02 12 0.2139825E-05 0.1823912E-02 13 0.1259266E-05 0.1073354E-02 14 0.7504008E-06 0.6396154E-03 Result GMRES:14, 2.5E-2, 7.5040081111971E-7, 0 2 25 0.7504008E-06 0.1085284E-02 NI: 2, NLI: 27, ERLI 0.7504008E-06, ERNI: 0.1950850E+01 T= 0.48E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.48E+00, Grid level= 5, NPTS= 2421 Nonlinear system solver at T = 0.4801306E+00 Max. and WRMS norm residual= 0.3061157E+01 0.6063556E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4842 # it. GCRO # it.GMRES Error Estimate 0 0 0.4453653E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4453653E+02 1 0.2179978E+02 0.4894809E+00 2 0.1047731E+02 0.2352521E+00 3 0.6835284E+01 0.1534759E+00 4 0.4756214E+01 0.1067936E+00 5 0.3371682E+01 0.7570600E-01 6 0.2465138E+01 0.5535091E-01 7 0.1810170E+01 0.4064460E-01 8 0.1346752E+01 0.3023927E-01 9 0.1008279E+01 0.2263937E-01 10 0.7599243E+00 0.1706294E-01 11 0.5757677E+00 0.1292799E-01 12 0.4375300E+00 0.9824070E-02 13 0.3332865E+00 0.7483442E-02 14 0.2544376E+00 0.5713009E-02 15 0.1945909E+00 0.4369243E-02 16 0.1490989E+00 0.3347788E-02 17 0.1143795E+00 0.2568217E-02 18 0.8784735E-01 0.1972479E-02 19 0.6755707E-01 0.1516891E-02 20 0.5199824E-01 0.1167541E-02 Result GMRES:20, 5.E-2, 5.1998244165787E-2, 1 1 20 0.5199824E-01 0.9586033E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5199824E-01 1 0.4155258E-01 0.7991150E+00 2 0.3117252E-01 0.5994917E+00 3 0.2394635E-01 0.4605222E+00 4 0.1842661E-01 0.3543698E+00 5 0.1424592E-01 0.2739693E+00 6 0.1100764E-01 0.2116924E+00 7 0.8503746E-02 0.1635391E+00 8 0.6574347E-02 0.1264340E+00 9 0.5085263E-02 0.9779683E-01 10 0.3927440E-02 0.7553024E-01 11 0.3038621E-02 0.5843699E-01 12 0.2348525E-02 0.4516548E-01 13 0.1813777E-02 0.3488151E-01 14 0.1401097E-02 0.2694509E-01 15 0.1079821E-02 0.2076649E-01 16 0.8306273E-03 0.1597414E-01 17 0.6386419E-03 0.1228199E-01 18 0.4903898E-03 0.9430892E-02 19 0.3766838E-03 0.7244164E-02 20 0.2896153E-03 0.5569713E-02 Result GMRES:20, 5.E-2, 2.8961530549448E-4, 1 2 40 0.2896153E-03 0.8913970E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2896153E-03 1 0.2305388E-03 0.7960173E+00 2 0.1730332E-03 0.5974588E+00 3 0.1319441E-03 0.4555840E+00 4 0.1014727E-03 0.3503706E+00 5 0.7815306E-04 0.2698513E+00 6 0.6014723E-04 0.2076797E+00 7 0.4632590E-04 0.1599567E+00 8 0.3569614E-04 0.1232536E+00 9 0.2750984E-04 0.9498753E-01 10 0.2120156E-04 0.7320595E-01 11 0.1635015E-04 0.5645470E-01 12 0.1263205E-04 0.4361666E-01 13 0.9723003E-05 0.3357213E-01 14 0.7534652E-05 0.2601607E-01 15 0.5793574E-05 0.2000438E-01 16 0.4490348E-05 0.1550453E-01 17 0.3458807E-05 0.1194276E-01 18 0.2674086E-05 0.9233234E-02 19 0.2061926E-05 0.7119535E-02 20 0.1585197E-05 0.5473457E-02 Result GMRES:20, 5.E-2, 1.585196807942E-6, 1 3 60 0.1585197E-05 0.5041276E-03 NI: 1, NLI: 63, ERLI 0.1585197E-05, ERNI: 0.9586242E+02 Max. and WRMS norm residual= 0.1696736E+00 0.2617500E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4842 # it. GCRO # it.GMRES Error Estimate 0 0 0.1637180E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1637180E+01 1 0.5851070E+00 0.3573870E+00 2 0.2866767E+00 0.1751039E+00 3 0.2154007E+00 0.1315681E+00 4 0.1392642E+00 0.8506342E-01 5 0.1016437E+00 0.6208462E-01 6 0.7329154E-01 0.4476693E-01 7 0.5283128E-01 0.3226968E-01 8 0.3934069E-01 0.2402954E-01 9 0.2855652E-01 0.1744250E-01 10 0.2143218E-01 0.1309091E-01 11 0.1578125E-01 0.9639286E-02 12 0.1184115E-01 0.7232650E-02 13 0.8839094E-02 0.5398974E-02 14 0.6627186E-02 0.4047927E-02 15 0.4997300E-02 0.3052382E-02 16 0.3749811E-02 0.2290408E-02 17 0.2843407E-02 0.1736771E-02 18 0.2142878E-02 0.1308884E-02 19 0.1627778E-02 0.9942572E-03 Result GMRES:19, 2.5E-2, 1.6277782172501E-3, 0 1 19 0.1627778E-02 0.2866961E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1627778E-02 1 0.1292839E-02 0.7942355E+00 2 0.9463733E-03 0.5813896E+00 3 0.7227737E-03 0.4440247E+00 4 0.5469934E-03 0.3360368E+00 5 0.4182381E-03 0.2569380E+00 6 0.3195243E-03 0.1962947E+00 7 0.2438743E-03 0.1498203E+00 8 0.1871285E-03 0.1149595E+00 9 0.1428810E-03 0.8777671E-01 10 0.1096230E-03 0.6734516E-01 11 0.8394991E-04 0.5157331E-01 12 0.6422531E-04 0.3945581E-01 13 0.4923846E-04 0.3024888E-01 14 0.3749158E-04 0.2303236E-01 15 0.2866088E-04 0.1760736E-01 16 0.2172797E-04 0.1334824E-01 17 0.1656975E-04 0.1017937E-01 18 0.1254298E-04 0.7705585E-02 19 0.9545182E-05 0.5863933E-02 20 0.7215729E-05 0.4432870E-02 Result GMRES:20, 2.5E-2, 7.2157294372474E-6, 1 2 39 0.7215729E-05 0.2565635E-02 NI: 2, NLI: 41, ERLI 0.7215729E-05, ERNI: 0.2866980E+01 T= 0.48E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.42E+00 TN= 0.46E+00, DT= 0.24E-01, DTNEW= 0.25E-01, TIMMON= 0.47E+00 Time integration at T= 0.50E+00, Grid level= 1, NPTS= 105 (info in between deleted to get this file on a low-density diskette) T= 0.58E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.40E+00 TN= 0.55E+00, DT= 0.24E-01, DTNEW= 0.25E-01, TIMMON= 0.48E+00 Time integration at T= 0.60E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.6003039E+00 Max. and WRMS norm residual= 0.5421116E-01 0.4954516E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1142387E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1142387E+01 1 0.8283357E-01 0.7250923E-01 2 0.7220300E-02 0.6320365E-02 3 0.4479088E-03 0.3920816E-03 Result GMRES:3, 5.E-2, 4.4790878025237E-4, 0 1 3 0.4479088E-03 0.1157042E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4479088E-03 1 0.4505117E-04 0.1005811E+00 2 0.3020364E-05 0.6743258E-02 3 0.1879145E-06 0.4195375E-03 Result GMRES:3, 5.E-2, 1.8791451745835E-7, 0 2 6 0.1879145E-06 0.4467095E-03 NI: 1, NLI: 8, ERLI 0.1879145E-06, ERNI: 0.1157050E+01 Max. and WRMS norm residual= 0.2918830E-05 0.2362248E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3752621E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3752621E-04 1 0.2638620E-05 0.7031405E-01 2 0.1840367E-06 0.4904217E-02 3 0.1339588E-07 0.3569739E-03 Result GMRES:3, 2.5E-2, 1.3395878147173E-8, 0 1 3 0.1339588E-07 0.3847815E-04 NI: 2, NLI: 4, ERLI 0.1339588E-07, ERNI: 0.3847815E-04 T= 0.60E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.60E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.6003039E+00 Max. and WRMS norm residual= 0.2233902E+01 0.2362498E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.5414586E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5414586E+02 1 0.3531663E+01 0.6522498E-01 2 0.4261146E+00 0.7869754E-02 3 0.7565518E-01 0.1397248E-02 4 0.1738925E-01 0.3211557E-03 Result GMRES:4, 5.E-2, 1.7389251949046E-2, 0 1 4 0.1738925E-01 0.5539852E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1738925E-01 1 0.5206350E-02 0.2994005E+00 2 0.8773831E-03 0.5045548E-01 3 0.1447862E-03 0.8326186E-02 4 0.2690671E-04 0.1547318E-02 5 0.7032013E-05 0.4043885E-03 Result GMRES:5, 5.E-2, 7.0320133011141E-6, 0 2 9 0.7032013E-05 0.1667475E-01 NI: 1, NLI: 11, ERLI 0.7032013E-05, ERNI: 0.5539840E+02 Max. and WRMS norm residual= 0.3666731E-02 0.4113652E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6503856E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6503856E-01 1 0.8261803E-02 0.1270293E+00 2 0.1403981E-02 0.2158690E-01 3 0.3076928E-03 0.4730929E-02 4 0.6158658E-04 0.9469241E-03 Result GMRES:4, 2.5E-2, 6.1586580348333E-5, 0 1 4 0.6158658E-04 0.6827914E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6158658E-04 1 0.1631700E-04 0.2649441E+00 2 0.3535696E-05 0.5741017E-01 3 0.6684755E-06 0.1085424E-01 4 0.1017651E-06 0.1652390E-02 5 0.2523260E-07 0.4097094E-03 Result GMRES:5, 2.5E-2, 2.5232600126951E-8, 0 2 9 0.2523260E-07 0.5943939E-04 NI: 2, NLI: 11, ERLI 0.2523260E-07, ERNI: 0.6827906E-01 T= 0.60E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.36E+01 Time integration at T= 0.60E+00, Grid level= 3, NPTS= 500 Nonlinear system solver at T = 0.6003039E+00 Max. and WRMS norm residual= 0.2298201E+01 0.2849787E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.5096986E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5096986E+02 1 0.6136368E+01 0.1203921E+00 2 0.1527876E+01 0.2997608E-01 3 0.4945364E+00 0.9702527E-02 4 0.2128914E+00 0.4176810E-02 5 0.7105504E-01 0.1394060E-02 6 0.2786005E-01 0.5465987E-03 Result GMRES:6, 5.E-2, 2.7860054974393E-2, 0 1 6 0.2786005E-01 0.5299047E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2786005E-01 1 0.1420926E-01 0.5100225E+00 2 0.4862609E-02 0.1745370E+00 3 0.1918655E-02 0.6886761E-01 4 0.7128274E-03 0.2558600E-01 5 0.2270488E-03 0.8149619E-02 6 0.8917999E-04 0.3200998E-02 7 0.3481481E-04 0.1249632E-02 8 0.1268237E-04 0.4552171E-03 Result GMRES:8, 5.E-2, 1.2682373889411E-5, 0 2 14 0.1268237E-04 0.2476348E-01 NI: 1, NLI: 16, ERLI 0.1268237E-04, ERNI: 0.5299104E+02 Max. and WRMS norm residual= 0.2479882E-01 0.3463464E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1000 # it. GCRO # it.GMRES Error Estimate 0 0 0.5209485E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5209485E+00 1 0.8830632E-01 0.1695106E+00 2 0.2445047E-01 0.4693452E-01 3 0.1032874E-01 0.1982680E-01 4 0.3533184E-02 0.6782215E-02 5 0.1331351E-02 0.2555630E-02 6 0.4990716E-03 0.9580056E-03 Result GMRES:6, 2.5E-2, 4.9907156536339E-4, 0 1 6 0.4990716E-03 0.5480831E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4990716E-03 1 0.2516829E-03 0.5043023E+00 2 0.9106140E-04 0.1824616E+00 3 0.3450273E-04 0.6913384E-01 4 0.1314962E-04 0.2634817E-01 5 0.4883973E-05 0.9786118E-02 6 0.1589663E-05 0.3185241E-02 7 0.7249902E-06 0.1452678E-02 8 0.2235232E-06 0.4478781E-03 Result GMRES:8, 2.5E-2, 2.2352322806608E-7, 0 2 14 0.2235232E-06 0.4459494E-03 NI: 2, NLI: 16, ERLI 0.2235232E-06, ERNI: 0.5480819E+00 T= 0.60E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.32E+01 Time integration at T= 0.60E+00, Grid level= 4, NPTS= 969 Nonlinear system solver at T = 0.6003039E+00 Max. and WRMS norm residual= 0.3013336E+01 0.4743080E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1938 # it. GCRO # it.GMRES Error Estimate 0 0 0.6226140E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6226140E+02 1 0.1351891E+02 0.2171314E+00 2 0.4958104E+01 0.7963367E-01 3 0.2658035E+01 0.4269154E-01 4 0.1591872E+01 0.2556757E-01 5 0.8105574E+00 0.1301862E-01 6 0.4812758E+00 0.7729923E-02 7 0.2697614E+00 0.4332722E-02 8 0.1554524E+00 0.2496770E-02 9 0.9140587E-01 0.1468099E-02 10 0.5298756E-01 0.8510499E-03 11 0.3172196E-01 0.5094965E-03 Result GMRES:11, 5.E-2, 3.1721964515703E-2, 0 1 11 0.3172196E-01 0.7747506E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3172196E-01 1 0.2173227E-01 0.6850859E+00 2 0.1204890E-01 0.3798283E+00 3 0.7032142E-02 0.2216805E+00 4 0.4197645E-02 0.1323261E+00 5 0.2406137E-02 0.7585081E-01 6 0.1490867E-02 0.4699794E-01 7 0.8496015E-03 0.2678275E-01 8 0.5285330E-03 0.1666142E-01 9 0.3065958E-03 0.9665095E-02 10 0.1871146E-03 0.5898582E-02 11 0.1109735E-03 0.3498319E-02 12 0.6661618E-04 0.2100002E-02 13 0.4003909E-04 0.1262188E-02 14 0.2372131E-04 0.7477883E-03 Result GMRES:14, 5.E-2, 2.3721313020671E-5, 0 2 25 0.2372131E-04 0.3050401E-01 NI: 1, NLI: 27, ERLI 0.2372131E-04, ERNI: 0.7747665E+02 Max. and WRMS norm residual= 0.1083768E+00 0.1632198E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1938 # it. GCRO # it.GMRES Error Estimate 0 0 0.1946290E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1946290E+01 1 0.4881323E+00 0.2508014E+00 2 0.1862747E+00 0.9570760E-01 3 0.1199050E+00 0.6160696E-01 4 0.5514645E-01 0.2833414E-01 5 0.3343424E-01 0.1717845E-01 6 0.1787971E-01 0.9186562E-02 7 0.1033622E-01 0.5310730E-02 8 0.5891421E-02 0.3027001E-02 9 0.3368237E-02 0.1730594E-02 10 0.1983706E-02 0.1019224E-02 11 0.1123543E-02 0.5772742E-03 Result GMRES:11, 2.5E-2, 1.1235430060358E-3, 0 1 11 0.1123543E-02 0.2074683E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1123543E-02 1 0.7677260E-03 0.6833080E+00 2 0.4127721E-03 0.3673844E+00 3 0.2402753E-03 0.2138550E+00 4 0.1397294E-03 0.1243650E+00 5 0.8024544E-04 0.7142178E-01 6 0.4755936E-04 0.4232981E-01 7 0.2801522E-04 0.2493471E-01 8 0.1649677E-04 0.1468281E-01 9 0.9732116E-05 0.8661988E-02 10 0.5738971E-05 0.5107923E-02 11 0.3382289E-05 0.3010378E-02 12 0.2003492E-05 0.1783192E-02 13 0.1175383E-05 0.1046140E-02 14 0.7038416E-06 0.6264483E-03 Result GMRES:14, 2.5E-2, 7.0384164109319E-7, 0 2 25 0.7038416E-06 0.1037909E-02 NI: 2, NLI: 27, ERLI 0.7038416E-06, ERNI: 0.2074735E+01 T= 0.60E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.60E+00, Grid level= 5, NPTS= 2335 Nonlinear system solver at T = 0.6003039E+00 Max. and WRMS norm residual= 0.3068880E+01 0.6207024E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4670 # it. GCRO # it.GMRES Error Estimate 0 0 0.4529867E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4529867E+02 1 0.2199106E+02 0.4854681E+00 2 0.1047597E+02 0.2312645E+00 3 0.6801046E+01 0.1501378E+00 4 0.4712894E+01 0.1040404E+00 5 0.3326634E+01 0.7343779E-01 6 0.2422126E+01 0.5347013E-01 7 0.1772129E+01 0.3912100E-01 8 0.1313700E+01 0.2900086E-01 9 0.9791750E+00 0.2161598E-01 10 0.7344689E+00 0.1621392E-01 11 0.5541214E+00 0.1223262E-01 12 0.4195929E+00 0.9262807E-02 13 0.3187725E+00 0.7037127E-02 14 0.2426196E+00 0.5355998E-02 15 0.1849656E+00 0.4083245E-02 16 0.1412929E+00 0.3119140E-02 17 0.1080800E+00 0.2385941E-02 18 0.8279319E-01 0.1827718E-02 19 0.6347996E-01 0.1401365E-02 20 0.4871039E-01 0.1075316E-02 Result GMRES:20, 5.E-2, 4.8710386715264E-2, 1 1 20 0.4871039E-01 0.9696214E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4871039E-01 1 0.3882768E-01 0.7971129E+00 2 0.2903220E-01 0.5960167E+00 3 0.2222625E-01 0.4562939E+00 4 0.1705756E-01 0.3501832E+00 5 0.1314523E-01 0.2698650E+00 6 0.1012675E-01 0.2078972E+00 7 0.7794161E-02 0.1600102E+00 8 0.6009958E-02 0.1233815E+00 9 0.4631064E-02 0.9507344E-01 10 0.3565647E-02 0.7320096E-01 11 0.2751321E-02 0.5648325E-01 12 0.2118120E-02 0.4348395E-01 13 0.1632977E-02 0.3352421E-01 14 0.1259520E-02 0.2585731E-01 15 0.9705161E-03 0.1992421E-01 16 0.7484462E-03 0.1536523E-01 17 0.5771289E-03 0.1184817E-01 18 0.4448134E-03 0.9131798E-02 19 0.3429302E-03 0.7040187E-02 20 0.2643756E-03 0.5427499E-02 Result GMRES:20, 5.E-2, 2.643755615819E-4, 1 2 40 0.2643756E-03 0.8307822E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2643756E-03 1 0.2109363E-03 0.7978660E+00 2 0.1582688E-03 0.5986514E+00 3 0.1212407E-03 0.4585928E+00 4 0.9295720E-04 0.3516104E+00 5 0.7141425E-04 0.2701242E+00 6 0.5466996E-04 0.2067890E+00 7 0.4186165E-04 0.1583416E+00 8 0.3201895E-04 0.1211116E+00 9 0.2451293E-04 0.9272010E-01 10 0.1875257E-04 0.7093156E-01 11 0.1435294E-04 0.5428998E-01 12 0.1098459E-04 0.4154919E-01 13 0.8412106E-05 0.3181877E-01 14 0.6440349E-05 0.2436061E-01 15 0.4931801E-05 0.1865453E-01 16 0.3776051E-05 0.1428291E-01 17 0.2889166E-05 0.1092826E-01 18 0.2209001E-05 0.8355543E-02 19 0.1688111E-05 0.6385276E-02 20 0.1284190E-05 0.4857446E-02 Result GMRES:20, 5.E-2, 1.2841900521432E-6, 1 3 60 0.1284190E-05 0.4536454E-03 NI: 1, NLI: 63, ERLI 0.1284190E-05, ERNI: 0.9696398E+02 Max. and WRMS norm residual= 0.1595376E+00 0.2631728E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4670 # it. GCRO # it.GMRES Error Estimate 0 0 0.1637968E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1637968E+01 1 0.5808728E+00 0.3546301E+00 2 0.2831384E+00 0.1728595E+00 3 0.2120945E+00 0.1294863E+00 4 0.1369288E+00 0.8359671E-01 5 0.9962069E-01 0.6081967E-01 6 0.7165503E-01 0.4374629E-01 7 0.5150260E-01 0.3144298E-01 8 0.3824697E-01 0.2335025E-01 9 0.2768842E-01 0.1690412E-01 10 0.2072521E-01 0.1265300E-01 11 0.1521673E-01 0.9290003E-02 12 0.1138735E-01 0.6952119E-02 13 0.8474965E-02 0.5174072E-02 14 0.6335202E-02 0.3867720E-02 15 0.4762233E-02 0.2907402E-02 16 0.3562512E-02 0.2174958E-02 17 0.2693441E-02 0.1644379E-02 18 0.2021981E-02 0.1234445E-02 19 0.1531591E-02 0.9350553E-03 Result GMRES:19, 2.5E-2, 1.5315908538978E-3, 0 1 19 0.1531591E-02 0.2856075E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1531591E-02 1 0.1213421E-02 0.7922620E+00 2 0.8846468E-03 0.5776000E+00 3 0.6734781E-03 0.4397245E+00 4 0.5075162E-03 0.3313654E+00 5 0.3870268E-03 0.2526960E+00 6 0.2943133E-03 0.1921618E+00 7 0.2240738E-03 0.1463014E+00 8 0.1712023E-03 0.1117807E+00 9 0.1304115E-03 0.8514773E-01 10 0.9964682E-04 0.6506099E-01 11 0.7614049E-04 0.4971333E-01 12 0.5811341E-04 0.3794317E-01 13 0.4449962E-04 0.2905451E-01 14 0.3394423E-04 0.2216273E-01 15 0.2601161E-04 0.1698339E-01 16 0.1984074E-04 0.1295433E-01 17 0.1520831E-04 0.9929750E-02 18 0.1160700E-04 0.7578392E-02 19 0.8901394E-05 0.5811861E-02 20 0.6804116E-05 0.4442515E-02 Result GMRES:20, 2.5E-2, 6.8041155766736E-6, 1 2 39 0.6804116E-05 0.2401470E-02 NI: 2, NLI: 41, ERLI 0.6804116E-05, ERNI: 0.2856089E+01 T= 0.60E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.40E+00 TN= 0.58E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.62E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.6238154E+00 Max. and WRMS norm residual= 0.2752236E-01 0.3359926E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.9258309E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9258309E+00 1 0.4482543E-01 0.4841643E-01 2 0.3736881E-02 0.4036245E-02 3 0.2233409E-03 0.2412330E-03 Result GMRES:3, 5.E-2, 2.2334093879895E-4, 0 1 3 0.2233409E-03 0.9372541E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2233409E-03 1 0.2355626E-04 0.1054722E+00 2 0.1627231E-05 0.7285861E-02 3 0.9274926E-07 0.4152811E-03 Result GMRES:3, 5.E-2, 9.274926163352E-8, 0 2 6 0.9274926E-07 0.2231393E-03 NI: 1, NLI: 8, ERLI 0.9274926E-07, ERNI: 0.9372586E+00 Max. and WRMS norm residual= 0.2373251E-05 0.2120739E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3368535E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3368535E-04 1 0.2451895E-05 0.7278819E-01 2 0.1738260E-06 0.5160284E-02 3 0.1224823E-07 0.3636070E-03 Result GMRES:3, 2.5E-2, 1.2248228274936E-8, 0 1 3 0.1224823E-07 0.3455268E-04 NI: 2, NLI: 4, ERLI 0.1224823E-07, ERNI: 0.3455268E-04 T= 0.62E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.53E+01 Time integration at T= 0.62E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.6238154E+00 Max. and WRMS norm residual= 0.2864163E+01 0.3096528E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6331573E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6331573E+02 1 0.4316901E+01 0.6818055E-01 2 0.5085247E+00 0.8031570E-02 3 0.8853453E-01 0.1398302E-02 4 0.2056420E-01 0.3247882E-03 Result GMRES:4, 5.E-2, 2.0564200264675E-2, 0 1 4 0.2056420E-01 0.6494163E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2056420E-01 1 0.6375369E-02 0.3100227E+00 2 0.1127196E-02 0.5481353E-01 3 0.1976640E-03 0.9612043E-02 4 0.3638778E-04 0.1769472E-02 5 0.8515301E-05 0.4140837E-03 Result GMRES:5, 5.E-2, 8.5153006774927E-6, 0 2 9 0.8515301E-05 0.1960536E-01 NI: 1, NLI: 11, ERLI 0.8515301E-05, ERNI: 0.6494154E+02 Max. and WRMS norm residual= 0.4420326E-02 0.5898398E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.9303280E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9303280E-01 1 0.1116595E-01 0.1200216E+00 2 0.1635037E-02 0.1757485E-01 3 0.3431285E-03 0.3688253E-02 4 0.7172595E-04 0.7709749E-03 Result GMRES:4, 2.5E-2, 7.1725950148052E-5, 0 1 4 0.7172595E-04 0.9741208E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7172595E-04 1 0.2003713E-04 0.2793568E+00 2 0.4017664E-05 0.5601410E-01 3 0.7303226E-06 0.1018212E-01 4 0.1088483E-06 0.1517558E-02 5 0.2900562E-07 0.4043950E-03 Result GMRES:5, 2.5E-2, 2.9005617613799E-8, 0 2 9 0.2900562E-07 0.6943445E-04 NI: 2, NLI: 11, ERLI 0.2900562E-07, ERNI: 0.9741207E-01 T= 0.62E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.31E+01 Time integration at T= 0.62E+00, Grid level= 3, NPTS= 496 Nonlinear system solver at T = 0.6238154E+00 Max. and WRMS norm residual= 0.2899441E+01 0.3267305E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.5693075E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5693075E+02 1 0.7331785E+01 0.1287843E+00 2 0.1369544E+01 0.2405632E-01 3 0.4308512E+00 0.7567989E-02 4 0.1846697E+00 0.3243761E-02 5 0.6317001E-01 0.1109594E-02 6 0.2462891E-01 0.4326117E-03 Result GMRES:6, 5.E-2, 2.4628908565548E-2, 0 1 6 0.2462891E-01 0.6016558E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2462891E-01 1 0.1223589E-01 0.4968102E+00 2 0.4374794E-02 0.1776284E+00 3 0.1750488E-02 0.7107452E-01 4 0.6390937E-03 0.2594893E-01 5 0.2200663E-03 0.8935285E-02 6 0.8910924E-04 0.3618075E-02 7 0.3512886E-04 0.1426326E-02 8 0.1233270E-04 0.5007408E-03 Result GMRES:8, 5.E-2, 1.2332698723679E-5, 0 2 14 0.1233270E-04 0.2189255E-01 NI: 1, NLI: 16, ERLI 0.1233270E-04, ERNI: 0.6016579E+02 Max. and WRMS norm residual= 0.1739977E-01 0.2343251E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.3493964E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3493964E+00 1 0.5920259E-01 0.1694425E+00 2 0.1816592E-01 0.5199230E-01 3 0.7504856E-02 0.2147949E-01 4 0.2688083E-02 0.7693505E-02 5 0.1019373E-02 0.2917526E-02 6 0.3923705E-03 0.1122995E-02 7 0.1430805E-03 0.4095077E-03 Result GMRES:7, 2.5E-2, 1.4308051139397E-4, 0 1 7 0.1430805E-03 0.3579090E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1430805E-03 1 0.7289437E-04 0.5094640E+00 2 0.2562145E-04 0.1790702E+00 3 0.1007727E-04 0.7043080E-01 4 0.3620348E-05 0.2530287E-01 5 0.1419262E-05 0.9919324E-02 6 0.5203091E-06 0.3636478E-02 7 0.1672784E-06 0.1169121E-02 8 0.7024779E-07 0.4909668E-03 Result GMRES:8, 2.5E-2, 7.0247787248533E-8, 0 2 15 0.7024779E-07 0.1280458E-03 NI: 2, NLI: 17, ERLI 0.7024779E-07, ERNI: 0.3579108E+00 T= 0.62E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.25E+01 Time integration at T= 0.62E+00, Grid level= 4, NPTS= 1033 Nonlinear system solver at T = 0.6238154E+00 Max. and WRMS norm residual= 0.2936912E+01 0.4583743E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2066 # it. GCRO # it.GMRES Error Estimate 0 0 0.6017539E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6017539E+02 1 0.1303921E+02 0.2166868E+00 2 0.4780822E+01 0.7944813E-01 3 0.2540811E+01 0.4222341E-01 4 0.1530831E+01 0.2543949E-01 5 0.7780957E+00 0.1293046E-01 6 0.4628061E+00 0.7690952E-02 7 0.2593204E+00 0.4309410E-02 8 0.1504001E+00 0.2499361E-02 9 0.8835840E-01 0.1468348E-02 10 0.5117270E-01 0.8503925E-03 11 0.3067707E-01 0.5097943E-03 Result GMRES:11, 5.E-2, 3.0677073293107E-2, 0 1 11 0.3067707E-01 0.7488078E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3067707E-01 1 0.2106233E-01 0.6865822E+00 2 0.1164768E-01 0.3796867E+00 3 0.6825958E-02 0.2225101E+00 4 0.4069662E-02 0.1326614E+00 5 0.2335296E-02 0.7612511E-01 6 0.1448877E-02 0.4722997E-01 7 0.8264969E-03 0.2694184E-01 8 0.5134356E-03 0.1673679E-01 9 0.2990060E-03 0.9746888E-02 10 0.1819082E-03 0.5929777E-02 11 0.1086796E-03 0.3542698E-02 12 0.6511085E-04 0.2122459E-02 13 0.3925105E-04 0.1279491E-02 14 0.2315901E-04 0.7549289E-03 Result GMRES:14, 5.E-2, 2.3159009613439E-5, 0 2 25 0.2315901E-04 0.2950661E-01 NI: 1, NLI: 27, ERLI 0.2315901E-04, ERNI: 0.7488228E+02 Max. and WRMS norm residual= 0.9966314E-01 0.1482408E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2066 # it. GCRO # it.GMRES Error Estimate 0 0 0.1751882E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1751882E+01 1 0.4461186E+00 0.2546511E+00 2 0.1673888E+00 0.9554801E-01 3 0.1087742E+00 0.6208990E-01 4 0.4919933E-01 0.2808370E-01 5 0.3027643E-01 0.1728223E-01 6 0.1595201E-01 0.9105642E-02 7 0.9450852E-02 0.5394685E-02 8 0.5315842E-02 0.3034361E-02 9 0.3103299E-02 0.1771409E-02 10 0.1800983E-02 0.1028027E-02 11 0.1046145E-02 0.5971550E-03 Result GMRES:11, 2.5E-2, 1.0461450705423E-3, 0 1 11 0.1046145E-02 0.1875722E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1046145E-02 1 0.7117594E-03 0.6803639E+00 2 0.3868590E-03 0.3697948E+00 3 0.2229533E-03 0.2131189E+00 4 0.1307323E-03 0.1249658E+00 5 0.7466481E-04 0.7137138E-01 6 0.4465442E-04 0.4268473E-01 7 0.2605623E-04 0.2490690E-01 8 0.1553380E-04 0.1484861E-01 9 0.9054928E-05 0.8655518E-02 10 0.5450949E-05 0.5210510E-02 11 0.3148516E-05 0.3009637E-02 12 0.1900646E-05 0.1816809E-02 13 0.1085630E-05 0.1037743E-02 14 0.6650204E-06 0.6356866E-03 Result GMRES:14, 2.5E-2, 6.6502044891514E-7, 0 2 25 0.6650204E-06 0.9675065E-03 NI: 2, NLI: 27, ERLI 0.6650204E-06, ERNI: 0.1875787E+01 T= 0.62E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.62E+00, Grid level= 5, NPTS= 2311 Nonlinear system solver at T = 0.6238154E+00 Max. and WRMS norm residual= 0.3078588E+01 0.6235809E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.4551613E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4551613E+02 1 0.2209583E+02 0.4854505E+00 2 0.1052145E+02 0.2311586E+00 3 0.6829982E+01 0.1500563E+00 4 0.4733260E+01 0.1039908E+00 5 0.3344562E+01 0.7348080E-01 6 0.2437405E+01 0.5355036E-01 7 0.1785185E+01 0.3922093E-01 8 0.1325112E+01 0.2911302E-01 9 0.9902384E+00 0.2175577E-01 10 0.7454837E+00 0.1637845E-01 11 0.5643994E+00 0.1239999E-01 12 0.4286797E+00 0.9418192E-02 13 0.3263347E+00 0.7169649E-02 14 0.2489020E+00 0.5468436E-02 15 0.1901434E+00 0.4177496E-02 16 0.1454920E+00 0.3196494E-02 17 0.1114416E+00 0.2448397E-02 18 0.8543027E-01 0.1876923E-02 19 0.6555322E-01 0.1440220E-02 20 0.5034438E-01 0.1106078E-02 Result GMRES:20, 5.E-2, 5.034437884643E-2, 1 1 20 0.5034438E-01 0.9742653E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5034438E-01 1 0.4011117E-01 0.7967358E+00 2 0.3000475E-01 0.5959901E+00 3 0.2300004E-01 0.4568542E+00 4 0.1764876E-01 0.3505607E+00 5 0.1360601E-01 0.2702587E+00 6 0.1047861E-01 0.2081386E+00 7 0.8072850E-02 0.1603526E+00 8 0.6218837E-02 0.1235260E+00 9 0.4794336E-02 0.9523081E-01 10 0.3692531E-02 0.7334544E-01 11 0.2845400E-02 0.5651872E-01 12 0.2193764E-02 0.4357516E-01 13 0.1689907E-02 0.3356694E-01 14 0.1302817E-02 0.2587809E-01 15 0.1004105E-02 0.1994474E-01 16 0.7736445E-03 0.1536705E-01 17 0.5963146E-03 0.1184471E-01 18 0.4595593E-03 0.9128314E-02 19 0.3539673E-03 0.7030920E-02 20 0.2727680E-03 0.5418044E-02 Result GMRES:20, 5.E-2, 2.7276803666738E-4, 1 2 40 0.2727680E-03 0.8572709E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2727680E-03 1 0.2176268E-03 0.7978458E+00 2 0.1632126E-03 0.5983566E+00 3 0.1250633E-03 0.4584968E+00 4 0.9601672E-04 0.3520087E+00 5 0.7391980E-04 0.2709988E+00 6 0.5673348E-04 0.2079917E+00 7 0.4352432E-04 0.1595653E+00 8 0.3329749E-04 0.1220726E+00 9 0.2545301E-04 0.9331377E-01 10 0.1944001E-04 0.7126938E-01 11 0.1485050E-04 0.5444368E-01 12 0.1134406E-04 0.4158865E-01 13 0.8662484E-05 0.3175769E-01 14 0.6617803E-05 0.2426165E-01 15 0.5056409E-05 0.1853740E-01 16 0.3863247E-05 0.1416312E-01 17 0.2952195E-05 0.1082310E-01 18 0.2251447E-05 0.8254073E-02 19 0.1717373E-05 0.6296094E-02 20 0.1304253E-05 0.4781545E-02 Result GMRES:20, 5.E-2, 1.3042526552792E-6, 1 3 60 0.1304253E-05 0.4668164E-03 NI: 1, NLI: 63, ERLI 0.1304253E-05, ERNI: 0.9742843E+02 Max. and WRMS norm residual= 0.1562316E+00 0.2644741E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.1646088E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1646088E+01 1 0.5834894E+00 0.3544703E+00 2 0.2844314E+00 0.1727923E+00 3 0.2130610E+00 0.1294348E+00 4 0.1376081E+00 0.8359701E-01 5 0.1001026E+00 0.6081241E-01 6 0.7201674E-01 0.4375023E-01 7 0.5175840E-01 0.3144327E-01 8 0.3844453E-01 0.2335508E-01 9 0.2785182E-01 0.1692000E-01 10 0.2085619E-01 0.1267015E-01 11 0.1532824E-01 0.9311918E-02 12 0.1147414E-01 0.6970552E-02 13 0.8548759E-02 0.5193378E-02 14 0.6393560E-02 0.3884093E-02 15 0.4808846E-02 0.2921378E-02 16 0.3599802E-02 0.2186882E-02 17 0.2721634E-02 0.1653395E-02 18 0.2044702E-02 0.1242158E-02 19 0.1548185E-02 0.9405239E-03 Result GMRES:19, 2.5E-2, 1.5481853509652E-3, 0 1 19 0.1548185E-02 0.2869842E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1548185E-02 1 0.1225582E-02 0.7916248E+00 2 0.8937320E-03 0.5772771E+00 3 0.6800130E-03 0.4392323E+00 4 0.5124006E-03 0.3309685E+00 5 0.3905148E-03 0.2522403E+00 6 0.2968323E-03 0.1917292E+00 7 0.2257534E-03 0.1458181E+00 8 0.1723461E-03 0.1113213E+00 9 0.1311607E-03 0.8471898E-01 10 0.1001555E-03 0.6469221E-01 11 0.7639154E-04 0.4934263E-01 12 0.5832385E-04 0.3767240E-01 13 0.4455150E-04 0.2877659E-01 14 0.3399409E-04 0.2195738E-01 15 0.2599104E-04 0.1678807E-01 16 0.1982665E-04 0.1280638E-01 17 0.1516687E-04 0.9796545E-02 18 0.1157372E-04 0.7475665E-02 19 0.8857608E-05 0.5721284E-02 20 0.6773530E-05 0.4375142E-02 Result GMRES:20, 2.5E-2, 6.7735302251926E-6, 1 2 39 0.6773530E-05 0.2414978E-02 NI: 2, NLI: 41, ERLI 0.6773530E-05, ERNI: 0.2869856E+01 T= 0.62E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.41E+00 TN= 0.60E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.65E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.6473270E+00 Max. and WRMS norm residual= 0.5332147E-01 0.4736389E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1572352E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1572352E+01 1 0.4257047E-01 0.2707438E-01 2 0.2533192E-02 0.1611084E-02 3 0.1452029E-03 0.9234758E-04 Result GMRES:3, 5.E-2, 1.452029482589E-4, 0 1 3 0.1452029E-03 0.1582124E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1452029E-03 1 0.1178596E-04 0.8116891E-01 2 0.7254903E-06 0.4996388E-02 3 0.4414063E-07 0.3039927E-03 Result GMRES:3, 5.E-2, 4.4140634731989E-8, 0 2 6 0.4414063E-07 0.1447269E-03 NI: 1, NLI: 8, ERLI 0.4414063E-07, ERNI: 0.1582124E+01 Max. and WRMS norm residual= 0.1665208E-05 0.1594098E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2528361E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2528361E-04 1 0.1896691E-05 0.7501663E-01 2 0.1298635E-06 0.5136273E-02 3 0.9011517E-08 0.3564173E-03 Result GMRES:3, 2.5E-2, 9.0115169393887E-9, 0 1 3 0.9011517E-08 0.2586787E-04 NI: 2, NLI: 4, ERLI 0.9011517E-08, ERNI: 0.2586787E-04 T= 0.65E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.53E+01 Time integration at T= 0.65E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.6473270E+00 Max. and WRMS norm residual= 0.2991086E+01 0.3325225E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6181386E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6181386E+02 1 0.4651444E+01 0.7524920E-01 2 0.6010103E+00 0.9722904E-02 3 0.1192010E+00 0.1928387E-02 4 0.2815319E-01 0.4554511E-03 Result GMRES:4, 5.E-2, 2.8153193221436E-2, 0 1 4 0.2815319E-01 0.6352481E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2815319E-01 1 0.8722254E-02 0.3098140E+00 2 0.1607416E-02 0.5709535E-01 3 0.2876422E-03 0.1021704E-01 4 0.4223185E-04 0.1500073E-02 5 0.1041984E-04 0.3701123E-03 Result GMRES:5, 5.E-2, 1.04198441298E-5, 0 2 9 0.1041984E-04 0.2695207E-01 NI: 1, NLI: 11, ERLI 0.1041984E-04, ERNI: 0.6352453E+02 Max. and WRMS norm residual= 0.5040178E-02 0.6580064E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.1036010E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1036010E+00 1 0.1256029E-01 0.1212372E+00 2 0.1984820E-02 0.1915831E-01 3 0.4503405E-03 0.4346875E-02 4 0.9418967E-04 0.9091582E-03 Result GMRES:4, 2.5E-2, 9.4189671799343E-5, 0 1 4 0.9418967E-04 0.1077014E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9418967E-04 1 0.2604820E-04 0.2765505E+00 2 0.5382377E-05 0.5714402E-01 3 0.1002911E-05 0.1064778E-01 4 0.1303470E-06 0.1383878E-02 5 0.3217900E-07 0.3416404E-03 Result GMRES:5, 2.5E-2, 3.2178998022482E-8, 0 2 9 0.3217900E-07 0.9118772E-04 NI: 2, NLI: 11, ERLI 0.3217900E-07, ERNI: 0.1077017E+00 T= 0.65E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.38E+01 Time integration at T= 0.65E+00, Grid level= 3, NPTS= 496 Nonlinear system solver at T = 0.6473270E+00 Max. and WRMS norm residual= 0.3002382E+01 0.3506404E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.5865579E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5865579E+02 1 0.7694117E+01 0.1311740E+00 2 0.1535303E+01 0.2617479E-01 3 0.5610498E+00 0.9565121E-02 4 0.2300120E+00 0.3921385E-02 5 0.7822683E-01 0.1333659E-02 6 0.3163903E-01 0.5394017E-03 Result GMRES:6, 5.E-2, 3.1639032995723E-2, 0 1 6 0.3163903E-01 0.6195653E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3163903E-01 1 0.1588246E-01 0.5019894E+00 2 0.5716254E-02 0.1806710E+00 3 0.2259332E-02 0.7140965E-01 4 0.8436706E-03 0.2666550E-01 5 0.2831797E-03 0.8950328E-02 6 0.1130475E-03 0.3573040E-02 7 0.4542275E-04 0.1435655E-02 8 0.1505981E-04 0.4759882E-03 Result GMRES:8, 5.E-2, 1.5059805729219E-5, 0 2 14 0.1505981E-04 0.2842781E-01 NI: 1, NLI: 16, ERLI 0.1505981E-04, ERNI: 0.6195652E+02 Max. and WRMS norm residual= 0.4043685E-01 0.4935258E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 992 # it. GCRO # it.GMRES Error Estimate 0 0 0.7464757E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7464757E+00 1 0.1315818E+00 0.1762707E+00 2 0.3618441E-01 0.4847367E-01 3 0.1524435E-01 0.2042176E-01 4 0.5212757E-02 0.6983157E-02 5 0.2002623E-02 0.2682771E-02 6 0.7672120E-03 0.1027779E-02 7 0.2820016E-03 0.3777774E-03 Result GMRES:7, 2.5E-2, 2.8200161027588E-4, 0 1 7 0.2820016E-03 0.7834194E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2820016E-03 1 0.1416022E-03 0.5021325E+00 2 0.5034520E-04 0.1785281E+00 3 0.1979551E-04 0.7019643E-01 4 0.7156037E-05 0.2537587E-01 5 0.2776349E-05 0.9845154E-02 6 0.1024208E-05 0.3631922E-02 7 0.3232110E-06 0.1146132E-02 8 0.1384047E-06 0.4907941E-03 Result GMRES:8, 2.5E-2, 1.3840473533127E-7, 0 2 15 0.1384047E-06 0.2512783E-03 NI: 2, NLI: 17, ERLI 0.1384047E-06, ERNI: 0.7834207E+00 T= 0.65E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.65E+00, Grid level= 4, NPTS= 1053 Nonlinear system solver at T = 0.6473270E+00 Max. and WRMS norm residual= 0.3025851E+01 0.4544161E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2106 # it. GCRO # it.GMRES Error Estimate 0 0 0.5966441E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5966441E+02 1 0.1294440E+02 0.2169535E+00 2 0.4728477E+01 0.7925121E-01 3 0.2534032E+01 0.4247142E-01 4 0.1520748E+01 0.2548836E-01 5 0.7748959E+00 0.1298757E-01 6 0.4600719E+00 0.7710993E-02 7 0.2581958E+00 0.4327468E-02 8 0.1496146E+00 0.2507602E-02 9 0.8805930E-01 0.1475910E-02 10 0.5067727E-01 0.8493719E-03 11 0.3054250E-01 0.5119049E-03 Result GMRES:11, 5.E-2, 3.0542504082301E-2, 0 1 11 0.3054250E-01 0.7426746E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3054250E-01 1 0.2100122E-01 0.6876064E+00 2 0.1157323E-01 0.3789222E+00 3 0.6792551E-02 0.2223966E+00 4 0.4051182E-02 0.1326408E+00 5 0.2320307E-02 0.7596977E-01 6 0.1443533E-02 0.4726308E-01 7 0.8216390E-03 0.2690150E-01 8 0.5110201E-03 0.1673144E-01 9 0.2975974E-03 0.9743712E-02 10 0.1811511E-03 0.5931114E-02 11 0.1081418E-03 0.3540697E-02 12 0.6517279E-04 0.2133839E-02 13 0.3902699E-04 0.1277793E-02 14 0.2331203E-04 0.7632651E-03 Result GMRES:14, 5.E-2, 2.3312026440699E-5, 0 2 25 0.2331203E-04 0.2932434E-01 NI: 1, NLI: 27, ERLI 0.2331203E-04, ERNI: 0.7426898E+02 Max. and WRMS norm residual= 0.1050881E+00 0.1546867E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2106 # it. GCRO # it.GMRES Error Estimate 0 0 0.1843017E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1843017E+01 1 0.4636244E+00 0.2515573E+00 2 0.1787648E+00 0.9699574E-01 3 0.1149049E+00 0.6234608E-01 4 0.5295468E-01 0.2873261E-01 5 0.3204366E-01 0.1738653E-01 6 0.1719696E-01 0.9330874E-02 7 0.9949278E-02 0.5398366E-02 8 0.5699556E-02 0.3092515E-02 9 0.3230649E-02 0.1752913E-02 10 0.1911759E-02 0.1037299E-02 11 0.1087559E-02 0.5900972E-03 Result GMRES:11, 2.5E-2, 1.0875590332949E-3, 0 1 11 0.1087559E-02 0.1967715E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1087559E-02 1 0.7406918E-03 0.6810590E+00 2 0.4014197E-03 0.3691015E+00 3 0.2324001E-03 0.2136896E+00 4 0.1350465E-03 0.1241740E+00 5 0.7785464E-04 0.7158659E-01 6 0.4615530E-04 0.4243935E-01 7 0.2708072E-04 0.2490046E-01 8 0.1607538E-04 0.1478116E-01 9 0.9397482E-05 0.8640894E-02 10 0.5659038E-05 0.5203430E-02 11 0.3287859E-05 0.3023155E-02 12 0.1975929E-05 0.1816848E-02 13 0.1139073E-05 0.1047367E-02 14 0.6883914E-06 0.6329693E-03 Result GMRES:14, 2.5E-2, 6.8839144334155E-7, 0 2 25 0.6883914E-06 0.1006103E-02 NI: 2, NLI: 27, ERLI 0.6883914E-06, ERNI: 0.1967767E+01 T= 0.65E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.65E+00, Grid level= 5, NPTS= 2325 Nonlinear system solver at T = 0.6473270E+00 Max. and WRMS norm residual= 0.3089129E+01 0.6213964E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4650 # it. GCRO # it.GMRES Error Estimate 0 0 0.4536415E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4536415E+02 1 0.2202272E+02 0.4854653E+00 2 0.1048236E+02 0.2310714E+00 3 0.6804630E+01 0.1500002E+00 4 0.4714100E+01 0.1039168E+00 5 0.3327163E+01 0.7334343E-01 6 0.2422851E+01 0.5340893E-01 7 0.1772873E+01 0.3908093E-01 8 0.1314313E+01 0.2897249E-01 9 0.9797660E+00 0.2159780E-01 10 0.7351217E+00 0.1620490E-01 11 0.5548091E+00 0.1223012E-01 12 0.4201902E+00 0.9262605E-02 13 0.3192440E+00 0.7037364E-02 14 0.2429931E+00 0.5356500E-02 15 0.1852588E+00 0.4083815E-02 16 0.1415346E+00 0.3119966E-02 17 0.1082616E+00 0.2386501E-02 18 0.8293794E-01 0.1828270E-02 19 0.6358393E-01 0.1401634E-02 20 0.4879132E-01 0.1075548E-02 Result GMRES:20, 5.E-2, 4.8791321519546E-2, 1 1 20 0.4879132E-01 0.9710285E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4879132E-01 1 0.3889067E-01 0.7970818E+00 2 0.2907703E-01 0.5959467E+00 3 0.2226104E-01 0.4562501E+00 4 0.1708158E-01 0.3500947E+00 5 0.1316314E-01 0.2697844E+00 6 0.1013992E-01 0.2078222E+00 7 0.7804566E-02 0.1599581E+00 8 0.6017309E-02 0.1233274E+00 9 0.4636865E-02 0.9503463E-01 10 0.3570099E-02 0.7317079E-01 11 0.2754471E-02 0.5645413E-01 12 0.2120934E-02 0.4346949E-01 13 0.1634991E-02 0.3350988E-01 14 0.1261200E-02 0.2584886E-01 15 0.9718644E-03 0.1991880E-01 16 0.7494521E-03 0.1536036E-01 17 0.5779479E-03 0.1184530E-01 18 0.4454814E-03 0.9130340E-02 19 0.3434477E-03 0.7039115E-02 20 0.2648363E-03 0.5427939E-02 Result GMRES:20, 5.E-2, 2.648362941608E-4, 1 2 40 0.2648363E-03 0.8320726E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2648363E-03 1 0.2113530E-03 0.7980516E+00 2 0.1586902E-03 0.5992012E+00 3 0.1217206E-03 0.4596069E+00 4 0.9356799E-04 0.3533050E+00 5 0.7215596E-04 0.2724549E+00 6 0.5552869E-04 0.2096717E+00 7 0.4273709E-04 0.1613717E+00 8 0.3281281E-04 0.1238985E+00 9 0.2515137E-04 0.9496948E-01 10 0.1923172E-04 0.7261738E-01 11 0.1468994E-04 0.5546802E-01 12 0.1121543E-04 0.4234856E-01 13 0.8561805E-05 0.3232867E-01 14 0.6533767E-05 0.2467097E-01 15 0.4982620E-05 0.1881396E-01 16 0.3803570E-05 0.1436197E-01 17 0.2906348E-05 0.1097413E-01 18 0.2217249E-05 0.8372151E-02 19 0.1690633E-05 0.6383692E-02 20 0.1283303E-05 0.4845648E-02 Result GMRES:20, 5.E-2, 1.283303469766E-6, 1 3 60 0.1283303E-05 0.4544308E-03 NI: 1, NLI: 63, ERLI 0.1283303E-05, ERNI: 0.9710466E+02 Max. and WRMS norm residual= 0.1525417E+00 0.2636438E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4650 # it. GCRO # it.GMRES Error Estimate 0 0 0.1640942E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1640942E+01 1 0.5814715E+00 0.3543522E+00 2 0.2834710E+00 0.1727490E+00 3 0.2123388E+00 0.1294005E+00 4 0.1371815E+00 0.8359922E-01 5 0.9977481E-01 0.6080338E-01 6 0.7179025E-01 0.4374941E-01 7 0.5158767E-01 0.3143784E-01 8 0.3831895E-01 0.2335180E-01 9 0.2774041E-01 0.1690517E-01 10 0.2076368E-01 0.1265351E-01 11 0.1524880E-01 0.9292711E-02 12 0.1140878E-01 0.6952581E-02 13 0.8493754E-02 0.5176145E-02 14 0.6347669E-02 0.3868308E-02 15 0.4772880E-02 0.2908622E-02 16 0.3569801E-02 0.2175458E-02 17 0.2699063E-02 0.1644825E-02 18 0.2025986E-02 0.1234648E-02 19 0.1534335E-02 0.9350333E-03 Result GMRES:19, 2.5E-2, 1.5343353927053E-3, 0 1 19 0.1534335E-02 0.2860566E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1534335E-02 1 0.1215787E-02 0.7923868E+00 2 0.8860396E-03 0.5774745E+00 3 0.6747041E-03 0.4397370E+00 4 0.5081767E-03 0.3312032E+00 5 0.3876118E-03 0.2526252E+00 6 0.2945768E-03 0.1919898E+00 7 0.2243341E-03 0.1462093E+00 8 0.1713221E-03 0.1116588E+00 9 0.1305147E-03 0.8506272E-01 10 0.9972433E-04 0.6499513E-01 11 0.7618613E-04 0.4965416E-01 12 0.5815628E-04 0.3790324E-01 13 0.4452294E-04 0.2901774E-01 14 0.3396866E-04 0.2213901E-01 15 0.2602568E-04 0.1696218E-01 16 0.1985279E-04 0.1293902E-01 17 0.1521746E-04 0.9917947E-02 18 0.1161384E-04 0.7569299E-02 19 0.8908059E-05 0.5805810E-02 20 0.6809468E-05 0.4438057E-02 Result GMRES:20, 2.5E-2, 6.809468457809E-6, 1 2 39 0.6809468E-05 0.2405512E-02 NI: 2, NLI: 41, ERLI 0.6809468E-05, ERNI: 0.2860579E+01 T= 0.65E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.41E+00 TN= 0.62E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.67E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.6708385E+00 Max. and WRMS norm residual= 0.1021127E+00 0.8961410E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3157241E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3157241E+01 1 0.8254534E-01 0.2614477E-01 2 0.5280925E-02 0.1672639E-02 3 0.3234879E-03 0.1024590E-03 Result GMRES:3, 5.E-2, 3.2348788669329E-4, 0 1 3 0.3234879E-03 0.3171574E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3234879E-03 1 0.2835193E-04 0.8764450E-01 2 0.1576364E-05 0.4873022E-02 3 0.1038673E-06 0.3210855E-03 Result GMRES:3, 5.E-2, 1.0386728187339E-7, 0 2 6 0.1038673E-06 0.3228993E-03 NI: 1, NLI: 8, ERLI 0.1038673E-06, ERNI: 0.3171571E+01 Max. and WRMS norm residual= 0.1953527E-05 0.1628240E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2582357E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2582357E-04 1 0.1889904E-05 0.7318522E-01 2 0.1332847E-06 0.5161360E-02 3 0.8935990E-08 0.3460400E-03 Result GMRES:3, 2.5E-2, 8.9359897675544E-9, 0 1 3 0.8935990E-08 0.2636642E-04 NI: 2, NLI: 4, ERLI 0.8935990E-08, ERNI: 0.2636642E-04 T= 0.67E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.53E+01 Time integration at T= 0.67E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.6708385E+00 Max. and WRMS norm residual= 0.2410966E+01 0.2777214E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.4896684E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4896684E+02 1 0.3881846E+01 0.7927498E-01 2 0.5413250E+00 0.1105493E-01 3 0.1104868E+00 0.2256359E-02 4 0.2623484E-01 0.5357675E-03 Result GMRES:4, 5.E-2, 2.6234842723816E-2, 0 1 4 0.2623484E-01 0.5029284E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2623484E-01 1 0.8032051E-02 0.3061597E+00 2 0.1511341E-02 0.5760815E-01 3 0.2796294E-03 0.1065870E-01 4 0.3846135E-04 0.1466041E-02 5 0.9510849E-05 0.3625274E-03 Result GMRES:5, 5.E-2, 9.5108490221976E-6, 0 2 9 0.9510849E-05 0.2524974E-01 NI: 1, NLI: 11, ERLI 0.9510849E-05, ERNI: 0.5029252E+02 Max. and WRMS norm residual= 0.4127335E-02 0.5174069E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.8158321E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8158321E-01 1 0.9739678E-02 0.1193834E+00 2 0.1675773E-02 0.2054066E-01 3 0.3877917E-03 0.4753327E-02 4 0.8022264E-04 0.9833229E-03 Result GMRES:4, 2.5E-2, 8.0222641089592E-5, 0 1 4 0.8022264E-04 0.8462578E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8022264E-04 1 0.2199648E-04 0.2741929E+00 2 0.4642768E-05 0.5787354E-01 3 0.8919895E-06 0.1111892E-01 4 0.1131043E-06 0.1409880E-02 5 0.2573996E-07 0.3208566E-03 Result GMRES:5, 2.5E-2, 2.5739962100236E-8, 0 2 9 0.2573996E-07 0.7767379E-04 NI: 2, NLI: 11, ERLI 0.2573996E-07, ERNI: 0.8462624E-01 T= 0.67E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.44E+01 Time integration at T= 0.67E+00, Grid level= 3, NPTS= 466 Nonlinear system solver at T = 0.6708385E+00 Max. and WRMS norm residual= 0.2418080E+01 0.3264233E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 932 # it. GCRO # it.GMRES Error Estimate 0 0 0.5491768E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5491768E+02 1 0.6867426E+01 0.1250495E+00 2 0.1695092E+01 0.3086604E-01 3 0.6065675E+00 0.1104503E-01 4 0.2547502E+00 0.4638764E-02 5 0.8494948E-01 0.1546851E-02 6 0.3495701E-01 0.6365347E-03 Result GMRES:6, 5.E-2, 3.4957008511266E-2, 0 1 6 0.3495701E-01 0.5713460E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3495701E-01 1 0.1761804E-01 0.5039916E+00 2 0.6297499E-02 0.1801498E+00 3 0.2462002E-02 0.7042943E-01 4 0.9549113E-03 0.2731674E-01 5 0.2923355E-03 0.8362716E-02 6 0.1245116E-03 0.3561850E-02 7 0.4686630E-04 0.1340684E-02 8 0.1572504E-04 0.4498394E-03 Result GMRES:8, 5.E-2, 1.5725039552306E-5, 0 2 14 0.1572504E-04 0.3176983E-01 NI: 1, NLI: 16, ERLI 0.1572504E-04, ERNI: 0.5713480E+02 Max. and WRMS norm residual= 0.4502493E-01 0.5979507E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 932 # it. GCRO # it.GMRES Error Estimate 0 0 0.9056297E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9056297E+00 1 0.1567469E+00 0.1730805E+00 2 0.4331723E-01 0.4783106E-01 3 0.1831218E-01 0.2022038E-01 4 0.6207502E-02 0.6854348E-02 5 0.2394291E-02 0.2643786E-02 6 0.9163108E-03 0.1011794E-02 7 0.3389763E-03 0.3742990E-03 Result GMRES:7, 2.5E-2, 3.3897632406805E-4, 0 1 7 0.3389763E-03 0.9559874E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3389763E-03 1 0.1705701E-03 0.5031918E+00 2 0.6163167E-04 0.1818170E+00 3 0.2420088E-04 0.7139401E-01 4 0.8817139E-05 0.2601108E-01 5 0.3465542E-05 0.1022355E-01 6 0.1286504E-05 0.3795264E-02 7 0.4226507E-06 0.1246844E-02 8 0.1807908E-06 0.5333434E-03 Result GMRES:8, 2.5E-2, 1.8079076833584E-7, 0 2 15 0.1807908E-06 0.3024064E-03 NI: 2, NLI: 17, ERLI 0.1807908E-06, ERNI: 0.9559884E+00 T= 0.67E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.32E+01 Time integration at T= 0.67E+00, Grid level= 4, NPTS= 1033 Nonlinear system solver at T = 0.6708385E+00 Max. and WRMS norm residual= 0.2887034E+01 0.4580784E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2066 # it. GCRO # it.GMRES Error Estimate 0 0 0.6014593E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6014593E+02 1 0.1301354E+02 0.2163661E+00 2 0.4779411E+01 0.7946358E-01 3 0.2536701E+01 0.4217577E-01 4 0.1523039E+01 0.2532239E-01 5 0.7730563E+00 0.1285301E-01 6 0.4596832E+00 0.7642798E-02 7 0.2576589E+00 0.4283896E-02 8 0.1495019E+00 0.2485653E-02 9 0.8819806E-01 0.1466401E-02 10 0.5098449E-01 0.8476799E-03 11 0.3061129E-01 0.5089504E-03 Result GMRES:11, 5.E-2, 3.061129428423E-2, 0 1 11 0.3061129E-01 0.7484341E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3061129E-01 1 0.2101272E-01 0.6864367E+00 2 0.1163513E-01 0.3800928E+00 3 0.6832231E-02 0.2231931E+00 4 0.4080785E-02 0.1333098E+00 5 0.2346557E-02 0.7665659E-01 6 0.1456625E-02 0.4758455E-01 7 0.8366321E-03 0.2733083E-01 8 0.5173032E-03 0.1689910E-01 9 0.3045779E-03 0.9949855E-02 10 0.1846444E-03 0.6031904E-02 11 0.1106899E-03 0.3615984E-02 12 0.6698793E-04 0.2188340E-02 13 0.4001274E-04 0.1307124E-02 14 0.2415253E-04 0.7890072E-03 Result GMRES:14, 5.E-2, 2.415253192168E-5, 0 2 25 0.2415253E-04 0.2942505E-01 NI: 1, NLI: 27, ERLI 0.2415253E-04, ERNI: 0.7484491E+02 Max. and WRMS norm residual= 0.1025432E+00 0.1501478E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2066 # it. GCRO # it.GMRES Error Estimate 0 0 0.1776993E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1776993E+01 1 0.4503633E+00 0.2534412E+00 2 0.1674180E+00 0.9421418E-01 3 0.1086637E+00 0.6115030E-01 4 0.4909622E-01 0.2762882E-01 5 0.3025566E-01 0.1702632E-01 6 0.1591010E-01 0.8953383E-02 7 0.9463701E-02 0.5325682E-02 8 0.5325242E-02 0.2996771E-02 9 0.3110191E-02 0.1750255E-02 10 0.1807861E-02 0.1017371E-02 11 0.1049111E-02 0.5903852E-03 Result GMRES:11, 2.5E-2, 1.0491106157407E-3, 0 1 11 0.1049111E-02 0.1898975E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1049111E-02 1 0.7151823E-03 0.6817034E+00 2 0.3871730E-03 0.3690488E+00 3 0.2247854E-03 0.2142629E+00 4 0.1309102E-03 0.1247821E+00 5 0.7543441E-04 0.7190320E-01 6 0.4491145E-04 0.4280907E-01 7 0.2628596E-04 0.2505547E-01 8 0.1567815E-04 0.1494423E-01 9 0.9181258E-05 0.8751468E-02 10 0.5516616E-05 0.5258374E-02 11 0.3249937E-05 0.3097802E-02 12 0.1928063E-05 0.1837807E-02 13 0.1140050E-05 0.1086683E-02 14 0.6701011E-06 0.6387325E-03 Result GMRES:14, 2.5E-2, 6.7010105147587E-7, 0 2 25 0.6701011E-06 0.9687024E-03 NI: 2, NLI: 27, ERLI 0.6701011E-06, ERNI: 0.1899037E+01 T= 0.67E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.67E+00, Grid level= 5, NPTS= 2301 Nonlinear system solver at T = 0.6708385E+00 Max. and WRMS norm residual= 0.3100397E+01 0.6244279E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4602 # it. GCRO # it.GMRES Error Estimate 0 0 0.4558872E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4558872E+02 1 0.2213427E+02 0.4855208E+00 2 0.1053460E+02 0.2310791E+00 3 0.6839087E+01 0.1500171E+00 4 0.4738486E+01 0.1039399E+00 5 0.3347210E+01 0.7342191E-01 6 0.2439812E+01 0.5351790E-01 7 0.1787685E+01 0.3921333E-01 8 0.1327236E+01 0.2911326E-01 9 0.9915825E+00 0.2175061E-01 10 0.7457092E+00 0.1635732E-01 11 0.5640985E+00 0.1237364E-01 12 0.4279691E+00 0.9387609E-02 13 0.3254730E+00 0.7139332E-02 14 0.2479148E+00 0.5438074E-02 15 0.1891397E+00 0.4148827E-02 16 0.1445995E+00 0.3171828E-02 17 0.1106847E+00 0.2427897E-02 18 0.8480822E-01 0.1860290E-02 19 0.6503293E-01 0.1426514E-02 20 0.4991258E-01 0.1094845E-02 Result GMRES:20, 5.E-2, 4.991257700615E-2, 1 1 20 0.4991258E-01 0.9758944E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4991258E-01 1 0.3977919E-01 0.7969773E+00 2 0.2974630E-01 0.5959681E+00 3 0.2278183E-01 0.4564347E+00 4 0.1747870E-01 0.3501862E+00 5 0.1347176E-01 0.2699072E+00 6 0.1037648E-01 0.2078930E+00 7 0.7988363E-02 0.1600471E+00 8 0.6156438E-02 0.1233444E+00 9 0.4745523E-02 0.9507670E-01 10 0.3652918E-02 0.7318632E-01 11 0.2816735E-02 0.5643337E-01 12 0.2170090E-02 0.4347783E-01 13 0.1671955E-02 0.3349767E-01 14 0.1289479E-02 0.2583474E-01 15 0.9934504E-03 0.1990381E-01 16 0.7656088E-03 0.1533899E-01 17 0.5902865E-03 0.1182641E-01 18 0.4547845E-03 0.9111620E-02 19 0.3504325E-03 0.7020926E-02 20 0.2700804E-03 0.5411069E-02 Result GMRES:20, 5.E-2, 2.7008041076367E-4, 1 2 40 0.2700804E-03 0.8500788E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2700804E-03 1 0.2154767E-03 0.7978242E+00 2 0.1616586E-03 0.5985572E+00 3 0.1239223E-03 0.4588347E+00 4 0.9521476E-04 0.3525423E+00 5 0.7340162E-04 0.2717769E+00 6 0.5647814E-04 0.2091160E+00 7 0.4349228E-04 0.1610346E+00 8 0.3343991E-04 0.1238146E+00 9 0.2569020E-04 0.9512058E-01 10 0.1969280E-04 0.7291457E-01 11 0.1506398E-04 0.5577589E-01 12 0.1149756E-04 0.4257087E-01 13 0.8761738E-05 0.3244122E-01 14 0.6673066E-05 0.2470770E-01 15 0.5077577E-05 0.1880024E-01 16 0.3860683E-05 0.1429457E-01 17 0.2936678E-05 0.1087335E-01 18 0.2234161E-05 0.8272207E-02 19 0.1700326E-05 0.6295629E-02 20 0.1286750E-05 0.4764321E-02 Result GMRES:20, 5.E-2, 1.286749769059E-6, 1 3 60 0.1286750E-05 0.4622311E-03 NI: 1, NLI: 63, ERLI 0.1286750E-05, ERNI: 0.9759131E+02 Max. and WRMS norm residual= 0.1483902E+00 0.2650061E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4602 # it. GCRO # it.GMRES Error Estimate 0 0 0.1649433E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1649433E+01 1 0.5843720E+00 0.3542866E+00 2 0.2849152E+00 0.1727352E+00 3 0.2134122E+00 0.1293852E+00 4 0.1378890E+00 0.8359781E-01 5 0.1002710E+00 0.6079123E-01 6 0.7215900E-01 0.4374776E-01 7 0.5185604E-01 0.3143871E-01 8 0.3852527E-01 0.2335668E-01 9 0.2790404E-01 0.1691735E-01 10 0.2088989E-01 0.1266490E-01 11 0.1535714E-01 0.9310556E-02 12 0.1149019E-01 0.6966148E-02 13 0.8565763E-02 0.5193157E-02 14 0.6402883E-02 0.3881869E-02 15 0.4818504E-02 0.2921310E-02 16 0.3607739E-02 0.2187261E-02 17 0.2728307E-02 0.1654088E-02 18 0.2051586E-02 0.1243813E-02 19 0.1553317E-02 0.9417279E-03 Result GMRES:19, 2.5E-2, 1.5533168356908E-3, 0 1 19 0.1553317E-02 0.2875188E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1553317E-02 1 0.1229091E-02 0.7912690E+00 2 0.8973184E-03 0.5776789E+00 3 0.6826206E-03 0.4394600E+00 4 0.5149016E-03 0.3314852E+00 5 0.3923915E-03 0.2526153E+00 6 0.2985230E-03 0.1921842E+00 7 0.2271254E-03 0.1462196E+00 8 0.1733202E-03 0.1115807E+00 9 0.1320807E-03 0.8503138E-01 10 0.1007840E-03 0.6488309E-01 11 0.7691389E-04 0.4951591E-01 12 0.5875278E-04 0.3782408E-01 13 0.4484816E-04 0.2887251E-01 14 0.3426037E-04 0.2205627E-01 15 0.2617174E-04 0.1684894E-01 16 0.1998591E-04 0.1286660E-01 17 0.1527568E-04 0.9834231E-02 18 0.1166831E-04 0.7511865E-02 19 0.8923155E-05 0.5744582E-02 20 0.6828240E-05 0.4395909E-02 Result GMRES:20, 2.5E-2, 6.8282400120071E-6, 1 2 39 0.6828240E-05 0.2423462E-02 NI: 2, NLI: 41, ERLI 0.6828240E-05, ERNI: 0.2875202E+01 T= 0.67E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.41E+00 TN= 0.65E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.69E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.6943500E+00 Max. and WRMS norm residual= 0.1951128E+00 0.1704019E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6321459E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6321459E+01 1 0.1706975E+00 0.2700286E-01 2 0.1144973E-01 0.1811248E-02 3 0.7500893E-03 0.1186576E-03 Result GMRES:3, 5.E-2, 7.5008933572757E-4, 0 1 3 0.7500893E-03 0.6347537E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7500893E-03 1 0.6730740E-04 0.8973252E-01 2 0.3968594E-05 0.5290828E-02 3 0.2614570E-06 0.3485678E-03 Result GMRES:3, 5.E-2, 2.6145700114773E-7, 0 2 6 0.2614570E-06 0.7485897E-03 NI: 1, NLI: 8, ERLI 0.2614570E-06, ERNI: 0.6347530E+01 Max. and WRMS norm residual= 0.6007634E-05 0.4184689E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6635456E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6635456E-04 1 0.4890966E-05 0.7370958E-01 2 0.3914839E-06 0.5899880E-02 3 0.2910053E-07 0.4385611E-03 Result GMRES:3, 2.5E-2, 2.9100529554351E-8, 0 1 3 0.2910053E-07 0.6747369E-04 NI: 2, NLI: 4, ERLI 0.2910053E-07, ERNI: 0.6747369E-04 T= 0.69E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.52E+01 Time integration at T= 0.69E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.6943500E+00 Max. and WRMS norm residual= 0.1462799E+01 0.1761170E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.3073763E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3073763E+02 1 0.2354970E+01 0.7661522E-01 2 0.3469162E+00 0.1128637E-01 3 0.6894440E-01 0.2242997E-02 4 0.1679705E-01 0.5464654E-03 Result GMRES:4, 5.E-2, 1.6797050527854E-2, 0 1 4 0.1679705E-01 0.3140488E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1679705E-01 1 0.5137760E-02 0.3058728E+00 2 0.9778564E-03 0.5821596E-01 3 0.1778713E-03 0.1058944E-01 4 0.2504504E-04 0.1491038E-02 5 0.6107408E-05 0.3636000E-03 Result GMRES:5, 5.E-2, 6.1074082663756E-6, 0 2 9 0.6107408E-05 0.1626583E-01 NI: 1, NLI: 11, ERLI 0.6107408E-05, ERNI: 0.3140462E+02 Max. and WRMS norm residual= 0.2634971E-02 0.3381805E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.5357520E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5357520E-01 1 0.6143819E-02 0.1146765E+00 2 0.1063169E-02 0.1984442E-01 3 0.2422422E-03 0.4521537E-02 4 0.5174232E-04 0.9657887E-03 Result GMRES:4, 2.5E-2, 5.1742321827732E-5, 0 1 4 0.5174232E-04 0.5617614E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5174232E-04 1 0.1460414E-04 0.2822475E+00 2 0.3062387E-05 0.5918534E-01 3 0.5730309E-06 0.1107470E-01 4 0.7207152E-07 0.1392893E-02 5 0.1578121E-07 0.3049961E-03 Result GMRES:5, 2.5E-2, 1.578120730536E-8, 0 2 9 0.1578121E-07 0.5007860E-04 NI: 2, NLI: 11, ERLI 0.1578121E-07, ERNI: 0.5617642E-01 T= 0.69E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.50E+01 Time integration at T= 0.69E+00, Grid level= 3, NPTS= 442 Nonlinear system solver at T = 0.6943500E+00 Max. and WRMS norm residual= 0.2108625E+01 0.2999687E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 884 # it. GCRO # it.GMRES Error Estimate 0 0 0.5330488E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5330488E+02 1 0.6347664E+01 0.1190822E+00 2 0.1674874E+01 0.3142065E-01 3 0.5466557E+00 0.1025526E-01 4 0.2361251E+00 0.4429709E-02 5 0.7804862E-01 0.1464193E-02 6 0.3072626E-01 0.5764249E-03 Result GMRES:6, 5.E-2, 3.0726261751162E-2, 0 1 6 0.3072626E-01 0.5522732E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3072626E-01 1 0.1536419E-01 0.5000344E+00 2 0.5153944E-02 0.1677374E+00 3 0.2073233E-02 0.6747431E-01 4 0.7839588E-03 0.2551429E-01 5 0.2386785E-03 0.7767899E-02 6 0.9966142E-04 0.3243526E-02 7 0.3880420E-04 0.1262900E-02 8 0.1267717E-04 0.4125841E-03 Result GMRES:8, 5.E-2, 1.2677167625754E-5, 0 2 14 0.1267717E-04 0.2747401E-01 NI: 1, NLI: 16, ERLI 0.1267717E-04, ERNI: 0.5522799E+02 Max. and WRMS norm residual= 0.2958893E-01 0.4399399E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 884 # it. GCRO # it.GMRES Error Estimate 0 0 0.6638939E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6638939E+00 1 0.1135585E+00 0.1710491E+00 2 0.3082106E-01 0.4642467E-01 3 0.1311949E-01 0.1976142E-01 4 0.4437450E-02 0.6683975E-02 5 0.1721812E-02 0.2593505E-02 6 0.6549805E-03 0.9865740E-03 Result GMRES:6, 2.5E-2, 6.5498048017285E-4, 0 1 6 0.6549805E-03 0.7016577E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6549805E-03 1 0.3252563E-03 0.4965893E+00 2 0.1197441E-03 0.1828209E+00 3 0.4530142E-04 0.6916454E-01 4 0.1727741E-04 0.2637851E-01 5 0.6371661E-05 0.9728016E-02 6 0.2072326E-05 0.3163951E-02 7 0.9126692E-06 0.1393430E-02 8 0.2977696E-06 0.4546237E-03 Result GMRES:8, 2.5E-2, 2.977696267269E-7, 0 2 14 0.2977696E-06 0.5878681E-03 NI: 2, NLI: 16, ERLI 0.2977696E-06, ERNI: 0.7016571E+00 T= 0.69E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.69E+00, Grid level= 4, NPTS= 955 Nonlinear system solver at T = 0.6943500E+00 Max. and WRMS norm residual= 0.3027401E+01 0.4768797E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1910 # it. GCRO # it.GMRES Error Estimate 0 0 0.6261986E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6261986E+02 1 0.1358444E+02 0.2169351E+00 2 0.4955355E+01 0.7913392E-01 3 0.2654446E+01 0.4238985E-01 4 0.1590650E+01 0.2540168E-01 5 0.8114256E+00 0.1295796E-01 6 0.4820421E+00 0.7697910E-02 7 0.2700518E+00 0.4312559E-02 8 0.1556568E+00 0.2485742E-02 9 0.9158272E-01 0.1462519E-02 10 0.5316738E-01 0.8490499E-03 11 0.3177650E-01 0.5074508E-03 Result GMRES:11, 5.E-2, 3.1776496325106E-2, 0 1 11 0.3177650E-01 0.7796528E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3177650E-01 1 0.2178099E-01 0.6854434E+00 2 0.1207833E-01 0.3801027E+00 3 0.7067385E-02 0.2224092E+00 4 0.4213111E-02 0.1325857E+00 5 0.2417398E-02 0.7607504E-01 6 0.1497791E-02 0.4713519E-01 7 0.8541350E-03 0.2687946E-01 8 0.5306964E-03 0.1670091E-01 9 0.3084997E-03 0.9708425E-02 10 0.1881964E-03 0.5922504E-02 11 0.1118276E-03 0.3519191E-02 12 0.6774970E-04 0.2132069E-02 13 0.4049228E-04 0.1274284E-02 14 0.2424229E-04 0.7628999E-03 Result GMRES:14, 5.E-2, 2.4242285088335E-5, 0 2 25 0.2424229E-04 0.3061479E-01 NI: 1, NLI: 27, ERLI 0.2424229E-04, ERNI: 0.7796688E+02 Max. and WRMS norm residual= 0.1000723E+00 0.1601150E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1910 # it. GCRO # it.GMRES Error Estimate 0 0 0.1905094E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1905094E+01 1 0.4810829E+00 0.2525244E+00 2 0.1867864E+00 0.9804573E-01 3 0.1197048E+00 0.6283406E-01 4 0.5556800E-01 0.2916811E-01 5 0.3345508E-01 0.1756085E-01 6 0.1809382E-01 0.9497595E-02 7 0.1034686E-01 0.5431155E-02 8 0.5953017E-02 0.3124789E-02 9 0.3367920E-02 0.1767849E-02 10 0.2002048E-02 0.1050892E-02 11 0.1123934E-02 0.5899625E-03 Result GMRES:11, 2.5E-2, 1.1239343273268E-3, 0 1 11 0.1123934E-02 0.2037592E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1123934E-02 1 0.7682708E-03 0.6835549E+00 2 0.4121022E-03 0.3666604E+00 3 0.2409060E-03 0.2143417E+00 4 0.1394030E-03 0.1240313E+00 5 0.8050699E-04 0.7162962E-01 6 0.4749536E-04 0.4225813E-01 7 0.2806854E-04 0.2497347E-01 8 0.1652648E-04 0.1470413E-01 9 0.9787465E-05 0.8708218E-02 10 0.5802464E-05 0.5162636E-02 11 0.3458451E-05 0.3077094E-02 12 0.2041831E-05 0.1816682E-02 13 0.1212599E-05 0.1078888E-02 14 0.7155918E-06 0.6366847E-03 Result GMRES:14, 2.5E-2, 7.1559176629709E-7, 0 2 25 0.7155918E-06 0.1035630E-02 NI: 2, NLI: 27, ERLI 0.7155918E-06, ERNI: 0.2037648E+01 T= 0.69E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.69E+00, Grid level= 5, NPTS= 2311 Nonlinear system solver at T = 0.6943500E+00 Max. and WRMS norm residual= 0.3111454E+01 0.6229659E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.4548546E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4548546E+02 1 0.2208555E+02 0.4855518E+00 2 0.1051031E+02 0.2310697E+00 3 0.6823420E+01 0.1500132E+00 4 0.4727024E+01 0.1039239E+00 5 0.3335595E+01 0.7333320E-01 6 0.2428158E+01 0.5338318E-01 7 0.1776582E+01 0.3905823E-01 8 0.1317196E+01 0.2895862E-01 9 0.9822170E+00 0.2159409E-01 10 0.7371528E+00 0.1620634E-01 11 0.5564883E+00 0.1223442E-01 12 0.4215353E+00 0.9267474E-02 13 0.3202564E+00 0.7040852E-02 14 0.2437895E+00 0.5359723E-02 15 0.1858757E+00 0.4086486E-02 16 0.1420224E+00 0.3122370E-02 17 0.1086416E+00 0.2388491E-02 18 0.8322372E-01 0.1829677E-02 19 0.6380344E-01 0.1402722E-02 20 0.4895554E-01 0.1076290E-02 Result GMRES:20, 5.E-2, 4.8955535828193E-2, 1 1 20 0.4895554E-01 0.9737045E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4895554E-01 1 0.3901848E-01 0.7970187E+00 2 0.2917145E-01 0.5958764E+00 3 0.2233255E-01 0.4561803E+00 4 0.1713397E-01 0.3499905E+00 5 0.1320281E-01 0.2696899E+00 6 0.1016963E-01 0.2077319E+00 7 0.7827726E-02 0.1598946E+00 8 0.6034204E-02 0.1232589E+00 9 0.4650235E-02 0.9498896E-01 10 0.3579874E-02 0.7312502E-01 11 0.2761943E-02 0.5641738E-01 12 0.2126720E-02 0.4344187E-01 13 0.1639226E-02 0.3348398E-01 14 0.1264539E-02 0.2583036E-01 15 0.9743615E-03 0.1990299E-01 16 0.7513293E-03 0.1534718E-01 17 0.5793887E-03 0.1183500E-01 18 0.4465500E-03 0.9121543E-02 19 0.3442681E-03 0.7032260E-02 20 0.2654634E-03 0.5422541E-02 Result GMRES:20, 5.E-2, 2.6546341839879E-4, 1 2 40 0.2654634E-03 0.8346922E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2654634E-03 1 0.2118435E-03 0.7980139E+00 2 0.1590563E-03 0.5991645E+00 3 0.1220021E-03 0.4595814E+00 4 0.9379063E-04 0.3533090E+00 5 0.7234496E-04 0.2725233E+00 6 0.5571469E-04 0.2098771E+00 7 0.4294220E-04 0.1617632E+00 8 0.3306160E-04 0.1245430E+00 9 0.2544835E-04 0.9586386E-01 10 0.1956134E-04 0.7368751E-01 11 0.1501583E-04 0.5656459E-01 12 0.1149787E-04 0.4331243E-01 13 0.8779199E-05 0.3307122E-01 14 0.6686947E-05 0.2518971E-01 15 0.5079087E-05 0.1913291E-01 16 0.3857398E-05 0.1453081E-01 17 0.2924634E-05 0.1101709E-01 18 0.2217241E-05 0.8352342E-02 19 0.1686264E-05 0.6352151E-02 20 0.1274202E-05 0.4799914E-02 Result GMRES:20, 5.E-2, 1.2742016472742E-6, 1 3 60 0.1274202E-05 0.4552671E-03 NI: 1, NLI: 63, ERLI 0.1274202E-05, ERNI: 0.9737227E+02 Max. and WRMS norm residual= 0.1436429E+00 0.2644286E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4622 # it. GCRO # it.GMRES Error Estimate 0 0 0.1645842E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1645842E+01 1 0.5830487E+00 0.3542555E+00 2 0.2842814E+00 0.1727270E+00 3 0.2129103E+00 0.1293625E+00 4 0.1375332E+00 0.8356405E-01 5 0.9999969E-01 0.6075898E-01 6 0.7197921E-01 0.4373397E-01 7 0.5171358E-01 0.3142074E-01 8 0.3841888E-01 0.2334299E-01 9 0.2781164E-01 0.1689812E-01 10 0.2081731E-01 0.1264842E-01 11 0.1529007E-01 0.9290122E-02 12 0.1143827E-01 0.6949800E-02 13 0.8517884E-02 0.5175395E-02 14 0.6364610E-02 0.3867084E-02 15 0.4786983E-02 0.2908531E-02 16 0.3579801E-02 0.2175057E-02 17 0.2706927E-02 0.1644706E-02 18 0.2031688E-02 0.1234437E-02 19 0.1538568E-02 0.9348209E-03 Result GMRES:19, 2.5E-2, 1.5385675887164E-3, 0 1 19 0.1538568E-02 0.2868808E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1538568E-02 1 0.1219121E-02 0.7923742E+00 2 0.8884219E-03 0.5774345E+00 3 0.6764548E-03 0.4396653E+00 4 0.5095680E-03 0.3311964E+00 5 0.3885258E-03 0.2525244E+00 6 0.2953983E-03 0.1919957E+00 7 0.2248146E-03 0.1461194E+00 8 0.1717922E-03 0.1116573E+00 9 0.1307569E-03 0.8498614E-01 10 0.9998218E-04 0.6498394E-01 11 0.7631659E-04 0.4960236E-01 12 0.5828167E-04 0.3788048E-01 13 0.4459644E-04 0.2898569E-01 14 0.3402896E-04 0.2211730E-01 15 0.2606796E-04 0.1694301E-01 16 0.1988095E-04 0.1292172E-01 17 0.1524042E-04 0.9905592E-02 18 0.1162846E-04 0.7557977E-02 19 0.8919810E-05 0.5797477E-02 20 0.6817220E-05 0.4430887E-02 Result GMRES:20, 2.5E-2, 6.8172197374162E-6, 1 2 39 0.6817220E-05 0.2410976E-02 NI: 2, NLI: 41, ERLI 0.6817220E-05, ERNI: 0.2868823E+01 T= 0.69E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.42E+00 TN= 0.67E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.72E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.7178616E+00 Max. and WRMS norm residual= 0.3640978E+00 0.3179387E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1233885E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1233885E+02 1 0.3423498E+00 0.2774569E-01 2 0.2306595E-01 0.1869376E-02 3 0.1611608E-02 0.1306125E-03 Result GMRES:3, 5.E-2, 1.6116077695999E-3, 0 1 3 0.1611608E-02 0.1238893E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1611608E-02 1 0.1428345E-03 0.8862856E-01 2 0.9152175E-05 0.5678910E-02 3 0.6147704E-06 0.3814640E-03 Result GMRES:3, 5.E-2, 6.1477035968057E-7, 0 2 6 0.6147704E-06 0.1609431E-02 NI: 1, NLI: 8, ERLI 0.6147704E-06, ERNI: 0.1238891E+02 Max. and WRMS norm residual= 0.2979857E-04 0.2074769E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3287804E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3287804E-03 1 0.2360234E-04 0.7178756E-01 2 0.1855027E-05 0.5642145E-02 3 0.1356765E-06 0.4126660E-03 Result GMRES:3, 2.5E-2, 1.3567649095879E-7, 0 1 3 0.1356765E-06 0.3341158E-03 NI: 2, NLI: 4, ERLI 0.1356765E-06, ERNI: 0.3341158E-03 T= 0.72E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.51E+01 Time integration at T= 0.72E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.7178616E+00 Max. and WRMS norm residual= 0.6628472E+00 0.8941142E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.1739922E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1739922E+02 1 0.1078528E+01 0.6198716E-01 2 0.1857512E+00 0.1067583E-01 3 0.3335220E-01 0.1916879E-02 4 0.8779397E-02 0.5045855E-03 Result GMRES:4, 5.E-2, 8.7793969722521E-3, 0 1 4 0.8779397E-02 0.1749120E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8779397E-02 1 0.2757872E-02 0.3141300E+00 2 0.5395053E-03 0.6145129E-01 3 0.8080201E-04 0.9203594E-02 4 0.1352091E-04 0.1540072E-02 5 0.3138444E-05 0.3574783E-03 Result GMRES:5, 5.E-2, 3.1384440858659E-6, 0 2 9 0.3138444E-05 0.8620187E-02 NI: 1, NLI: 11, ERLI 0.3138444E-05, ERNI: 0.1749111E+02 Max. and WRMS norm residual= 0.1604279E-02 0.2187024E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.3472990E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3472990E-01 1 0.4085974E-02 0.1176500E+00 2 0.6866011E-03 0.1976974E-01 3 0.1562154E-03 0.4498009E-02 4 0.3385400E-04 0.9747796E-03 Result GMRES:4, 2.5E-2, 3.3853998760266E-5, 0 1 4 0.3385400E-04 0.3680379E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3385400E-04 1 0.9744475E-05 0.2878382E+00 2 0.2023206E-05 0.5976268E-01 3 0.3720827E-06 0.1099081E-01 4 0.4694962E-07 0.1386826E-02 5 0.1041827E-07 0.3077412E-03 Result GMRES:5, 2.5E-2, 1.0418269491024E-8, 0 2 9 0.1041827E-07 0.3279837E-04 NI: 2, NLI: 11, ERLI 0.1041827E-07, ERNI: 0.3680387E-01 T= 0.72E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.53E+01 Time integration at T= 0.72E+00, Grid level= 3, NPTS= 470 Nonlinear system solver at T = 0.7178616E+00 Max. and WRMS norm residual= 0.2781156E+01 0.3231300E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 940 # it. GCRO # it.GMRES Error Estimate 0 0 0.5697626E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5697626E+02 1 0.7220162E+01 0.1267223E+00 2 0.1403435E+01 0.2463193E-01 3 0.4215554E+00 0.7398791E-02 4 0.1821098E+00 0.3196241E-02 5 0.6239838E-01 0.1095165E-02 6 0.2435098E-01 0.4273882E-03 Result GMRES:6, 5.E-2, 2.4350982862323E-2, 0 1 6 0.2435098E-01 0.6004628E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2435098E-01 1 0.1216562E-01 0.4995947E+00 2 0.4265264E-02 0.1751578E+00 3 0.1715048E-02 0.7043034E-01 4 0.6347631E-03 0.2606725E-01 5 0.2192272E-03 0.9002807E-02 6 0.8780290E-04 0.3605723E-02 7 0.3454191E-04 0.1418502E-02 8 0.1165779E-04 0.4787401E-03 Result GMRES:8, 5.E-2, 1.1657791336833E-5, 0 2 14 0.1165779E-04 0.2162633E-01 NI: 1, NLI: 16, ERLI 0.1165779E-04, ERNI: 0.6004652E+02 Max. and WRMS norm residual= 0.1483083E-01 0.2070762E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 940 # it. GCRO # it.GMRES Error Estimate 0 0 0.3062596E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3062596E+00 1 0.4780152E-01 0.1560817E+00 2 0.1571385E-01 0.5130894E-01 3 0.6380440E-02 0.2083344E-01 4 0.2413154E-02 0.7879441E-02 5 0.8850049E-03 0.2889722E-02 6 0.3593759E-03 0.1173436E-02 7 0.1321886E-03 0.4316229E-03 Result GMRES:7, 2.5E-2, 1.3218863011333E-4, 0 1 7 0.1321886E-03 0.3102509E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1321886E-03 1 0.6636881E-04 0.5020765E+00 2 0.2438101E-04 0.1844411E+00 3 0.9335594E-05 0.7062327E-01 4 0.3394830E-05 0.2568171E-01 5 0.1305006E-05 0.9872298E-02 6 0.4894635E-06 0.3702765E-02 7 0.1512196E-06 0.1143968E-02 8 0.6560003E-07 0.4962607E-03 Result GMRES:8, 2.5E-2, 6.560002567176E-8, 0 2 15 0.6560003E-07 0.1187386E-03 NI: 2, NLI: 17, ERLI 0.6560003E-07, ERNI: 0.3102528E+00 T= 0.72E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.72E+00, Grid level= 4, NPTS= 1015 Nonlinear system solver at T = 0.7178616E+00 Max. and WRMS norm residual= 0.2826432E+01 0.4621128E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2030 # it. GCRO # it.GMRES Error Estimate 0 0 0.6067795E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6067795E+02 1 0.1311770E+02 0.2161857E+00 2 0.4828394E+01 0.7957411E-01 3 0.2553946E+01 0.4209019E-01 4 0.1529358E+01 0.2520451E-01 5 0.7779258E+00 0.1282057E-01 6 0.4623615E+00 0.7619926E-02 7 0.2590489E+00 0.4269243E-02 8 0.1499832E+00 0.2471790E-02 9 0.8818078E-01 0.1453259E-02 10 0.5112077E-01 0.8424933E-03 11 0.3066694E-01 0.5054050E-03 Result GMRES:11, 5.E-2, 3.0666941190314E-2, 0 1 11 0.3066694E-01 0.7549994E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3066694E-01 1 0.2103083E-01 0.6857816E+00 2 0.1165531E-01 0.3800609E+00 3 0.6830872E-02 0.2227438E+00 4 0.4068383E-02 0.1326635E+00 5 0.2337950E-02 0.7623683E-01 6 0.1449570E-02 0.4726817E-01 7 0.8268617E-03 0.2696264E-01 8 0.5132730E-03 0.1673701E-01 9 0.2992764E-03 0.9758925E-02 10 0.1817623E-03 0.5926978E-02 11 0.1088052E-03 0.3547965E-02 12 0.6541218E-04 0.2132987E-02 13 0.3938474E-04 0.1284274E-02 14 0.2349183E-04 0.7660311E-03 Result GMRES:14, 5.E-2, 2.3491829308716E-5, 0 2 25 0.2349183E-04 0.2953053E-01 NI: 1, NLI: 27, ERLI 0.2349183E-04, ERNI: 0.7550148E+02 Max. and WRMS norm residual= 0.1055527E+00 0.1538507E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2030 # it. GCRO # it.GMRES Error Estimate 0 0 0.1824116E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1824116E+01 1 0.4601237E+00 0.2522447E+00 2 0.1685042E+00 0.9237578E-01 3 0.1095478E+00 0.6005528E-01 4 0.4957193E-01 0.2717586E-01 5 0.3061774E-01 0.1678497E-01 6 0.1608277E-01 0.8816748E-02 7 0.9545554E-02 0.5232974E-02 8 0.5356086E-02 0.2936263E-02 9 0.3129862E-02 0.1715823E-02 10 0.1816324E-02 0.9957280E-03 Result GMRES:10, 2.5E-2, 1.8163237163664E-3, 0 1 10 0.1816324E-02 0.1945581E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1816324E-02 1 0.1232017E-02 0.6783028E+00 2 0.6748991E-03 0.3715743E+00 3 0.3848034E-03 0.2118584E+00 4 0.2275176E-03 0.1252627E+00 5 0.1276938E-03 0.7030344E-01 6 0.7846715E-04 0.4320108E-01 7 0.4352196E-04 0.2396156E-01 8 0.2696383E-04 0.1484528E-01 9 0.1529115E-04 0.8418738E-02 10 0.9207366E-05 0.5069232E-02 11 0.5431406E-05 0.2990329E-02 12 0.3207893E-05 0.1766146E-02 13 0.1917529E-05 0.1055720E-02 14 0.1123286E-05 0.6184391E-03 Result GMRES:14, 2.5E-2, 1.123285638756E-6, 0 2 24 0.1123286E-05 0.1688082E-02 NI: 2, NLI: 26, ERLI 0.1123286E-05, ERNI: 0.1945674E+01 T= 0.72E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.72E+00, Grid level= 5, NPTS= 2287 Nonlinear system solver at T = 0.7178616E+00 Max. and WRMS norm residual= 0.3120895E+01 0.6261725E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4574 # it. GCRO # it.GMRES Error Estimate 0 0 0.4571939E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4571939E+02 1 0.2220072E+02 0.4855865E+00 2 0.1056724E+02 0.2311325E+00 3 0.6860099E+01 0.1500479E+00 4 0.4751541E+01 0.1039284E+00 5 0.3355500E+01 0.7339337E-01 6 0.2445565E+01 0.5349076E-01 7 0.1792455E+01 0.3920558E-01 8 0.1331253E+01 0.2911792E-01 9 0.9950593E+00 0.2176449E-01 10 0.7486533E+00 0.1637496E-01 11 0.5665417E+00 0.1239172E-01 12 0.4299105E+00 0.9403243E-02 13 0.3269814E+00 0.7151919E-02 14 0.2491085E+00 0.5448640E-02 15 0.1900908E+00 0.4157771E-02 16 0.1453486E+00 0.3179146E-02 17 0.1112713E+00 0.2433788E-02 18 0.8525902E-01 0.1864833E-02 19 0.6538750E-01 0.1430192E-02 20 0.5018776E-01 0.1097735E-02 Result GMRES:20, 5.E-2, 5.0187764112169E-2, 1 1 20 0.5018776E-01 0.9787368E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5018776E-01 1 0.3999484E-01 0.7969042E+00 2 0.2990817E-01 0.5959256E+00 3 0.2291073E-01 0.4565004E+00 4 0.1757611E-01 0.3502071E+00 5 0.1354733E-01 0.2699329E+00 6 0.1043376E-01 0.2078945E+00 7 0.8034069E-02 0.1600802E+00 8 0.6190727E-02 0.1233513E+00 9 0.4772084E-02 0.9508460E-01 10 0.3674022E-02 0.7320553E-01 11 0.2832554E-02 0.5643914E-01 12 0.2182778E-02 0.4349223E-01 13 0.1681686E-02 0.3350788E-01 14 0.1296918E-02 0.2584131E-01 15 0.9992867E-03 0.1991096E-01 16 0.7701022E-03 0.1534442E-01 17 0.5937220E-03 0.1183001E-01 18 0.4574824E-03 0.9115417E-02 19 0.3525011E-03 0.7023646E-02 20 0.2716674E-03 0.5413020E-02 Result GMRES:20, 5.E-2, 2.7166736878761E-4, 1 2 40 0.2716674E-03 0.8545989E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2716674E-03 1 0.2167450E-03 0.7978323E+00 2 0.1626056E-03 0.5985468E+00 3 0.1246540E-03 0.4588480E+00 4 0.9577538E-04 0.3525465E+00 5 0.7383745E-04 0.2717936E+00 6 0.5682197E-04 0.2091601E+00 7 0.4377159E-04 0.1611220E+00 8 0.3368073E-04 0.1239778E+00 9 0.2591466E-04 0.9539115E-01 10 0.1992111E-04 0.7332905E-01 11 0.1530124E-04 0.5632344E-01 12 0.1173897E-04 0.4321084E-01 13 0.8987282E-05 0.3308194E-01 14 0.6862466E-05 0.2526054E-01 15 0.5220986E-05 0.1921831E-01 16 0.3958137E-05 0.1456979E-01 17 0.2993499E-05 0.1101899E-01 18 0.2257383E-05 0.8309363E-02 19 0.1704311E-05 0.6273520E-02 20 0.1283166E-05 0.4723299E-02 Result GMRES:20, 5.E-2, 1.2831662873812E-6, 1 3 60 0.1283166E-05 0.4646866E-03 NI: 1, NLI: 63, ERLI 0.1283166E-05, ERNI: 0.9787557E+02 Max. and WRMS norm residual= 0.1423074E+00 0.2658001E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4574 # it. GCRO # it.GMRES Error Estimate 0 0 0.1654378E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1654378E+01 1 0.5860771E+00 0.3542584E+00 2 0.2856753E+00 0.1726784E+00 3 0.2138407E+00 0.1292575E+00 4 0.1381086E+00 0.8348071E-01 5 0.1004668E+00 0.6072785E-01 6 0.7231504E-01 0.4371133E-01 7 0.5196846E-01 0.3141270E-01 8 0.3861422E-01 0.2334064E-01 9 0.2797328E-01 0.1690865E-01 10 0.2094076E-01 0.1265779E-01 11 0.1539938E-01 0.9308265E-02 12 0.1152105E-01 0.6963978E-02 13 0.8590952E-02 0.5192861E-02 14 0.6422514E-02 0.3882133E-02 15 0.4833099E-02 0.2921400E-02 16 0.3620441E-02 0.2188401E-02 17 0.2736660E-02 0.1654193E-02 18 0.2059358E-02 0.1244793E-02 19 0.1558234E-02 0.9418854E-03 Result GMRES:19, 2.5E-2, 1.5582340950484E-3, 0 1 19 0.1558234E-02 0.2883496E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1558234E-02 1 0.1233046E-02 0.7913101E+00 2 0.9002323E-03 0.5777260E+00 3 0.6850685E-03 0.4396441E+00 4 0.5166485E-03 0.3315602E+00 5 0.3938893E-03 0.2527793E+00 6 0.2995777E-03 0.1922546E+00 7 0.2280416E-03 0.1463462E+00 8 0.1739477E-03 0.1116313E+00 9 0.1326308E-03 0.8511609E-01 10 0.1011660E-03 0.6492350E-01 11 0.7724164E-04 0.4956999E-01 12 0.5898704E-04 0.3785505E-01 13 0.4504438E-04 0.2890732E-01 14 0.3440129E-04 0.2207710E-01 15 0.2629215E-04 0.1687304E-01 16 0.2007010E-04 0.1288003E-01 17 0.1534825E-04 0.9849772E-02 18 0.1171977E-04 0.7521186E-02 19 0.8966365E-05 0.5754184E-02 20 0.6859208E-05 0.4401911E-02 Result GMRES:20, 2.5E-2, 6.8592078419985E-6, 1 2 39 0.6859208E-05 0.2431581E-02 NI: 2, NLI: 41, ERLI 0.6859208E-05, ERNI: 0.2883510E+01 T= 0.72E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.41E+00 TN= 0.69E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.74E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.7413731E+00 Max. and WRMS norm residual= 0.6569878E+00 0.5763988E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2290104E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2290104E+02 1 0.6451045E+00 0.2816923E-01 2 0.4334388E-01 0.1892660E-02 3 0.3070232E-02 0.1340652E-03 Result GMRES:3, 5.E-2, 3.0702321919954E-3, 0 1 3 0.3070232E-02 0.2299381E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3070232E-02 1 0.2699599E-03 0.8792818E-01 2 0.1779201E-04 0.5795005E-02 3 0.1191699E-05 0.3881463E-03 Result GMRES:3, 5.E-2, 1.191699153649E-6, 0 2 6 0.1191699E-05 0.3067285E-02 NI: 1, NLI: 8, ERLI 0.1191699E-05, ERNI: 0.2299377E+02 Max. and WRMS norm residual= 0.1165733E-03 0.8346805E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1321563E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1321563E-02 1 0.9368307E-04 0.7088807E-01 2 0.7153408E-05 0.5412838E-02 3 0.5061052E-06 0.3829595E-03 Result GMRES:3, 2.5E-2, 5.0610515357246E-7, 0 1 3 0.5061052E-06 0.1342137E-02 NI: 2, NLI: 4, ERLI 0.5061052E-06, ERNI: 0.1342137E-02 T= 0.74E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.48E+01 Time integration at T= 0.74E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.7413731E+00 Max. and WRMS norm residual= 0.6793857E+00 0.7042587E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1810549E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1810549E+02 1 0.1099452E+01 0.6072475E-01 2 0.1717048E+00 0.9483573E-02 3 0.3585546E-01 0.1980363E-02 4 0.8406411E-02 0.4643016E-03 Result GMRES:4, 5.E-2, 8.4064105447929E-3, 0 1 4 0.8406411E-02 0.1828014E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8406411E-02 1 0.2559745E-02 0.3044992E+00 2 0.4947972E-03 0.5885951E-01 3 0.7574635E-04 0.9010546E-02 4 0.1277509E-04 0.1519684E-02 5 0.3207721E-05 0.3815804E-03 Result GMRES:5, 5.E-2, 3.207721361249E-6, 0 2 9 0.3207721E-05 0.8105487E-02 NI: 1, NLI: 11, ERLI 0.3207721E-05, ERNI: 0.1828014E+02 Max. and WRMS norm residual= 0.7270537E-03 0.8966143E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1423209E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1423209E-01 1 0.1773311E-02 0.1245995E+00 2 0.3177861E-03 0.2232885E-01 3 0.7727294E-04 0.5429488E-02 4 0.1650137E-04 0.1159449E-02 5 0.3090319E-05 0.2171374E-03 Result GMRES:5, 2.5E-2, 3.0903186505371E-6, 0 1 5 0.3090319E-05 0.1513038E-01 NI: 2, NLI: 6, ERLI 0.3090319E-05, ERNI: 0.1513038E-01 T= 0.74E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.51E+01 Time integration at T= 0.74E+00, Grid level= 3, NPTS= 490 Nonlinear system solver at T = 0.7413731E+00 Max. and WRMS norm residual= 0.3024717E+01 0.3523121E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 980 # it. GCRO # it.GMRES Error Estimate 0 0 0.5937368E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5937368E+02 1 0.7798425E+01 0.1313448E+00 2 0.1457748E+01 0.2455208E-01 3 0.5181558E+00 0.8727029E-02 4 0.2162830E+00 0.3642741E-02 5 0.7423462E-01 0.1250295E-02 6 0.2988111E-01 0.5032720E-03 Result GMRES:6, 5.E-2, 2.9881112856838E-2, 0 1 6 0.2988111E-01 0.6283255E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2988111E-01 1 0.1497776E-01 0.5012452E+00 2 0.5369459E-02 0.1796941E+00 3 0.2158068E-02 0.7222180E-01 4 0.8065728E-03 0.2699273E-01 5 0.2698253E-03 0.9029962E-02 6 0.1075210E-03 0.3598293E-02 7 0.4358119E-04 0.1458486E-02 8 0.1445674E-04 0.4838087E-03 Result GMRES:8, 5.E-2, 1.4456743825985E-5, 0 2 14 0.1445674E-04 0.2675594E-01 NI: 1, NLI: 16, ERLI 0.1445674E-04, ERNI: 0.6283251E+02 Max. and WRMS norm residual= 0.3579986E-01 0.4375942E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 980 # it. GCRO # it.GMRES Error Estimate 0 0 0.6611636E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6611636E+00 1 0.1150087E+00 0.1739489E+00 2 0.3152988E-01 0.4768847E-01 3 0.1334650E-01 0.2018639E-01 4 0.4579058E-02 0.6925756E-02 5 0.1770226E-02 0.2677440E-02 6 0.6733316E-03 0.1018404E-02 7 0.2413719E-03 0.3650714E-03 Result GMRES:7, 2.5E-2, 2.413719387502E-4, 0 1 7 0.2413719E-03 0.6929579E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2413719E-03 1 0.1216817E-03 0.5041255E+00 2 0.4308083E-04 0.1784832E+00 3 0.1682545E-04 0.6970755E-01 4 0.6138596E-05 0.2543210E-01 5 0.2435476E-05 0.1009014E-01 6 0.9054869E-06 0.3751418E-02 7 0.3003912E-06 0.1244516E-02 8 0.1275158E-06 0.5282958E-03 Result GMRES:8, 2.5E-2, 1.2751579328127E-7, 0 2 15 0.1275158E-06 0.2157364E-03 NI: 2, NLI: 17, ERLI 0.1275158E-06, ERNI: 0.6929591E+00 T= 0.74E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.74E+00, Grid level= 4, NPTS= 1035 Nonlinear system solver at T = 0.7413731E+00 Max. and WRMS norm residual= 0.3032946E+01 0.4579035E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2070 # it. GCRO # it.GMRES Error Estimate 0 0 0.6012950E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6012950E+02 1 0.1304325E+02 0.2169193E+00 2 0.4751973E+01 0.7902897E-01 3 0.2520679E+01 0.4192083E-01 4 0.1514743E+01 0.2519135E-01 5 0.7737738E+00 0.1286846E-01 6 0.4602439E+00 0.7654212E-02 7 0.2580020E+00 0.4290772E-02 8 0.1499095E+00 0.2493111E-02 9 0.8819452E-01 0.1466743E-02 10 0.5091976E-01 0.8468349E-03 11 0.3064899E-01 0.5097163E-03 Result GMRES:11, 5.E-2, 3.0648987294881E-2, 0 1 11 0.3064899E-01 0.7487192E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3064899E-01 1 0.2108597E-01 0.6879826E+00 2 0.1163210E-01 0.3795263E+00 3 0.6830314E-02 0.2228561E+00 4 0.4062447E-02 0.1325475E+00 5 0.2334431E-02 0.7616666E-01 6 0.1448364E-02 0.4725652E-01 7 0.8247887E-03 0.2691080E-01 8 0.5126666E-03 0.1672703E-01 9 0.2984798E-03 0.9738650E-02 10 0.1813644E-03 0.5917469E-02 11 0.1085574E-03 0.3541956E-02 12 0.6529228E-04 0.2130324E-02 13 0.3920175E-04 0.1279055E-02 14 0.2353015E-04 0.7677301E-03 Result GMRES:14, 5.E-2, 2.3530150621383E-5, 0 2 25 0.2353015E-04 0.2949071E-01 NI: 1, NLI: 27, ERLI 0.2353015E-04, ERNI: 0.7487347E+02 Max. and WRMS norm residual= 0.9315525E-01 0.1513311E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2070 # it. GCRO # it.GMRES Error Estimate 0 0 0.1797359E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1797359E+01 1 0.4552915E+00 0.2533113E+00 2 0.1751341E+00 0.9743967E-01 3 0.1131953E+00 0.6297866E-01 4 0.5229954E-01 0.2909799E-01 5 0.3175445E-01 0.1766728E-01 6 0.1708093E-01 0.9503347E-02 7 0.9869248E-02 0.5490971E-02 8 0.5675260E-02 0.3157555E-02 9 0.3208188E-02 0.1784945E-02 10 0.1904961E-02 0.1059867E-02 11 0.1080907E-02 0.6013863E-03 Result GMRES:11, 2.5E-2, 1.0809072121517E-3, 0 1 11 0.1080907E-02 0.1925689E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1080907E-02 1 0.7365721E-03 0.6814388E+00 2 0.3990149E-03 0.3691482E+00 3 0.2318211E-03 0.2144690E+00 4 0.1339369E-03 0.1239116E+00 5 0.7796741E-04 0.7213145E-01 6 0.4575020E-04 0.4232574E-01 7 0.2716335E-04 0.2513014E-01 8 0.1596738E-04 0.1477220E-01 9 0.9423252E-05 0.8717910E-02 10 0.5646572E-05 0.5223919E-02 11 0.3308555E-05 0.3060906E-02 12 0.1991133E-05 0.1842095E-02 13 0.1163348E-05 0.1076270E-02 14 0.7023620E-06 0.6497894E-03 Result GMRES:14, 2.5E-2, 7.0236203708336E-7, 0 2 25 0.7023620E-06 0.1000403E-02 NI: 2, NLI: 27, ERLI 0.7023620E-06, ERNI: 0.1925747E+01 T= 0.74E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.10E+01 Time integration at T= 0.74E+00, Grid level= 5, NPTS= 2273 Nonlinear system solver at T = 0.7413731E+00 Max. and WRMS norm residual= 0.3127535E+01 0.6280534E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4546 # it. GCRO # it.GMRES Error Estimate 0 0 0.4585899E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4585899E+02 1 0.2226914E+02 0.4856004E+00 2 0.1060345E+02 0.2312186E+00 3 0.6882787E+01 0.1500859E+00 4 0.4762048E+01 0.1038411E+00 5 0.3358736E+01 0.7324050E-01 6 0.2445824E+01 0.5333357E-01 7 0.1790714E+01 0.3904827E-01 8 0.1328370E+01 0.2896640E-01 9 0.9915202E+00 0.2162106E-01 10 0.7450616E+00 0.1624679E-01 11 0.5631273E+00 0.1227954E-01 12 0.4269080E+00 0.9309145E-02 13 0.3244749E+00 0.7075492E-02 14 0.2470730E+00 0.5387668E-02 15 0.1884598E+00 0.4109548E-02 16 0.1440442E+00 0.3141023E-02 17 0.1102257E+00 0.2403579E-02 18 0.8445260E-01 0.1841571E-02 19 0.6475979E-01 0.1412150E-02 20 0.4970095E-01 0.1083778E-02 Result GMRES:20, 5.E-2, 4.970094900585E-2, 1 1 20 0.4970095E-01 0.9816642E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4970095E-01 1 0.3960219E-01 0.7968094E+00 2 0.2961405E-01 0.5958447E+00 3 0.2268476E-01 0.4564251E+00 4 0.1740365E-01 0.3501674E+00 5 0.1341300E-01 0.2698741E+00 6 0.1033242E-01 0.2078918E+00 7 0.7958145E-02 0.1601206E+00 8 0.6132815E-02 0.1233943E+00 9 0.4728694E-02 0.9514292E-01 10 0.3641539E-02 0.7326899E-01 11 0.2808815E-02 0.5651431E-01 12 0.2165136E-02 0.4356327E-01 13 0.1668757E-02 0.3357596E-01 14 0.1287495E-02 0.2590484E-01 15 0.9926954E-03 0.1997337E-01 16 0.7653803E-03 0.1539971E-01 17 0.5903457E-03 0.1187796E-01 18 0.4552424E-03 0.9159631E-02 19 0.3509510E-03 0.7061253E-02 20 0.2706612E-03 0.5445796E-02 Result GMRES:20, 5.E-2, 2.7066120688766E-4, 1 2 40 0.2706612E-03 0.8468634E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2706612E-03 1 0.2159705E-03 0.7979367E+00 2 0.1621860E-03 0.5992213E+00 3 0.1244245E-03 0.4597055E+00 4 0.9567598E-04 0.3534898E+00 5 0.7380106E-04 0.2726695E+00 6 0.5685388E-04 0.2100555E+00 7 0.4381830E-04 0.1618935E+00 8 0.3374867E-04 0.1246897E+00 9 0.2598341E-04 0.9599977E-01 10 0.1999254E-04 0.7386554E-01 11 0.1537238E-04 0.5679567E-01 12 0.1180867E-04 0.4362898E-01 13 0.9057343E-05 0.3346377E-01 14 0.6935314E-05 0.2562360E-01 15 0.5291869E-05 0.1955164E-01 16 0.4022532E-05 0.1486187E-01 17 0.3043138E-05 0.1124335E-01 18 0.2288091E-05 0.8453708E-02 19 0.1716235E-05 0.6340898E-02 20 0.1279946E-05 0.4728959E-02 Result GMRES:20, 5.E-2, 1.2799456718645E-6, 1 3 60 0.1279946E-05 0.4635155E-03 NI: 1, NLI: 63, ERLI 0.1279946E-05, ERNI: 0.9816828E+02 Max. and WRMS norm residual= 0.1463764E+00 0.2665838E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4546 # it. GCRO # it.GMRES Error Estimate 0 0 0.1659253E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1659253E+01 1 0.5878482E+00 0.3542848E+00 2 0.2860051E+00 0.1723698E+00 3 0.2140021E+00 0.1289749E+00 4 0.1383805E+00 0.8339927E-01 5 0.1006674E+00 0.6067030E-01 6 0.7246142E-01 0.4367111E-01 7 0.5206951E-01 0.3138129E-01 8 0.3868036E-01 0.2331191E-01 9 0.2800996E-01 0.1688106E-01 10 0.2095643E-01 0.1263004E-01 11 0.1540255E-01 0.9282823E-02 12 0.1151401E-01 0.6939270E-02 13 0.8581813E-02 0.5172094E-02 14 0.6407574E-02 0.3861722E-02 15 0.4823276E-02 0.2906896E-02 16 0.3604936E-02 0.2172626E-02 17 0.2727032E-02 0.1643530E-02 18 0.2046478E-02 0.1233373E-02 19 0.1549615E-02 0.9339229E-03 Result GMRES:19, 2.5E-2, 1.5496145218583E-3, 0 1 19 0.1549615E-02 0.2891561E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1549615E-02 1 0.1227961E-02 0.7924297E+00 2 0.8946810E-03 0.5773571E+00 3 0.6813606E-03 0.4396968E+00 4 0.5132119E-03 0.3311868E+00 5 0.3913107E-03 0.2525213E+00 6 0.2975519E-03 0.1920167E+00 7 0.2264285E-03 0.1461192E+00 8 0.1730419E-03 0.1116677E+00 9 0.1316839E-03 0.8497846E-01 10 0.1006991E-03 0.6498333E-01 11 0.7685484E-04 0.4959610E-01 12 0.5868111E-04 0.3786820E-01 13 0.4491070E-04 0.2898185E-01 14 0.3425304E-04 0.2210423E-01 15 0.2625401E-04 0.1694228E-01 16 0.2000432E-04 0.1290922E-01 17 0.1534828E-04 0.9904578E-02 18 0.1169849E-04 0.7549289E-02 19 0.8980599E-05 0.5795376E-02 20 0.6857389E-05 0.4425222E-02 Result GMRES:20, 2.5E-2, 6.857388922167E-6, 1 2 39 0.6857389E-05 0.2426333E-02 NI: 2, NLI: 41, ERLI 0.6857389E-05, ERNI: 0.2891576E+01 T= 0.74E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.43E+00 TN= 0.72E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.76E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.7648847E+00 Max. and WRMS norm residual= 0.1129839E+01 0.9988474E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3880495E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3880495E+02 1 0.1073938E+01 0.2767529E-01 2 0.7116623E-01 0.1833947E-02 3 0.4866288E-02 0.1254038E-03 Result GMRES:3, 5.E-2, 4.8662878936829E-3, 0 1 3 0.4866288E-02 0.3896909E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4866288E-02 1 0.4308124E-03 0.8852999E-01 2 0.2760088E-04 0.5671856E-02 3 0.1854163E-05 0.3810220E-03 Result GMRES:3, 5.E-2, 1.8541626797862E-6, 0 2 6 0.1854163E-05 0.4856003E-02 NI: 1, NLI: 8, ERLI 0.1854163E-05, ERNI: 0.3896904E+02 Max. and WRMS norm residual= 0.3421014E-03 0.2556310E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.4043854E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4043854E-02 1 0.2875011E-03 0.7109583E-01 2 0.2144718E-04 0.5303649E-02 3 0.1482505E-05 0.3666071E-03 Result GMRES:3, 2.5E-2, 1.482505288367E-6, 0 1 3 0.1482505E-05 0.4104360E-02 NI: 2, NLI: 4, ERLI 0.1482505E-05, ERNI: 0.4104360E-02 T= 0.76E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.43E+01 Time integration at T= 0.76E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.7648847E+00 Max. and WRMS norm residual= 0.1172776E+01 0.1150683E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.2977938E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2977938E+02 1 0.1955753E+01 0.6567475E-01 2 0.2692656E+00 0.9042016E-02 3 0.5739151E-01 0.1927223E-02 4 0.1290064E-01 0.4332070E-03 Result GMRES:4, 5.E-2, 1.2900635592091E-2, 0 1 4 0.1290064E-01 0.3033695E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1290064E-01 1 0.3862640E-02 0.2994147E+00 2 0.7431145E-03 0.5760293E-01 3 0.1240951E-03 0.9619302E-02 4 0.2023325E-04 0.1568392E-02 5 0.5169238E-05 0.4006964E-03 Result GMRES:5, 5.E-2, 5.1692377255098E-6, 0 2 9 0.5169238E-05 0.1242123E-01 NI: 1, NLI: 11, ERLI 0.5169238E-05, ERNI: 0.3033683E+02 Max. and WRMS norm residual= 0.1258098E-02 0.8428769E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.1333131E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1333131E-01 1 0.2191915E-02 0.1644186E+00 2 0.4939372E-03 0.3705092E-01 3 0.1102129E-03 0.8267226E-02 4 0.2121416E-04 0.1591304E-02 5 0.4174636E-05 0.3131453E-03 Result GMRES:5, 2.5E-2, 4.1746356953265E-6, 0 1 5 0.4174636E-05 0.1381040E-01 NI: 2, NLI: 6, ERLI 0.4174636E-05, ERNI: 0.1381040E-01 T= 0.76E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.47E+01 Time integration at T= 0.76E+00, Grid level= 3, NPTS= 490 Nonlinear system solver at T = 0.7648847E+00 Max. and WRMS norm residual= 0.2618061E+01 0.3305415E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 980 # it. GCRO # it.GMRES Error Estimate 0 0 0.5519034E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5519034E+02 1 0.7010107E+01 0.1270169E+00 2 0.1572579E+01 0.2849374E-01 3 0.5725512E+00 0.1037412E-01 4 0.2393622E+00 0.4337031E-02 5 0.8143240E-01 0.1475483E-02 6 0.3340848E-01 0.6053321E-03 Result GMRES:6, 5.E-2, 3.340848352768E-2, 0 1 6 0.3340848E-01 0.5766630E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3340848E-01 1 0.1681022E-01 0.5031722E+00 2 0.6054642E-02 0.1812307E+00 3 0.2389220E-02 0.7151536E-01 4 0.9197796E-03 0.2753132E-01 5 0.2774351E-03 0.8304331E-02 6 0.1163493E-03 0.3482628E-02 7 0.4529243E-04 0.1355716E-02 8 0.1547443E-04 0.4631886E-03 Result GMRES:8, 5.E-2, 1.5474427539315E-5, 0 2 14 0.1547443E-04 0.3033139E-01 NI: 1, NLI: 16, ERLI 0.1547443E-04, ERNI: 0.5766630E+02 Max. and WRMS norm residual= 0.4590009E-01 0.5841140E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 980 # it. GCRO # it.GMRES Error Estimate 0 0 0.8846124E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8846124E+00 1 0.1513979E+00 0.1711461E+00 2 0.4171968E-01 0.4716153E-01 3 0.1766755E-01 0.1997208E-01 4 0.6015616E-02 0.6800285E-02 5 0.2339179E-02 0.2644298E-02 6 0.8857349E-03 0.1001269E-02 7 0.3187050E-03 0.3602765E-03 Result GMRES:7, 2.5E-2, 3.1870502227845E-4, 0 1 7 0.3187050E-03 0.9326379E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3187050E-03 1 0.1599054E-03 0.5017347E+00 2 0.5727884E-04 0.1797237E+00 3 0.2227662E-04 0.6989729E-01 4 0.8167309E-05 0.2562655E-01 5 0.3205713E-05 0.1005856E-01 6 0.1203097E-05 0.3774955E-02 7 0.3962475E-06 0.1243305E-02 8 0.1683362E-06 0.5281880E-03 Result GMRES:8, 2.5E-2, 1.6833617729345E-7, 0 2 15 0.1683362E-06 0.2837772E-03 NI: 2, NLI: 17, ERLI 0.1683362E-06, ERNI: 0.9326389E+00 T= 0.76E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.76E+00, Grid level= 4, NPTS= 1035 Nonlinear system solver at T = 0.7648847E+00 Max. and WRMS norm residual= 0.2757063E+01 0.4576465E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2070 # it. GCRO # it.GMRES Error Estimate 0 0 0.6009381E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6009381E+02 1 0.1297443E+02 0.2159030E+00 2 0.4759747E+01 0.7920528E-01 3 0.2490336E+01 0.4144080E-01 4 0.1498869E+01 0.2494215E-01 5 0.7641300E+00 0.1271562E-01 6 0.4550804E+00 0.7572833E-02 7 0.2554566E+00 0.4250964E-02 8 0.1485729E+00 0.2472349E-02 9 0.8757043E-01 0.1457229E-02 10 0.5051114E-01 0.8405381E-03 11 0.3043238E-01 0.5064147E-03 Result GMRES:11, 5.E-2, 3.0432384961716E-2, 0 1 11 0.3043238E-01 0.7476072E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3043238E-01 1 0.2090355E-01 0.6868849E+00 2 0.1155570E-01 0.3797171E+00 3 0.6777434E-02 0.2227047E+00 4 0.4036920E-02 0.1326521E+00 5 0.2316722E-02 0.7612687E-01 6 0.1439038E-02 0.4728641E-01 7 0.8200040E-03 0.2694511E-01 8 0.5092086E-03 0.1673246E-01 9 0.2968811E-03 0.9755432E-02 10 0.1803267E-03 0.5925488E-02 11 0.1077082E-03 0.3539263E-02 12 0.6500272E-04 0.2135972E-02 13 0.3877550E-04 0.1274153E-02 14 0.2345741E-04 0.7708041E-03 Result GMRES:14, 5.E-2, 2.345740614661E-5, 0 2 25 0.2345741E-04 0.2925411E-01 NI: 1, NLI: 27, ERLI 0.2345741E-04, ERNI: 0.7476226E+02 Max. and WRMS norm residual= 0.1072926E+00 0.1546510E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2070 # it. GCRO # it.GMRES Error Estimate 0 0 0.1837085E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1837085E+01 1 0.4580975E+00 0.2493610E+00 2 0.1652265E+00 0.8993949E-01 3 0.1081597E+00 0.5887573E-01 4 0.4896032E-01 0.2665109E-01 5 0.3040343E-01 0.1654982E-01 6 0.1590051E-01 0.8655293E-02 7 0.9521506E-02 0.5182942E-02 8 0.5313324E-02 0.2892257E-02 9 0.3113563E-02 0.1694839E-02 10 0.1805480E-02 0.9827960E-03 Result GMRES:10, 2.5E-2, 1.8054800218501E-3, 0 1 10 0.1805480E-02 0.1956409E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1805480E-02 1 0.1226474E-02 0.6793065E+00 2 0.6699130E-03 0.3710442E+00 3 0.3832127E-03 0.2122498E+00 4 0.2263137E-03 0.1253482E+00 5 0.1271048E-03 0.7039947E-01 6 0.7802781E-04 0.4321721E-01 7 0.4352287E-04 0.2410598E-01 8 0.2673756E-04 0.1480912E-01 9 0.1535115E-04 0.8502531E-02 10 0.9141644E-05 0.5063276E-02 11 0.5447838E-05 0.3017390E-02 12 0.3194666E-05 0.1769428E-02 13 0.1917151E-05 0.1061851E-02 14 0.1123948E-05 0.6225205E-03 Result GMRES:14, 2.5E-2, 1.1239483420023E-6, 0 2 24 0.1123948E-05 0.1675797E-02 NI: 2, NLI: 26, ERLI 0.1123948E-05, ERNI: 0.1956496E+01 T= 0.76E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.76E+00, Grid level= 5, NPTS= 2269 Nonlinear system solver at T = 0.7648847E+00 Max. and WRMS norm residual= 0.3130668E+01 0.6285287E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4538 # it. GCRO # it.GMRES Error Estimate 0 0 0.4589375E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4589375E+02 1 0.2228762E+02 0.4856353E+00 2 0.1062760E+02 0.2315696E+00 3 0.6894345E+01 0.1502241E+00 4 0.4760189E+01 0.1037219E+00 5 0.3359969E+01 0.7321191E-01 6 0.2450597E+01 0.5339718E-01 7 0.1796740E+01 0.3914999E-01 8 0.1335143E+01 0.2909205E-01 9 0.9985955E+00 0.2175886E-01 10 0.7516555E+00 0.1637817E-01 11 0.5690643E+00 0.1239960E-01 12 0.4319086E+00 0.9411055E-02 13 0.3285399E+00 0.7158707E-02 14 0.2503201E+00 0.5454341E-02 15 0.1910487E+00 0.4162848E-02 16 0.1460883E+00 0.3183186E-02 17 0.1118403E+00 0.2436941E-02 18 0.8568947E-01 0.1867127E-02 19 0.6571894E-01 0.1431980E-02 20 0.5043971E-01 0.1099054E-02 Result GMRES:20, 5.E-2, 5.0439708328579E-2, 1 1 20 0.5043971E-01 0.9822960E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5043971E-01 1 0.4019360E-01 0.7968642E+00 2 0.3005314E-01 0.5958229E+00 3 0.2302219E-01 0.4564299E+00 4 0.1765869E-01 0.3500950E+00 5 0.1361038E-01 0.2698346E+00 6 0.1048071E-01 0.2077869E+00 7 0.8070217E-02 0.1599973E+00 8 0.6217872E-02 0.1232734E+00 9 0.4792677E-02 0.9501793E-01 10 0.3689614E-02 0.7314900E-01 11 0.2844496E-02 0.5639398E-01 12 0.2191771E-02 0.4345328E-01 13 0.1688518E-02 0.3347598E-01 14 0.1302100E-02 0.2581498E-01 15 0.1003240E-02 0.1988988E-01 16 0.7730917E-03 0.1532705E-01 17 0.5960103E-03 0.1181629E-01 18 0.4592111E-03 0.9104159E-02 19 0.3538452E-03 0.7015212E-02 20 0.2726778E-03 0.5406014E-02 Result GMRES:20, 5.E-2, 2.726777815711E-4, 1 2 40 0.2726778E-03 0.8585028E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2726778E-03 1 0.2175373E-03 0.7977816E+00 2 0.1631854E-03 0.5984550E+00 3 0.1250996E-03 0.4587817E+00 4 0.9610444E-04 0.3524469E+00 5 0.7408743E-04 0.2717032E+00 6 0.5700625E-04 0.2090609E+00 7 0.4391099E-04 0.1610362E+00 8 0.3378135E-04 0.1238874E+00 9 0.2598975E-04 0.9531304E-01 10 0.1997711E-04 0.7326268E-01 11 0.1534676E-04 0.5628168E-01 12 0.1177996E-04 0.4320103E-01 13 0.9031836E-05 0.3312274E-01 14 0.6913470E-05 0.2535399E-01 15 0.5279841E-05 0.1936293E-01 16 0.4018292E-05 0.1473641E-01 17 0.3044936E-05 0.1116679E-01 18 0.2290408E-05 0.8399688E-02 19 0.1712120E-05 0.6278912E-02 20 0.1265157E-05 0.4639749E-02 Result GMRES:20, 5.E-2, 1.2651565119366E-6, 1 3 60 0.1265157E-05 0.4658010E-03 NI: 1, NLI: 63, ERLI 0.1265157E-05, ERNI: 0.9823149E+02 Max. and WRMS norm residual= 0.1500364E+00 0.2667190E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4538 # it. GCRO # it.GMRES Error Estimate 0 0 0.1660105E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1660105E+01 1 0.5879637E+00 0.3541726E+00 2 0.2850034E+00 0.1716780E+00 3 0.2137154E+00 0.1287361E+00 4 0.1382991E+00 0.8330745E-01 5 0.1006407E+00 0.6062310E-01 6 0.7247584E-01 0.4365739E-01 7 0.5206120E-01 0.3136019E-01 8 0.3870973E-01 0.2331764E-01 9 0.2802962E-01 0.1688425E-01 10 0.2099131E-01 0.1264457E-01 11 0.1543707E-01 0.9298851E-02 12 0.1154895E-01 0.6956762E-02 13 0.8616390E-02 0.5190269E-02 14 0.6439150E-02 0.3878761E-02 15 0.4849539E-02 0.2921224E-02 16 0.3631045E-02 0.2187238E-02 17 0.2746697E-02 0.1654532E-02 18 0.2065980E-02 0.1244488E-02 19 0.1564245E-02 0.9422568E-03 Result GMRES:19, 2.5E-2, 1.5642450700984E-3, 0 1 19 0.1564245E-02 0.2892145E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1564245E-02 1 0.1237703E-02 0.7912462E+00 2 0.9038204E-03 0.5777998E+00 3 0.6877065E-03 0.4396411E+00 4 0.5187851E-03 0.3316520E+00 5 0.3954134E-03 0.2527823E+00 6 0.3008608E-03 0.1923361E+00 7 0.2289477E-03 0.1463631E+00 8 0.1747069E-03 0.1116877E+00 9 0.1331660E-03 0.8513114E-01 10 0.1016205E-03 0.6496460E-01 11 0.7755749E-04 0.4958142E-01 12 0.5926122E-04 0.3788487E-01 13 0.4523226E-04 0.2891635E-01 14 0.3456475E-04 0.2209676E-01 15 0.2640872E-04 0.1688273E-01 16 0.2016714E-04 0.1289257E-01 17 0.1541962E-04 0.9857546E-02 18 0.1177860E-04 0.7529896E-02 19 0.9009709E-05 0.5759781E-02 20 0.6894798E-05 0.4407748E-02 Result GMRES:20, 2.5E-2, 6.8947980194292E-6, 1 2 39 0.6894798E-05 0.2441293E-02 NI: 2, NLI: 41, ERLI 0.6894798E-05, ERNI: 0.2892160E+01 T= 0.76E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.45E+00 TN= 0.74E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.79E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.7883962E+00 Max. and WRMS norm residual= 0.1798628E+01 0.1606658E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.5691028E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5691028E+02 1 0.1484761E+01 0.2608950E-01 2 0.9730646E-01 0.1709822E-02 3 0.6119358E-02 0.1075264E-03 Result GMRES:3, 5.E-2, 6.1193582247484E-3, 0 1 3 0.6119358E-02 0.5718081E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6119358E-02 1 0.5866674E-03 0.9587074E-01 2 0.3378110E-04 0.5520367E-02 3 0.2186223E-05 0.3572635E-03 Result GMRES:3, 5.E-2, 2.1862234709728E-6, 0 2 6 0.2186223E-05 0.6115200E-02 NI: 1, NLI: 8, ERLI 0.2186223E-05, ERNI: 0.5718078E+02 Max. and WRMS norm residual= 0.6873800E-03 0.5431975E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.8590926E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8590926E-02 1 0.6212658E-03 0.7231651E-01 2 0.4586790E-04 0.5339110E-02 3 0.3158427E-05 0.3676469E-03 Result GMRES:3, 2.5E-2, 3.1584272407156E-6, 0 1 3 0.3158427E-05 0.8732734E-02 NI: 2, NLI: 4, ERLI 0.3158427E-05, ERNI: 0.8732734E-02 T= 0.79E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.36E+01 Time integration at T= 0.79E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.7883962E+00 Max. and WRMS norm residual= 0.1852652E+01 0.1850847E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.4473585E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4473585E+02 1 0.2915999E+01 0.6518259E-01 2 0.3724389E+00 0.8325289E-02 3 0.7265389E-01 0.1624064E-02 4 0.1627534E-01 0.3638097E-03 Result GMRES:4, 5.E-2, 1.6275336950921E-2, 0 1 4 0.1627534E-01 0.4569405E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1627534E-01 1 0.4909045E-02 0.3016248E+00 2 0.8963543E-03 0.5507439E-01 3 0.1491571E-03 0.9164610E-02 4 0.2606453E-04 0.1601474E-02 5 0.6605556E-05 0.4058629E-03 Result GMRES:5, 5.E-2, 6.6055556085795E-6, 0 2 9 0.6605556E-05 0.1563456E-01 NI: 1, NLI: 11, ERLI 0.6605556E-05, ERNI: 0.4569390E+02 Max. and WRMS norm residual= 0.2988091E-02 0.2654788E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.4200285E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4200285E-01 1 0.5711883E-02 0.1359880E+00 2 0.1081030E-02 0.2573707E-01 3 0.2480027E-03 0.5904425E-02 4 0.4923848E-04 0.1172265E-02 5 0.9425730E-05 0.2244069E-03 Result GMRES:5, 2.5E-2, 9.4257304158392E-6, 0 1 5 0.9425730E-05 0.4401539E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9425730E-05 1 0.2674281E-05 0.2837213E+00 2 0.4983825E-06 0.5287469E-01 3 0.1086509E-06 0.1152705E-01 4 0.2043969E-07 0.2168499E-02 5 0.3018321E-08 0.3202215E-03 Result GMRES:5, 2.5E-2, 3.018321306554E-9, 0 2 10 0.3018321E-08 0.9193321E-05 NI: 2, NLI: 12, ERLI 0.3018321E-08, ERNI: 0.4401538E-01 T= 0.79E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.40E+01 Time integration at T= 0.79E+00, Grid level= 3, NPTS= 486 Nonlinear system solver at T = 0.7883962E+00 Max. and WRMS norm residual= 0.1918764E+01 0.2887183E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 972 # it. GCRO # it.GMRES Error Estimate 0 0 0.5066240E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5066240E+02 1 0.6004656E+01 0.1185229E+00 2 0.1567835E+01 0.3094671E-01 3 0.5244779E+00 0.1035241E-01 4 0.2276961E+00 0.4494380E-02 5 0.7593038E-01 0.1498752E-02 6 0.3026092E-01 0.5973054E-03 Result GMRES:6, 5.E-2, 3.0260924279706E-2, 0 1 6 0.3026092E-01 0.5237828E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3026092E-01 1 0.1531506E-01 0.5061004E+00 2 0.5267348E-02 0.1740643E+00 3 0.2104872E-02 0.6955741E-01 4 0.7938489E-03 0.2623347E-01 5 0.2361758E-03 0.7804647E-02 6 0.1011611E-03 0.3342963E-02 7 0.3745531E-04 0.1237745E-02 8 0.1377565E-04 0.4552291E-03 Result GMRES:8, 5.E-2, 1.377565280978E-5, 0 2 14 0.1377565E-04 0.2704613E-01 NI: 1, NLI: 16, ERLI 0.1377565E-04, ERNI: 0.5237885E+02 Max. and WRMS norm residual= 0.3482111E-01 0.4812124E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 972 # it. GCRO # it.GMRES Error Estimate 0 0 0.7275417E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7275417E+00 1 0.1233944E+00 0.1696046E+00 2 0.3345303E-01 0.4598091E-01 3 0.1425648E-01 0.1959541E-01 4 0.4829782E-02 0.6638495E-02 5 0.1886660E-02 0.2593198E-02 6 0.7133226E-03 0.9804559E-03 Result GMRES:6, 2.5E-2, 7.1332255855605E-4, 0 1 6 0.7133226E-03 0.7704176E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7133226E-03 1 0.3515901E-03 0.4928907E+00 2 0.1299924E-03 0.1822351E+00 3 0.4890652E-04 0.6856158E-01 4 0.1881659E-04 0.2637879E-01 5 0.7115775E-05 0.9975536E-02 6 0.2319155E-05 0.3251201E-02 7 0.1055485E-05 0.1479674E-02 8 0.3261703E-06 0.4572550E-03 Result GMRES:8, 2.5E-2, 3.2617028173106E-7, 0 2 14 0.3261703E-06 0.6393882E-03 NI: 2, NLI: 16, ERLI 0.3261703E-06, ERNI: 0.7704171E+00 T= 0.79E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.79E+00, Grid level= 4, NPTS= 937 Nonlinear system solver at T = 0.7883962E+00 Max. and WRMS norm residual= 0.3029958E+01 0.4809061E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1874 # it. GCRO # it.GMRES Error Estimate 0 0 0.6315555E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6315555E+02 1 0.1364976E+02 0.2161291E+00 2 0.4884188E+01 0.7733585E-01 3 0.2572183E+01 0.4072774E-01 4 0.1564443E+01 0.2477127E-01 5 0.8019108E+00 0.1269739E-01 6 0.4792019E+00 0.7587645E-02 7 0.2692066E+00 0.4262595E-02 8 0.1559112E+00 0.2468686E-02 9 0.9176386E-01 0.1452982E-02 10 0.5344627E-01 0.8462640E-03 11 0.3188961E-01 0.5049375E-03 Result GMRES:11, 5.E-2, 3.1889606816227E-2, 0 1 11 0.3188961E-01 0.7862086E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3188961E-01 1 0.2186421E-01 0.6856217E+00 2 0.1212730E-01 0.3802900E+00 3 0.7093810E-02 0.2224490E+00 4 0.4219505E-02 0.1323160E+00 5 0.2429816E-02 0.7619459E-01 6 0.1498864E-02 0.4700165E-01 7 0.8578860E-03 0.2690174E-01 8 0.5317482E-03 0.1667465E-01 9 0.3095618E-03 0.9707295E-02 10 0.1886210E-03 0.5914812E-02 11 0.1120848E-03 0.3514776E-02 12 0.6795079E-04 0.2130813E-02 13 0.4047057E-04 0.1269083E-02 14 0.2440428E-04 0.7652739E-03 Result GMRES:14, 5.E-2, 2.4404283552095E-5, 0 2 25 0.2440428E-04 0.3074442E-01 NI: 1, NLI: 27, ERLI 0.2440428E-04, ERNI: 0.7862248E+02 Max. and WRMS norm residual= 0.9094255E-01 0.1563009E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1874 # it. GCRO # it.GMRES Error Estimate 0 0 0.1852770E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1852770E+01 1 0.4630878E+00 0.2499435E+00 2 0.1776784E+00 0.9589882E-01 3 0.1158072E+00 0.6250488E-01 4 0.5370751E-01 0.2898769E-01 5 0.3268951E-01 0.1764359E-01 6 0.1764846E-01 0.9525445E-02 7 0.1019066E-01 0.5500229E-02 8 0.5836896E-02 0.3150362E-02 9 0.3340132E-02 0.1802778E-02 10 0.1968879E-02 0.1062668E-02 11 0.1119387E-02 0.6041698E-03 Result GMRES:11, 2.5E-2, 1.1193874833702E-3, 0 1 11 0.1119387E-02 0.1989145E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1119387E-02 1 0.7648808E-03 0.6833030E+00 2 0.4116527E-03 0.3677482E+00 3 0.2399100E-03 0.2143225E+00 4 0.1392330E-03 0.1243832E+00 5 0.8026091E-04 0.7170074E-01 6 0.4731559E-04 0.4226918E-01 7 0.2798799E-04 0.2500295E-01 8 0.1642222E-04 0.1467072E-01 9 0.9738308E-05 0.8699676E-02 10 0.5763249E-05 0.5148573E-02 11 0.3429344E-05 0.3063590E-02 12 0.2031559E-05 0.1814885E-02 13 0.1204067E-05 0.1075648E-02 14 0.7176767E-06 0.6411334E-03 Result GMRES:14, 2.5E-2, 7.1767668916495E-7, 0 2 25 0.7176767E-06 0.1033775E-02 NI: 2, NLI: 27, ERLI 0.7176767E-06, ERNI: 0.1989208E+01 T= 0.79E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.10E+01 Time integration at T= 0.79E+00, Grid level= 5, NPTS= 2251 Nonlinear system solver at T = 0.7883962E+00 Max. and WRMS norm residual= 0.3129953E+01 0.6308315E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4502 # it. GCRO # it.GMRES Error Estimate 0 0 0.4606777E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4606777E+02 1 0.2236682E+02 0.4855199E+00 2 0.1068245E+02 0.2318857E+00 3 0.6920834E+01 0.1502316E+00 4 0.4772346E+01 0.1035940E+00 5 0.3365536E+01 0.7305620E-01 6 0.2451739E+01 0.5322027E-01 7 0.1794722E+01 0.3895830E-01 8 0.1331648E+01 0.2890629E-01 9 0.9941944E+00 0.2158113E-01 10 0.7472575E+00 0.1622083E-01 11 0.5649019E+00 0.1226241E-01 12 0.4282555E+00 0.9296207E-02 13 0.3254841E+00 0.7065333E-02 14 0.2478374E+00 0.5379843E-02 15 0.1890470E+00 0.4103671E-02 16 0.1444834E+00 0.3136323E-02 17 0.1105554E+00 0.2399843E-02 18 0.8469179E-01 0.1838418E-02 19 0.6493900E-01 0.1409641E-02 20 0.4983312E-01 0.1081735E-02 Result GMRES:20, 5.E-2, 4.9833115378321E-2, 1 1 20 0.4983312E-01 0.9856541E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4983312E-01 1 0.3970541E-01 0.7967676E+00 2 0.2968718E-01 0.5957319E+00 3 0.2273872E-01 0.4562974E+00 4 0.1744181E-01 0.3500044E+00 5 0.1344162E-01 0.2697326E+00 6 0.1035304E-01 0.2077543E+00 7 0.7973439E-02 0.1600028E+00 8 0.6143899E-02 0.1232895E+00 9 0.4736902E-02 0.9505530E-01 10 0.3647273E-02 0.7318975E-01 11 0.2813156E-02 0.5645155E-01 12 0.2168106E-02 0.4350733E-01 13 0.1670900E-02 0.3352992E-01 14 0.1289007E-02 0.2586647E-01 15 0.9937492E-03 0.1994154E-01 16 0.7660970E-03 0.1537325E-01 17 0.5908450E-03 0.1185647E-01 18 0.4555612E-03 0.9141735E-02 19 0.3511820E-03 0.7047161E-02 20 0.2707885E-03 0.5433908E-02 Result GMRES:20, 5.E-2, 2.7078854190236E-4, 1 2 40 0.2707885E-03 0.8486336E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2707885E-03 1 0.2160476E-03 0.7978462E+00 2 0.1622034E-03 0.5990040E+00 3 0.1244303E-03 0.4595108E+00 4 0.9565024E-04 0.3532286E+00 5 0.7376998E-04 0.2724265E+00 6 0.5681055E-04 0.2097967E+00 7 0.4377589E-04 0.1616608E+00 8 0.3370008E-04 0.1244517E+00 9 0.2593721E-04 0.9578399E-01 10 0.1994648E-04 0.7366071E-01 11 0.1532857E-04 0.5660717E-01 12 0.1176777E-04 0.4345741E-01 13 0.9020268E-05 0.3331112E-01 14 0.6902643E-05 0.2549090E-01 15 0.5265885E-05 0.1944648E-01 16 0.4002147E-05 0.1477960E-01 17 0.3027623E-05 0.1118077E-01 18 0.2272198E-05 0.8391040E-02 19 0.1693663E-05 0.6254559E-02 20 0.1244767E-05 0.4596823E-02 Result GMRES:20, 5.E-2, 1.2447669907937E-6, 1 3 60 0.1244767E-05 0.4627519E-03 NI: 1, NLI: 63, ERLI 0.1244767E-05, ERNI: 0.9856724E+02 Max. and WRMS norm residual= 0.1532699E+00 0.2674450E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4502 # it. GCRO # it.GMRES Error Estimate 0 0 0.1664654E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1664654E+01 1 0.5876132E+00 0.3529942E+00 2 0.2837656E+00 0.1704652E+00 3 0.2134725E+00 0.1282384E+00 4 0.1384354E+00 0.8316165E-01 5 0.1008122E+00 0.6056043E-01 6 0.7259820E-01 0.4361159E-01 7 0.5215796E-01 0.3133261E-01 8 0.3879055E-01 0.2330247E-01 9 0.2805247E-01 0.1685183E-01 10 0.2102292E-01 0.1262900E-01 11 0.1542573E-01 0.9266626E-02 12 0.1155214E-01 0.6939664E-02 13 0.8596808E-02 0.5164321E-02 14 0.6429558E-02 0.3862399E-02 15 0.4833993E-02 0.2903903E-02 16 0.3617586E-02 0.2173176E-02 17 0.2734230E-02 0.1642522E-02 18 0.2053721E-02 0.1233723E-02 19 0.1554197E-02 0.9336460E-03 Result GMRES:19, 2.5E-2, 1.5541974278753E-3, 0 1 19 0.1554197E-02 0.2899471E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1554197E-02 1 0.1231420E-02 0.7923190E+00 2 0.8974341E-03 0.5774260E+00 3 0.6835094E-03 0.4397829E+00 4 0.5148453E-03 0.3312612E+00 5 0.3926613E-03 0.2526457E+00 6 0.2985715E-03 0.1921065E+00 7 0.2272742E-03 0.1462325E+00 8 0.1736309E-03 0.1117174E+00 9 0.1321828E-03 0.8504894E-01 10 0.1010250E-03 0.6500140E-01 11 0.7714501E-04 0.4963656E-01 12 0.5885211E-04 0.3786656E-01 13 0.4507665E-04 0.2900317E-01 14 0.3434802E-04 0.2210016E-01 15 0.2634938E-04 0.1695369E-01 16 0.2005868E-04 0.1290614E-01 17 0.1540173E-04 0.9909761E-02 18 0.1173123E-04 0.7548094E-02 19 0.9010137E-05 0.5797293E-02 20 0.6876523E-05 0.4424485E-02 Result GMRES:20, 2.5E-2, 6.8765227103685E-6, 1 2 39 0.6876523E-05 0.2433273E-02 NI: 2, NLI: 41, ERLI 0.6876523E-05, ERNI: 0.2899487E+01 T= 0.79E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.47E+00 TN= 0.76E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.81E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.8119077E+00 Max. and WRMS norm residual= 0.2551591E+01 0.2294213E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6911013E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6911013E+02 1 0.1764590E+01 0.2553302E-01 2 0.1299494E+00 0.1880324E-02 3 0.9453786E-02 0.1367931E-03 Result GMRES:3, 5.E-2, 9.4537856024147E-3, 0 1 3 0.9453786E-02 0.6951834E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9453786E-02 1 0.9981343E-03 0.1055804E+00 2 0.6471632E-04 0.6845545E-02 3 0.3245189E-05 0.3432687E-03 Result GMRES:3, 5.E-2, 3.2451890060301E-6, 0 2 6 0.3245189E-05 0.9510195E-02 NI: 1, NLI: 8, ERLI 0.3245189E-05, ERNI: 0.6951850E+02 Max. and WRMS norm residual= 0.7753302E-03 0.8010141E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1265552E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1265552E-01 1 0.1004192E-02 0.7934812E-01 2 0.7382707E-04 0.5833585E-02 3 0.5100751E-05 0.4030455E-03 Result GMRES:3, 2.5E-2, 5.1007511413075E-6, 0 1 3 0.5100751E-05 0.1291394E-01 NI: 2, NLI: 4, ERLI 0.5100751E-05, ERNI: 0.1291394E-01 T= 0.81E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.81E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.8119077E+00 Max. and WRMS norm residual= 0.2581938E+01 0.2640438E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.5723180E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5723180E+02 1 0.3763842E+01 0.6576487E-01 2 0.4371138E+00 0.7637604E-02 3 0.7155653E-01 0.1250293E-02 4 0.1571762E-01 0.2746309E-03 Result GMRES:4, 5.E-2, 1.5717618425219E-2, 0 1 4 0.1571762E-01 0.5861606E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1571762E-01 1 0.4771993E-02 0.3036079E+00 2 0.8468413E-03 0.5387848E-01 3 0.1500076E-03 0.9543916E-02 4 0.2944845E-04 0.1873595E-02 5 0.6696069E-05 0.4260231E-03 Result GMRES:5, 5.E-2, 6.6960691303636E-6, 0 2 9 0.6696069E-05 0.1503048E-01 NI: 1, NLI: 11, ERLI 0.6696069E-05, ERNI: 0.5861603E+02 Max. and WRMS norm residual= 0.3624097E-02 0.4649433E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.7342684E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7342684E-01 1 0.9262628E-02 0.1261477E+00 2 0.1431172E-02 0.1949112E-01 3 0.3072302E-03 0.4184167E-02 4 0.6465940E-04 0.8805963E-03 Result GMRES:4, 2.5E-2, 6.465940417957E-5, 0 1 4 0.6465940E-04 0.7698685E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6465940E-04 1 0.1836576E-04 0.2840386E+00 2 0.3807071E-05 0.5887884E-01 3 0.6947009E-06 0.1074400E-01 4 0.1046357E-06 0.1618260E-02 5 0.2634993E-07 0.4075189E-03 Result GMRES:5, 2.5E-2, 2.6349929653278E-8, 0 2 9 0.2634993E-07 0.6214310E-04 NI: 2, NLI: 11, ERLI 0.2634993E-07, ERNI: 0.7698675E-01 T= 0.81E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.81E+00, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.8119077E+00 Max. and WRMS norm residual= 0.2628466E+01 0.3078474E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.5482317E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5482317E+02 1 0.6795956E+01 0.1239614E+00 2 0.1376605E+01 0.2510991E-01 3 0.4108389E+00 0.7493890E-02 4 0.1784629E+00 0.3255245E-02 5 0.6123795E-01 0.1117009E-02 6 0.2370324E-01 0.4323581E-03 Result GMRES:6, 5.E-2, 2.370324146781E-2, 0 1 6 0.2370324E-01 0.5752418E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2370324E-01 1 0.1194544E-01 0.5039579E+00 2 0.4101731E-02 0.1730451E+00 3 0.1651589E-02 0.6967776E-01 4 0.6043347E-03 0.2549587E-01 5 0.2082072E-03 0.8783913E-02 6 0.8361679E-04 0.3527652E-02 7 0.3400336E-04 0.1434545E-02 8 0.1205515E-04 0.5085866E-03 Result GMRES:8, 5.E-2, 1.2055150916105E-5, 0 2 14 0.1205515E-04 0.2101792E-01 NI: 1, NLI: 16, ERLI 0.1205515E-04, ERNI: 0.5752448E+02 Max. and WRMS norm residual= 0.1462376E-01 0.2215583E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.3286395E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3286395E+00 1 0.5088661E-01 0.1548402E+00 2 0.1558702E-01 0.4742893E-01 3 0.6466569E-02 0.1967679E-01 4 0.2383900E-02 0.7253845E-02 5 0.8840835E-03 0.2690132E-02 6 0.3593857E-03 0.1093556E-02 7 0.1297017E-03 0.3946625E-03 Result GMRES:7, 2.5E-2, 1.2970170518333E-4, 0 1 7 0.1297017E-03 0.3369000E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1297017E-03 1 0.6383814E-04 0.4921920E+00 2 0.2383730E-04 0.1837855E+00 3 0.9009066E-05 0.6945989E-01 4 0.3392759E-05 0.2615817E-01 5 0.1284951E-05 0.9906972E-02 6 0.5031904E-06 0.3879598E-02 7 0.1550164E-06 0.1195176E-02 8 0.6552181E-07 0.5051731E-03 Result GMRES:8, 2.5E-2, 6.5521813284354E-8, 0 2 15 0.6552181E-07 0.1172464E-03 NI: 2, NLI: 17, ERLI 0.6552181E-07, ERNI: 0.3368996E+00 T= 0.81E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.28E+01 Time integration at T= 0.81E+00, Grid level= 4, NPTS= 985 Nonlinear system solver at T = 0.8119077E+00 Max. and WRMS norm residual= 0.2743924E+01 0.4687983E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1970 # it. GCRO # it.GMRES Error Estimate 0 0 0.6157001E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6157001E+02 1 0.1320446E+02 0.2144625E+00 2 0.4732506E+01 0.7686382E-01 3 0.2485824E+01 0.4037394E-01 4 0.1513184E+01 0.2457664E-01 5 0.7735765E+00 0.1256418E-01 6 0.4630310E+00 0.7520398E-02 7 0.2605944E+00 0.4232489E-02 8 0.1510624E+00 0.2453506E-02 9 0.8900879E-01 0.1445652E-02 10 0.5169901E-01 0.8396785E-03 11 0.3102938E-01 0.5039691E-03 Result GMRES:11, 5.E-2, 3.1029382529722E-2, 0 1 11 0.3102938E-01 0.7652776E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3102938E-01 1 0.2123781E-01 0.6844418E+00 2 0.1179195E-01 0.3800252E+00 3 0.6905579E-02 0.2225497E+00 4 0.4103218E-02 0.1322365E+00 5 0.2363421E-02 0.7616719E-01 6 0.1461551E-02 0.4710217E-01 7 0.8358061E-03 0.2693596E-01 8 0.5181733E-03 0.1669944E-01 9 0.3022296E-03 0.9740111E-02 10 0.1836742E-03 0.5919362E-02 11 0.1097456E-03 0.3536828E-02 12 0.6610086E-04 0.2130267E-02 13 0.3963060E-04 0.1277196E-02 14 0.2371802E-04 0.7643729E-03 Result GMRES:14, 5.E-2, 2.3718020136955E-5, 0 2 25 0.2371802E-04 0.2986141E-01 NI: 1, NLI: 27, ERLI 0.2371802E-04, ERNI: 0.7652938E+02 Max. and WRMS norm residual= 0.1080902E+00 0.1601026E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1970 # it. GCRO # it.GMRES Error Estimate 0 0 0.1905277E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1905277E+01 1 0.4671231E+00 0.2451734E+00 2 0.1691376E+00 0.8877324E-01 3 0.1111538E+00 0.5833996E-01 4 0.5050763E-01 0.2650934E-01 5 0.3136242E-01 0.1646082E-01 6 0.1648047E-01 0.8649907E-02 7 0.9806272E-02 0.5146902E-02 8 0.5489134E-02 0.2881017E-02 9 0.3222816E-02 0.1691521E-02 10 0.1863049E-02 0.9778363E-03 Result GMRES:10, 2.5E-2, 1.8630486015546E-3, 0 1 10 0.1863049E-02 0.2028237E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1863049E-02 1 0.1261495E-02 0.6771135E+00 2 0.6914872E-03 0.3711590E+00 3 0.3945485E-03 0.2117758E+00 4 0.2323968E-03 0.1247401E+00 5 0.1308631E-03 0.7024138E-01 6 0.8004123E-04 0.4296250E-01 7 0.4468698E-04 0.2398595E-01 8 0.2751727E-04 0.1477002E-01 9 0.1569515E-04 0.8424446E-02 10 0.9414705E-05 0.5053387E-02 11 0.5550467E-05 0.2979239E-02 12 0.3283022E-05 0.1762177E-02 13 0.1948983E-05 0.1046126E-02 14 0.1150616E-05 0.6175986E-03 Result GMRES:14, 2.5E-2, 1.150616291269E-6, 0 2 24 0.1150616E-05 0.1727174E-02 NI: 2, NLI: 26, ERLI 0.1150616E-05, ERNI: 0.2028314E+01 T= 0.81E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.13E+01 Time integration at T= 0.81E+00, Grid level= 5, NPTS= 2247 Nonlinear system solver at T = 0.8119077E+00 Max. and WRMS norm residual= 0.3133117E+01 0.6308865E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4494 # it. GCRO # it.GMRES Error Estimate 0 0 0.4608033E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4608033E+02 1 0.2235520E+02 0.4851354E+00 2 0.1069514E+02 0.2320978E+00 3 0.6928224E+01 0.1503510E+00 4 0.4776238E+01 0.1036503E+00 5 0.3368019E+01 0.7309018E-01 6 0.2457033E+01 0.5332065E-01 7 0.1801935E+01 0.3910422E-01 8 0.1339456E+01 0.2906785E-01 9 0.1002417E+01 0.2175369E-01 10 0.7548808E+00 0.1638185E-01 11 0.5717104E+00 0.1240682E-01 12 0.4339753E+00 0.9417800E-02 13 0.3301111E+00 0.7163818E-02 14 0.2515494E+00 0.5458933E-02 15 0.1920091E+00 0.4166834E-02 16 0.1468306E+00 0.3186406E-02 17 0.1124094E+00 0.2439423E-02 18 0.8612407E-01 0.1868999E-02 19 0.6605487E-01 0.1433472E-02 20 0.5069816E-01 0.1100213E-02 Result GMRES:20, 5.E-2, 5.069816024248E-2, 1 1 20 0.5069816E-01 0.9851956E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5069816E-01 1 0.4039729E-01 0.7968197E+00 2 0.3020280E-01 0.5957377E+00 3 0.2313938E-01 0.4564145E+00 4 0.1774613E-01 0.3500351E+00 5 0.1367806E-01 0.2697939E+00 6 0.1053164E-01 0.2077321E+00 7 0.8109975E-02 0.1599659E+00 8 0.6247801E-02 0.1232353E+00 9 0.4815432E-02 0.9498238E-01 10 0.3707205E-02 0.7312307E-01 11 0.2857830E-02 0.5636950E-01 12 0.2201931E-02 0.4343216E-01 13 0.1696286E-02 0.3345854E-01 14 0.1307951E-02 0.2579878E-01 15 0.1007729E-02 0.1987703E-01 16 0.7764883E-03 0.1531591E-01 17 0.5985712E-03 0.1180657E-01 18 0.4611721E-03 0.9096427E-02 19 0.3553330E-03 0.7008794E-02 20 0.2737910E-03 0.5400412E-02 Result GMRES:20, 5.E-2, 2.7379097251739E-4, 1 2 40 0.2737910E-03 0.8625087E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2737910E-03 1 0.2184048E-03 0.7977065E+00 2 0.1638050E-03 0.5982850E+00 3 0.1255670E-03 0.4586237E+00 4 0.9643563E-04 0.3522235E+00 5 0.7433165E-04 0.2714905E+00 6 0.5717566E-04 0.2088296E+00 7 0.4403020E-04 0.1608168E+00 8 0.3385773E-04 0.1236627E+00 9 0.2603710E-04 0.9509846E-01 10 0.2000162E-04 0.7305434E-01 11 0.1535416E-04 0.5607987E-01 12 0.1177317E-04 0.4300057E-01 13 0.9013082E-05 0.3291957E-01 14 0.6882906E-05 0.2513927E-01 15 0.5239293E-05 0.1913611E-01 16 0.3969464E-05 0.1449815E-01 17 0.2992107E-05 0.1092844E-01 18 0.2237331E-05 0.8171675E-02 19 0.1661986E-05 0.6070273E-02 20 0.1219262E-05 0.4453258E-02 Result GMRES:20, 5.E-2, 1.2192617086196E-6, 1 3 60 0.1219262E-05 0.4665802E-03 NI: 1, NLI: 63, ERLI 0.1219262E-05, ERNI: 0.9852143E+02 Max. and WRMS norm residual= 0.1560400E+00 0.2670321E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4494 # it. GCRO # it.GMRES Error Estimate 0 0 0.1662106E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1662106E+01 1 0.5846702E+00 0.3517647E+00 2 0.2824871E+00 0.1699574E+00 3 0.2132763E+00 0.1283169E+00 4 0.1380993E+00 0.8308691E-01 5 0.1007180E+00 0.6059662E-01 6 0.7251212E-01 0.4362665E-01 7 0.5217484E-01 0.3139080E-01 8 0.3878695E-01 0.2333603E-01 9 0.2810552E-01 0.1690958E-01 10 0.2105249E-01 0.1266615E-01 11 0.1548249E-01 0.9314981E-02 12 0.1158925E-01 0.6972630E-02 13 0.8643579E-02 0.5200377E-02 14 0.6464362E-02 0.3889260E-02 15 0.4866311E-02 0.2927798E-02 16 0.3646508E-02 0.2193908E-02 17 0.2757029E-02 0.1658756E-02 18 0.2075019E-02 0.1248428E-02 19 0.1570579E-02 0.9449330E-03 Result GMRES:19, 2.5E-2, 1.5705789226507E-3, 0 1 19 0.1570579E-02 0.2895692E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1570579E-02 1 0.1242366E-02 0.7910244E+00 2 0.9075539E-03 0.5778468E+00 3 0.6903655E-03 0.4395612E+00 4 0.5209258E-03 0.3316775E+00 5 0.3970025E-03 0.2527746E+00 6 0.3021122E-03 0.1923572E+00 7 0.2299069E-03 0.1463835E+00 8 0.1754192E-03 0.1116908E+00 9 0.1337298E-03 0.8514680E-01 10 0.1020344E-03 0.6496612E-01 11 0.7788337E-04 0.4958896E-01 12 0.5950821E-04 0.3788935E-01 13 0.4542078E-04 0.2891977E-01 14 0.3471135E-04 0.2210099E-01 15 0.2652343E-04 0.1688768E-01 16 0.2025377E-04 0.1289573E-01 17 0.1548964E-04 0.9862375E-02 18 0.1183154E-04 0.7533234E-02 19 0.9052325E-05 0.5763687E-02 20 0.6926994E-05 0.4410472E-02 Result GMRES:20, 2.5E-2, 6.9269941675674E-6, 1 2 39 0.6926994E-05 0.2450492E-02 NI: 2, NLI: 41, ERLI 0.6926994E-05, ERNI: 0.2895709E+01 T= 0.81E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.41E+00 TN= 0.79E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.84E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.8354193E+00 Max. and WRMS norm residual= 0.3005261E+01 0.2749175E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.6878931E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6878931E+02 1 0.2096121E+01 0.3047161E-01 2 0.1863757E+00 0.2709370E-02 3 0.1334351E-01 0.1939764E-03 Result GMRES:3, 5.E-2, 1.3343505407889E-2, 0 1 3 0.1334351E-01 0.6932794E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1334351E-01 1 0.1190372E-02 0.8920984E-01 2 0.1015442E-03 0.7610010E-02 3 0.5340428E-05 0.4002267E-03 Result GMRES:3, 5.E-2, 5.3404276126499E-6, 0 2 6 0.5340428E-05 0.1334317E-01 NI: 1, NLI: 8, ERLI 0.5340428E-05, ERNI: 0.6932826E+02 Max. and WRMS norm residual= 0.9630240E-03 0.1049823E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1654822E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1654822E-01 1 0.1450454E-02 0.8765016E-01 2 0.9793291E-04 0.5918033E-02 3 0.7113549E-05 0.4298679E-03 Result GMRES:3, 2.5E-2, 7.1135487324871E-6, 0 1 3 0.7113549E-05 0.1688869E-01 NI: 2, NLI: 4, ERLI 0.7113549E-05, ERNI: 0.1688869E-01 T= 0.84E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.38E+01 Time integration at T= 0.84E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.8354193E+00 Max. and WRMS norm residual= 0.3007222E+01 0.3160353E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.6135622E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6135622E+02 1 0.4360882E+01 0.7107482E-01 2 0.5171961E+00 0.8429400E-02 3 0.9291541E-01 0.1514360E-02 4 0.2293544E-01 0.3738078E-03 Result GMRES:4, 5.E-2, 2.2935436274335E-2, 0 1 4 0.2293544E-01 0.6301716E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2293544E-01 1 0.7469340E-02 0.3256681E+00 2 0.1329483E-02 0.5796635E-01 3 0.2181590E-03 0.9511873E-02 4 0.3150394E-04 0.1373592E-02 5 0.7097754E-05 0.3094667E-03 Result GMRES:5, 5.E-2, 7.0977542864411E-6, 0 2 9 0.7097754E-05 0.2181922E-01 NI: 1, NLI: 11, ERLI 0.7097754E-05, ERNI: 0.6301705E+02 Max. and WRMS norm residual= 0.4831808E-02 0.6097155E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.9605416E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9605416E-01 1 0.1215060E-01 0.1264973E+00 2 0.1832491E-02 0.1907768E-01 3 0.3931656E-03 0.4093166E-02 4 0.8427186E-04 0.8773369E-03 Result GMRES:4, 2.5E-2, 8.4271858170838E-5, 0 1 4 0.8427186E-04 0.1001184E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8427186E-04 1 0.2521366E-04 0.2991943E+00 2 0.5031728E-05 0.5970829E-01 3 0.9121380E-06 0.1082376E-01 4 0.1292716E-06 0.1533983E-02 5 0.3260328E-07 0.3868821E-03 Result GMRES:5, 2.5E-2, 3.2603276204396E-8, 0 2 9 0.3260328E-07 0.8136671E-04 NI: 2, NLI: 11, ERLI 0.3260328E-07, ERNI: 0.1001186E+00 T= 0.84E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.35E+01 Time integration at T= 0.84E+00, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.8354193E+00 Max. and WRMS norm residual= 0.3017504E+01 0.3516501E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.5986128E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5986128E+02 1 0.7772884E+01 0.1298483E+00 2 0.1381126E+01 0.2307210E-01 3 0.4686965E+00 0.7829711E-02 4 0.1996874E+00 0.3335836E-02 5 0.6873972E-01 0.1148317E-02 6 0.2748413E-01 0.4591303E-03 Result GMRES:6, 5.E-2, 2.748412878829E-2, 0 1 6 0.2748413E-01 0.6333834E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2748413E-01 1 0.1379624E-01 0.5019713E+00 2 0.4912363E-02 0.1787345E+00 3 0.1985932E-02 0.7225742E-01 4 0.7327345E-03 0.2666028E-01 5 0.2524238E-03 0.9184349E-02 6 0.1004972E-03 0.3656554E-02 7 0.4042867E-04 0.1470982E-02 8 0.1375220E-04 0.5003690E-03 Result GMRES:8, 5.E-2, 1.3752204925355E-5, 0 2 14 0.1375220E-04 0.2448910E-01 NI: 1, NLI: 16, ERLI 0.1375220E-04, ERNI: 0.6333839E+02 Max. and WRMS norm residual= 0.2991407E-01 0.3701268E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.5583294E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5583294E+00 1 0.9726671E-01 0.1742103E+00 2 0.2746940E-01 0.4919927E-01 3 0.1157123E-01 0.2072473E-01 4 0.3967524E-02 0.7106062E-02 5 0.1540119E-02 0.2758442E-02 6 0.5790905E-03 0.1037184E-02 7 0.2102186E-03 0.3765135E-03 Result GMRES:7, 2.5E-2, 2.102185940655E-4, 0 1 7 0.2102186E-03 0.5831753E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2102186E-03 1 0.1083126E-03 0.5152380E+00 2 0.3780259E-04 0.1798251E+00 3 0.1465676E-04 0.6972154E-01 4 0.5290089E-05 0.2516471E-01 5 0.2048942E-05 0.9746719E-02 6 0.7641117E-06 0.3634843E-02 7 0.2427548E-06 0.1154773E-02 8 0.9830154E-07 0.4676158E-03 Result GMRES:8, 2.5E-2, 9.8301539460888E-8, 0 2 15 0.9830154E-07 0.1865442E-03 NI: 2, NLI: 17, ERLI 0.9830154E-07, ERNI: 0.5831761E+00 T= 0.84E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.27E+01 Time integration at T= 0.84E+00, Grid level= 4, NPTS= 1013 Nonlinear system solver at T = 0.8354193E+00 Max. and WRMS norm residual= 0.3026365E+01 0.4614083E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2026 # it. GCRO # it.GMRES Error Estimate 0 0 0.6061754E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6061754E+02 1 0.1302242E+02 0.2148292E+00 2 0.4615486E+01 0.7614109E-01 3 0.2450350E+01 0.4042311E-01 4 0.1497501E+01 0.2470408E-01 5 0.7671948E+00 0.1265632E-01 6 0.4599341E+00 0.7587475E-02 7 0.2581695E+00 0.4258989E-02 8 0.1504964E+00 0.2482720E-02 9 0.8845527E-01 0.1459235E-02 10 0.5120547E-01 0.8447302E-03 11 0.3077839E-01 0.5077472E-03 Result GMRES:11, 5.E-2, 3.0778387748358E-2, 0 1 11 0.3077839E-01 0.7532068E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3077839E-01 1 0.2116712E-01 0.6877268E+00 2 0.1168139E-01 0.3795322E+00 3 0.6861076E-02 0.2229186E+00 4 0.4072772E-02 0.1323257E+00 5 0.2343432E-02 0.7613886E-01 6 0.1450261E-02 0.4711947E-01 7 0.8282065E-03 0.2690870E-01 8 0.5132089E-03 0.1667433E-01 9 0.2993908E-03 0.9727305E-02 10 0.1815662E-03 0.5899146E-02 11 0.1087282E-03 0.3532614E-02 12 0.6526519E-04 0.2120488E-02 13 0.3917569E-04 0.1272831E-02 14 0.2338257E-04 0.7597075E-03 Result GMRES:14, 5.E-2, 2.3382572929367E-5, 0 2 25 0.2338257E-04 0.2960222E-01 NI: 1, NLI: 27, ERLI 0.2338257E-04, ERNI: 0.7532227E+02 Max. and WRMS norm residual= 0.9066610E-01 0.1476754E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2026 # it. GCRO # it.GMRES Error Estimate 0 0 0.1747262E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1747262E+01 1 0.4333792E+00 0.2480333E+00 2 0.1688910E+00 0.9666036E-01 3 0.1100744E+00 0.6299823E-01 4 0.5121435E-01 0.2931120E-01 5 0.3111742E-01 0.1780925E-01 6 0.1686454E-01 0.9651979E-02 7 0.9740998E-02 0.5575006E-02 8 0.5620378E-02 0.3216677E-02 9 0.3185143E-02 0.1822934E-02 10 0.1888414E-02 0.1080784E-02 11 0.1075893E-02 0.6157593E-03 Result GMRES:11, 2.5E-2, 1.0758928131646E-3, 0 1 11 0.1075893E-02 0.1878695E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1075893E-02 1 0.7324478E-03 0.6807814E+00 2 0.3974446E-03 0.3694091E+00 3 0.2299320E-03 0.2137128E+00 4 0.1332920E-03 0.1238896E+00 5 0.7717488E-04 0.7173101E-01 6 0.4537748E-04 0.4217658E-01 7 0.2686602E-04 0.2497090E-01 8 0.1577340E-04 0.1466076E-01 9 0.9319514E-05 0.8662121E-02 10 0.5560294E-05 0.5168074E-02 11 0.3268557E-05 0.3037995E-02 12 0.1956876E-05 0.1818839E-02 13 0.1146406E-05 0.1065539E-02 14 0.6892003E-06 0.6405846E-03 Result GMRES:14, 2.5E-2, 6.8920034094456E-7, 0 2 25 0.6892003E-06 0.9939481E-03 NI: 2, NLI: 27, ERLI 0.6892003E-06, ERNI: 0.1878758E+01 T= 0.84E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.84E+00, Grid level= 5, NPTS= 2229 Nonlinear system solver at T = 0.8354193E+00 Max. and WRMS norm residual= 0.3117388E+01 0.6322809E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4458 # it. GCRO # it.GMRES Error Estimate 0 0 0.4620634E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4620634E+02 1 0.2238867E+02 0.4845367E+00 2 0.1072178E+02 0.2320414E+00 3 0.6959313E+01 0.1506138E+00 4 0.4803230E+01 0.1039518E+00 5 0.3378777E+01 0.7312366E-01 6 0.2459729E+01 0.5323359E-01 7 0.1799756E+01 0.3895042E-01 8 0.1334925E+01 0.2889051E-01 9 0.9966936E+00 0.2157050E-01 10 0.7490670E+00 0.1621135E-01 11 0.5662827E+00 0.1225552E-01 12 0.4292229E+00 0.9289265E-02 13 0.3261745E+00 0.7059087E-02 14 0.2483367E+00 0.5374517E-02 15 0.1894175E+00 0.4099384E-02 16 0.1447534E+00 0.3132760E-02 17 0.1107437E+00 0.2396721E-02 18 0.8482446E-01 0.1835775E-02 19 0.6503188E-01 0.1407423E-02 20 0.4989854E-01 0.1079907E-02 Result GMRES:20, 5.E-2, 4.9898543622862E-2, 1 1 20 0.4989854E-01 0.9866803E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4989854E-01 1 0.3975536E-01 0.7967238E+00 2 0.2971979E-01 0.5956043E+00 3 0.2275979E-01 0.4561213E+00 4 0.1745473E-01 0.3498045E+00 5 0.1345000E-01 0.2695469E+00 6 0.1035802E-01 0.2075816E+00 7 0.7976003E-02 0.1598444E+00 8 0.6145003E-02 0.1231499E+00 9 0.4737088E-02 0.9493440E-01 10 0.3646599E-02 0.7308026E-01 11 0.2812277E-02 0.5635989E-01 12 0.2166976E-02 0.4342763E-01 13 0.1669693E-02 0.3346175E-01 14 0.1287878E-02 0.2580993E-01 15 0.9926669E-03 0.1989370E-01 16 0.7651041E-03 0.1533319E-01 17 0.5899900E-03 0.1182379E-01 18 0.4547886E-03 0.9114266E-02 19 0.3505369E-03 0.7024993E-02 20 0.2702202E-03 0.5415392E-02 Result GMRES:20, 5.E-2, 2.7022017810492E-4, 1 2 40 0.2702202E-03 0.8493348E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2702202E-03 1 0.2155566E-03 0.7977074E+00 2 0.1617667E-03 0.5986478E+00 3 0.1240713E-03 0.4591489E+00 4 0.9532721E-04 0.3527761E+00 5 0.7349781E-04 0.2719923E+00 6 0.5656863E-04 0.2093427E+00 7 0.4356966E-04 0.1612376E+00 8 0.3351572E-04 0.1240312E+00 9 0.2577421E-04 0.9538226E-01 10 0.1979568E-04 0.7325761E-01 11 0.1518526E-04 0.5619589E-01 12 0.1162681E-04 0.4302716E-01 13 0.8878430E-05 0.3285628E-01 14 0.6759771E-05 0.2501579E-01 15 0.5123971E-05 0.1896221E-01 16 0.3864111E-05 0.1429986E-01 17 0.2898811E-05 0.1072759E-01 18 0.2158181E-05 0.7986749E-02 19 0.1599960E-05 0.5920948E-02 20 0.1174961E-05 0.4348161E-02 Result GMRES:20, 5.E-2, 1.1749607683432E-6, 1 3 60 0.1174961E-05 0.4602273E-03 NI: 1, NLI: 63, ERLI 0.1174961E-05, ERNI: 0.9866982E+02 Max. and WRMS norm residual= 0.1588604E+00 0.2674140E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4458 # it. GCRO # it.GMRES Error Estimate 0 0 0.1664494E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1664494E+01 1 0.5846440E+00 0.3512442E+00 2 0.2844833E+00 0.1709128E+00 3 0.2146855E+00 0.1289794E+00 4 0.1385716E+00 0.8325150E-01 5 0.1011612E+00 0.6077595E-01 6 0.7274580E-01 0.4370445E-01 7 0.5235164E-01 0.3145198E-01 8 0.3889344E-01 0.2336652E-01 9 0.2815878E-01 0.1691732E-01 10 0.2108374E-01 0.1266676E-01 11 0.1547958E-01 0.9299869E-02 12 0.1158544E-01 0.6960336E-02 13 0.8623349E-02 0.5180762E-02 14 0.6447430E-02 0.3873507E-02 15 0.4847739E-02 0.2912440E-02 16 0.3627150E-02 0.2179131E-02 17 0.2741601E-02 0.1647107E-02 18 0.2059046E-02 0.1237040E-02 19 0.1558361E-02 0.9362370E-03 Result GMRES:19, 2.5E-2, 1.5583610846598E-3, 0 1 19 0.1558361E-02 0.2900154E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1558361E-02 1 0.1234288E-02 0.7920421E+00 2 0.8997265E-03 0.5773543E+00 3 0.6849878E-03 0.4395565E+00 4 0.5161808E-03 0.3312331E+00 5 0.3934932E-03 0.2525045E+00 6 0.2993921E-03 0.1921199E+00 7 0.2277544E-03 0.1461500E+00 8 0.1740838E-03 0.1117095E+00 9 0.1324442E-03 0.8498943E-01 10 0.1012681E-03 0.6498372E-01 11 0.7728940E-04 0.4959659E-01 12 0.5897593E-04 0.3784484E-01 13 0.4515432E-04 0.2897552E-01 14 0.3441498E-04 0.2208409E-01 15 0.2639192E-04 0.1693569E-01 16 0.2009518E-04 0.1289507E-01 17 0.1542437E-04 0.9897818E-02 18 0.1175356E-04 0.7542258E-02 19 0.9023959E-05 0.5790673E-02 20 0.6890147E-05 0.4421406E-02 Result GMRES:20, 2.5E-2, 6.8901472683025E-6, 1 2 39 0.6890147E-05 0.2436868E-02 NI: 2, NLI: 41, ERLI 0.6890147E-05, ERNI: 0.2900173E+01 T= 0.84E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.49E+00 TN= 0.81E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.86E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.8589308E+00 Max. and WRMS norm residual= 0.2765159E+01 0.2617691E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.5667627E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5667627E+02 1 0.2173881E+01 0.3835610E-01 2 0.2066253E+00 0.3645710E-02 3 0.1245494E-01 0.2197558E-03 Result GMRES:3, 5.E-2, 1.2454936988011E-2, 0 1 3 0.1245494E-01 0.5723508E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1245494E-01 1 0.1051493E-02 0.8442379E-01 2 0.9232282E-04 0.7412548E-02 3 0.5453666E-05 0.4378718E-03 Result GMRES:3, 5.E-2, 5.4536660169587E-6, 0 2 6 0.5453666E-05 0.1242456E-01 NI: 1, NLI: 8, ERLI 0.5453666E-05, ERNI: 0.5723530E+02 Max. and WRMS norm residual= 0.8454699E-03 0.9476533E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1492087E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1492087E-01 1 0.1329346E-02 0.8909306E-01 2 0.8550916E-04 0.5730843E-02 3 0.6565224E-05 0.4400028E-03 Result GMRES:3, 2.5E-2, 6.565224050674E-6, 0 1 3 0.6565224E-05 0.1516945E-01 NI: 2, NLI: 4, ERLI 0.6565224E-05, ERNI: 0.1516945E-01 T= 0.86E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.43E+01 Time integration at T= 0.86E+00, Grid level= 2, NPTS= 240 Nonlinear system solver at T = 0.8589308E+00 Max. and WRMS norm residual= 0.2780720E+01 0.3006567E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.5418463E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5418463E+02 1 0.4144014E+01 0.7647950E-01 2 0.5346856E+00 0.9867846E-02 3 0.1080022E+00 0.1993226E-02 4 0.2760826E-01 0.5095220E-03 Result GMRES:4, 5.E-2, 2.7608260370755E-2, 0 1 4 0.2760826E-01 0.5570685E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2760826E-01 1 0.8872387E-02 0.3213671E+00 2 0.1645831E-02 0.5961371E-01 3 0.2758793E-03 0.9992638E-02 4 0.3107337E-04 0.1125510E-02 5 0.6637398E-05 0.2404135E-03 Result GMRES:5, 5.E-2, 6.6373975206262E-6, 0 2 9 0.6637398E-05 0.2646124E-01 NI: 1, NLI: 11, ERLI 0.6637398E-05, ERNI: 0.5570663E+02 Max. and WRMS norm residual= 0.4792301E-02 0.5673168E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 480 # it. GCRO # it.GMRES Error Estimate 0 0 0.8931449E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8931449E-01 1 0.1136960E-01 0.1272985E+00 2 0.1861320E-02 0.2084007E-01 3 0.4209487E-03 0.4713106E-02 4 0.9059615E-04 0.1014350E-02 5 0.1810061E-04 0.2026615E-03 Result GMRES:5, 2.5E-2, 1.8100606239136E-5, 0 1 5 0.1810061E-04 0.9244596E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1810061E-04 1 0.4928797E-05 0.2723001E+00 2 0.9893681E-06 0.5465939E-01 3 0.2095720E-06 0.1157818E-01 4 0.3966359E-07 0.2191285E-02 5 0.5313665E-08 0.2935628E-03 Result GMRES:5, 2.5E-2, 5.3136645237549E-9, 0 2 10 0.5313665E-08 0.1752412E-04 NI: 2, NLI: 12, ERLI 0.5313665E-08, ERNI: 0.9244585E-01 T= 0.86E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.41E+01 Time integration at T= 0.86E+00, Grid level= 3, NPTS= 478 Nonlinear system solver at T = 0.8589308E+00 Max. and WRMS norm residual= 0.2783201E+01 0.3445710E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.5737564E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5737564E+02 1 0.7306329E+01 0.1273420E+00 2 0.1538190E+01 0.2680911E-01 3 0.5656310E+00 0.9858381E-02 4 0.2352760E+00 0.4100625E-02 5 0.8041064E-01 0.1401477E-02 6 0.3289104E-01 0.5732580E-03 Result GMRES:6, 5.E-2, 3.2891044892344E-2, 0 1 6 0.3289104E-01 0.6005653E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3289104E-01 1 0.1653784E-01 0.5028067E+00 2 0.5973746E-02 0.1816223E+00 3 0.2380467E-02 0.7237431E-01 4 0.9047119E-03 0.2750633E-01 5 0.2839061E-03 0.8631714E-02 6 0.1139546E-03 0.3464608E-02 7 0.4500904E-04 0.1368428E-02 8 0.1495123E-04 0.4545683E-03 Result GMRES:8, 5.E-2, 1.4951227553607E-5, 0 2 14 0.1495123E-04 0.2975693E-01 NI: 1, NLI: 16, ERLI 0.1495123E-04, ERNI: 0.6005643E+02 Max. and WRMS norm residual= 0.4543165E-01 0.5730060E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 956 # it. GCRO # it.GMRES Error Estimate 0 0 0.8676677E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8676677E+00 1 0.1489594E+00 0.1716779E+00 2 0.4155078E-01 0.4788790E-01 3 0.1752352E-01 0.2019612E-01 4 0.5962282E-02 0.6871620E-02 5 0.2320350E-02 0.2674238E-02 6 0.8697911E-03 0.1002447E-02 7 0.3188339E-03 0.3674608E-03 Result GMRES:7, 2.5E-2, 3.1883386193552E-4, 0 1 7 0.3188339E-03 0.9128579E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3188339E-03 1 0.1640667E-03 0.5145836E+00 2 0.5767415E-04 0.1808909E+00 3 0.2214316E-04 0.6945046E-01 4 0.8066523E-05 0.2530008E-01 5 0.3087578E-05 0.9683973E-02 6 0.1162096E-05 0.3644834E-02 7 0.3632898E-06 0.1139433E-02 8 0.1466693E-06 0.4600180E-03 Result GMRES:8, 2.5E-2, 1.4666930143475E-7, 0 2 15 0.1466693E-06 0.2820023E-03 NI: 2, NLI: 17, ERLI 0.1466693E-06, ERNI: 0.9128587E+00 T= 0.86E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.28E+01 Time integration at T= 0.86E+00, Grid level= 4, NPTS= 1013 Nonlinear system solver at T = 0.8589308E+00 Max. and WRMS norm residual= 0.2821188E+01 0.4603648E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2026 # it. GCRO # it.GMRES Error Estimate 0 0 0.6050646E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6050646E+02 1 0.1298241E+02 0.2145623E+00 2 0.4670497E+01 0.7719006E-01 3 0.2485667E+01 0.4108101E-01 4 0.1508648E+01 0.2493366E-01 5 0.7723990E+00 0.1276556E-01 6 0.4610166E+00 0.7619296E-02 7 0.2584430E+00 0.4271330E-02 8 0.1503044E+00 0.2484106E-02 9 0.8838527E-01 0.1460757E-02 10 0.5095366E-01 0.8421194E-03 11 0.3070617E-01 0.5074857E-03 Result GMRES:11, 5.E-2, 3.0706166526479E-2, 0 1 11 0.3070617E-01 0.7503116E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3070617E-01 1 0.2107848E-01 0.6864575E+00 2 0.1164675E-01 0.3792966E+00 3 0.6823655E-02 0.2222243E+00 4 0.4062403E-02 0.1322992E+00 5 0.2332581E-02 0.7596457E-01 6 0.1445542E-02 0.4707661E-01 7 0.8258672E-03 0.2689581E-01 8 0.5113327E-03 0.1665244E-01 9 0.2987933E-03 0.9730725E-02 10 0.1811110E-03 0.5898197E-02 11 0.1082201E-03 0.3524377E-02 12 0.6511957E-04 0.2120733E-02 13 0.3887328E-04 0.1265976E-02 14 0.2328787E-04 0.7584100E-03 Result GMRES:14, 5.E-2, 2.328786526832E-5, 0 2 25 0.2328787E-04 0.2945002E-01 NI: 1, NLI: 27, ERLI 0.2328787E-04, ERNI: 0.7503278E+02 Max. and WRMS norm residual= 0.1088072E+00 0.1587363E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 2026 # it. GCRO # it.GMRES Error Estimate 0 0 0.1891638E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1891638E+01 1 0.4575374E+00 0.2418737E+00 2 0.1697024E+00 0.8971187E-01 3 0.1109098E+00 0.5863163E-01 4 0.5111423E-01 0.2702115E-01 5 0.3143447E-01 0.1661760E-01 6 0.1670204E-01 0.8829408E-02 7 0.9860181E-02 0.5212510E-02 8 0.5570706E-02 0.2944912E-02 9 0.3215740E-02 0.1699977E-02 10 0.1881990E-02 0.9949000E-03 Result GMRES:10, 2.5E-2, 1.8819903401457E-3, 0 1 10 0.1881990E-02 0.2013184E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1881990E-02 1 0.1277130E-02 0.6786058E+00 2 0.6934362E-03 0.3684589E+00 3 0.3970867E-03 0.2109929E+00 4 0.2331874E-03 0.1239047E+00 5 0.1309484E-03 0.6957972E-01 6 0.8038967E-04 0.4271524E-01 7 0.4459464E-04 0.2369547E-01 8 0.2748021E-04 0.1460168E-01 9 0.1570044E-04 0.8342467E-02 10 0.9363127E-05 0.4975119E-02 11 0.5564846E-05 0.2956894E-02 12 0.3255155E-05 0.1729634E-02 13 0.1953257E-05 0.1037868E-02 14 0.1137195E-05 0.6042510E-03 Result GMRES:14, 2.5E-2, 1.1371945720528E-6, 0 2 24 0.1137195E-05 0.1726732E-02 NI: 2, NLI: 26, ERLI 0.1137195E-05, ERNI: 0.2013245E+01 T= 0.86E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.86E+00, Grid level= 5, NPTS= 2221 Nonlinear system solver at T = 0.8589308E+00 Max. and WRMS norm residual= 0.3106121E+01 0.6314025E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4442 # it. GCRO # it.GMRES Error Estimate 0 0 0.4617902E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4617902E+02 1 0.2235782E+02 0.4841553E+00 2 0.1072197E+02 0.2321827E+00 3 0.6970733E+01 0.1509502E+00 4 0.4817211E+01 0.1043160E+00 5 0.3390481E+01 0.7342036E-01 6 0.2469765E+01 0.5348241E-01 7 0.1810409E+01 0.3920414E-01 8 0.1345568E+01 0.2913808E-01 9 0.1007266E+01 0.2181221E-01 10 0.7587442E+00 0.1643049E-01 11 0.5747251E+00 0.1244559E-01 12 0.4362725E+00 0.9447417E-02 13 0.3318560E+00 0.7186294E-02 14 0.2529078E+00 0.5476681E-02 15 0.1930708E+00 0.4180919E-02 16 0.1476484E+00 0.3197303E-02 17 0.1130344E+00 0.2447743E-02 18 0.8660320E-01 0.1875380E-02 19 0.6642276E-01 0.1438375E-02 20 0.5097979E-01 0.1103960E-02 Result GMRES:20, 5.E-2, 5.0979790033159E-2, 1 1 20 0.5097979E-01 0.9847835E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5097979E-01 1 0.4061959E-01 0.7967782E+00 2 0.3036575E-01 0.5956429E+00 3 0.2326453E-01 0.4563481E+00 4 0.1784004E-01 0.3499434E+00 5 0.1374985E-01 0.2697117E+00 6 0.1058554E-01 0.2076418E+00 7 0.8151392E-02 0.1598946E+00 8 0.6278998E-02 0.1231664E+00 9 0.4838922E-02 0.9491843E-01 10 0.3725036E-02 0.7306888E-01 11 0.2871325E-02 0.5632282E-01 12 0.2212054E-02 0.4339080E-01 13 0.1703891E-02 0.3342288E-01 14 0.1313651E-02 0.2576808E-01 15 0.1012013E-02 0.1985126E-01 16 0.7796841E-03 0.1529398E-01 17 0.6009433E-03 0.1178787E-01 18 0.4629333E-03 0.9080721E-02 19 0.3566458E-03 0.6995827E-02 20 0.2747427E-03 0.5389247E-02 Result GMRES:20, 5.E-2, 2.7474266747633E-4, 1 2 40 0.2747427E-03 0.8668952E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2747427E-03 1 0.2191211E-03 0.7975504E+00 2 0.1642874E-03 0.5979683E+00 3 0.1259150E-03 0.4583018E+00 4 0.9666146E-04 0.3518255E+00 5 0.7448197E-04 0.2710972E+00 6 0.5726243E-04 0.2084220E+00 7 0.4407367E-04 0.1604180E+00 8 0.3386306E-04 0.1232537E+00 9 0.2601050E-04 0.9467222E-01 10 0.1994402E-04 0.7259162E-01 11 0.1526673E-04 0.5556738E-01 12 0.1165844E-04 0.4243404E-01 13 0.8877285E-05 0.3231127E-01 14 0.6734229E-05 0.2451104E-01 15 0.5087594E-05 0.1851767E-01 16 0.3824859E-05 0.1392160E-01 17 0.2863766E-05 0.1042345E-01 18 0.2132498E-05 0.7761802E-02 19 0.1582704E-05 0.5760677E-02 20 0.1163699E-05 0.4235595E-02 Result GMRES:20, 5.E-2, 1.1636986820514E-6, 1 3 60 0.1163699E-05 0.4665076E-03 NI: 1, NLI: 63, ERLI 0.1163699E-05, ERNI: 0.9848018E+02 Max. and WRMS norm residual= 0.1601369E+00 0.2668974E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4442 # it. GCRO # it.GMRES Error Estimate 0 0 0.1661252E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1661252E+01 1 0.5832008E+00 0.3510610E+00 2 0.2841065E+00 0.1710195E+00 3 0.2142960E+00 0.1289967E+00 4 0.1386542E+00 0.8346368E-01 5 0.1011601E+00 0.6089391E-01 6 0.7276683E-01 0.4380241E-01 7 0.5239429E-01 0.3153904E-01 8 0.3892726E-01 0.2343249E-01 9 0.2821720E-01 0.1698550E-01 10 0.2113066E-01 0.1271972E-01 11 0.1553957E-01 0.9354132E-02 12 0.1163340E-01 0.7002789E-02 13 0.8673830E-02 0.5221261E-02 14 0.6490078E-02 0.3906739E-02 15 0.4883708E-02 0.2939776E-02 16 0.3661858E-02 0.2204276E-02 17 0.2767416E-02 0.1665862E-02 18 0.2083931E-02 0.1254434E-02 19 0.1576870E-02 0.9492061E-03 Result GMRES:19, 2.5E-2, 1.5768704010434E-3, 0 1 19 0.1576870E-02 0.2895458E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1576870E-02 1 0.1247120E-02 0.7908831E+00 2 0.9112694E-03 0.5778975E+00 3 0.6931314E-03 0.4395614E+00 4 0.5230509E-03 0.3317019E+00 5 0.3986219E-03 0.2527931E+00 6 0.3033326E-03 0.1923637E+00 7 0.2308699E-03 0.1464102E+00 8 0.1760988E-03 0.1116762E+00 9 0.1342874E-03 0.8516072E-01 10 0.1024215E-03 0.6495236E-01 11 0.7819929E-04 0.4959145E-01 12 0.5973566E-04 0.3788242E-01 13 0.4559840E-04 0.2891703E-01 14 0.3484426E-04 0.2209710E-01 15 0.2662906E-04 0.1688729E-01 16 0.2033085E-04 0.1289317E-01 17 0.1555298E-04 0.9863192E-02 18 0.1187841E-04 0.7532903E-02 19 0.9090465E-05 0.5764878E-02 20 0.6955265E-05 0.4410803E-02 Result GMRES:20, 2.5E-2, 6.9552648254482E-6, 1 2 39 0.6955265E-05 0.2459474E-02 NI: 2, NLI: 41, ERLI 0.6955265E-05, ERNI: 0.2895476E+01 T= 0.86E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.43E+00 TN= 0.84E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.88E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.8824423E+00 Max. and WRMS norm residual= 0.1925467E+01 0.1907857E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3837353E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3837353E+02 1 0.1628091E+01 0.4242746E-01 2 0.1582344E+00 0.4123530E-02 3 0.8938747E-02 0.2329405E-03 Result GMRES:3, 5.E-2, 8.9387474980377E-3, 0 1 3 0.8938747E-02 0.3879622E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8938747E-02 1 0.7701327E-03 0.8615667E-01 2 0.6453267E-04 0.7219431E-02 3 0.4006237E-05 0.4481877E-03 Result GMRES:3, 5.E-2, 4.0062370692326E-6, 0 2 6 0.4006237E-05 0.8922435E-02 NI: 1, NLI: 8, ERLI 0.4006237E-05, ERNI: 0.3879634E+02 Max. and WRMS norm residual= 0.4136186E-03 0.4815970E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.7581114E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7581114E-02 1 0.6663624E-03 0.8789768E-01 2 0.4264551E-04 0.5625230E-02 3 0.3314512E-05 0.4372065E-03 Result GMRES:3, 2.5E-2, 3.3145124819998E-6, 0 1 3 0.3314512E-05 0.7677698E-02 NI: 2, NLI: 4, ERLI 0.3314512E-05, ERNI: 0.7677698E-02 T= 0.88E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.47E+01 Time integration at T= 0.88E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.8824423E+00 Max. and WRMS norm residual= 0.1946355E+01 0.2289846E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.3995109E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3995109E+02 1 0.3067605E+01 0.7678400E-01 2 0.4203377E+00 0.1052131E-01 3 0.8641497E-01 0.2163019E-02 4 0.2233062E-01 0.5589489E-03 Result GMRES:4, 5.E-2, 2.2330620027893E-2, 0 1 4 0.2233062E-01 0.4096313E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2233062E-01 1 0.7066780E-02 0.3164614E+00 2 0.1342161E-02 0.6010407E-01 3 0.2250934E-03 0.1008003E-01 4 0.2415075E-04 0.1081508E-02 5 0.4728578E-05 0.2117531E-03 Result GMRES:5, 5.E-2, 4.7285777873346E-6, 0 2 9 0.4728578E-05 0.2153540E-01 NI: 1, NLI: 11, ERLI 0.4728578E-05, ERNI: 0.4096290E+02 Max. and WRMS norm residual= 0.3315813E-02 0.4063182E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6420787E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6420787E-01 1 0.7716253E-02 0.1201761E+00 2 0.1286973E-02 0.2004385E-01 3 0.2909057E-03 0.4530686E-02 4 0.6532537E-04 0.1017404E-02 5 0.1281589E-04 0.1996001E-03 Result GMRES:5, 2.5E-2, 1.2815894861961E-5, 0 1 5 0.1281589E-04 0.6673986E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1281589E-04 1 0.3395749E-05 0.2649638E+00 2 0.6730975E-06 0.5252052E-01 3 0.1450126E-06 0.1131506E-01 4 0.2847298E-07 0.2221693E-02 5 0.3543150E-08 0.2764653E-03 Result GMRES:5, 2.5E-2, 3.5431500246253E-9, 0 2 10 0.3543150E-08 0.1243071E-04 NI: 2, NLI: 12, ERLI 0.3543150E-08, ERNI: 0.6673976E-01 T= 0.88E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.46E+01 Time integration at T= 0.88E+00, Grid level= 3, NPTS= 428 Nonlinear system solver at T = 0.8824423E+00 Max. and WRMS norm residual= 0.1950796E+01 0.3128994E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 856 # it. GCRO # it.GMRES Error Estimate 0 0 0.5416743E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5416743E+02 1 0.6501338E+01 0.1200230E+00 2 0.1690951E+01 0.3121713E-01 3 0.5871204E+00 0.1083899E-01 4 0.2523414E+00 0.4658545E-02 5 0.8413107E-01 0.1553167E-02 6 0.3374941E-01 0.6230572E-03 Result GMRES:6, 5.E-2, 3.3749407978514E-2, 0 1 6 0.3374941E-01 0.5577854E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3374941E-01 1 0.1691538E-01 0.5012052E+00 2 0.5864409E-02 0.1737633E+00 3 0.2378458E-02 0.7047407E-01 4 0.9143721E-03 0.2709298E-01 5 0.2503595E-03 0.7418189E-02 6 0.1068424E-03 0.3165755E-02 7 0.4052954E-04 0.1200896E-02 8 0.1358988E-04 0.4026701E-03 Result GMRES:8, 5.E-2, 1.3589877424938E-5, 0 2 14 0.1358988E-04 0.3041891E-01 NI: 1, NLI: 16, ERLI 0.1358988E-04, ERNI: 0.5577900E+02 Max. and WRMS norm residual= 0.3928743E-01 0.5626865E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 856 # it. GCRO # it.GMRES Error Estimate 0 0 0.8515811E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8515811E+00 1 0.1440865E+00 0.1691988E+00 2 0.3973488E-01 0.4666012E-01 3 0.1682967E-01 0.1976285E-01 4 0.5712759E-02 0.6708414E-02 5 0.2224128E-02 0.2611763E-02 6 0.8289300E-03 0.9734011E-03 Result GMRES:6, 2.5E-2, 8.2892997481211E-4, 0 1 6 0.8289300E-03 0.9010763E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8289300E-03 1 0.4039788E-03 0.4873497E+00 2 0.1534359E-03 0.1851011E+00 3 0.5807165E-04 0.7005616E-01 4 0.2174419E-04 0.2623164E-01 5 0.8038812E-05 0.9697818E-02 6 0.2656991E-05 0.3205326E-02 7 0.1176730E-05 0.1419577E-02 8 0.3596705E-06 0.4338974E-03 Result GMRES:8, 2.5E-2, 3.5967054167882E-7, 0 2 14 0.3596705E-06 0.7460740E-03 NI: 2, NLI: 16, ERLI 0.3596705E-06, ERNI: 0.9010750E+00 T= 0.88E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.88E+00, Grid level= 4, NPTS= 915 Nonlinear system solver at T = 0.8824423E+00 Max. and WRMS norm residual= 0.3021383E+01 0.4816647E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1830 # it. GCRO # it.GMRES Error Estimate 0 0 0.6335651E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6335651E+02 1 0.1363979E+02 0.2152864E+00 2 0.4876545E+01 0.7696991E-01 3 0.2605675E+01 0.4112719E-01 4 0.1592716E+01 0.2513895E-01 5 0.8140166E+00 0.1284819E-01 6 0.4863416E+00 0.7676269E-02 7 0.2721746E+00 0.4295921E-02 8 0.1575410E+00 0.2486580E-02 9 0.9236605E-01 0.1457878E-02 10 0.5388741E-01 0.8505427E-03 11 0.3203431E-01 0.5056198E-03 Result GMRES:11, 5.E-2, 3.2034306921256E-2, 0 1 11 0.3203431E-01 0.7858054E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3203431E-01 1 0.2195327E-01 0.6853049E+00 2 0.1217830E-01 0.3801644E+00 3 0.7110628E-02 0.2219691E+00 4 0.4232946E-02 0.1321379E+00 5 0.2438035E-02 0.7610701E-01 6 0.1499512E-02 0.4680956E-01 7 0.8611948E-03 0.2688352E-01 8 0.5316252E-03 0.1659550E-01 9 0.3102851E-03 0.9686024E-02 10 0.1885765E-03 0.5886706E-02 11 0.1118923E-03 0.3492889E-02 12 0.6770072E-04 0.2113382E-02 13 0.4014713E-04 0.1253254E-02 14 0.2400591E-04 0.7493812E-03 Result GMRES:14, 5.E-2, 2.4005907967842E-5, 0 2 25 0.2400591E-04 0.3084149E-01 NI: 1, NLI: 27, ERLI 0.2400591E-04, ERNI: 0.7858219E+02 Max. and WRMS norm residual= 0.9091081E-01 0.1530418E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1830 # it. GCRO # it.GMRES Error Estimate 0 0 0.1808076E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1808076E+01 1 0.4494164E+00 0.2485606E+00 2 0.1756939E+00 0.9717174E-01 3 0.1144141E+00 0.6327949E-01 4 0.5315779E-01 0.2940020E-01 5 0.3232184E-01 0.1787637E-01 6 0.1746989E-01 0.9662146E-02 7 0.1010402E-01 0.5588271E-02 8 0.5781570E-02 0.3197637E-02 9 0.3322248E-02 0.1837450E-02 10 0.1950466E-02 0.1078752E-02 11 0.1113563E-02 0.6158831E-03 Result GMRES:11, 2.5E-2, 1.1135632630449E-3, 0 1 11 0.1113563E-02 0.1945565E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1113563E-02 1 0.7604856E-03 0.6829299E+00 2 0.4089634E-03 0.3672566E+00 3 0.2376561E-03 0.2134195E+00 4 0.1383054E-03 0.1242008E+00 5 0.7927316E-04 0.7118874E-01 6 0.4689955E-04 0.4211665E-01 7 0.2758595E-04 0.2477269E-01 8 0.1623255E-04 0.1457712E-01 9 0.9594526E-05 0.8616058E-02 10 0.5674955E-05 0.5096212E-02 11 0.3374362E-05 0.3030238E-02 12 0.1988695E-05 0.1785884E-02 13 0.1179370E-05 0.1059096E-02 14 0.6996269E-06 0.6282776E-03 Result GMRES:14, 2.5E-2, 6.996268722199E-7, 0 2 25 0.6996269E-06 0.1024768E-02 NI: 2, NLI: 27, ERLI 0.6996269E-06, ERNI: 0.1945630E+01 T= 0.88E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.88E+00, Grid level= 5, NPTS= 2195 Nonlinear system solver at T = 0.8824423E+00 Max. and WRMS norm residual= 0.3091893E+01 0.6323593E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4390 # it. GCRO # it.GMRES Error Estimate 0 0 0.4630504E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4630504E+02 1 0.2241216E+02 0.4840111E+00 2 0.1075766E+02 0.2323216E+00 3 0.6998149E+01 0.1511315E+00 4 0.4843704E+01 0.1046042E+00 5 0.3408334E+01 0.7360610E-01 6 0.2476938E+01 0.5349174E-01 7 0.1810439E+01 0.3909810E-01 8 0.1342164E+01 0.2898527E-01 9 0.1001943E+01 0.2163788E-01 10 0.7530850E+00 0.1626356E-01 11 0.5692405E+00 0.1229327E-01 12 0.4314406E+00 0.9317356E-02 13 0.3278048E+00 0.7079247E-02 14 0.2495760E+00 0.5389824E-02 15 0.1903497E+00 0.4110778E-02 16 0.1454536E+00 0.3141205E-02 17 0.1112648E+00 0.2402865E-02 18 0.8520748E-01 0.1840134E-02 19 0.6531891E-01 0.1410622E-02 20 0.5011055E-01 0.1082183E-02 Result GMRES:20, 5.E-2, 5.0110548719613E-2, 1 1 20 0.5011055E-01 0.9861763E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5011055E-01 1 0.3992173E-01 0.7966731E+00 2 0.2983928E-01 0.5954690E+00 3 0.2284647E-01 0.4559213E+00 4 0.1751757E-01 0.3495786E+00 5 0.1349641E-01 0.2693326E+00 6 0.1039196E-01 0.2073808E+00 7 0.8000621E-02 0.1596594E+00 8 0.6162834E-02 0.1229848E+00 9 0.4750119E-02 0.9479279E-01 10 0.3655547E-02 0.7294964E-01 11 0.2818742E-02 0.5625047E-01 12 0.2171388E-02 0.4333196E-01 13 0.1672640E-02 0.3337900E-01 14 0.1289886E-02 0.2574081E-01 15 0.9939159E-03 0.1983446E-01 16 0.7658607E-03 0.1528342E-01 17 0.5904207E-03 0.1178236E-01 18 0.4549662E-03 0.9079249E-02 19 0.3505812E-03 0.6996155E-02 20 0.2701519E-03 0.5391118E-02 Result GMRES:20, 5.E-2, 2.7015189986563E-4, 1 2 40 0.2701519E-03 0.8524210E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2701519E-03 1 0.2154473E-03 0.7975044E+00 2 0.1615878E-03 0.5981368E+00 3 0.1238945E-03 0.4586107E+00 4 0.9512478E-04 0.3521159E+00 5 0.7329805E-04 0.2713216E+00 6 0.5635614E-04 0.2086091E+00 7 0.4334947E-04 0.1604633E+00 8 0.3327577E-04 0.1231743E+00 9 0.2551693E-04 0.9445401E-01 10 0.1952003E-04 0.7225577E-01 11 0.1489896E-04 0.5515032E-01 12 0.1133893E-04 0.4197243E-01 13 0.8599724E-05 0.3183292E-01 14 0.6502915E-05 0.2407133E-01 15 0.4900116E-05 0.1813837E-01 16 0.3680091E-05 0.1362230E-01 17 0.2755484E-05 0.1019976E-01 18 0.2049690E-05 0.7587177E-02 19 0.1517247E-05 0.5616275E-02 20 0.1111718E-05 0.4115159E-02 Result GMRES:20, 5.E-2, 1.1117179018195E-6, 1 3 60 0.1111718E-05 0.4579466E-03 NI: 1, NLI: 63, ERLI 0.1111718E-05, ERNI: 0.9861936E+02 Max. and WRMS norm residual= 0.1613894E+00 0.2670937E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4390 # it. GCRO # it.GMRES Error Estimate 0 0 0.1662431E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1662431E+01 1 0.5854323E+00 0.3521544E+00 2 0.2861775E+00 0.1721440E+00 3 0.2155806E+00 0.1296779E+00 4 0.1392071E+00 0.8373704E-01 5 0.1015399E+00 0.6107918E-01 6 0.7300425E-01 0.4391415E-01 7 0.5256586E-01 0.3161987E-01 8 0.3903247E-01 0.2347915E-01 9 0.2826832E-01 0.1700421E-01 10 0.2116101E-01 0.1272895E-01 11 0.1553437E-01 0.9344370E-02 12 0.1162805E-01 0.6994608E-02 13 0.8651432E-02 0.5204085E-02 14 0.6470811E-02 0.3892379E-02 15 0.4863419E-02 0.2925486E-02 16 0.3639814E-02 0.2189453E-02 17 0.2750837E-02 0.1654708E-02 18 0.2066242E-02 0.1242904E-02 19 0.1564022E-02 0.9408044E-03 Result GMRES:19, 2.5E-2, 1.5640224504999E-3, 0 1 19 0.1564022E-02 0.2898828E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1564022E-02 1 0.1238415E-02 0.7918142E+00 2 0.9030470E-03 0.5773875E+00 3 0.6872425E-03 0.4394071E+00 4 0.5180486E-03 0.3312283E+00 5 0.3947535E-03 0.2523963E+00 6 0.3004530E-03 0.1921028E+00 7 0.2284744E-03 0.1460813E+00 8 0.1746425E-03 0.1116624E+00 9 0.1328359E-03 0.8493221E-01 10 0.1015671E-03 0.6493966E-01 11 0.7749966E-04 0.4955150E-01 12 0.5913551E-04 0.3780989E-01 13 0.4526407E-04 0.2894081E-01 14 0.3450538E-04 0.2206194E-01 15 0.2645140E-04 0.1691242E-01 16 0.2014689E-04 0.1288146E-01 17 0.1545774E-04 0.9883321E-02 18 0.1178349E-04 0.7534093E-02 19 0.9042781E-05 0.5781746E-02 20 0.6906231E-05 0.4415685E-02 Result GMRES:20, 2.5E-2, 6.9062307554583E-6, 1 2 39 0.6906231E-05 0.2444083E-02 NI: 2, NLI: 41, ERLI 0.6906231E-05, ERNI: 0.2898847E+01 T= 0.88E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.39E+00 TN= 0.86E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.49E+00 Time integration at T= 0.91E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.9059539E+00 Max. and WRMS norm residual= 0.1015816E+01 0.1039754E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2094105E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2094105E+02 1 0.8408719E+00 0.4015424E-01 2 0.8391734E-01 0.4007313E-02 3 0.4792956E-02 0.2288785E-03 Result GMRES:3, 5.E-2, 4.7929562324553E-3, 0 1 3 0.4792956E-02 0.2116874E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4792956E-02 1 0.4124858E-03 0.8606083E-01 2 0.3444400E-04 0.7186379E-02 3 0.2154694E-05 0.4495543E-03 Result GMRES:3, 5.E-2, 2.1546941898671E-6, 0 2 6 0.2154694E-05 0.4782453E-02 NI: 1, NLI: 8, ERLI 0.2154694E-05, ERNI: 0.2116881E+02 Max. and WRMS norm residual= 0.1112731E-03 0.1325254E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.2085904E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2085904E-02 1 0.1789203E-03 0.8577593E-01 2 0.1166307E-04 0.5591376E-02 3 0.9016193E-06 0.4322440E-03 Result GMRES:3, 2.5E-2, 9.0161934317798E-7, 0 1 3 0.9016193E-06 0.2105566E-02 NI: 2, NLI: 4, ERLI 0.9016193E-06, ERNI: 0.2105566E-02 T= 0.91E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.51E+01 Time integration at T= 0.91E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.9059539E+00 Max. and WRMS norm residual= 0.1032457E+01 0.1271384E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.2274747E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2274747E+02 1 0.1575871E+01 0.6927674E-01 2 0.2328222E+00 0.1023508E-01 3 0.4527379E-01 0.1990278E-02 4 0.1203815E-01 0.5292083E-03 Result GMRES:4, 5.E-2, 1.2038150212212E-2, 0 1 4 0.1203815E-01 0.2304112E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1203815E-01 1 0.3830871E-02 0.3182275E+00 2 0.7302944E-03 0.6066500E-01 3 0.1182772E-03 0.9825196E-02 4 0.1448268E-04 0.1203065E-02 5 0.3160655E-05 0.2625532E-03 Result GMRES:5, 5.E-2, 3.1606545242094E-6, 0 2 9 0.3160655E-05 0.1169103E-01 NI: 1, NLI: 11, ERLI 0.3160655E-05, ERNI: 0.2304092E+02 Max. and WRMS norm residual= 0.2063162E-02 0.2722029E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.4319623E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4319623E-01 1 0.5048422E-02 0.1168718E+00 2 0.8420999E-03 0.1949475E-01 3 0.1932840E-03 0.4474557E-02 4 0.4506997E-04 0.1043377E-02 5 0.8571783E-05 0.1984382E-03 Result GMRES:5, 2.5E-2, 8.5717833022655E-6, 0 1 5 0.8571783E-05 0.4547212E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8571783E-05 1 0.2195686E-05 0.2561528E+00 2 0.4339672E-06 0.5062741E-01 3 0.9396351E-07 0.1096196E-01 4 0.1902374E-07 0.2219344E-02 5 0.2473258E-08 0.2885348E-03 Result GMRES:5, 2.5E-2, 2.4732575589805E-9, 0 2 10 0.2473258E-08 0.8315704E-05 NI: 2, NLI: 12, ERLI 0.2473258E-08, ERNI: 0.4547205E-01 T= 0.91E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.52E+01 Time integration at T= 0.91E+00, Grid level= 3, NPTS= 432 Nonlinear system solver at T = 0.9059539E+00 Max. and WRMS norm residual= 0.2459928E+01 0.3067572E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 864 # it. GCRO # it.GMRES Error Estimate 0 0 0.5522953E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5522953E+02 1 0.6860782E+01 0.1242231E+00 2 0.1542488E+01 0.2792868E-01 3 0.4825909E+00 0.8737914E-02 4 0.2067521E+00 0.3743507E-02 5 0.6966049E-01 0.1261291E-02 6 0.2689122E-01 0.4868994E-03 Result GMRES:6, 5.E-2, 2.689122323934E-2, 0 1 6 0.2689122E-01 0.5753231E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2689122E-01 1 0.1352469E-01 0.5029407E+00 2 0.4600197E-02 0.1710669E+00 3 0.1902604E-02 0.7075184E-01 4 0.6953165E-03 0.2585664E-01 5 0.2185122E-03 0.8125781E-02 6 0.8576855E-04 0.3189463E-02 7 0.3565041E-04 0.1325727E-02 8 0.1154527E-04 0.4293324E-03 Result GMRES:8, 5.E-2, 1.1545272620235E-5, 0 2 14 0.1154527E-04 0.2388035E-01 NI: 1, NLI: 16, ERLI 0.1154527E-04, ERNI: 0.5753278E+02 Max. and WRMS norm residual= 0.1946679E-01 0.2921876E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 864 # it. GCRO # it.GMRES Error Estimate 0 0 0.4370541E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4370541E+00 1 0.7005876E-01 0.1602977E+00 2 0.2001741E-01 0.4580077E-01 3 0.8460633E-02 0.1935832E-01 4 0.2966019E-02 0.6786389E-02 5 0.1134727E-02 0.2596307E-02 6 0.4398948E-03 0.1006500E-02 7 0.1623962E-03 0.3715700E-03 Result GMRES:7, 2.5E-2, 1.6239617802229E-4, 0 1 7 0.1623962E-03 0.4558868E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1623962E-03 1 0.8216634E-04 0.5059623E+00 2 0.3028110E-04 0.1864644E+00 3 0.1126106E-04 0.6934316E-01 4 0.4074975E-05 0.2509280E-01 5 0.1632336E-05 0.1005157E-01 6 0.5982982E-06 0.3684189E-02 7 0.1900207E-06 0.1170106E-02 8 0.7541426E-07 0.4643845E-03 Result GMRES:8, 2.5E-2, 7.5414259921303E-8, 0 2 15 0.7541426E-07 0.1448680E-03 NI: 2, NLI: 17, ERLI 0.7541426E-07, ERNI: 0.4558849E+00 T= 0.91E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.30E+01 Time integration at T= 0.91E+00, Grid level= 4, NPTS= 915 Nonlinear system solver at T = 0.9059539E+00 Max. and WRMS norm residual= 0.2879789E+01 0.4796189E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1830 # it. GCRO # it.GMRES Error Estimate 0 0 0.6314625E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6314625E+02 1 0.1356421E+02 0.2148063E+00 2 0.4907847E+01 0.7772191E-01 3 0.2632756E+01 0.4169299E-01 4 0.1598036E+01 0.2530691E-01 5 0.8146600E+00 0.1290116E-01 6 0.4862250E+00 0.7699983E-02 7 0.2727709E+00 0.4319670E-02 8 0.1575238E+00 0.2494587E-02 9 0.9238081E-01 0.1462966E-02 10 0.5371765E-01 0.8506863E-03 11 0.3212338E-01 0.5087140E-03 Result GMRES:11, 5.E-2, 3.2123380809211E-2, 0 1 11 0.3212338E-01 0.7823854E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3212338E-01 1 0.2196760E-01 0.6838510E+00 2 0.1219204E-01 0.3795379E+00 3 0.7111419E-02 0.2213783E+00 4 0.4228667E-02 0.1316383E+00 5 0.2433177E-02 0.7574474E-01 6 0.1501399E-02 0.4673852E-01 7 0.8582037E-03 0.2671586E-01 8 0.5315199E-03 0.1654620E-01 9 0.3094107E-03 0.9631947E-02 10 0.1880017E-03 0.5852489E-02 11 0.1117289E-03 0.3478117E-02 12 0.6720860E-04 0.2092202E-02 13 0.4007269E-04 0.1247462E-02 14 0.2371902E-04 0.7383725E-03 Result GMRES:14, 5.E-2, 2.371902254291E-5, 0 2 25 0.2371902E-04 0.3084312E-01 NI: 1, NLI: 27, ERLI 0.2371902E-04, ERNI: 0.7824023E+02 Max. and WRMS norm residual= 0.1094824E+00 0.1657110E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1830 # it. GCRO # it.GMRES Error Estimate 0 0 0.1976256E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1976256E+01 1 0.4850113E+00 0.2454193E+00 2 0.1831874E+00 0.9269415E-01 3 0.1186357E+00 0.6003052E-01 4 0.5483971E-01 0.2774929E-01 5 0.3352609E-01 0.1696445E-01 6 0.1784433E-01 0.9029359E-02 7 0.1044004E-01 0.5282735E-02 8 0.5897210E-02 0.2984031E-02 9 0.3410809E-02 0.1725894E-02 10 0.1990147E-02 0.1007029E-02 11 0.1137844E-02 0.5757575E-03 Result GMRES:11, 2.5E-2, 1.1378443450755E-3, 0 1 11 0.1137844E-02 0.2104478E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1137844E-02 1 0.7771279E-03 0.6829826E+00 2 0.4162137E-03 0.3657914E+00 3 0.2428544E-03 0.2134338E+00 4 0.1401507E-03 0.1231721E+00 5 0.8086909E-04 0.7107219E-01 6 0.4762001E-04 0.4185108E-01 7 0.2804123E-04 0.2464417E-01 8 0.1651655E-04 0.1451565E-01 9 0.9707564E-05 0.8531539E-02 10 0.5776879E-05 0.5077038E-02 11 0.3401154E-05 0.2989121E-02 12 0.2020384E-05 0.1775624E-02 13 0.1187859E-05 0.1043956E-02 14 0.7093326E-06 0.6234004E-03 Result GMRES:14, 2.5E-2, 7.0933261492712E-7, 0 2 25 0.7093326E-06 0.1045085E-02 NI: 2, NLI: 27, ERLI 0.7093326E-06, ERNI: 0.2104526E+01 T= 0.91E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.91E+00, Grid level= 5, NPTS= 2211 Nonlinear system solver at T = 0.9059539E+00 Max. and WRMS norm residual= 0.3074604E+01 0.6269273E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4422 # it. GCRO # it.GMRES Error Estimate 0 0 0.4596757E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4596757E+02 1 0.2225147E+02 0.4840688E+00 2 0.1069419E+02 0.2326464E+00 3 0.6958312E+01 0.1513744E+00 4 0.4817372E+01 0.1047994E+00 5 0.3390435E+01 0.7375711E-01 6 0.2463617E+01 0.5359467E-01 7 0.1799707E+01 0.3915167E-01 8 0.1332998E+01 0.2899865E-01 9 0.9929337E+00 0.2160074E-01 10 0.7444344E+00 0.1619477E-01 11 0.5614185E+00 0.1221336E-01 12 0.4249553E+00 0.9244675E-02 13 0.3228194E+00 0.7022764E-02 14 0.2456604E+00 0.5344212E-02 15 0.1872602E+00 0.4073746E-02 16 0.1430192E+00 0.3111307E-02 17 0.1093802E+00 0.2379507E-02 18 0.8378135E-01 0.1822619E-02 19 0.6423244E-01 0.1397342E-02 20 0.4928296E-01 0.1072124E-02 Result GMRES:20, 5.E-2, 4.9282956224014E-2, 1 1 20 0.4928296E-01 0.9778451E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4928296E-01 1 0.3928028E-01 0.7970358E+00 2 0.2936355E-01 0.5958155E+00 3 0.2247857E-01 0.4561125E+00 4 0.1724682E-01 0.3499552E+00 5 0.1328849E-01 0.2696367E+00 6 0.1023451E-01 0.2076683E+00 7 0.7873345E-02 0.1597580E+00 8 0.6069701E-02 0.1231602E+00 9 0.4674375E-02 0.9484771E-01 10 0.3597677E-02 0.7300042E-01 11 0.2774740E-02 0.5630221E-01 12 0.2134586E-02 0.4331287E-01 13 0.1645198E-02 0.3338269E-01 14 0.1267680E-02 0.2572249E-01 15 0.9762542E-03 0.1980917E-01 16 0.7523058E-03 0.1526503E-01 17 0.5795423E-03 0.1175949E-01 18 0.4463708E-03 0.9057305E-02 19 0.3437862E-03 0.6975762E-02 20 0.2647560E-03 0.5372161E-02 Result GMRES:20, 5.E-2, 2.6475596218851E-4, 1 2 40 0.2647560E-03 0.8378838E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2647560E-03 1 0.2111069E-03 0.7973640E+00 2 0.1581810E-03 0.5974596E+00 3 0.1211815E-03 0.4577101E+00 4 0.9294511E-04 0.3510595E+00 5 0.7155054E-04 0.2702509E+00 6 0.5491354E-04 0.2074119E+00 7 0.4216493E-04 0.1592596E+00 8 0.3228139E-04 0.1219288E+00 9 0.2468328E-04 0.9323030E-01 10 0.1881522E-04 0.7106628E-01 11 0.1431344E-04 0.5406276E-01 12 0.1085574E-04 0.4100282E-01 13 0.8219159E-05 0.3104428E-01 14 0.6208676E-05 0.2345056E-01 15 0.4678757E-05 0.1767196E-01 16 0.3513757E-05 0.1327168E-01 17 0.2624845E-05 0.9914206E-02 18 0.1949851E-05 0.7364709E-02 19 0.1441864E-05 0.5446013E-02 20 0.1057164E-05 0.3992974E-02 Result GMRES:20, 5.E-2, 1.0571635689556E-6, 1 3 60 0.1057164E-05 0.4474309E-03 NI: 1, NLI: 63, ERLI 0.1057164E-05, ERNI: 0.9778616E+02 Max. and WRMS norm residual= 0.1620358E+00 0.2646735E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4422 # it. GCRO # it.GMRES Error Estimate 0 0 0.1647358E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1647358E+01 1 0.5815381E+00 0.3530125E+00 2 0.2850286E+00 0.1730216E+00 3 0.2146263E+00 0.1302851E+00 4 0.1385258E+00 0.8408968E-01 5 0.1010384E+00 0.6133357E-01 6 0.7257861E-01 0.4405758E-01 7 0.5228316E-01 0.3173757E-01 8 0.3881037E-01 0.2355915E-01 9 0.2811462E-01 0.1706649E-01 10 0.2104913E-01 0.1277751E-01 11 0.1544812E-01 0.9377508E-02 12 0.1156798E-01 0.7022140E-02 13 0.8603051E-02 0.5222331E-02 14 0.6435436E-02 0.3906518E-02 15 0.4834300E-02 0.2934577E-02 16 0.3618387E-02 0.2196479E-02 17 0.2734418E-02 0.1659881E-02 18 0.2053437E-02 0.1246503E-02 19 0.1554889E-02 0.9438684E-03 Result GMRES:19, 2.5E-2, 1.5548894277804E-3, 0 1 19 0.1554889E-02 0.2872732E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1554889E-02 1 0.1231252E-02 0.7918584E+00 2 0.8976051E-03 0.5772791E+00 3 0.6829362E-03 0.4392185E+00 4 0.5146322E-03 0.3309767E+00 5 0.3922105E-03 0.2522433E+00 6 0.2983081E-03 0.1918516E+00 7 0.2268253E-03 0.1458787E+00 8 0.1733237E-03 0.1114701E+00 9 0.1318251E-03 0.8478101E-01 10 0.1006826E-03 0.6475225E-01 11 0.7684762E-04 0.4942321E-01 12 0.5859992E-04 0.3768752E-01 13 0.4485243E-04 0.2884606E-01 14 0.3416867E-04 0.2197498E-01 15 0.2618656E-04 0.1684143E-01 16 0.1995083E-04 0.1283103E-01 17 0.1529500E-04 0.9836712E-02 18 0.1166326E-04 0.7501025E-02 19 0.8944045E-05 0.5752206E-02 20 0.6834649E-05 0.4395585E-02 Result GMRES:20, 2.5E-2, 6.8346491167896E-6, 1 2 39 0.6834649E-05 0.2425973E-02 NI: 2, NLI: 41, ERLI 0.6834649E-05, ERNI: 0.2872751E+01 T= 0.91E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.39E+00 TN= 0.88E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.93E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.9294654E+00 Max. and WRMS norm residual= 0.3999143E+00 0.4037986E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.9206606E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9206606E+01 1 0.2751253E+00 0.2988346E-01 2 0.2724633E-01 0.2959432E-02 3 0.1840550E-02 0.1999162E-03 Result GMRES:3, 5.E-2, 1.8405495707345E-3, 0 1 3 0.1840550E-02 0.9287741E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1840550E-02 1 0.1598514E-03 0.8684982E-01 2 0.1393131E-04 0.7569101E-02 3 0.7768785E-06 0.4220905E-03 Result GMRES:3, 5.E-2, 7.7687846717035E-7, 0 2 6 0.7768785E-06 0.1831831E-02 NI: 1, NLI: 8, ERLI 0.7768785E-06, ERNI: 0.9287787E+01 Max. and WRMS norm residual= 0.1566409E-04 0.1916210E-01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3014129E-03 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3014129E-03 1 0.2398723E-04 0.7958262E-01 2 0.1722346E-05 0.5714240E-02 3 0.1285291E-06 0.4264221E-03 Result GMRES:3, 2.5E-2, 1.2852913071333E-7, 0 1 3 0.1285291E-06 0.3032390E-03 NI: 2, NLI: 4, ERLI 0.1285291E-06, ERNI: 0.3032390E-03 T= 0.93E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.93E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.9294654E+00 Max. and WRMS norm residual= 0.5027714E+00 0.6851006E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.1591522E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1591522E+02 1 0.9636821E+00 0.6055097E-01 2 0.1710450E+00 0.1074726E-01 3 0.3241248E-01 0.2036571E-02 4 0.8033975E-02 0.5047982E-03 Result GMRES:4, 5.E-2, 8.0339751210103E-3, 0 1 4 0.8033975E-02 0.1588436E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8033975E-02 1 0.2483513E-02 0.3091263E+00 2 0.4750095E-03 0.5912508E-01 3 0.6793443E-04 0.8455892E-02 4 0.1256700E-04 0.1564231E-02 5 0.3132536E-05 0.3899110E-03 Result GMRES:5, 5.E-2, 3.1325355513925E-6, 0 2 9 0.3132536E-05 0.7793398E-02 NI: 1, NLI: 11, ERLI 0.3132536E-05, ERNI: 0.1588442E+02 Max. and WRMS norm residual= 0.1173462E-02 0.1587070E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.2520428E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2520428E-01 1 0.3006026E-02 0.1192665E+00 2 0.5126728E-03 0.2034070E-01 3 0.1218996E-03 0.4836464E-02 4 0.2773941E-04 0.1100583E-02 5 0.5093346E-05 0.2020826E-03 Result GMRES:5, 2.5E-2, 5.0933464445439E-6, 0 1 5 0.5093346E-05 0.2670433E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5093346E-05 1 0.1267780E-05 0.2489090E+00 2 0.2490683E-06 0.4890072E-01 3 0.5280362E-07 0.1036718E-01 4 0.1133338E-07 0.2225134E-02 5 0.1563831E-08 0.3070341E-03 Result GMRES:5, 2.5E-2, 1.563831007728E-9, 0 2 10 0.1563831E-08 0.4940595E-05 NI: 2, NLI: 12, ERLI 0.1563831E-08, ERNI: 0.2670428E-01 T= 0.93E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.52E+01 Time integration at T= 0.93E+00, Grid level= 3, NPTS= 462 Nonlinear system solver at T = 0.9294654E+00 Max. and WRMS norm residual= 0.2979845E+01 0.3409213E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 924 # it. GCRO # it.GMRES Error Estimate 0 0 0.5901832E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5901832E+02 1 0.7671564E+01 0.1299862E+00 2 0.1374115E+01 0.2328286E-01 3 0.4429243E+00 0.7504862E-02 4 0.1912321E+00 0.3240216E-02 5 0.6626754E-01 0.1122830E-02 6 0.2620650E-01 0.4440400E-03 Result GMRES:6, 5.E-2, 2.6206495917583E-2, 0 1 6 0.2620650E-01 0.6239002E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2620650E-01 1 0.1313101E-01 0.5010594E+00 2 0.4656580E-02 0.1776880E+00 3 0.1881794E-02 0.7180639E-01 4 0.7025167E-03 0.2680697E-01 5 0.2397073E-03 0.9146865E-02 6 0.9378544E-04 0.3578710E-02 7 0.3774560E-04 0.1440315E-02 8 0.1258482E-04 0.4802177E-03 Result GMRES:8, 5.E-2, 1.2584824368633E-5, 0 2 14 0.1258482E-04 0.2328055E-01 NI: 1, NLI: 16, ERLI 0.1258482E-04, ERNI: 0.6239019E+02 Max. and WRMS norm residual= 0.2309484E-01 0.2960381E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 924 # it. GCRO # it.GMRES Error Estimate 0 0 0.4448860E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4448860E+00 1 0.7898107E-01 0.1775310E+00 2 0.2377164E-01 0.5343311E-01 3 0.9899746E-02 0.2225232E-01 4 0.3394852E-02 0.7630835E-02 5 0.1316365E-02 0.2958882E-02 6 0.4969096E-03 0.1116937E-02 7 0.1741420E-03 0.3914305E-03 Result GMRES:7, 2.5E-2, 1.7414195470151E-4, 0 1 7 0.1741420E-03 0.4614295E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1741420E-03 1 0.8769991E-04 0.5036116E+00 2 0.3139414E-04 0.1802790E+00 3 0.1247248E-04 0.7162248E-01 4 0.4424976E-05 0.2541017E-01 5 0.1762809E-05 0.1012283E-01 6 0.6386200E-06 0.3667238E-02 7 0.2030041E-06 0.1165739E-02 8 0.8334808E-07 0.4786215E-03 Result GMRES:8, 2.5E-2, 8.3348080256504E-8, 0 2 15 0.8334808E-07 0.1559045E-03 NI: 2, NLI: 17, ERLI 0.8334808E-07, ERNI: 0.4614304E+00 T= 0.93E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.93E+00, Grid level= 4, NPTS= 967 Nonlinear system solver at T = 0.9294654E+00 Max. and WRMS norm residual= 0.3003938E+01 0.4633705E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1934 # it. GCRO # it.GMRES Error Estimate 0 0 0.6106637E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6106637E+02 1 0.1313353E+02 0.2150697E+00 2 0.4728846E+01 0.7743781E-01 3 0.2529976E+01 0.4142993E-01 4 0.1546607E+01 0.2532666E-01 5 0.7888977E+00 0.1291869E-01 6 0.4718063E+00 0.7726123E-02 7 0.2643270E+00 0.4328520E-02 8 0.1538483E+00 0.2519362E-02 9 0.9019649E-01 0.1477024E-02 10 0.5236060E-01 0.8574376E-03 11 0.3133167E-01 0.5130757E-03 Result GMRES:11, 5.E-2, 3.1331674006183E-2, 0 1 11 0.3133167E-01 0.7567876E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3133167E-01 1 0.2151641E-01 0.6867304E+00 2 0.1188099E-01 0.3792005E+00 3 0.6960567E-02 0.2221575E+00 4 0.4130557E-02 0.1318333E+00 5 0.2379792E-02 0.7595483E-01 6 0.1468398E-02 0.4686625E-01 7 0.8404354E-03 0.2682383E-01 8 0.5194407E-03 0.1657877E-01 9 0.3028655E-03 0.9666433E-02 10 0.1832720E-03 0.5849415E-02 11 0.1093658E-03 0.3490583E-02 12 0.6512820E-04 0.2078670E-02 13 0.3905333E-04 0.1246449E-02 14 0.2300202E-04 0.7341459E-03 Result GMRES:14, 5.E-2, 2.3002019377967E-5, 0 2 25 0.2300202E-04 0.3007016E-01 NI: 1, NLI: 27, ERLI 0.2300202E-04, ERNI: 0.7568033E+02 Max. and WRMS norm residual= 0.9011189E-01 0.1470207E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1934 # it. GCRO # it.GMRES Error Estimate 0 0 0.1735810E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1735810E+01 1 0.4357334E+00 0.2510260E+00 2 0.1701069E+00 0.9799857E-01 3 0.1105619E+00 0.6369471E-01 4 0.5115256E-01 0.2946899E-01 5 0.3116080E-01 0.1795173E-01 6 0.1673933E-01 0.9643529E-02 7 0.9771801E-02 0.5629535E-02 8 0.5575085E-02 0.3211806E-02 9 0.3206924E-02 0.1847509E-02 10 0.1879270E-02 0.1082647E-02 11 0.1081898E-02 0.6232812E-03 Result GMRES:11, 2.5E-2, 1.081897691686E-3, 0 1 11 0.1081898E-02 0.1866702E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1081898E-02 1 0.7363752E-03 0.6806330E+00 2 0.3990776E-03 0.3688681E+00 3 0.2304170E-03 0.2129748E+00 4 0.1339035E-03 0.1237673E+00 5 0.7706966E-04 0.7123562E-01 6 0.4552682E-04 0.4208052E-01 7 0.2678542E-04 0.2475781E-01 8 0.1576767E-04 0.1457409E-01 9 0.9271714E-05 0.8569862E-02 10 0.5524609E-05 0.5106406E-02 11 0.3238038E-05 0.2992925E-02 12 0.1933989E-05 0.1787589E-02 13 0.1131495E-05 0.1045843E-02 14 0.6769892E-06 0.6257423E-03 Result GMRES:14, 2.5E-2, 6.7698918897175E-7, 0 2 25 0.6769892E-06 0.9957899E-03 NI: 2, NLI: 27, ERLI 0.6769892E-06, ERNI: 0.1866765E+01 T= 0.93E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.11E+01 Time integration at T= 0.93E+00, Grid level= 5, NPTS= 2281 Nonlinear system solver at T = 0.9294654E+00 Max. and WRMS norm residual= 0.3054219E+01 0.6139960E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4562 # it. GCRO # it.GMRES Error Estimate 0 0 0.4508634E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4508634E+02 1 0.2182859E+02 0.4841508E+00 2 0.1050511E+02 0.2329999E+00 3 0.6836910E+01 0.1516404E+00 4 0.4734416E+01 0.1050078E+00 5 0.3335413E+01 0.7397836E-01 6 0.2425406E+01 0.5379469E-01 7 0.1772768E+01 0.3931940E-01 8 0.1313982E+01 0.2914367E-01 9 0.9806095E+00 0.2174959E-01 10 0.7369410E+00 0.1634511E-01 11 0.5568543E+00 0.1235084E-01 12 0.4220208E+00 0.9360282E-02 13 0.3206189E+00 0.7111221E-02 14 0.2441076E+00 0.5414225E-02 15 0.1861846E+00 0.4129513E-02 16 0.1422630E+00 0.3155347E-02 17 0.1088269E+00 0.2413745E-02 18 0.8334426E-01 0.1848548E-02 19 0.6390888E-01 0.1417478E-02 20 0.4904598E-01 0.1087824E-02 Result GMRES:20, 5.E-2, 4.9045983795907E-2, 1 1 20 0.4904598E-01 0.9579358E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4904598E-01 1 0.3908920E-01 0.7969908E+00 2 0.2922757E-01 0.5959219E+00 3 0.2238241E-01 0.4563555E+00 4 0.1716679E-01 0.3500142E+00 5 0.1323066E-01 0.2697603E+00 6 0.1018962E-01 0.2077564E+00 7 0.7846035E-02 0.1599730E+00 8 0.6045517E-02 0.1232622E+00 9 0.4660771E-02 0.9502859E-01 10 0.3586855E-02 0.7313250E-01 11 0.2766281E-02 0.5640178E-01 12 0.2131083E-02 0.4345071E-01 13 0.1641675E-02 0.3347215E-01 14 0.1266141E-02 0.2581539E-01 15 0.9754645E-03 0.1988877E-01 16 0.7516773E-03 0.1532597E-01 17 0.5794960E-03 0.1181536E-01 18 0.4464740E-03 0.9103171E-02 19 0.3439990E-03 0.7013806E-02 20 0.2650479E-03 0.5404070E-02 Result GMRES:20, 5.E-2, 2.6504792095403E-4, 1 2 40 0.2650479E-03 0.8338610E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2650479E-03 1 0.2113530E-03 0.7974141E+00 2 0.1584164E-03 0.5976897E+00 3 0.1213649E-03 0.4578980E+00 4 0.9305166E-04 0.3510749E+00 5 0.7157279E-04 0.2700372E+00 6 0.5486829E-04 0.2070127E+00 7 0.4205076E-04 0.1586534E+00 8 0.3213542E-04 0.1212438E+00 9 0.2451665E-04 0.9249893E-01 10 0.1865671E-04 0.7038994E-01 11 0.1417748E-04 0.5349025E-01 12 0.1075656E-04 0.4058346E-01 13 0.8147809E-05 0.3074089E-01 14 0.6159295E-05 0.2323842E-01 15 0.4635818E-05 0.1749049E-01 16 0.3475939E-05 0.1311438E-01 17 0.2596801E-05 0.9797477E-02 18 0.1930384E-05 0.7283152E-02 19 0.1431906E-05 0.5402443E-02 20 0.1054115E-05 0.3977075E-02 Result GMRES:20, 5.E-2, 1.0541154639202E-6, 1 3 60 0.1054115E-05 0.4471112E-03 NI: 1, NLI: 63, ERLI 0.1054115E-05, ERNI: 0.9579519E+02 Max. and WRMS norm residual= 0.1620476E+00 0.2591525E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4562 # it. GCRO # it.GMRES Error Estimate 0 0 0.1612991E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1612991E+01 1 0.5700954E+00 0.3534398E+00 2 0.2801330E+00 0.1736730E+00 3 0.2109312E+00 0.1307702E+00 4 0.1361486E+00 0.8440752E-01 5 0.9933650E-01 0.6158527E-01 6 0.7130811E-01 0.4420861E-01 7 0.5138117E-01 0.3185459E-01 8 0.3812553E-01 0.2363654E-01 9 0.2762298E-01 0.1712531E-01 10 0.2067272E-01 0.1281638E-01 11 0.1517398E-01 0.9407353E-02 12 0.1135972E-01 0.7042640E-02 13 0.8447377E-02 0.5237088E-02 14 0.6320493E-02 0.3918491E-02 15 0.4747847E-02 0.2943504E-02 16 0.3554478E-02 0.2203656E-02 17 0.2686122E-02 0.1665305E-02 18 0.2018874E-02 0.1251634E-02 19 0.1529066E-02 0.9479692E-03 Result GMRES:19, 2.5E-2, 1.5290660751556E-3, 0 1 19 0.1529066E-02 0.2812381E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1529066E-02 1 0.1210964E-02 0.7919632E+00 2 0.8836224E-03 0.5778838E+00 3 0.6726555E-03 0.4399126E+00 4 0.5073937E-03 0.3318324E+00 5 0.3867866E-03 0.2529561E+00 6 0.2944753E-03 0.1925851E+00 7 0.2240476E-03 0.1465258E+00 8 0.1713210E-03 0.1120429E+00 9 0.1303693E-03 0.8526074E-01 10 0.9970886E-04 0.6520900E-01 11 0.7611142E-04 0.4977641E-01 12 0.5811259E-04 0.3800528E-01 13 0.4448357E-04 0.2909199E-01 14 0.3393466E-04 0.2219306E-01 15 0.2601096E-04 0.1701101E-01 16 0.1983333E-04 0.1297088E-01 17 0.1521150E-04 0.9948232E-02 18 0.1160757E-04 0.7591278E-02 19 0.8904851E-05 0.5823719E-02 20 0.6807213E-05 0.4451876E-02 Result GMRES:20, 2.5E-2, 6.8072130682435E-6, 1 2 39 0.6807213E-05 0.2388503E-02 NI: 2, NLI: 41, ERLI 0.6807213E-05, ERNI: 0.2812399E+01 T= 0.93E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.39E+00 TN= 0.91E+00, DT= 0.24E-01, DTNEW= 0.25E-01, TIMMON= 0.47E+00 Time integration at T= 0.95E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.9529769E+00 Max. and WRMS norm residual= 0.9888870E-01 0.8867050E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3565862E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3565862E+01 1 0.8641889E-01 0.2423506E-01 2 0.5627683E-02 0.1578211E-02 3 0.3805686E-03 0.1067256E-03 Result GMRES:3, 5.E-2, 3.8056863890405E-4, 0 1 3 0.3805686E-03 0.3579514E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3805686E-03 1 0.4199482E-04 0.1103476E+00 2 0.2730940E-05 0.7175945E-02 3 0.1487271E-06 0.3908024E-03 Result GMRES:3, 5.E-2, 1.4872714024187E-7, 0 2 6 0.1487271E-06 0.3801273E-03 NI: 1, NLI: 8, ERLI 0.1487271E-06, ERNI: 0.3579506E+01 Max. and WRMS norm residual= 0.3369300E-05 0.2519428E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.3949752E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3949752E-04 1 0.2859258E-05 0.7239083E-01 2 0.1927033E-06 0.4878872E-02 3 0.1553710E-07 0.3933690E-03 Result GMRES:3, 2.5E-2, 1.553709960909E-8, 0 1 3 0.1553710E-07 0.3968482E-04 NI: 2, NLI: 4, ERLI 0.1553710E-07, ERNI: 0.3968482E-04 T= 0.95E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.95E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.9529769E+00 Max. and WRMS norm residual= 0.8975145E+00 0.8721430E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.2370469E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2370469E+02 1 0.1774486E+01 0.7485803E-01 2 0.2487483E+00 0.1049363E-01 3 0.5258616E-01 0.2218386E-02 4 0.1197572E-01 0.5052049E-03 Result GMRES:4, 5.E-2, 1.1975723709414E-2, 0 1 4 0.1197572E-01 0.2407477E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1197572E-01 1 0.3585821E-02 0.2994242E+00 2 0.6745349E-03 0.5632519E-01 3 0.1112404E-03 0.9288826E-02 4 0.1529450E-04 0.1277126E-02 5 0.4093656E-05 0.3418296E-03 Result GMRES:5, 5.E-2, 4.0936564884731E-6, 0 2 9 0.4093656E-05 0.1159354E-01 NI: 1, NLI: 11, ERLI 0.4093656E-05, ERNI: 0.2407469E+02 Max. and WRMS norm residual= 0.3874611E-03 0.3953065E+00 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6234978E-02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6234978E-02 1 0.1281034E-02 0.2054593E+00 2 0.2592640E-03 0.4158219E-01 3 0.5410755E-04 0.8678065E-02 4 0.1153606E-04 0.1850216E-02 5 0.2286376E-05 0.3667015E-03 Result GMRES:5, 2.5E-2, 2.286375687857E-6, 0 1 5 0.2286376E-05 0.6352025E-02 NI: 2, NLI: 6, ERLI 0.2286376E-05, ERNI: 0.6352025E-02 T= 0.95E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.49E+01 Time integration at T= 0.95E+00, Grid level= 3, NPTS= 472 Nonlinear system solver at T = 0.9529769E+00 Max. and WRMS norm residual= 0.2912004E+01 0.3460008E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 944 # it. GCRO # it.GMRES Error Estimate 0 0 0.5790655E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5790655E+02 1 0.7437421E+01 0.1284383E+00 2 0.1507589E+01 0.2603486E-01 3 0.5584599E+00 0.9644156E-02 4 0.2306701E+00 0.3983488E-02 5 0.7987727E-01 0.1379417E-02 6 0.3233110E-01 0.5583324E-03 Result GMRES:6, 5.E-2, 3.2331102427261E-2, 0 1 6 0.3233110E-01 0.6085180E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3233110E-01 1 0.1621646E-01 0.5015745E+00 2 0.5789618E-02 0.1790727E+00 3 0.2296179E-02 0.7102076E-01 4 0.8797353E-03 0.2721018E-01 5 0.2855524E-03 0.8832127E-02 6 0.1122916E-03 0.3473177E-02 7 0.4601224E-04 0.1423157E-02 8 0.1471957E-04 0.4552759E-03 Result GMRES:8, 5.E-2, 1.4719572964408E-5, 0 2 14 0.1471957E-04 0.2912928E-01 NI: 1, NLI: 16, ERLI 0.1471957E-04, ERNI: 0.6085168E+02 Max. and WRMS norm residual= 0.4354566E-01 0.5323142E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 944 # it. GCRO # it.GMRES Error Estimate 0 0 0.8058083E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8058083E+00 1 0.1439497E+00 0.1786401E+00 2 0.4137198E-01 0.5134221E-01 3 0.1725889E-01 0.2141811E-01 4 0.5822765E-02 0.7225993E-02 5 0.2266827E-02 0.2813110E-02 6 0.8462851E-03 0.1050231E-02 7 0.2962918E-03 0.3676951E-03 Result GMRES:7, 2.5E-2, 2.9629178793585E-4, 0 1 7 0.2962918E-03 0.8461757E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2962918E-03 1 0.1482440E-03 0.5003311E+00 2 0.5396436E-04 0.1821325E+00 3 0.2102802E-04 0.7097064E-01 4 0.7599989E-05 0.2565035E-01 5 0.2996365E-05 0.1011289E-01 6 0.1093188E-05 0.3689565E-02 7 0.3494044E-06 0.1179258E-02 8 0.1441298E-06 0.4864456E-03 Result GMRES:8, 2.5E-2, 1.4412984531431E-7, 0 2 15 0.1441298E-06 0.2649970E-03 NI: 2, NLI: 17, ERLI 0.1441298E-06, ERNI: 0.8461764E+00 T= 0.95E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.26E+01 Time integration at T= 0.95E+00, Grid level= 4, NPTS= 987 Nonlinear system solver at T = 0.9529769E+00 Max. and WRMS norm residual= 0.2931870E+01 0.4567670E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1974 # it. GCRO # it.GMRES Error Estimate 0 0 0.6025556E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6025556E+02 1 0.1294784E+02 0.2148821E+00 2 0.4697998E+01 0.7796788E-01 3 0.2530949E+01 0.4200357E-01 4 0.1537788E+01 0.2552109E-01 5 0.7862689E+00 0.1304890E-01 6 0.4686967E+00 0.7778481E-02 7 0.2624942E+00 0.4356349E-02 8 0.1527098E+00 0.2534368E-02 9 0.8968366E-01 0.1488388E-02 10 0.5171328E-01 0.8582325E-03 11 0.3110558E-01 0.5162275E-03 Result GMRES:11, 5.E-2, 3.1105576822619E-2, 0 1 11 0.3110558E-01 0.7461622E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3110558E-01 1 0.2136006E-01 0.6866955E+00 2 0.1178363E-01 0.3788269E+00 3 0.6897456E-02 0.2217434E+00 4 0.4097283E-02 0.1317218E+00 5 0.2355837E-02 0.7573679E-01 6 0.1455689E-02 0.4679833E-01 7 0.8324431E-03 0.2676186E-01 8 0.5146861E-03 0.1654642E-01 9 0.2997297E-03 0.9635883E-02 10 0.1813248E-03 0.5829334E-02 11 0.1078707E-03 0.3467888E-02 12 0.6412886E-04 0.2061651E-02 13 0.3837040E-04 0.1233554E-02 14 0.2268728E-04 0.7293637E-03 Result GMRES:14, 5.E-2, 2.2687279947705E-5, 0 2 25 0.2268728E-04 0.2976944E-01 NI: 1, NLI: 27, ERLI 0.2268728E-04, ERNI: 0.7461781E+02 Max. and WRMS norm residual= 0.1096914E+00 0.1574805E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1974 # it. GCRO # it.GMRES Error Estimate 0 0 0.1878528E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1878528E+01 1 0.4636392E+00 0.2468098E+00 2 0.1792094E+00 0.9539881E-01 3 0.1156669E+00 0.6157313E-01 4 0.5339065E-01 0.2842153E-01 5 0.3253820E-01 0.1732111E-01 6 0.1737048E-01 0.9246857E-02 7 0.1014898E-01 0.5402625E-02 8 0.5766764E-02 0.3069831E-02 9 0.3298732E-02 0.1756019E-02 10 0.1938908E-02 0.1032142E-02 11 0.1107528E-02 0.5895722E-03 Result GMRES:11, 2.5E-2, 1.1075281163711E-3, 0 1 11 0.1107528E-02 0.2001912E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1107528E-02 1 0.7541486E-03 0.6809295E+00 2 0.4069434E-03 0.3674340E+00 3 0.2364075E-03 0.2134551E+00 4 0.1361224E-03 0.1229065E+00 5 0.7898907E-04 0.7132015E-01 6 0.4636324E-04 0.4186191E-01 7 0.2730682E-04 0.2465564E-01 8 0.1610155E-04 0.1453827E-01 9 0.9408428E-05 0.8494979E-02 10 0.5642751E-05 0.5094905E-02 11 0.3276378E-05 0.2958280E-02 12 0.1972497E-05 0.1780990E-02 13 0.1138145E-05 0.1027645E-02 14 0.6828534E-06 0.6165563E-03 Result GMRES:14, 2.5E-2, 6.8285342164328E-7, 0 2 25 0.6828534E-06 0.1018722E-02 NI: 2, NLI: 27, ERLI 0.6828534E-06, ERNI: 0.2001958E+01 T= 0.95E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.95E+00, Grid level= 5, NPTS= 2181 Nonlinear system solver at T = 0.9529769E+00 Max. and WRMS norm residual= 0.3030798E+01 0.6245621E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4362 # it. GCRO # it.GMRES Error Estimate 0 0 0.4592836E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4592836E+02 1 0.2224190E+02 0.4842738E+00 2 0.1071839E+02 0.2333719E+00 3 0.6977580E+01 0.1519231E+00 4 0.4830827E+01 0.1051818E+00 5 0.3401545E+01 0.7406198E-01 6 0.2471454E+01 0.5381106E-01 7 0.1805723E+01 0.3931608E-01 8 0.1337490E+01 0.2912123E-01 9 0.9964875E+00 0.2169656E-01 10 0.7472221E+00 0.1626930E-01 11 0.5636940E+00 0.1227333E-01 12 0.4267930E+00 0.9292581E-02 13 0.3242730E+00 0.7060410E-02 14 0.2467976E+00 0.5373535E-02 15 0.1881505E+00 0.4096608E-02 16 0.1437125E+00 0.3129057E-02 17 0.1099151E+00 0.2393186E-02 18 0.8419114E-01 0.1833097E-02 19 0.6454296E-01 0.1405297E-02 20 0.4951711E-01 0.1078138E-02 Result GMRES:20, 5.E-2, 4.9517105582189E-2, 1 1 20 0.4951711E-01 0.9747045E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4951711E-01 1 0.3946655E-01 0.7970286E+00 2 0.2949822E-01 0.5957177E+00 3 0.2257957E-01 0.4559953E+00 4 0.1732120E-01 0.3498023E+00 5 0.1334442E-01 0.2694911E+00 6 0.1027569E-01 0.2075180E+00 7 0.7903959E-02 0.1596208E+00 8 0.6092322E-02 0.1230347E+00 9 0.4690943E-02 0.9473378E-01 10 0.3609426E-02 0.7289250E-01 11 0.2783648E-02 0.5621589E-01 12 0.2140490E-02 0.4322728E-01 13 0.1649529E-02 0.3331231E-01 14 0.1270659E-02 0.2566102E-01 15 0.9782926E-03 0.1975666E-01 16 0.7537280E-03 0.1522157E-01 17 0.5804742E-03 0.1172270E-01 18 0.4469406E-03 0.9025984E-02 19 0.3441299E-03 0.6949719E-02 20 0.2648722E-03 0.5349105E-02 Result GMRES:20, 5.E-2, 2.6487218807115E-4, 1 2 40 0.2648722E-03 0.8413854E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2648722E-03 1 0.2110719E-03 0.7968820E+00 2 0.1579427E-03 0.5962978E+00 3 0.1208000E-03 0.4560692E+00 4 0.9238444E-04 0.3487888E+00 5 0.7087700E-04 0.2675895E+00 6 0.5414913E-04 0.2044349E+00 7 0.4137111E-04 0.1561927E+00 8 0.3150561E-04 0.1189465E+00 9 0.2397650E-04 0.9052102E-01 10 0.1821194E-04 0.6875745E-01 11 0.1382675E-04 0.5220159E-01 12 0.1047085E-04 0.3953169E-01 13 0.7911180E-05 0.2986792E-01 14 0.5957134E-05 0.2249060E-01 15 0.4474425E-05 0.1689277E-01 16 0.3356131E-05 0.1267076E-01 17 0.2512820E-05 0.9486915E-02 18 0.1877558E-05 0.7088542E-02 19 0.1398295E-05 0.5279132E-02 20 0.1032872E-05 0.3899512E-02 Result GMRES:20, 5.E-2, 1.0328723006895E-6, 1 3 60 0.1032872E-05 0.4454708E-03 NI: 1, NLI: 63, ERLI 0.1032872E-05, ERNI: 0.9747201E+02 Max. and WRMS norm residual= 0.1613733E+00 0.2635632E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4362 # it. GCRO # it.GMRES Error Estimate 0 0 0.1640440E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1640440E+01 1 0.5803479E+00 0.3537757E+00 2 0.2858684E+00 0.1742632E+00 3 0.2152549E+00 0.1312178E+00 4 0.1389233E+00 0.8468660E-01 5 0.1014027E+00 0.6181432E-01 6 0.7276427E-01 0.4435655E-01 7 0.5244871E-01 0.3197233E-01 8 0.3890747E-01 0.2371770E-01 9 0.2819580E-01 0.1718794E-01 10 0.2110528E-01 0.1286562E-01 11 0.1548792E-01 0.9441317E-02 12 0.1159906E-01 0.7070702E-02 13 0.8622062E-02 0.5255944E-02 14 0.6451425E-02 0.3932740E-02 15 0.4843737E-02 0.2952705E-02 16 0.3626164E-02 0.2210482E-02 17 0.2739433E-02 0.1669937E-02 18 0.2057145E-02 0.1254020E-02 19 0.1557727E-02 0.9495783E-03 Result GMRES:19, 2.5E-2, 1.5577265364717E-3, 0 1 19 0.1557727E-02 0.2859679E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1557727E-02 1 0.1233403E-02 0.7917966E+00 2 0.8992310E-03 0.5772714E+00 3 0.6841077E-03 0.4391706E+00 4 0.5154817E-03 0.3309192E+00 5 0.3928587E-03 0.2522000E+00 6 0.2987330E-03 0.1917750E+00 7 0.2272058E-03 0.1458573E+00 8 0.1735704E-03 0.1114255E+00 9 0.1320492E-03 0.8477043E-01 10 0.1008529E-03 0.6474366E-01 11 0.7698210E-04 0.4941952E-01 12 0.5871988E-04 0.3769589E-01 13 0.4493278E-04 0.2884510E-01 14 0.3425244E-04 0.2198874E-01 15 0.2623672E-04 0.1684296E-01 16 0.2000490E-04 0.1284237E-01 17 0.1532804E-04 0.9840007E-02 18 0.1169675E-04 0.7508859E-02 19 0.8965888E-05 0.5755752E-02 20 0.6854124E-05 0.4400082E-02 Result GMRES:20, 2.5E-2, 6.8541244293859E-6, 1 2 39 0.6854124E-05 0.2430214E-02 NI: 2, NLI: 41, ERLI 0.6854124E-05, ERNI: 0.2859697E+01 T= 0.95E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.39E+00 TN= 0.93E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 Time integration at T= 0.98E+00, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.9764885E+00 Max. and WRMS norm residual= 0.2046282E-01 0.1937402E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1633007E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1633007E+01 1 0.9669296E-01 0.5921161E-01 2 0.1053237E-01 0.6449678E-02 3 0.6468187E-03 0.3960906E-03 Result GMRES:3, 5.E-2, 6.4681865656672E-4, 0 1 3 0.6468187E-03 0.1637291E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6468187E-03 1 0.6223220E-04 0.9621275E-01 2 0.4649421E-05 0.7188137E-02 3 0.2878626E-06 0.4450437E-03 Result GMRES:3, 5.E-2, 2.8786258143084E-7, 0 2 6 0.2878626E-06 0.6443306E-03 NI: 1, NLI: 8, ERLI 0.2878626E-06, ERNI: 0.1637296E+01 Max. and WRMS norm residual= 0.8776852E-06 0.7501363E-03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1181965E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1181965E-04 1 0.1001465E-05 0.8472877E-01 2 0.6439687E-07 0.5448287E-02 3 0.5415997E-08 0.4582196E-03 Result GMRES:3, 2.5E-2, 5.4159965185274E-9, 0 1 3 0.5415997E-08 0.1188854E-04 NI: 2, NLI: 4, ERLI 0.5415997E-08, ERNI: 0.1188854E-04 T= 0.98E+00, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.98E+00, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.9764885E+00 Max. and WRMS norm residual= 0.1489334E+01 0.1452565E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.3787518E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3787518E+02 1 0.2838850E+01 0.7495277E-01 2 0.3708695E+00 0.9791889E-02 3 0.7589593E-01 0.2003843E-02 4 0.1737816E-01 0.4588272E-03 Result GMRES:4, 5.E-2, 1.7378163465387E-2, 0 1 4 0.1737816E-01 0.3866608E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1737816E-01 1 0.5283364E-02 0.3040232E+00 2 0.9704224E-03 0.5584148E-01 3 0.1570172E-03 0.9035314E-02 4 0.2195196E-04 0.1263192E-02 5 0.5892018E-05 0.3390472E-03 Result GMRES:5, 5.E-2, 5.8920178969274E-6, 0 2 9 0.5892018E-05 0.1677036E-01 NI: 1, NLI: 11, ERLI 0.5892018E-05, ERNI: 0.3866592E+02 Max. and WRMS norm residual= 0.2162845E-02 0.1930767E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.3055670E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3055670E-01 1 0.4395397E-02 0.1438440E+00 2 0.8841396E-03 0.2893440E-01 3 0.1900282E-03 0.6218873E-02 4 0.3857200E-04 0.1262309E-02 5 0.7768265E-05 0.2542246E-03 Result GMRES:5, 2.5E-2, 7.768264519356E-6, 0 1 5 0.7768265E-05 0.3179448E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.7768265E-05 1 0.2267145E-05 0.2918470E+00 2 0.4124762E-06 0.5309760E-01 3 0.8857597E-07 0.1140229E-01 4 0.1627174E-07 0.2094642E-02 5 0.2309668E-08 0.2973209E-03 Result GMRES:5, 2.5E-2, 2.3096676964517E-9, 0 2 10 0.2309668E-08 0.7544606E-05 NI: 2, NLI: 12, ERLI 0.2309668E-08, ERNI: 0.3179443E-01 T= 0.98E+00, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.44E+01 Time integration at T= 0.98E+00, Grid level= 3, NPTS= 468 Nonlinear system solver at T = 0.9764885E+00 Max. and WRMS norm residual= 0.2192210E+01 0.3031960E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 936 # it. GCRO # it.GMRES Error Estimate 0 0 0.5195679E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5195679E+02 1 0.6298330E+01 0.1212225E+00 2 0.1614422E+01 0.3107239E-01 3 0.5821790E+00 0.1120506E-01 4 0.2465604E+00 0.4745490E-02 5 0.8317154E-01 0.1600783E-02 6 0.3380232E-01 0.6505852E-03 Result GMRES:6, 5.E-2, 3.380231773396E-2, 0 1 6 0.3380232E-01 0.5362409E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3380232E-01 1 0.1706950E-01 0.5049802E+00 2 0.5994874E-02 0.1773510E+00 3 0.2335514E-02 0.6909330E-01 4 0.9221616E-03 0.2728102E-01 5 0.2683198E-03 0.7937911E-02 6 0.1122747E-03 0.3321508E-02 7 0.4196305E-04 0.1241425E-02 8 0.1429833E-04 0.4229986E-03 Result GMRES:8, 5.E-2, 1.4298331950581E-5, 0 2 14 0.1429833E-04 0.3049313E-01 NI: 1, NLI: 16, ERLI 0.1429833E-04, ERNI: 0.5362427E+02 Max. and WRMS norm residual= 0.4275228E-01 0.5593126E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 936 # it. GCRO # it.GMRES Error Estimate 0 0 0.8469783E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.8469783E+00 1 0.1485764E+00 0.1754194E+00 2 0.4233089E-01 0.4997872E-01 3 0.1767695E-01 0.2087060E-01 4 0.5970951E-02 0.7049710E-02 5 0.2323516E-02 0.2743301E-02 6 0.8681364E-03 0.1024981E-02 7 0.3103332E-03 0.3664005E-03 Result GMRES:7, 2.5E-2, 3.1033323445345E-4, 0 1 7 0.3103332E-03 0.8946512E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3103332E-03 1 0.1547374E-03 0.4986169E+00 2 0.5713692E-04 0.1841147E+00 3 0.2210214E-04 0.7122068E-01 4 0.7949481E-05 0.2561595E-01 5 0.3081244E-05 0.9928825E-02 6 0.1128577E-05 0.3636662E-02 7 0.3519760E-06 0.1134187E-02 8 0.1473442E-06 0.4747934E-03 Result GMRES:8, 2.5E-2, 1.4734415890142E-7, 0 2 15 0.1473442E-06 0.2770630E-03 NI: 2, NLI: 17, ERLI 0.1473442E-06, ERNI: 0.8946509E+00 T= 0.98E+00, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.33E+01 Time integration at T= 0.98E+00, Grid level= 4, NPTS= 905 Nonlinear system solver at T = 0.9764885E+00 Max. and WRMS norm residual= 0.2974297E+01 0.4736403E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1810 # it. GCRO # it.GMRES Error Estimate 0 0 0.6254370E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6254370E+02 1 0.1344274E+02 0.2149336E+00 2 0.4872176E+01 0.7790035E-01 3 0.2607745E+01 0.4169477E-01 4 0.1592941E+01 0.2546925E-01 5 0.8143165E+00 0.1301996E-01 6 0.4865931E+00 0.7780049E-02 7 0.2718366E+00 0.4346347E-02 8 0.1576775E+00 0.2521078E-02 9 0.9243204E-01 0.1477879E-02 10 0.5384514E-01 0.8609202E-03 11 0.3199030E-01 0.5114871E-03 Result GMRES:11, 5.E-2, 3.1990298773371E-2, 0 1 11 0.3199030E-01 0.7744023E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3199030E-01 1 0.2192515E-01 0.6853686E+00 2 0.1215500E-01 0.3799591E+00 3 0.7085578E-02 0.2214915E+00 4 0.4212846E-02 0.1316913E+00 5 0.2429676E-02 0.7595039E-01 6 0.1488649E-02 0.4653438E-01 7 0.8567785E-03 0.2678245E-01 8 0.5269942E-03 0.1647356E-01 9 0.3067041E-03 0.9587408E-02 10 0.1853190E-03 0.5792976E-02 11 0.1094376E-03 0.3420962E-02 12 0.6543969E-04 0.2045610E-02 13 0.3876490E-04 0.1211770E-02 14 0.2297346E-04 0.7181384E-03 Result GMRES:14, 5.E-2, 2.2973462756352E-5, 0 2 25 0.2297346E-04 0.3072682E-01 NI: 1, NLI: 27, ERLI 0.2297346E-04, ERNI: 0.7744183E+02 Max. and WRMS norm residual= 0.9315562E-01 0.1510043E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1810 # it. GCRO # it.GMRES Error Estimate 0 0 0.1783107E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1783107E+01 1 0.4478617E+00 0.2511692E+00 2 0.1745141E+00 0.9787077E-01 3 0.1135029E+00 0.6365455E-01 4 0.5225396E-01 0.2930500E-01 5 0.3195370E-01 0.1792023E-01 6 0.1704629E-01 0.9559881E-02 7 0.9981234E-02 0.5597663E-02 8 0.5640639E-02 0.3163376E-02 9 0.3286696E-02 0.1843241E-02 10 0.1904038E-02 0.1067820E-02 11 0.1101480E-02 0.6177308E-03 Result GMRES:11, 2.5E-2, 1.1014803001377E-3, 0 1 11 0.1101480E-02 0.1914769E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1101480E-02 1 0.7519988E-03 0.6827166E+00 2 0.4038055E-03 0.3666026E+00 3 0.2344379E-03 0.2128390E+00 4 0.1366781E-03 0.1240858E+00 5 0.7788426E-04 0.7070872E-01 6 0.4637616E-04 0.4210349E-01 7 0.2700614E-04 0.2451805E-01 8 0.1598809E-04 0.1451509E-01 9 0.9356914E-05 0.8494854E-02 10 0.5554032E-05 0.5042335E-02 11 0.3286484E-05 0.2983698E-02 12 0.1934615E-05 0.1756378E-02 13 0.1134098E-05 0.1029612E-02 14 0.6693663E-06 0.6076970E-03 Result GMRES:14, 2.5E-2, 6.6936628918932E-7, 0 2 25 0.6693663E-06 0.1010569E-02 NI: 2, NLI: 27, ERLI 0.6693663E-06, ERNI: 0.1914832E+01 T= 0.98E+00, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.98E+00, Grid level= 5, NPTS= 2175 Nonlinear system solver at T = 0.9764885E+00 Max. and WRMS norm residual= 0.3024445E+01 0.6220441E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4350 # it. GCRO # it.GMRES Error Estimate 0 0 0.4581471E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4581471E+02 1 0.2219082E+02 0.4843601E+00 2 0.1070915E+02 0.2337492E+00 3 0.6973369E+01 0.1522081E+00 4 0.4828738E+01 0.1053971E+00 5 0.3403538E+01 0.7428920E-01 6 0.2474965E+01 0.5402119E-01 7 0.1809594E+01 0.3949810E-01 8 0.1341779E+01 0.2928709E-01 9 0.1001630E+01 0.2186264E-01 10 0.7529779E+00 0.1643529E-01 11 0.5692075E+00 0.1242412E-01 12 0.4316486E+00 0.9421616E-02 13 0.3281974E+00 0.7163582E-02 14 0.2500635E+00 0.5458148E-02 15 0.1908530E+00 0.4165758E-02 16 0.1459288E+00 0.3185195E-02 17 0.1117033E+00 0.2438154E-02 18 0.8558780E-01 0.1868129E-02 19 0.6564174E-01 0.1432766E-02 20 0.5037685E-01 0.1099578E-02 Result GMRES:20, 5.E-2, 5.0376851203935E-2, 1 1 20 0.5037685E-01 0.9710846E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5037685E-01 1 0.4014122E-01 0.7968188E+00 2 0.3000225E-01 0.5955564E+00 3 0.2297384E-01 0.4560397E+00 4 0.1761691E-01 0.3497026E+00 5 0.1357499E-01 0.2694687E+00 6 0.1044765E-01 0.2073898E+00 7 0.8039219E-02 0.1595816E+00 8 0.6192204E-02 0.1229176E+00 9 0.4769654E-02 0.9467949E-01 10 0.3668156E-02 0.7281432E-01 11 0.2826866E-02 0.5611438E-01 12 0.2175026E-02 0.4317512E-01 13 0.1674536E-02 0.3324019E-01 14 0.1289990E-02 0.2560680E-01 15 0.9925292E-03 0.1970209E-01 16 0.7640336E-03 0.1516636E-01 17 0.5881582E-03 0.1167517E-01 18 0.4524013E-03 0.8980340E-02 19 0.3479947E-03 0.6907830E-02 20 0.2675957E-03 0.5311877E-02 Result GMRES:20, 5.E-2, 2.6759565892739E-4, 1 2 40 0.2675957E-03 0.8546965E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2675957E-03 1 0.2130199E-03 0.7960513E+00 2 0.1590547E-03 0.5943844E+00 3 0.1213542E-03 0.4534982E+00 4 0.9256021E-04 0.3458958E+00 5 0.7081554E-04 0.2646364E+00 6 0.5394820E-04 0.2016034E+00 7 0.4111564E-04 0.1536484E+00 8 0.3126935E-04 0.1168530E+00 9 0.2377010E-04 0.8882843E-01 10 0.1802863E-04 0.6737265E-01 11 0.1364626E-04 0.5099584E-01 12 0.1029646E-04 0.3847770E-01 13 0.7755270E-05 0.2898130E-01 14 0.5836998E-05 0.2181275E-01 15 0.4391334E-05 0.1641033E-01 16 0.3303850E-05 0.1234643E-01 17 0.2481963E-05 0.9275051E-02 18 0.1857120E-05 0.6940022E-02 19 0.1384887E-05 0.5175296E-02 20 0.1023706E-05 0.3825571E-02 Result GMRES:20, 5.E-2, 1.0237061031778E-6, 1 3 60 0.1023706E-05 0.4482131E-03 NI: 1, NLI: 63, ERLI 0.1023706E-05, ERNI: 0.9711001E+02 Max. and WRMS norm residual= 0.1600258E+00 0.2624567E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4350 # it. GCRO # it.GMRES Error Estimate 0 0 0.1633551E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1633551E+01 1 0.5784674E+00 0.3541165E+00 2 0.2856094E+00 0.1748396E+00 3 0.2150538E+00 0.1316481E+00 4 0.1387776E+00 0.8495459E-01 5 0.1013378E+00 0.6203527E-01 6 0.7269506E-01 0.4450125E-01 7 0.5241864E-01 0.3208877E-01 8 0.3887215E-01 0.2379611E-01 9 0.2817348E-01 0.1724677E-01 10 0.2108297E-01 0.1290622E-01 11 0.1548307E-01 0.9478170E-02 12 0.1160171E-01 0.7102142E-02 13 0.8630452E-02 0.5283247E-02 14 0.6461781E-02 0.3955666E-02 15 0.4854795E-02 0.2971928E-02 16 0.3637522E-02 0.2226758E-02 17 0.2748433E-02 0.1682490E-02 18 0.2065373E-02 0.1264345E-02 19 0.1563902E-02 0.9573637E-03 Result GMRES:19, 2.5E-2, 1.563902211397E-3, 0 1 19 0.1563902E-02 0.2847065E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1563902E-02 1 0.1237646E-02 0.7913831E+00 2 0.9023979E-03 0.5770168E+00 3 0.6866729E-03 0.4390766E+00 4 0.5173762E-03 0.3308239E+00 5 0.3941922E-03 0.2520568E+00 6 0.2994729E-03 0.1914908E+00 7 0.2276600E-03 0.1455718E+00 8 0.1737768E-03 0.1111175E+00 9 0.1320945E-03 0.8446466E-01 10 0.1008454E-03 0.6448316E-01 11 0.7684322E-04 0.4913557E-01 12 0.5862858E-04 0.3748865E-01 13 0.4477878E-04 0.2863273E-01 14 0.3412856E-04 0.2182269E-01 15 0.2610015E-04 0.1668912E-01 16 0.1989476E-04 0.1272123E-01 17 0.1522530E-04 0.9735458E-02 18 0.1161053E-04 0.7424078E-02 19 0.8890406E-05 0.5684758E-02 20 0.6793959E-05 0.4344235E-02 Result GMRES:20, 2.5E-2, 6.7939593319117E-6, 1 2 39 0.6793959E-05 0.2428663E-02 NI: 2, NLI: 41, ERLI 0.6793959E-05, ERNI: 0.2847082E+01 T= 0.98E+00, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.40E+00 TN= 0.95E+00, DT= 0.24E-01, DTNEW= 0.25E-01, TIMMON= 0.48E+00 Time integration at T= 0.10E+01, Grid level= 1, NPTS= 105 Nonlinear system solver at T = 0.1000000E+01 Max. and WRMS norm residual= 0.2845506E-01 0.2946953E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.9560593E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.9560593E+00 1 0.7135492E-01 0.7463441E-01 2 0.7448022E-02 0.7790335E-02 3 0.4439989E-03 0.4644052E-03 Result GMRES:3, 5.E-2, 4.4399894503585E-4, 0 1 3 0.4439989E-03 0.9650906E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4439989E-03 1 0.4218961E-04 0.9502188E-01 2 0.3006851E-05 0.6772202E-02 3 0.1860104E-06 0.4189434E-03 Result GMRES:3, 5.E-2, 1.860104485432E-7, 0 2 6 0.1860104E-06 0.4428153E-03 NI: 1, NLI: 8, ERLI 0.1860104E-06, ERNI: 0.9650969E+00 Max. and WRMS norm residual= 0.1258240E-05 0.1078684E-02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 210 # it. GCRO # it.GMRES Error Estimate 0 0 0.1713501E-04 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1713501E-04 1 0.1363991E-05 0.7960257E-01 2 0.1101175E-06 0.6426461E-02 3 0.7491533E-08 0.4372062E-03 Result GMRES:3, 2.5E-2, 7.491532710421E-9, 0 1 3 0.7491533E-08 0.1739498E-04 NI: 2, NLI: 4, ERLI 0.7491533E-08, ERNI: 0.1739498E-04 T= 0.10E+01, LEVEL= 1 ,TOLWGT=0.9, SPCMON= 0.54E+01 Time integration at T= 0.10E+01, Grid level= 2, NPTS= 220 Nonlinear system solver at T = 0.1000000E+01 Max. and WRMS norm residual= 0.2218291E+01 0.2214377E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.5248095E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5248095E+02 1 0.3709246E+01 0.7067794E-01 2 0.4428178E+00 0.8437686E-02 3 0.8018956E-01 0.1527975E-02 4 0.1855386E-01 0.3535351E-03 Result GMRES:4, 5.E-2, 1.8553857124627E-2, 0 1 4 0.1855386E-01 0.5367758E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1855386E-01 1 0.5829703E-02 0.3142044E+00 2 0.1009357E-02 0.5440144E-01 3 0.1579262E-03 0.8511773E-02 4 0.2557049E-04 0.1378177E-02 5 0.6627333E-05 0.3571943E-03 Result GMRES:5, 5.E-2, 6.6273326993999E-6, 0 2 9 0.6627333E-05 0.1780327E-01 NI: 1, NLI: 11, ERLI 0.6627333E-05, ERNI: 0.5367747E+02 Max. and WRMS norm residual= 0.3394200E-02 0.3910685E+01 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 440 # it. GCRO # it.GMRES Error Estimate 0 0 0.6180375E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6180375E-01 1 0.7998731E-02 0.1294214E+00 2 0.1361042E-02 0.2202199E-01 3 0.2883700E-03 0.4665899E-02 4 0.6124930E-04 0.9910288E-03 Result GMRES:4, 2.5E-2, 6.1249301293944E-5, 0 1 4 0.6124930E-04 0.6460025E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6124930E-04 1 0.1711350E-04 0.2794073E+00 2 0.3597522E-05 0.5873573E-01 3 0.6655419E-06 0.1086611E-01 4 0.1013899E-06 0.1655364E-02 5 0.2446329E-07 0.3994052E-03 Result GMRES:5, 2.5E-2, 2.4463290679081E-8, 0 2 9 0.2446329E-07 0.5895013E-04 NI: 2, NLI: 11, ERLI 0.2446329E-07, ERNI: 0.6460001E-01 T= 0.10E+01, LEVEL= 2 ,TOLWGT=0.9, SPCMON= 0.35E+01 Time integration at T= 0.10E+01, Grid level= 3, NPTS= 464 Nonlinear system solver at T = 0.1000000E+01 Max. and WRMS norm residual= 0.2284835E+01 0.2825424E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 928 # it. GCRO # it.GMRES Error Estimate 0 0 0.5118158E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5118158E+02 1 0.6204313E+01 0.1212216E+00 2 0.1556510E+01 0.3041153E-01 3 0.5167726E+00 0.1009685E-01 4 0.2192662E+00 0.4284084E-02 5 0.7296011E-01 0.1425515E-02 6 0.2842300E-01 0.5553365E-03 Result GMRES:6, 5.E-2, 2.8422999947562E-2, 0 1 6 0.2842300E-01 0.5300680E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2842300E-01 1 0.1441404E-01 0.5071260E+00 2 0.4890271E-02 0.1720533E+00 3 0.1948718E-02 0.6856131E-01 4 0.7266796E-03 0.2556660E-01 5 0.2319252E-03 0.8159772E-02 6 0.9225541E-04 0.3245801E-02 7 0.3577811E-04 0.1258773E-02 8 0.1213421E-04 0.4269153E-03 Result GMRES:8, 5.E-2, 1.2134213224651E-5, 0 2 14 0.1213421E-04 0.2515804E-01 NI: 1, NLI: 16, ERLI 0.1213421E-04, ERNI: 0.5300727E+02 Max. and WRMS norm residual= 0.2413465E-01 0.3467759E+02 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 928 # it. GCRO # it.GMRES Error Estimate 0 0 0.5216421E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.5216421E+00 1 0.8866904E-01 0.1699806E+00 2 0.2496909E-01 0.4786632E-01 3 0.1045587E-01 0.2004415E-01 4 0.3591185E-02 0.6884386E-02 5 0.1381951E-02 0.2649233E-02 6 0.5229378E-03 0.1002484E-02 7 0.1927121E-03 0.3694337E-03 Result GMRES:7, 2.5E-2, 1.9271214653952E-4, 0 1 7 0.1927121E-03 0.5488039E+00 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1927121E-03 1 0.9617714E-04 0.4990715E+00 2 0.3571246E-04 0.1853151E+00 3 0.1362415E-04 0.7069687E-01 4 0.4927334E-05 0.2556836E-01 5 0.1895192E-05 0.9834317E-02 6 0.7116403E-06 0.3692763E-02 7 0.2183269E-06 0.1132917E-02 8 0.9191018E-07 0.4769299E-03 Result GMRES:8, 2.5E-2, 9.1910178904836E-8, 0 2 15 0.9191018E-07 0.1719759E-03 NI: 2, NLI: 17, ERLI 0.9191018E-07, ERNI: 0.5488020E+00 T= 0.10E+01, LEVEL= 3 ,TOLWGT=0.9, SPCMON= 0.32E+01 Time integration at T= 0.10E+01, Grid level= 4, NPTS= 889 Nonlinear system solver at T = 0.1000000E+01 Max. and WRMS norm residual= 0.2972895E+01 0.4759035E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1778 # it. GCRO # it.GMRES Error Estimate 0 0 0.6290752E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.6290752E+02 1 0.1352806E+02 0.2150467E+00 2 0.4922411E+01 0.7824837E-01 3 0.2661733E+01 0.4231184E-01 4 0.1615757E+01 0.2568463E-01 5 0.8266436E+00 0.1314062E-01 6 0.4932913E+00 0.7841531E-02 7 0.2759320E+00 0.4386311E-02 8 0.1595763E+00 0.2536680E-02 9 0.9351278E-01 0.1486512E-02 10 0.5451179E-01 0.8665385E-03 11 0.3248644E-01 0.5164157E-03 Result GMRES:11, 5.E-2, 3.2486435190934E-2, 0 1 11 0.3248644E-01 0.7785437E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.3248644E-01 1 0.2220164E-01 0.6834127E+00 2 0.1231999E-01 0.3792349E+00 3 0.7189120E-02 0.2212961E+00 4 0.4265681E-02 0.1313065E+00 5 0.2457884E-02 0.7565878E-01 6 0.1512468E-02 0.4655692E-01 7 0.8632296E-03 0.2657200E-01 8 0.5342389E-03 0.1644498E-01 9 0.3086351E-03 0.9500431E-02 10 0.1865031E-03 0.5740953E-02 11 0.1104221E-03 0.3399021E-02 12 0.6565072E-04 0.2020865E-02 13 0.3895425E-04 0.1199093E-02 14 0.2279287E-04 0.7016118E-03 Result GMRES:14, 5.E-2, 2.2792865503931E-5, 0 2 25 0.2279287E-04 0.3119107E-01 NI: 1, NLI: 27, ERLI 0.2279287E-04, ERNI: 0.7785603E+02 Max. and WRMS norm residual= 0.1081114E+00 0.1628921E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 1778 # it. GCRO # it.GMRES Error Estimate 0 0 0.1942396E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1942396E+01 1 0.4820233E+00 0.2481592E+00 2 0.1895715E+00 0.9759677E-01 3 0.1221615E+00 0.6289220E-01 4 0.5662006E-01 0.2914960E-01 5 0.3441292E-01 0.1771674E-01 6 0.1840065E-01 0.9473171E-02 7 0.1067596E-01 0.5496288E-02 8 0.6062759E-02 0.3121279E-02 9 0.3485298E-02 0.1794330E-02 10 0.2037744E-02 0.1049088E-02 11 0.1160444E-02 0.5974290E-03 Result GMRES:11, 2.5E-2, 1.1604435446025E-3, 0 1 11 0.1160444E-02 0.2072415E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1160444E-02 1 0.7926274E-03 0.6830383E+00 2 0.4238466E-03 0.3652454E+00 3 0.2474888E-03 0.2132709E+00 4 0.1426320E-03 0.1229116E+00 5 0.8234277E-04 0.7095802E-01 6 0.4831382E-04 0.4163393E-01 7 0.2849551E-04 0.2455570E-01 8 0.1666498E-04 0.1436087E-01 9 0.9822199E-05 0.8464176E-02 10 0.5796729E-05 0.4995270E-02 11 0.3418675E-05 0.2946007E-02 12 0.2001672E-05 0.1724920E-02 13 0.1169368E-05 0.1007691E-02 14 0.6877766E-06 0.5926843E-03 Result GMRES:14, 2.5E-2, 6.8777661320197E-7, 0 2 25 0.6877766E-06 0.1063639E-02 NI: 2, NLI: 27, ERLI 0.6877766E-06, ERNI: 0.2072461E+01 T= 0.10E+01, LEVEL= 4 ,TOLWGT=0.9, SPCMON= 0.12E+01 Time integration at T= 0.10E+01, Grid level= 5, NPTS= 2147 Nonlinear system solver at T = 0.1000000E+01 Max. and WRMS norm residual= 0.3049713E+01 0.6226753E+04 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4294 # it. GCRO # it.GMRES Error Estimate 0 0 0.4592955E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4592955E+02 1 0.2225137E+02 0.4844675E+00 2 0.1075295E+02 0.2341184E+00 3 0.7003659E+01 0.1524870E+00 4 0.4848670E+01 0.1055676E+00 5 0.3414951E+01 0.7435194E-01 6 0.2480935E+01 0.5401609E-01 7 0.1812965E+01 0.3947272E-01 8 0.1342931E+01 0.2923894E-01 9 0.1000697E+01 0.2178766E-01 10 0.7506164E+00 0.1634278E-01 11 0.5663694E+00 0.1233126E-01 12 0.4289047E+00 0.9338317E-02 13 0.3258942E+00 0.7095523E-02 14 0.2480452E+00 0.5400558E-02 15 0.1891113E+00 0.4117421E-02 16 0.1444531E+00 0.3145102E-02 17 0.1104871E+00 0.2405577E-02 18 0.8462718E-01 0.1842543E-02 19 0.6487348E-01 0.1412456E-02 20 0.4976869E-01 0.1083587E-02 Result GMRES:20, 5.E-2, 4.9768685459971E-2, 1 1 20 0.4976869E-01 0.9723655E+02 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.4976869E-01 1 0.3966490E-01 0.7969851E+00 2 0.2964341E-01 0.5956238E+00 3 0.2268999E-01 0.4559090E+00 4 0.1740226E-01 0.3496628E+00 5 0.1340584E-01 0.2693629E+00 6 0.1032142E-01 0.2073879E+00 7 0.7938693E-02 0.1595118E+00 8 0.6117709E-02 0.1229228E+00 9 0.4710250E-02 0.9464285E-01 10 0.3623250E-02 0.7280180E-01 11 0.2793908E-02 0.5613787E-01 12 0.2147925E-02 0.4315817E-01 13 0.1654816E-02 0.3325014E-01 14 0.1274478E-02 0.2560803E-01 15 0.9809017E-03 0.1970921E-01 16 0.7554073E-03 0.1517837E-01 17 0.5814164E-03 0.1168237E-01 18 0.4472306E-03 0.8986184E-02 19 0.3438376E-03 0.6908713E-02 20 0.2640529E-03 0.5305603E-02 Result GMRES:20, 5.E-2, 2.6405288420973E-4, 1 2 40 0.2640529E-03 0.8451108E-01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.2640529E-03 1 0.2098566E-03 0.7947520E+00 2 0.1563703E-03 0.5921932E+00 3 0.1190633E-03 0.4509070E+00 4 0.9059403E-04 0.3430905E+00 5 0.6920278E-04 0.2620793E+00 6 0.5267614E-04 0.1994909E+00 7 0.4014145E-04 0.1520205E+00 8 0.3050475E-04 0.1155252E+00 9 0.2314298E-04 0.8764526E-01 10 0.1750634E-04 0.6629862E-01 11 0.1323089E-04 0.5010697E-01 12 0.9995626E-05 0.3785464E-01 13 0.7561776E-05 0.2863736E-01 14 0.5726031E-05 0.2168517E-01 15 0.4334717E-05 0.1641610E-01 16 0.3278135E-05 0.1241469E-01 17 0.2470868E-05 0.9357473E-02 18 0.1855232E-05 0.7025986E-02 19 0.1386618E-05 0.5251289E-02 20 0.1027721E-05 0.3892104E-02 Result GMRES:20, 5.E-2, 1.0277213479482E-6, 1 3 60 0.1027721E-05 0.4438821E-03 NI: 1, NLI: 63, ERLI 0.1027721E-05, ERNI: 0.9723802E+02 Max. and WRMS norm residual= 0.1579626E+00 0.2626787E+03 Diag. scaled GCRO(NRRMAX,MAXLR)) NRRMAX, MAXLR, N: 1 5 4294 # it. GCRO # it.GMRES Error Estimate 0 0 0.1634930E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1634930E+01 1 0.5795196E+00 0.3544614E+00 2 0.2867926E+00 0.1754158E+00 3 0.2159365E+00 0.1320769E+00 4 0.1393334E+00 0.8522284E-01 5 0.1017820E+00 0.6225466E-01 6 0.7299017E-01 0.4464422E-01 7 0.5265279E-01 0.3220492E-01 8 0.3904157E-01 0.2387965E-01 9 0.2830357E-01 0.1731180E-01 10 0.2118175E-01 0.1295576E-01 11 0.1554480E-01 0.9507929E-02 12 0.1164194E-01 0.7120756E-02 13 0.8652105E-02 0.5292034E-02 14 0.6474776E-02 0.3960277E-02 15 0.4859836E-02 0.2972504E-02 16 0.3638454E-02 0.2225449E-02 17 0.2748056E-02 0.1680840E-02 18 0.2063362E-02 0.1262049E-02 19 0.1562289E-02 0.9555694E-03 Result GMRES:19, 2.5E-2, 1.5622890553356E-3, 0 1 19 0.1562289E-02 0.2848850E+01 Diagonally scaled GMRESO(MAXL) 20 ITER Error Estimate 0 0.1562289E-02 1 0.1237066E-02 0.7918293E+00 2 0.9016766E-03 0.5771509E+00 3 0.6859893E-03 0.4390924E+00 4 0.5166653E-03 0.3307104E+00 5 0.3938130E-03 0.2520744E+00 6 0.2992577E-03 0.1915508E+00 7 0.2276884E-03 0.1457402E+00 8 0.1738459E-03 0.1112764E+00 9 0.1322936E-03 0.8467935E-01 10 0.1010386E-03 0.6467344E-01 11 0.7711295E-04 0.4935895E-01 12 0.5884220E-04 0.3766409E-01 13 0.4500496E-04 0.2880706E-01 14 0.3433154E-04 0.2197515E-01 15 0.2627933E-04 0.1682105E-01 16 0.2005237E-04 0.1283525E-01 17 0.1535589E-04 0.9829096E-02 18 0.1172639E-04 0.7505905E-02 19 0.8986061E-05 0.5751856E-02 20 0.6872586E-05 0.4399049E-02 Result GMRES:20, 2.5E-2, 6.8725856648559E-6, 1 2 39 0.6872586E-05 0.2436861E-02 NI: 2, NLI: 41, ERLI 0.6872586E-05, ERNI: 0.2848867E+01 T= 0.10E+01, LEVEL= 5 ,TOLWGT=1.0, SPCMON= 0.40E+00 TN= 0.98E+00, DT= 0.24E-01, DTNEW= 0.24E-01, TIMMON= 0.48E+00 # steps accepted: 45, # steps rejected: 0 Statistics: # accepted timesteps = 45, # rejected timesteps = 0 Level # Nit # Jacs # Res 1 90 45 90 2 90 45 90 3 90 45 90 4 90 45 90 5 84 42 84 Nit Level # Lin. sys. it 1 1 351 1 2 476 1 3 685 1 4 1150 1 5 2543 2 1 176 2 2 442 2 3 708 2 4 1129 2 5 1666 SHAR_EOF fi # end of overwriting check if test -f 'exmpl_output' then echo shar: will not over-write existing file "'exmpl_output'" else cat << \SHAR_EOF > 'exmpl_output' Input domain: 23 3 3 3 3 3 3 3 34 XX XX 2 .. .. .. .. .. .. .. 4 XX XX 2 .. 14 1 1 1 1 1 41 XX XX 2 .. 4 23 3 3 3 3 3 3 34 2 .. 4 2 .. .. .. .. .. .. 4 2 .. 4 2 .. 14 1 1 21 .. 4 2 .. 4 2 .. 4 XX XX 2 .. 4 2 .. 4 2 .. 43 3 3 32 .. 4 2 .. 4 2 .. .. .. .. .. .. 4 2 .. 4 12 1 1 1 1 1 1 41 12 1 41 XX XX XX XX XX XX XX XX Error at T=0.100E-02, level=1 : 0.309E-03 0.309E-03 105 Error at T=0.100E-02, level=2 : 0.309E-03 0.309E-03 240 Error at T=0.100E-02, level=3 : 0.309E-03 0.309E-03 478 Error at T=0.100E-02, level=4 : 0.314E-03 0.314E-03 933 Error at T=0.300E-02, level=1 : 0.113E-02 0.113E-02 105 Error at T=0.300E-02, level=2 : 0.113E-02 0.113E-02 240 Error at T=0.300E-02, level=3 : 0.113E-02 0.113E-02 478 Error at T=0.300E-02, level=4 : 0.114E-02 0.114E-02 933 Error at T=0.300E-02, level=5 : 0.209E-01 0.209E-01 2267 Error at T=0.699E-02, level=1 : 0.310E-02 0.310E-02 105 Error at T=0.699E-02, level=2 : 0.310E-02 0.310E-02 240 Error at T=0.699E-02, level=3 : 0.311E-02 0.311E-02 478 Error at T=0.699E-02, level=4 : 0.521E-02 0.521E-02 997 Error at T=0.699E-02, level=5 : 0.251E-01 0.251E-01 2267 Error at T=0.149E-01, level=1 : 0.606E-02 0.606E-02 105 Error at T=0.149E-01, level=2 : 0.606E-02 0.606E-02 240 Error at T=0.149E-01, level=3 : 0.622E-02 0.622E-02 478 Error at T=0.149E-01, level=4 : 0.748E-02 0.748E-02 1005 Error at T=0.308E-01, level=1 : 0.887E-02 0.887E-02 105 Error at T=0.308E-01, level=2 : 0.891E-02 0.891E-02 240 Error at T=0.308E-01, level=3 : 0.939E-02 0.939E-02 478 Error at T=0.308E-01, level=4 : 0.939E-02 0.939E-02 1005 Error at T=0.621E-01, level=1 : 0.911E-02 0.911E-02 105 Error at T=0.621E-01, level=2 : 0.915E-02 0.915E-02 240 Error at T=0.621E-01, level=3 : 0.935E-02 0.935E-02 478 Error at T=0.621E-01, level=4 : 0.935E-02 0.935E-02 1035 Error at T=0.621E-01, level=5 : 0.131E-01 0.131E-01 2269 Error at T=0.881E-01, level=1 : 0.394E-02 0.394E-02 105 Error at T=0.881E-01, level=2 : 0.413E-02 0.413E-02 230 Error at T=0.881E-01, level=3 : 0.413E-02 0.413E-02 458 Error at T=0.881E-01, level=4 : 0.109E-01 0.109E-01 1011 Error at T=0.881E-01, level=5 : 0.118E-01 0.118E-01 2417 Error at T=0.115E+00, level=1 : 0.676E-03 0.676E-03 105 Error at T=0.115E+00, level=2 : 0.553E-02 0.553E-02 220 Error at T=0.115E+00, level=3 : 0.908E-02 0.908E-02 466 Error at T=0.115E+00, level=4 : 0.947E-02 0.947E-02 1023 Error at T=0.115E+00, level=5 : 0.112E-01 0.112E-01 2297 Error at T=0.140E+00, level=1 : 0.235E-02 0.235E-02 105 Error at T=0.140E+00, level=2 : 0.495E-02 0.495E-02 220 Error at T=0.140E+00, level=3 : 0.896E-02 0.896E-02 504 Error at T=0.140E+00, level=4 : 0.912E-02 0.912E-02 1053 Error at T=0.140E+00, level=5 : 0.111E-01 0.111E-01 2299 Error at T=0.166E+00, level=1 : 0.224E-02 0.224E-02 105 Error at T=0.166E+00, level=2 : 0.243E-02 0.243E-02 220 Error at T=0.166E+00, level=3 : 0.351E-02 0.351E-02 508 Error at T=0.166E+00, level=4 : 0.105E-01 0.105E-01 1053 Error at T=0.166E+00, level=5 : 0.111E-01 0.111E-01 2311 Error at T=0.191E+00, level=1 : 0.152E-02 0.152E-02 105 Error at T=0.191E+00, level=2 : 0.797E-02 0.797E-02 220 Error at T=0.191E+00, level=3 : 0.828E-02 0.828E-02 504 Error at T=0.191E+00, level=4 : 0.828E-02 0.828E-02 969 Error at T=0.191E+00, level=5 : 0.111E-01 0.111E-01 2309 Error at T=0.215E+00, level=1 : 0.798E-03 0.798E-03 105 Error at T=0.215E+00, level=2 : 0.112E-01 0.112E-01 220 Error at T=0.215E+00, level=3 : 0.112E-01 0.112E-01 496 Error at T=0.215E+00, level=4 : 0.112E-01 0.112E-01 1037 Error at T=0.215E+00, level=5 : 0.112E-01 0.112E-01 2311 Error at T=0.240E+00, level=1 : 0.107E-02 0.107E-02 105 Error at T=0.240E+00, level=2 : 0.752E-02 0.752E-02 220 Error at T=0.240E+00, level=3 : 0.774E-02 0.774E-02 496 Error at T=0.240E+00, level=4 : 0.915E-02 0.915E-02 1067 Error at T=0.240E+00, level=5 : 0.114E-01 0.114E-01 2309 Error at T=0.264E+00, level=1 : 0.148E-02 0.148E-02 105 Error at T=0.264E+00, level=2 : 0.218E-02 0.218E-02 220 Error at T=0.264E+00, level=3 : 0.415E-02 0.415E-02 496 Error at T=0.264E+00, level=4 : 0.115E-01 0.115E-01 1067 Error at T=0.264E+00, level=5 : 0.115E-01 0.115E-01 2311 Error at T=0.289E+00, level=1 : 0.178E-02 0.178E-02 105 Error at T=0.289E+00, level=2 : 0.496E-02 0.496E-02 220 Error at T=0.289E+00, level=3 : 0.957E-02 0.957E-02 460 Error at T=0.289E+00, level=4 : 0.962E-02 0.962E-02 979 Error at T=0.289E+00, level=5 : 0.117E-01 0.117E-01 2309 Error at T=0.313E+00, level=1 : 0.152E-02 0.152E-02 105 Error at T=0.313E+00, level=2 : 0.582E-02 0.582E-02 220 Error at T=0.313E+00, level=3 : 0.117E-01 0.117E-01 492 Error at T=0.313E+00, level=4 : 0.117E-01 0.117E-01 1039 Error at T=0.313E+00, level=5 : 0.119E-01 0.119E-01 2311 Error at T=0.337E+00, level=1 : 0.201E-03 0.201E-03 105 Error at T=0.337E+00, level=2 : 0.444E-02 0.444E-02 240 Error at T=0.337E+00, level=3 : 0.769E-02 0.769E-02 512 Error at T=0.337E+00, level=4 : 0.963E-02 0.963E-02 1077 Error at T=0.337E+00, level=5 : 0.123E-01 0.123E-01 2309 Error at T=0.361E+00, level=1 : 0.389E-02 0.389E-02 105 Error at T=0.361E+00, level=2 : 0.400E-02 0.400E-02 240 Error at T=0.361E+00, level=3 : 0.429E-02 0.429E-02 512 Error at T=0.361E+00, level=4 : 0.120E-01 0.120E-01 1077 Error at T=0.361E+00, level=5 : 0.127E-01 0.127E-01 2311 Error at T=0.384E+00, level=1 : 0.888E-02 0.888E-02 105 Error at T=0.384E+00, level=2 : 0.888E-02 0.888E-02 240 Error at T=0.384E+00, level=3 : 0.919E-02 0.919E-02 508 Error at T=0.384E+00, level=4 : 0.921E-02 0.921E-02 979 Error at T=0.384E+00, level=5 : 0.130E-01 0.130E-01 2305 Error at T=0.408E+00, level=1 : 0.112E-01 0.112E-01 105 Error at T=0.408E+00, level=2 : 0.112E-01 0.112E-01 240 Error at T=0.408E+00, level=3 : 0.113E-01 0.113E-01 500 Error at T=0.408E+00, level=4 : 0.119E-01 0.119E-01 1007 Error at T=0.408E+00, level=5 : 0.129E-01 0.129E-01 2331 Error at T=0.432E+00, level=1 : 0.775E-02 0.775E-02 105 Error at T=0.432E+00, level=2 : 0.784E-02 0.784E-02 240 Error at T=0.432E+00, level=3 : 0.800E-02 0.800E-02 500 Error at T=0.432E+00, level=4 : 0.845E-02 0.845E-02 1077 Error at T=0.432E+00, level=5 : 0.127E-01 0.127E-01 2389 Error at T=0.457E+00, level=1 : 0.687E-03 0.687E-03 105 Error at T=0.457E+00, level=2 : 0.108E-02 0.108E-02 240 Error at T=0.457E+00, level=3 : 0.340E-02 0.340E-02 500 Error at T=0.457E+00, level=4 : 0.113E-01 0.113E-01 1077 Error at T=0.457E+00, level=5 : 0.128E-01 0.128E-01 2335 Error at T=0.480E+00, level=1 : 0.470E-02 0.470E-02 105 Error at T=0.480E+00, level=2 : 0.516E-02 0.516E-02 220 Error at T=0.480E+00, level=3 : 0.815E-02 0.815E-02 468 Error at T=0.480E+00, level=4 : 0.833E-02 0.833E-02 983 Error at T=0.480E+00, level=5 : 0.130E-01 0.130E-01 2421 Error at T=0.505E+00, level=1 : 0.623E-02 0.623E-02 105 Error at T=0.505E+00, level=2 : 0.623E-02 0.623E-02 220 Error at T=0.505E+00, level=3 : 0.111E-01 0.111E-01 464 Error at T=0.505E+00, level=4 : 0.113E-01 0.113E-01 979 Error at T=0.505E+00, level=5 : 0.131E-01 0.131E-01 2335 Error at T=0.528E+00, level=1 : 0.513E-02 0.513E-02 105 Error at T=0.528E+00, level=2 : 0.513E-02 0.513E-02 220 Error at T=0.528E+00, level=3 : 0.837E-02 0.837E-02 488 Error at T=0.528E+00, level=4 : 0.837E-02 0.837E-02 1047 Error at T=0.528E+00, level=5 : 0.127E-01 0.127E-01 2421 Error at T=0.553E+00, level=1 : 0.320E-02 0.320E-02 105 Error at T=0.553E+00, level=2 : 0.325E-02 0.325E-02 220 Error at T=0.553E+00, level=3 : 0.359E-02 0.359E-02 508 Error at T=0.553E+00, level=4 : 0.106E-01 0.106E-01 1067 Error at T=0.553E+00, level=5 : 0.123E-01 0.123E-01 2335 Error at T=0.577E+00, level=1 : 0.166E-02 0.166E-02 105 Error at T=0.577E+00, level=2 : 0.588E-02 0.588E-02 220 Error at T=0.577E+00, level=3 : 0.615E-02 0.615E-02 508 Error at T=0.577E+00, level=4 : 0.780E-02 0.780E-02 977 Error at T=0.577E+00, level=5 : 0.116E-01 0.116E-01 2341 Error at T=0.600E+00, level=1 : 0.709E-03 0.709E-03 105 Error at T=0.600E+00, level=2 : 0.890E-02 0.890E-02 220 Error at T=0.600E+00, level=3 : 0.909E-02 0.909E-02 500 Error at T=0.600E+00, level=4 : 0.948E-02 0.948E-02 969 Error at T=0.600E+00, level=5 : 0.109E-01 0.109E-01 2335 Error at T=0.624E+00, level=1 : 0.496E-03 0.496E-03 105 Error at T=0.624E+00, level=2 : 0.745E-02 0.745E-02 220 Error at T=0.624E+00, level=3 : 0.782E-02 0.782E-02 496 Error at T=0.624E+00, level=4 : 0.825E-02 0.825E-02 1033 Error at T=0.624E+00, level=5 : 0.105E-01 0.105E-01 2311 Error at T=0.647E+00, level=1 : 0.755E-03 0.755E-03 105 Error at T=0.647E+00, level=2 : 0.276E-02 0.276E-02 220 Error at T=0.647E+00, level=3 : 0.388E-02 0.388E-02 496 Error at T=0.647E+00, level=4 : 0.901E-02 0.901E-02 1053 Error at T=0.647E+00, level=5 : 0.104E-01 0.104E-01 2325 Error at T=0.671E+00, level=1 : 0.112E-02 0.112E-02 105 Error at T=0.671E+00, level=2 : 0.355E-02 0.355E-02 220 Error at T=0.671E+00, level=3 : 0.489E-02 0.489E-02 466 Error at T=0.671E+00, level=4 : 0.872E-02 0.872E-02 1033 Error at T=0.671E+00, level=5 : 0.104E-01 0.104E-01 2301 Error at T=0.694E+00, level=1 : 0.152E-02 0.152E-02 105 Error at T=0.694E+00, level=2 : 0.587E-02 0.587E-02 220 Error at T=0.694E+00, level=3 : 0.857E-02 0.857E-02 442 Error at T=0.694E+00, level=4 : 0.880E-02 0.880E-02 955 Error at T=0.694E+00, level=5 : 0.106E-01 0.106E-01 2311 Error at T=0.718E+00, level=1 : 0.153E-02 0.153E-02 105 Error at T=0.718E+00, level=2 : 0.545E-02 0.545E-02 220 Error at T=0.718E+00, level=3 : 0.871E-02 0.871E-02 470 Error at T=0.718E+00, level=4 : 0.914E-02 0.914E-02 1015 Error at T=0.718E+00, level=5 : 0.107E-01 0.107E-01 2287 Error at T=0.741E+00, level=1 : 0.381E-03 0.381E-03 105 Error at T=0.741E+00, level=2 : 0.386E-02 0.386E-02 240 Error at T=0.741E+00, level=3 : 0.423E-02 0.423E-02 490 Error at T=0.741E+00, level=4 : 0.851E-02 0.851E-02 1035 Error at T=0.741E+00, level=5 : 0.108E-01 0.108E-01 2273 Error at T=0.765E+00, level=1 : 0.336E-02 0.336E-02 105 Error at T=0.765E+00, level=2 : 0.369E-02 0.369E-02 240 Error at T=0.765E+00, level=3 : 0.380E-02 0.380E-02 490 Error at T=0.765E+00, level=4 : 0.950E-02 0.950E-02 1035 Error at T=0.765E+00, level=5 : 0.108E-01 0.108E-01 2269 Error at T=0.788E+00, level=1 : 0.715E-02 0.715E-02 105 Error at T=0.788E+00, level=2 : 0.765E-02 0.765E-02 240 Error at T=0.788E+00, level=3 : 0.793E-02 0.793E-02 486 Error at T=0.788E+00, level=4 : 0.849E-02 0.849E-02 937 Error at T=0.788E+00, level=5 : 0.116E-01 0.116E-01 2251 Error at T=0.812E+00, level=1 : 0.833E-02 0.833E-02 105 Error at T=0.812E+00, level=2 : 0.912E-02 0.912E-02 240 Error at T=0.812E+00, level=3 : 0.935E-02 0.935E-02 478 Error at T=0.812E+00, level=4 : 0.100E-01 0.100E-01 985 Error at T=0.812E+00, level=5 : 0.131E-01 0.131E-01 2247 Error at T=0.835E+00, level=1 : 0.533E-02 0.533E-02 105 Error at T=0.835E+00, level=2 : 0.565E-02 0.565E-02 240 Error at T=0.835E+00, level=3 : 0.574E-02 0.574E-02 478 Error at T=0.835E+00, level=4 : 0.779E-02 0.779E-02 1013 Error at T=0.835E+00, level=5 : 0.115E-01 0.115E-01 2229 Error at T=0.859E+00, level=1 : 0.117E-02 0.117E-02 105 Error at T=0.859E+00, level=2 : 0.138E-02 0.138E-02 240 Error at T=0.859E+00, level=3 : 0.291E-02 0.291E-02 478 Error at T=0.859E+00, level=4 : 0.966E-02 0.966E-02 1013 Error at T=0.859E+00, level=5 : 0.112E-01 0.112E-01 2221 Error at T=0.882E+00, level=1 : 0.482E-02 0.482E-02 105 Error at T=0.882E+00, level=2 : 0.502E-02 0.502E-02 220 Error at T=0.882E+00, level=3 : 0.697E-02 0.697E-02 428 Error at T=0.882E+00, level=4 : 0.727E-02 0.727E-02 915 Error at T=0.882E+00, level=5 : 0.112E-01 0.112E-01 2195 Error at T=0.906E+00, level=1 : 0.540E-02 0.540E-02 105 Error at T=0.906E+00, level=2 : 0.573E-02 0.573E-02 220 Error at T=0.906E+00, level=3 : 0.948E-02 0.948E-02 432 Error at T=0.906E+00, level=4 : 0.972E-02 0.972E-02 915 Error at T=0.906E+00, level=5 : 0.111E-01 0.111E-01 2211 Error at T=0.929E+00, level=1 : 0.413E-02 0.413E-02 105 Error at T=0.929E+00, level=2 : 0.449E-02 0.449E-02 220 Error at T=0.929E+00, level=3 : 0.706E-02 0.706E-02 462 Error at T=0.929E+00, level=4 : 0.706E-02 0.706E-02 967 Error at T=0.929E+00, level=5 : 0.110E-01 0.110E-01 2281 Error at T=0.953E+00, level=1 : 0.248E-02 0.248E-02 105 Error at T=0.953E+00, level=2 : 0.279E-02 0.279E-02 220 Error at T=0.953E+00, level=3 : 0.315E-02 0.315E-02 472 Error at T=0.953E+00, level=4 : 0.966E-02 0.966E-02 987 Error at T=0.953E+00, level=5 : 0.108E-01 0.108E-01 2181 Error at T=0.976E+00, level=1 : 0.121E-02 0.121E-02 105 Error at T=0.976E+00, level=2 : 0.573E-02 0.573E-02 220 Error at T=0.976E+00, level=3 : 0.586E-02 0.586E-02 468 Error at T=0.976E+00, level=4 : 0.762E-02 0.762E-02 905 Error at T=0.976E+00, level=5 : 0.108E-01 0.108E-01 2175 Error at T=0.100E+01, level=1 : 0.498E-03 0.498E-03 105 Error at T=0.100E+01, level=2 : 0.894E-02 0.894E-02 220 Error at T=0.100E+01, level=3 : 0.922E-02 0.922E-02 464 Error at T=0.100E+01, level=4 : 0.950E-02 0.950E-02 889 Error at T=0.100E+01, level=5 : 0.109E-01 0.109E-01 2147 VLUGR2 returned with MNTR=1 SHAR_EOF fi # end of overwriting check cd .. cd .. if test ! -d 'Info' then mkdir 'Info' fi cd 'Info' if test -f 'depend' then echo shar: will not over-write existing file "'depend'" else cat << \SHAR_EOF > 'depend' port/i1mach.f port/d1mach.f blas1/ddot.f blas1/daxpy.f blas1/dnrm2.f blas1/sdot.f blas1/saxpy.f blas1/snrm2.f SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'Src' then mkdir 'Src' fi cd 'Src' if test ! -d 'Dp' then mkdir 'Dp' fi cd 'Dp' if test -f 'ilubs1.f' then echo shar: will not over-write existing file "'ilubs1.f'" else cat << \SHAR_EOF > 'ilubs1.f' SUBROUTINE ILU (N, NPD, A, LLDG, LSL, LLSL) INTEGER NPDE PARAMETER (NPDE = 1) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LSL(*), LLSL(0:*) DOUBLE PRECISION A(N,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER K, L, M C IF (NPDE .NE. NPD) STOP 'Wrong ILUBS loaded.' C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,0) = 1.0 / A(K,0) 553 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower diagonals CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,-4) = A(K,-4) * A(LLDG(K,-4),0) A(K,-3) = (A(K,-3) - A(K,-4)*A(LLDG(K,-4),1)) + * A(LLDG(K,-3),0) A(K,-2) = (A(K,-2) - A(K,-3)*A(LLDG(K,-3),1)) + * A(LLDG(K,-2),0) A(K,-1) = (A(K,-1) - A(K,-4)*A(LLDG(K,-4),3) + - A(K,-3)*A(LLDG(K,-3),2)) * A(K-1,0) C C Compute main diagonal A(K,0) = 1.0 / (A(K, 0) - A(K,-4)*A(LLDG(K,-4),4) + - A(K,-3)*A(LLDG(K,-3),3) + - A(K,-2)*A(LLDG(K,-2),2) + - A(K,-1)*A(K-1 ,1)) C C Compute upper diagonals A(K,1) = A(K, 1) - A(K,-3)*A(LLDG(K,-3),4) + - A(K,-2)*A(LLDG(K,-2),3) A(K,2) = A(K, 2) - A(K,-1)*A(K-1 ,3) A(K,3) = A(K, 3) - A(K,-1)*A(K-1 ,4) 20 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPD, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) INTEGER NPDE PARAMETER (NPDE = 1) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) DOUBLE PRECISION A(N,-4:4), B(N) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K) = B(K) - A(K,-1)*B(K- 1) + - A(K,-2)*B(LLDG(K,-2)) + - A(K,-3)*B(LLDG(K,-3)) + - A(K,-4)*B(LLDG(K,-4)) 20 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K) = B(K) * A(K,0) 133 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K) = (B(K) - A(K,1)*B(K+1 ) + - A(K,2)*B(LUDG(K,2)) + - A(K,3)*B(LUDG(K,3)) + - A(K,4)*B(LUDG(K,4))) * A(K,0) 40 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'ilubs2.f' then echo shar: will not over-write existing file "'ilubs2.f'" else cat << \SHAR_EOF > 'ilubs2.f' SUBROUTINE ILU (N, NPD, A, LLDG, LSL, LLSL) INTEGER NPDE PARAMETER (NPDE = 2) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LSL(*), LLSL(0:*) DOUBLE PRECISION A(N,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, LC, K, L, M C IF (NPDE .NE. NPD) STOP 'Wrong ILUBS loaded.' C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 C C Compute main block diagonal DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 L = 1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K,LC,JC,0) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K,LC,IC,0) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 559 CONTINUE 557 CONTINUE 550 CONTINUE C C Compute upper block diagonals DO 560 IC = 1, NPDE DO 563 LC = 1, IC-1 DO 564 JC = 1, NPDE CDIR$ IVDEP DO 561 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 561 CONTINUE 564 CONTINUE 563 CONTINUE 560 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower block diagonals DO 120 JC = 1, NPDE DO 121 LC = 1, JC-1 CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 122 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,0) 122 CONTINUE 20 CONTINUE 121 CONTINUE CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 123 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) * A(LLDG(K,-4),JC,JC,0) 123 CONTINUE 21 CONTINUE 120 CONTINUE DO 130 JC = 1, NPDE CDIR$ IVDEP DO 30 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 131 LC = 1, NPDE CFPP$ UNROLL DO 132 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,1) 132 CONTINUE 131 CONTINUE 30 CONTINUE DO 133 LC = 1, JC-1 CDIR$ IVDEP DO 31 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 134 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,0) 134 CONTINUE 31 CONTINUE 133 CONTINUE CDIR$ IVDEP DO 32 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 135 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) * A(LLDG(K,-3),JC,JC,0) 135 CONTINUE 32 CONTINUE 130 CONTINUE DO 140 JC = 1, NPDE CDIR$ IVDEP DO 40 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 141 LC = 1, NPDE CFPP$ UNROLL DO 142 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,1) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,2) 142 CONTINUE 141 CONTINUE 40 CONTINUE DO 143 LC = 1, JC-1 CDIR$ IVDEP DO 41 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 144 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,0) 144 CONTINUE 41 CONTINUE 143 CONTINUE CDIR$ IVDEP DO 42 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 145 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) * A(LLDG(K,-2),JC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) * A(K-1 ,JC,JC,0) 145 CONTINUE 42 CONTINUE 140 CONTINUE C C Compute main block diagonal DO 150 IC = 1, NPDE DO 152 JC = IC, NPDE CDIR$ IVDEP DO 50 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 151 LC = 1, NPDE A(K,IC,JC,0) = A(K,IC,JC, 0) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,4) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,3) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,1) 151 CONTINUE 50 CONTINUE 152 CONTINUE DO 153 JC = IC+1, NPDE CDIR$ IVDEP DO 51 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 1151 LC = 1, NPDE A(K,JC,IC,0) = A(K,JC,IC, 0) + - A(K,JC,LC,-4)*A(LLDG(K,-4),LC,IC,4) + - A(K,JC,LC,-3)*A(LLDG(K,-3),LC,IC,3) + - A(K,JC,LC,-2)*A(LLDG(K,-2),LC,IC,2) + - A(K,JC,LC,-1)*A(K-1 ,LC,IC,1) 1151 CONTINUE 51 CONTINUE 153 CONTINUE DO 154 LC = 1, IC-1 DO 155 JC = IC, NPDE CDIR$ IVDEP DO 52 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K ,LC,JC,0) 52 CONTINUE 155 CONTINUE DO 156 JC = IC+1, NPDE CDIR$ IVDEP DO 53 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K ,LC,IC,0) 53 CONTINUE 156 CONTINUE 154 CONTINUE CDIR$ IVDEP DO 54 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 54 CONTINUE DO 157 JC = IC+1, NPDE CDIR$ IVDEP DO 55 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 55 CONTINUE 157 CONTINUE 150 CONTINUE C C Compute upper block diagonals DO 160 IC = 1, NPDE CDIR$ IVDEP DO 60 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 161 LC = 1, NPDE CFPP$ UNROLL DO 162 JC = 1, NPDE A(K,IC,JC,1) = A(K,IC,JC, 1) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,4) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,3) A(K,IC,JC,2) = A(K,IC,JC, 2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,3) A(K,IC,JC,3) = A(K,IC,JC, 3) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,4) 162 CONTINUE 161 CONTINUE 60 CONTINUE DO 163 LC = 1, IC-1 CDIR$ IVDEP DO 61 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 164 JC = 1, NPDE A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 164 CONTINUE 61 CONTINUE 163 CONTINUE 160 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPD, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) INTEGER NPDE PARAMETER (NPDE = 2) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) DOUBLE PRECISION A(N,NPDE,NPDE,-4:4), B(N,NPDE) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C LSL_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 L = 1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 120 IC = 1, NPDE CFPP$ UNROLL DO 121 JC = 1, NPDE B(K,IC) = B(K,IC) - A(K,IC,JC,-1)*B(K- 1 ,JC) + - A(K,IC,JC,-2)*B(LLDG(K,-2),JC) + - A(K,IC,JC,-3)*B(LLDG(K,-3),JC) + - A(K,IC,JC,-4)*B(LLDG(K,-4),JC) 121 CONTINUE 120 CONTINUE 20 CONTINUE DO 123 IC = 2, NPDE DO 122 JC = 1, IC-1 CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 21 CONTINUE 122 CONTINUE 123 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 133 CONTINUE 130 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) CFPP$ UNROLL DO 150 IC = NPDE, 1, -1 CFPP$ UNROLL DO 151 JC = NPDE, 1, -1 B(K,IC) = B(K,IC) - A(K,IC,JC,1)*B(K+1 ,JC) + - A(K,IC,JC,2)*B(LUDG(K,2),JC) + - A(K,IC,JC,3)*B(LUDG(K,3),JC) + - A(K,IC,JC,4)*B(LUDG(K,4),JC) 151 CONTINUE 150 CONTINUE 40 CONTINUE DO 1150 IC = NPDE, 1, -1 DO 152 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 51 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 51 CONTINUE 152 CONTINUE CDIR$ IVDEP DO 52 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 52 CONTINUE 1150 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'ilubs3.f' then echo shar: will not over-write existing file "'ilubs3.f'" else cat << \SHAR_EOF > 'ilubs3.f' SUBROUTINE ILU (N, NPD, A, LLDG, LSL, LLSL) INTEGER NPDE PARAMETER (NPDE = 3) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LSL(*), LLSL(0:*) DOUBLE PRECISION A(N,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, LC, K, L, M C IF (NPDE .NE. NPD) STOP 'Wrong ILUBS loaded.' C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 C C Compute main block diagonal DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 L = 1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K,LC,JC,0) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K,LC,IC,0) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 559 CONTINUE 557 CONTINUE 550 CONTINUE C C Compute upper block diagonals DO 560 IC = 1, NPDE DO 563 LC = 1, IC-1 DO 564 JC = 1, NPDE CDIR$ IVDEP DO 561 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 561 CONTINUE 564 CONTINUE 563 CONTINUE 560 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower block diagonals DO 120 JC = 1, NPDE DO 121 LC = 1, JC-1 CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 122 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,0) 122 CONTINUE 20 CONTINUE 121 CONTINUE CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 123 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) * A(LLDG(K,-4),JC,JC,0) 123 CONTINUE 21 CONTINUE 120 CONTINUE DO 130 JC = 1, NPDE CDIR$ IVDEP DO 30 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 131 LC = 1, NPDE CFPP$ UNROLL DO 132 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,1) 132 CONTINUE 131 CONTINUE 30 CONTINUE DO 133 LC = 1, JC-1 CDIR$ IVDEP DO 31 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 134 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,0) 134 CONTINUE 31 CONTINUE 133 CONTINUE CDIR$ IVDEP DO 32 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 135 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) * A(LLDG(K,-3),JC,JC,0) 135 CONTINUE 32 CONTINUE 130 CONTINUE DO 140 JC = 1, NPDE CDIR$ IVDEP DO 40 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 141 LC = 1, NPDE CFPP$ UNROLL DO 142 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,1) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,2) 142 CONTINUE 141 CONTINUE 40 CONTINUE DO 143 LC = 1, JC-1 CDIR$ IVDEP DO 41 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 144 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,0) 144 CONTINUE 41 CONTINUE 143 CONTINUE CDIR$ IVDEP DO 42 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 145 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) * A(LLDG(K,-2),JC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) * A(K-1 ,JC,JC,0) 145 CONTINUE 42 CONTINUE 140 CONTINUE C C Compute main block diagonal DO 150 IC = 1, NPDE DO 152 JC = IC, NPDE CDIR$ IVDEP DO 50 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 151 LC = 1, NPDE A(K,IC,JC,0) = A(K,IC,JC, 0) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,4) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,3) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,1) 151 CONTINUE 50 CONTINUE 152 CONTINUE DO 153 JC = IC+1, NPDE CDIR$ IVDEP DO 51 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 1151 LC = 1, NPDE A(K,JC,IC,0) = A(K,JC,IC, 0) + - A(K,JC,LC,-4)*A(LLDG(K,-4),LC,IC,4) + - A(K,JC,LC,-3)*A(LLDG(K,-3),LC,IC,3) + - A(K,JC,LC,-2)*A(LLDG(K,-2),LC,IC,2) + - A(K,JC,LC,-1)*A(K-1 ,LC,IC,1) 1151 CONTINUE 51 CONTINUE 153 CONTINUE DO 154 LC = 1, IC-1 DO 155 JC = IC, NPDE CDIR$ IVDEP DO 52 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K ,LC,JC,0) 52 CONTINUE 155 CONTINUE DO 156 JC = IC+1, NPDE CDIR$ IVDEP DO 53 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K ,LC,IC,0) 53 CONTINUE 156 CONTINUE 154 CONTINUE CDIR$ IVDEP DO 54 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 54 CONTINUE DO 157 JC = IC+1, NPDE CDIR$ IVDEP DO 55 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 55 CONTINUE 157 CONTINUE 150 CONTINUE C C Compute upper block diagonals DO 160 IC = 1, NPDE CDIR$ IVDEP DO 60 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 161 LC = 1, NPDE CFPP$ UNROLL A(K,IC,1,1) = A(K,IC,1,1) - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,1,4) - A 1 (K,IC,LC,-2)*A(LLDG(K,-2),LC,1,3) A(K,IC,1,2) = A(K,IC,1,2) - A(K,IC,LC,-1)*A(K-1,LC,1,3) A(K,IC,1,3) = A(K,IC,1,3) - A(K,IC,LC,-1)*A(K-1,LC,1,4) A(K,IC,2,1) = A(K,IC,2,1) - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,2,4) - A 1 (K,IC,LC,-2)*A(LLDG(K,-2),LC,2,3) A(K,IC,2,2) = A(K,IC,2,2) - A(K,IC,LC,-1)*A(K-1,LC,2,3) A(K,IC,2,3) = A(K,IC,2,3) - A(K,IC,LC,-1)*A(K-1,LC,2,4) A(K,IC,3,1) = A(K,IC,3,1) - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,3,4) - A 1 (K,IC,LC,-2)*A(LLDG(K,-2),LC,3,3) A(K,IC,3,2) = A(K,IC,3,2) - A(K,IC,LC,-1)*A(K-1,LC,3,3) A(K,IC,3,3) = A(K,IC,3,3) - A(K,IC,LC,-1)*A(K-1,LC,3,4) 161 CONTINUE 60 CONTINUE DO 163 LC = 1, IC-1 CDIR$ IVDEP DO 61 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 164 JC = 1, NPDE A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 164 CONTINUE 61 CONTINUE 163 CONTINUE 160 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPD, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) INTEGER NPDE PARAMETER (NPDE = 3) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) DOUBLE PRECISION A(N,NPDE,NPDE,-4:4), B(N,NPDE) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C LSL_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 L = 1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 120 IC = 1, NPDE CFPP$ UNROLL DO 121 JC = 1, NPDE B(K,IC) = B(K,IC) - A(K,IC,JC,-1)*B(K- 1 ,JC) + - A(K,IC,JC,-2)*B(LLDG(K,-2),JC) + - A(K,IC,JC,-3)*B(LLDG(K,-3),JC) + - A(K,IC,JC,-4)*B(LLDG(K,-4),JC) 121 CONTINUE 120 CONTINUE 20 CONTINUE DO 123 IC = 2, NPDE DO 122 JC = 1, IC-1 CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 21 CONTINUE 122 CONTINUE 123 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 133 CONTINUE 130 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) CFPP$ UNROLL DO 150 IC = NPDE, 1, -1 CFPP$ UNROLL DO 151 JC = NPDE, 1, -1 B(K,IC) = B(K,IC) - A(K,IC,JC,1)*B(K+1 ,JC) + - A(K,IC,JC,2)*B(LUDG(K,2),JC) + - A(K,IC,JC,3)*B(LUDG(K,3),JC) + - A(K,IC,JC,4)*B(LUDG(K,4),JC) 151 CONTINUE 150 CONTINUE 40 CONTINUE DO 1150 IC = NPDE, 1, -1 DO 152 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 51 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 51 CONTINUE 152 CONTINUE CDIR$ IVDEP DO 52 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 52 CONTINUE 1150 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'ilubsn.f' then echo shar: will not over-write existing file "'ilubsn.f'" else cat << \SHAR_EOF > 'ilubsn.f' SUBROUTINE ILU (N, NPDE, A, LLDG, LSL, LLSL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPDE, LLDG(N,-4:-2), LSL(*), LLSL(0:*) DOUBLE PRECISION A(N,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, LC, K, L, M C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 C C Compute main block diagonal DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 L = 1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K,LC,JC,0) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K,LC,IC,0) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 559 CONTINUE 557 CONTINUE 550 CONTINUE C C Compute upper block diagonals DO 560 IC = 1, NPDE DO 563 LC = 1, IC-1 DO 564 JC = 1, NPDE CDIR$ IVDEP DO 561 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 561 CONTINUE 564 CONTINUE 563 CONTINUE 560 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower block diagonals DO 120 JC = 1, NPDE DO 121 LC = 1, JC-1 DO 122 IC = 1, NPDE CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-4) = A(K,IC,JC,-4) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,0) 20 CONTINUE 122 CONTINUE 121 CONTINUE DO 123 IC = 1, NPDE CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-4) = A(K,IC,JC,-4) * A(LLDG(K,-4),JC,JC,0) 21 CONTINUE 123 CONTINUE 120 CONTINUE DO 130 JC = 1, NPDE DO 131 LC = 1, NPDE DO 132 IC = 1, NPDE CDIR$ IVDEP DO 30 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,1) 30 CONTINUE 132 CONTINUE 131 CONTINUE DO 133 LC = 1, JC-1 DO 134 IC = 1, NPDE CDIR$ IVDEP DO 31 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,0) 31 CONTINUE 134 CONTINUE 133 CONTINUE DO 135 IC = 1, NPDE CDIR$ IVDEP DO 32 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-3) = A(K,IC,JC,-3) * A(LLDG(K,-3),JC,JC,0) 32 CONTINUE 135 CONTINUE 130 CONTINUE DO 140 JC = 1, NPDE DO 141 LC = 1, NPDE DO 142 IC = 1, NPDE CDIR$ IVDEP DO 40 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,1) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,2) 40 CONTINUE 142 CONTINUE 141 CONTINUE DO 143 LC = 1, JC-1 DO 144 IC = 1, NPDE CDIR$ IVDEP DO 41 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,0) 41 CONTINUE 144 CONTINUE 143 CONTINUE DO 145 IC = 1, NPDE CDIR$ IVDEP DO 42 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-2) = A(K,IC,JC,-2) * A(LLDG(K,-2),JC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) * A(K-1 ,JC,JC,0) 42 CONTINUE 145 CONTINUE 140 CONTINUE C C Compute main block diagonal DO 150 IC = 1, NPDE DO 151 LC = 1, NPDE DO 152 JC = IC, NPDE CDIR$ IVDEP DO 50 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC, 0) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,4) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,3) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,1) 50 CONTINUE 152 CONTINUE DO 153 JC = IC+1, NPDE CDIR$ IVDEP DO 51 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC, 0) + - A(K,JC,LC,-4)*A(LLDG(K,-4),LC,IC,4) + - A(K,JC,LC,-3)*A(LLDG(K,-3),LC,IC,3) + - A(K,JC,LC,-2)*A(LLDG(K,-2),LC,IC,2) + - A(K,JC,LC,-1)*A(K-1 ,LC,IC,1) 51 CONTINUE 153 CONTINUE 151 CONTINUE DO 154 LC = 1, IC-1 DO 155 JC = IC, NPDE CDIR$ IVDEP DO 52 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K ,LC,JC,0) 52 CONTINUE 155 CONTINUE DO 156 JC = IC+1, NPDE CDIR$ IVDEP DO 53 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K ,LC,IC,0) 53 CONTINUE 156 CONTINUE 154 CONTINUE CDIR$ IVDEP DO 54 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 54 CONTINUE DO 157 JC = IC+1, NPDE CDIR$ IVDEP DO 55 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 55 CONTINUE 157 CONTINUE 150 CONTINUE C C Compute upper block diagonals DO 160 IC = 1, NPDE DO 161 LC = 1, NPDE DO 162 JC = 1, NPDE CDIR$ IVDEP DO 60 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC, 1) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,4) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,3) A(K,IC,JC,2) = A(K,IC,JC, 2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,3) A(K,IC,JC,3) = A(K,IC,JC, 3) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,4) 60 CONTINUE 162 CONTINUE 161 CONTINUE DO 163 LC = 1, IC-1 DO 164 JC = 1, NPDE CDIR$ IVDEP DO 61 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 61 CONTINUE 164 CONTINUE 163 CONTINUE 160 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPDE, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPDE, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) DOUBLE PRECISION A(N,NPDE,NPDE,-4:4), B(N,NPDE) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C LSL_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 L = 1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set DO 120 IC = 1, NPDE DO 121 JC = 1, NPDE CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,-1)*B(K- 1 ,JC) + - A(K,IC,JC,-2)*B(LLDG(K,-2),JC) + - A(K,IC,JC,-3)*B(LLDG(K,-3),JC) + - A(K,IC,JC,-4)*B(LLDG(K,-4),JC) 20 CONTINUE 121 CONTINUE 120 CONTINUE DO 123 IC = 2, NPDE DO 122 JC = 1, IC-1 CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 21 CONTINUE 122 CONTINUE 123 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 133 CONTINUE 130 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set DO 150 IC = NPDE, 1, -1 DO 151 JC = NPDE, 1, -1 CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,1)*B(K+1 ,JC) + - A(K,IC,JC,2)*B(LUDG(K,2),JC) + - A(K,IC,JC,3)*B(LUDG(K,3),JC) + - A(K,IC,JC,4)*B(LUDG(K,4),JC) 40 CONTINUE 151 CONTINUE DO 152 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 51 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 51 CONTINUE 152 CONTINUE CDIR$ IVDEP DO 52 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 52 CONTINUE 150 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'user.f' then echo shar: will not over-write existing file "'user.f'" else cat << \SHAR_EOF > 'user.f' LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define grid for initial rectangular domain ((XL,YL),(XR,YU)) in C in physical coordinates and ((0,0),(Nx,Ny) in column, resp. row C coordinates, where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise, C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : IN. X-coordinate of lowerleft point of rectangle C YL : IN. Y-coordinate of lowerleft point of rectangle C XR : IN. X-coordinate of upperright point of rectangle C YU : IN. Y-coordinate of upperright point of rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER NX, NY, I, IPT, J, NROWS, NPTS, NBNDS NX = NINT((XR-XL)/DX) NY = NINT((YU-YL)/DY) C Ccc Make initial grid NPTS = (NX+1)*(NY+1) IF (MAXPTS .LT. NPTS) THEN INIDOM = .FALSE. MAXPTS = NPTS RETURN ELSE INIDOM = .TRUE. ENDIF NROWS = NY+1 C C Make grid structure LROW(0) = NROWS IPT = 1 DO 10 I = 0, NY LROW(I+1) = IPT IROW(I+1) = I DO 20 J = 0, NX ICOL(IPT) = J IPT = IPT + 1 20 CONTINUE 10 CONTINUE LROW(NROWS+1) = NPTS+1 C C Boundaries NBNDS = 8 ILBND(1) = 1 ILBND(2) = 2 ILBND(3) = 3 ILBND(4) = 4 ILBND(5) = 12 ILBND(6) = 23 ILBND(7) = 34 ILBND(8) = 41 LLBND(0) = NBNDS LLBND(1) = 1 LLBND(2) = LLBND(1) + (NX-1) LLBND(3) = LLBND(2) + (NY-1) LLBND(4) = LLBND(3) + (NX-1) LLBND(5) = LLBND(4) + (NY-1) LLBND(6) = LLBND(5) + 1 LLBND(7) = LLBND(6) + 1 LLBND(8) = LLBND(7) + 1 LLBND(9) = LLBND(8) + 1 C Lower and upper boundary pointers DO 50 J = 1, NX-1 LBND(LLBND(1)+J-1) = J + 1 LBND(LLBND(3)+J-1) = NPTS - J 50 CONTINUE C Left and right boundary pointers DO 60 I = 1, NY-1 LBND(LLBND(2)+I-1) = I*(NX+1) + 1 LBND(LLBND(4)+I-1) = (I+1)*(NX+1) 60 CONTINUE C Corners LBND(LLBND(5)) = 1 LBND(LLBND(6)) = NPTS - NX LBND(LLBND(7)) = NPTS LBND(LLBND(8)) = NX+1 RETURN END SUBROUTINE DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + FU, FUX, FUY, FUXX, FUXY, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION F(NPTS*NPDE), T, X(*), Y(*), U(*), A0, DT, DX, + DY, UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), DEL(NPTS), WORK(2*NPTS*NPDE), + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE),FUXY(NPTS*NPDE,NPDE),FUYY(NPTS*NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U by numerical C differencing C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUXY : OUT. dF(Uxy)dUxy C FUYY : OUT. dF(Uyy)dUyy C Ccc EXTERNALS USED: EXTERNAL PERTRB, PRTRBU, RES C C----------------------------------------------------------------------- C INTEGER I, IC, ICPTB, IPT, LUTBAR DOUBLE PRECISION FACX, FACY, FACXX, FACXY, FACYY, TOL LUTBAR = 1 + NPTS*NPDE C Ccc How to decide if derivatives are `zero'? C Take `zero'-value of U divided by the grid width FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACXY = 1/(2*DX*2*DY) FACYY = 1/DY**2 C Ccc Loop over the components of the (derivatives of) U DO 10 ICPTB = 1, NPDE C C dF(U,Ut)/dU TOL = ABSTOL(ICPTB) CALL PRTRBU (ICPTB, NPTS, NPDE, U, A0, DT, UT, TOL, DEL, + WORK, WORK(LUTBAR)) CALL RES (T, X, Y, NPTS, NPDE, WORK, LLBND, ILBND, LBND, UIB, + WORK(LUTBAR), UX, UY, UXX, UXY, UYY, FU(1,ICPTB)) DO 20 IC = 1, NPDE DO 20 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FU(I,ICPTB) = (FU(I,ICPTB) - F(I)) / DEL(IPT) 20 CONTINUE C C dF(Ux)/dUx TOL = ABSTOL(ICPTB)*FACX CALL PERTRB (ICPTB, NPTS, NPDE, UX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, WORK, UY, UXX, UXY, UYY, FUX(1,ICPTB)) DO 40 IC = 1, NPDE DO 40 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUX(I,ICPTB) = (FUX(I,ICPTB) - F(I)) / DEL(IPT) 40 CONTINUE C C dF(Uy)/dUy TOL = ABSTOL(ICPTB)*FACY CALL PERTRB (ICPTB, NPTS, NPDE, UY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, WORK, UXX, UXY, UYY, FUY(1,ICPTB)) DO 50 IC = 1, NPDE DO 50 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUY(I,ICPTB) = (FUY(I,ICPTB) - F(I)) / DEL(IPT) 50 CONTINUE C C dF(Uxx)/dUxx TOL = ABSTOL(ICPTB)*FACXX CALL PERTRB (ICPTB, NPTS, NPDE, UXX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, WORK, UXY, UYY, FUXX(1,ICPTB)) DO 60 IC = 1, NPDE DO 60 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUXX(I,ICPTB) = (FUXX(I,ICPTB) - F(I)) / DEL(IPT) 60 CONTINUE C C dF(Uxy)/dUxy TOL = ABSTOL(ICPTB)*FACXY CALL PERTRB (ICPTB, NPTS, NPDE, UXY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, WORK, UYY, FUXY(1,ICPTB)) DO 70 IC = 1, NPDE DO 70 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUXY(I,ICPTB) = (FUXY(I,ICPTB) - F(I)) / DEL(IPT) 70 CONTINUE C C dF(Uyy)/dUyy TOL = ABSTOL(ICPTB)*FACYY CALL PERTRB (ICPTB, NPTS, NPDE, UYY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, WORK, FUYY(1,ICPTB)) DO 80 IC = 1, NPDE DO 80 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUYY(I,ICPTB) = (FUYY(I,ICPTB) - F(I)) / DEL(IPT) 80 CONTINUE 10 CONTINUE RETURN END SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, + LGRID, ISTRUC, LSOL, SOL) INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) DOUBLE PRECISION T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) RETURN END SUBROUTINE CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U, SPCMON, TOL) INTEGER LEVEL, NPTS, NPDE DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), SPCMON(NPTS), + TOL RETURN END SHAR_EOF fi # end of overwriting check if test -f 'blas1.f' then echo shar: will not over-write existing file "'blas1.f'" else cat << \SHAR_EOF > 'blas1.f' double precision function ddot(n,sx,incx,sy,incy) c c forms the dot product of two vectors. c uses unrolled loop for increments equal to one. c jack dongarra, linpack, 3/11/78. c double precision sx(1),sy(1),stemp integer i,incx,incy,ix,iy,m,mp1,n c ddot = 0.0d0 stemp = 0.0d0 if(n.le.0)return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n stemp = stemp + sx(ix)*sy(iy) ix = ix + incx iy = iy + incy 10 continue ddot = stemp return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,5) if( m .eq. 0 ) go to 40 do 30 i = 1,m stemp = stemp + sx(i)*sy(i) 30 continue if( n .lt. 5 ) go to 60 40 mp1 = m + 1 do 50 i = mp1,n,5 stemp = stemp + sx(i)*sy(i) + sx(i + 1)*sy(i + 1) + * sx(i + 2)*sy(i + 2) + sx(i + 3)*sy(i + 3) + sx(i + 4)*sy(i + 4) 50 continue 60 ddot = stemp return end subroutine daxpy(n,sa,sx,incx,sy,incy) c c constant times a vector plus a vector. c uses unrolled loop for increments equal to one. c jack dongarra, linpack, 3/11/78. c double precision sx(1),sy(1),sa integer i,incx,incy,ix,iy,m,mp1,n c if(n.le.0)return if (sa .eq. 0.0d0) return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n sy(iy) = sy(iy) + sa*sx(ix) ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,4) if( m .eq. 0 ) go to 40 do 30 i = 1,m sy(i) = sy(i) + sa*sx(i) 30 continue if( n .lt. 4 ) return 40 mp1 = m + 1 do 50 i = mp1,n,4 sy(i) = sy(i) + sa*sx(i) sy(i + 1) = sy(i + 1) + sa*sx(i + 1) sy(i + 2) = sy(i + 2) + sa*sx(i + 2) sy(i + 3) = sy(i + 3) + sa*sx(i + 3) 50 continue return end DOUBLE PRECISION FUNCTION DNRM2 ( N, SX, INCX) INTEGER NEXT DOUBLE PRECISION SX(1), CUTLO, CUTHI, HITEST, SUM, XMAX, ZERO, + ONE DATA ZERO, ONE /0.0D0, 1.0D0/ C C EUCLIDEAN NORM OF THE N-VECTOR STORED IN SX() WITH STORAGE C INCREMENT INCX . C IF N .LE. 0 RETURN WITH RESULT = 0. C IF N .GE. 1 THEN INCX MUST BE .GE. 1 C C C.L.LAWSON, 1978 JAN 08 C C FOUR PHASE METHOD USING TWO BUILT-IN CONSTANTS THAT ARE C HOPEFULLY APPLICABLE TO ALL MACHINES. C CUTLO = MAXIMUM OF SQRT(U/EPS) OVER ALL KNOWN MACHINES. C CUTHI = MINIMUM OF SQRT(V) OVER ALL KNOWN MACHINES. C WHERE C EPS = SMALLEST NO. SUCH THAT EPS + 1. .GT. 1. C U = SMALLEST POSITIVE NO. (UNDERFLOW LIMIT) C V = LARGEST NO. (OVERFLOW LIMIT) C C BRIEF OUTLINE OF ALGORITHM.. C C PHASE 1 SCANS ZERO COMPONENTS. C MOVE TO PHASE 2 WHEN A COMPONENT IS NONZERO AND .LE. CUTLO C MOVE TO PHASE 3 WHEN A COMPONENT IS .GT. CUTLO C MOVE TO PHASE 4 WHEN A COMPONENT IS .GE. CUTHI/M C WHERE M = N FOR X() REAL AND M = 2*N FOR COMPLEX. C C VALUES FOR CUTLO AND CUTHI.. C FROM THE ENVIRONMENTAL PARAMETERS LISTED IN THE IMSL CONVERTER C DOCUMENT THE LIMITING VALUES ARE AS FOLLOWS.. C CUTLO, S.P. U/EPS = 2**(-102) FOR HONEYWELL. CLOSE SECONDS ARE C UNIVAC AND DEC AT 2**(-103) C THUS CUTLO = 2**(-51) = 4.44089E-16 C CUTHI, S.P. V = 2**127 FOR UNIVAC, HONEYWELL, AND DEC. C THUS CUTHI = 2**(63.5) = 1.30438E19 C CUTLO, D.P. U/EPS = 2**(-67) FOR HONEYWELL AND DEC. C THUS CUTLO = 2**(-33.5) = 8.23181D-11 C CUTHI, D.P. SAME AS S.P. CUTHI = 1.30438D19 C DATA CUTLO, CUTHI / 8.232D-11, 1.304D19 / C DATA CUTLO, CUTHI / 4.441E-16, 1.304E19 / DATA CUTLO, CUTHI / 4.441D-16, 1.304D19 / C IF(N .GT. 0) GO TO 10 DNRM2 = ZERO GO TO 300 C 10 ASSIGN 30 TO NEXT SUM = ZERO NN = N * INCX C BEGIN MAIN LOOP I = 1 20 GO TO NEXT,(30, 50, 70, 110) 30 IF( ABS(SX(I)) .GT. CUTLO) GO TO 85 ASSIGN 50 TO NEXT XMAX = ZERO C C PHASE 1. SUM IS ZERO C 50 IF( SX(I) .EQ. ZERO) GO TO 200 IF( ABS(SX(I)) .GT. CUTLO) GO TO 85 C C PREPARE FOR PHASE 2. ASSIGN 70 TO NEXT GO TO 105 C C PREPARE FOR PHASE 4. C 100 I = J ASSIGN 110 TO NEXT SUM = (SUM / SX(I)) / SX(I) 105 XMAX = ABS(SX(I)) GO TO 115 C C PHASE 2. SUM IS SMALL. C SCALE TO AVOID DESTRUCTIVE UNDERFLOW. C 70 IF( ABS(SX(I)) .GT. CUTLO ) GO TO 75 C C COMMON CODE FOR PHASES 2 AND 4. C IN PHASE 4 SUM IS LARGE. SCALE TO AVOID OVERFLOW. C 110 IF( ABS(SX(I)) .LE. XMAX ) GO TO 115 SUM = ONE + SUM * (XMAX / SX(I))**2 XMAX = ABS(SX(I)) GO TO 200 C 115 SUM = SUM + (SX(I)/XMAX)**2 GO TO 200 C C C PREPARE FOR PHASE 3. C 75 SUM = (SUM * XMAX) * XMAX C C C FOR REAL OR D.P. SET HITEST = CUTHI/N C FOR COMPLEX SET HITEST = CUTHI/(2*N) C 85 HITEST = CUTHI/FLOAT( N ) C C PHASE 3. SUM IS MID-RANGE. NO SCALING. C DO 95 J =I,NN,INCX IF(ABS(SX(J)) .GE. HITEST) GO TO 100 95 SUM = SUM + SX(J)**2 DNRM2 = SQRT( SUM ) GO TO 300 C 200 CONTINUE I = I + INCX IF ( I .LE. NN ) GO TO 20 C C END OF MAIN LOOP. C C COMPUTE SQUARE ROOT AND ADJUST FOR SCALING. C DNRM2 = XMAX * SQRT(SUM) 300 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'port.f' then echo shar: will not over-write existing file "'port.f'" else cat << \SHAR_EOF > 'port.f' INTEGER FUNCTION I1MACH(I) INTEGER I C C I/O UNIT NUMBERS. C C I1MACH( 1) = THE STANDARD INPUT UNIT. C C I1MACH( 2) = THE STANDARD OUTPUT UNIT. C C I1MACH( 3) = THE STANDARD PUNCH UNIT. C C I1MACH( 4) = THE STANDARD ERROR MESSAGE UNIT. C C WORDS. C C I1MACH( 5) = THE NUMBER OF BITS PER INTEGER STORAGE UNIT. C C I1MACH( 6) = THE NUMBER OF CHARACTERS PER CHARACTER STORAGE UNIT. C FOR FORTRAN 77, THIS IS ALWAYS 1. FOR FORTRAN 66, C CHARACTER STORAGE UNIT = INTEGER STORAGE UNIT. C C INTEGERS. C C ASSUME INTEGERS ARE REPRESENTED IN THE S-DIGIT, BASE-A FORM C C SIGN ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) ) C C WHERE 0 .LE. X(I) .LT. A FOR I=0,...,S-1. C C I1MACH( 7) = A, THE BASE. C C I1MACH( 8) = S, THE NUMBER OF BASE-A DIGITS. C C I1MACH( 9) = A**S - 1, THE LARGEST MAGNITUDE. C C FLOATING-POINT NUMBERS. C C ASSUME FLOATING-POINT NUMBERS ARE REPRESENTED IN THE T-DIGIT, C BASE-B FORM C C SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) ) C C WHERE 0 .LE. X(I) .LT. B FOR I=1,...,T, C 0 .LT. X(1), AND EMIN .LE. E .LE. EMAX. C C I1MACH(10) = B, THE BASE. C C SINGLE-PRECISION C C I1MACH(11) = T, THE NUMBER OF BASE-B DIGITS. C C I1MACH(12) = EMIN, THE SMALLEST EXPONENT E. C C I1MACH(13) = EMAX, THE LARGEST EXPONENT E. C C DOUBLE-PRECISION C C I1MACH(14) = T, THE NUMBER OF BASE-B DIGITS. C C I1MACH(15) = EMIN, THE SMALLEST EXPONENT E. C C I1MACH(16) = EMAX, THE LARGEST EXPONENT E. C C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT, C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY C REMOVING THE C FROM COLUMN 1. ALSO, THE VALUES OF C I1MACH(1) - I1MACH(4) SHOULD BE CHECKED FOR CONSISTENCY C WITH THE LOCAL OPERATING SYSTEM. FOR FORTRAN 77, YOU MAY WISH C TO ADJUST THE DATA STATEMENT SO IMACH(6) IS SET TO 1, AND C THEN TO COMMENT OUT THE EXECUTABLE TEST ON I .EQ. 6 BELOW. C C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST C SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE, EXCEPT PERHAPS C FOR IMACH(1) - IMACH(4). C C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *) C GIVE C SOURCE FOR I1MACH. C INTEGER CRAY1, IMACH(16), OUTPUT, SANITY, SMALL(2) COMMON /D8MACH/ CRAY1 C/6S C/7S SAVE IMACH, SANITY C/ REAL RMACH C EQUIVALENCE (IMACH(4),OUTPUT), (RMACH,SMALL(1)) C C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T C PC 7300), AND 8087 BASED MICROS (E.G. IBM PC AND AT&T 6300). C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -125 / C DATA IMACH(13) / 128 / C DATA IMACH(14) / 53 / C DATA IMACH(15) / -1021 / C DATA IMACH(16) / 1024 /, SANITY/987/ C C MACHINE CONSTANTS FOR AMDAHL MACHINES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 63 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 63 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. C C DATA IMACH( 1) / 7 / C DATA IMACH( 2) / 2 / C DATA IMACH( 3) / 2 / C DATA IMACH( 4) / 2 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 33 / C DATA IMACH( 9) / Z1FFFFFFFF / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -256 / C DATA IMACH(13) / 255 / C DATA IMACH(14) / 60 / C DATA IMACH(15) / -256 / C DATA IMACH(16) / 255 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 48 / C DATA IMACH( 6) / 6 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 39 / C DATA IMACH( 9) / O0007777777777777 / C DATA IMACH(10) / 8 / C DATA IMACH(11) / 13 / C DATA IMACH(12) / -50 / C DATA IMACH(13) / 76 / C DATA IMACH(14) / 26 / C DATA IMACH(15) / -50 / C DATA IMACH(16) / 76 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 48 / C DATA IMACH( 6) / 6 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 39 / C DATA IMACH( 9) / O0007777777777777 / C DATA IMACH(10) / 8 / C DATA IMACH(11) / 13 / C DATA IMACH(12) / -50 / C DATA IMACH(13) / 76 / C DATA IMACH(14) / 26 / C DATA IMACH(15) / -32754 / C DATA IMACH(16) / 32780 /, SANITY/987/ C C MACHINE CONSTANTS FOR FTN4 ON THE CDC 6000/7000 SERIES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 60 / C DATA IMACH( 6) / 10 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 48 / C DATA IMACH( 9) / 00007777777777777777B / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 47 / C DATA IMACH(12) / -929 / C DATA IMACH(13) / 1070 / C DATA IMACH(14) / 94 / C DATA IMACH(15) / -929 / C DATA IMACH(16) / 1069 /, SANITY/987/ C C MACHINE CONSTANTS FOR FTN5 ON THE CDC 6000/7000 SERIES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 60 / C DATA IMACH( 6) / 10 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 48 / C DATA IMACH( 9) / O"00007777777777777777" / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 47 / C DATA IMACH(12) / -929 / C DATA IMACH(13) / 1070 / C DATA IMACH(14) / 94 / C DATA IMACH(15) / -929 / C DATA IMACH(16) / 1069 /, SANITY/987/ C C MACHINE CONSTANTS FOR CONVEX C-1. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 53 / C DATA IMACH(15) /-1024 / C DATA IMACH(16) / 1023 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 102 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 64 / C DATA IMACH( 6) / 8 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 63 / C DATA IMACH( 9) / 777777777777777777777B / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 47 / C DATA IMACH(12) / -8189 / C DATA IMACH(13) / 8190 / C DATA IMACH(14) / 94 / C DATA IMACH(15) / -8099 / C DATA IMACH(16) / 8190 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200. C C DATA IMACH( 1) / 11 / C DATA IMACH( 2) / 12 / C DATA IMACH( 3) / 8 / C DATA IMACH( 4) / 10 / C DATA IMACH( 5) / 16 / C DATA IMACH( 6) / 2 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 15 / C DATA IMACH( 9) /32767 / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 63 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 63 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 0 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 24 / C DATA IMACH( 6) / 3 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 23 / C DATA IMACH( 9) / 8388607 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 23 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 38 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 43 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / O377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 63 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / Z7FFFFFFF / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 63 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 63 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE INTERDATA 8/32 C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER. C C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 6 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / Z'7FFFFFFF' / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 62 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 62 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 5 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / "377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 54 / C DATA IMACH(15) / -101 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 5 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / "377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 62 / C DATA IMACH(15) / -128 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 32-BIT INTEGER ARITHMETIC. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 56 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 16-BIT INTEGER ARITHMETIC. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 16 / C DATA IMACH( 6) / 2 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 15 / C DATA IMACH( 9) / 32767 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 56 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE PRIME 50 SERIES SYSTEMS C WTIH 32-BIT INTEGERS AND 64V MODE INSTRUCTIONS, C SUPPLIED BY IGOR BRAY. C C DATA IMACH( 1) / 1 / C DATA IMACH( 2) / 1 / C DATA IMACH( 3) / 2 / C DATA IMACH( 4) / 1 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / :17777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 23 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / +127 / C DATA IMACH(14) / 47 / C DATA IMACH(15) / -32895 / C DATA IMACH(16) / +32637 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000. C C DATA IMACH( 1) / 0 / C DATA IMACH( 2) / 0 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 0 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 1 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -125 / C DATA IMACH(13) / 128 / C DATA IMACH(14) / 53 / C DATA IMACH(15) / -1021 / C DATA IMACH(16) / 1024 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C NOTE THAT THE PUNCH UNIT, I1MACH(3), HAS BEEN SET TO 7 C WHICH IS APPROPRIATE FOR THE UNIVAC-FOR SYSTEM. C IF YOU HAVE THE UNIVAC-FTN SYSTEM, SET IT TO 1. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 6 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / O377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 60 / C DATA IMACH(15) /-1024 / C DATA IMACH(16) / 1023 /, SANITY/987/ C C MACHINE CONSTANTS FOR VAX. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 56 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C *** ISSUE STOP 775 IF ALL DATA STATEMENTS ARE COMMENTED... IF (SANITY .NE. 987) THEN * *** CHECK FOR AUTODOUBLE *** SMALL(2) = 0 RMACH = 1E13 IF (SMALL(2) .NE. 0) THEN * *** AUTODOUBLED *** IF ( (SMALL(1) .EQ. 1117925532 * .AND. SMALL(2) .EQ. -448790528) * .OR. (SMALL(2) .EQ. 1117925532 * .AND. SMALL(1) .EQ. -448790528)) THEN * *** IEEE *** IMACH(10) = 2 IMACH(14) = 53 IMACH(15) = -1021 IMACH(16) = 1024 ELSE IF ( SMALL(1) .EQ. -2065213935 * .AND. SMALL(2) .EQ. 10752) THEN * *** VAX WITH D_FLOATING *** IMACH(10) = 2 IMACH(14) = 56 IMACH(15) = -127 IMACH(16) = 127 ELSE IF ( SMALL(1) .EQ. 1267827943 * .AND. SMALL(2) .EQ. 704643072) THEN * *** IBM MAINFRAME *** IMACH(10) = 16 IMACH(14) = 14 IMACH(15) = -64 IMACH(16) = 63 ELSE WRITE(*,9010) STOP 777 END IF IMACH(11) = IMACH(14) IMACH(12) = IMACH(15) IMACH(13) = IMACH(16) ELSE RMACH = 1234567. IF (SMALL(1) .EQ. 1234613304) THEN * *** IEEE *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -125 IMACH(13) = 128 IMACH(14) = 53 IMACH(15) = -1021 IMACH(16) = 1024 SANITY = 987 ELSE IF (SMALL(1) .EQ. -1271379306) THEN * *** VAX *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -127 IMACH(13) = 127 IMACH(14) = 56 IMACH(15) = -127 IMACH(16) = 127 SANITY = 987 ELSE IF (SMALL(1) .EQ. 1175639687) THEN * *** IBM MAINFRAME *** IMACH(10) = 16 IMACH(11) = 6 IMACH(12) = -64 IMACH(13) = 63 IMACH(14) = 14 IMACH(15) = -64 IMACH(16) = 63 SANITY = 987 ELSE IF (SMALL(1) .EQ. 1251390520) THEN * *** CONVEX C-1 *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -128 IMACH(13) = 127 IMACH(14) = 53 IMACH(15) = -1024 IMACH(16) = 1023 SANITY = 987 ELSE * CRAY1 = 4617762693716115456 CRAY1 = 4617762 CRAY1 = 1000000*CRAY1 + 693716 CRAY1 = 1000000*CRAY1 + 115456 IF (SMALL(1) .NE. CRAY1) THEN WRITE(*,9020) STOP 777 END IF * *** CRAY 1, XMP, 2, AND 3 *** IMACH(1) = 5 IMACH(2) = 6 IMACH(3) = 102 IMACH(4) = 6 IMACH(5) = 64 IMACH(6) = 8 IMACH(7) = 2 IMACH(8) = 63 * IMACH(9) = 9223372036854775807 IMACH(9) = 9223372 IMACH(9) = 1000000*IMACH(9) + 36854 IMACH(9) = 1000000*IMACH(9) + 775807 IMACH(10) = 2 IMACH(11) = 47 IMACH(12) = -8189 IMACH(13) = 8190 IMACH(14) = 94 IMACH(15) = -8099 IMACH(16) = 8190 SANITY = 987 GO TO 10 END IF END IF IMACH( 1) = 5 IMACH( 2) = 6 IMACH( 3) = 7 IMACH( 4) = 6 IMACH( 5) = 32 IMACH( 6) = 4 IMACH( 7) = 2 IMACH( 8) = 31 IMACH( 9) = 2147483647 SANITY = 987 END IF C/6S C9010 FORMAT(/47H Adjust autodoubled I1MACH by uncommenting data/ C * 52H statements appropriate for your machine and setting/ C * 46H IMACH(I) = IMACH(I+3) for I = 11, 12, and 13.) C9020 FORMAT(/46H Adjust I1MACH by uncommenting data statements/ C * 30H appropriate for your machine.) C/7S 9010 FORMAT(/' Adjust autodoubled I1MACH by uncommenting data'/ * ' statements appropriate for your machine and setting'/ * ' IMACH(I) = IMACH(I+3) for I = 11, 12, and 13.') 9020 FORMAT(/' Adjust I1MACH by uncommenting data statements'/ * ' appropriate for your machine.') C/ 10 IF (I .LT. 1 .OR. I .GT. 16) GO TO 30 C I1MACH = IMACH(I) C/6S C/7S IF (I .EQ. 6) I1MACH = 1 C/ RETURN C 30 WRITE(*,*) 'I1MACH(I): I =',I,' is out of bounds.' C * CALL FDUMP C STOP C * /* C source for I1MACH -- remove the * in column 1 */ * /* Note that some values may need changing -- see the comments below. */ *#include *#include *#include *#include * *long i1mach_(long *i) *{ * switch(*i){ * case 1: return 5; /* standard input unit -- may need changing */ * case 2: return 6; /* standard output unit -- may need changing */ * case 3: return 7; /* standard punch unit -- may need changing */ * case 4: return 0; /* standard error unit -- may need changing */ * case 5: return 32; /* bits per integer -- may need changing */ * case 6: return 1; /* Fortran 77 value: 1 character */ * /* per character storage unit */ * case 7: return 2; /* base for integers -- may need changing */ * case 8: return 31; /* digits of integer base -- may need changing */ * case 9: return LONG_MAX; * case 10: return FLT_RADIX; * case 11: return FLT_MANT_DIG; * case 12: return FLT_MIN_EXP; * case 13: return FLT_MAX_EXP; * case 14: return DBL_MANT_DIG; * case 15: return DBL_MIN_EXP; * case 16: return DBL_MAX_EXP; * } * * fprintf(stderr, "invalid argument: i1mach(%ld)\n", *i); * exit(1); * return 0; /* for compilers that complain of missing return values */ * } END DOUBLE PRECISION FUNCTION D1MACH(I) INTEGER I C C DOUBLE-PRECISION MACHINE CONSTANTS C C D1MACH( 1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE. C C D1MACH( 2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. C C D1MACH( 3) = B**(-T), THE SMALLEST RELATIVE SPACING. C C D1MACH( 4) = B**(1-T), THE LARGEST RELATIVE SPACING. C C D1MACH( 5) = LOG10(B) C C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT, C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY C REMOVING THE C FROM COLUMN 1. C ON RARE MACHINES A STATIC STATEMENT MAY NEED TO BE ADDED. C (BUT PROBABLY MORE SYSTEMS PROHIBIT IT THAN REQUIRE IT.) C C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), ONE OF THE FIRST C TWO SETS OF CONSTANTS BELOW SHOULD BE APPROPRIATE. IF YOU DO NOT C KNOW WHICH SET TO USE, TRY BOTH AND SEE WHICH GIVES PLAUSIBLE C VALUES. C C WHERE POSSIBLE, DECIMAL, OCTAL OR HEXADECIMAL CONSTANTS ARE USED C TO SPECIFY THE CONSTANTS EXACTLY. SOMETIMES THIS REQUIRES USING C EQUIVALENT INTEGER ARRAYS. IF YOUR COMPILER USES HALF-WORD C INTEGERS BY DEFAULT (SOMETIMES CALLED INTEGER*2), YOU MAY NEED TO C CHANGE INTEGER TO INTEGER*4 OR OTHERWISE INSTRUCT YOUR COMPILER C TO USE FULL-WORD INTEGERS IN THE NEXT 5 DECLARATIONS. C C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *) C GIVE C SOURCE FOR D1MACH. C INTEGER SMALL(2) INTEGER LARGE(2) INTEGER RIGHT(2) INTEGER DIVER(2) INTEGER LOG10(2) INTEGER SC, CRAY1(38), J COMMON /D9MACH/ CRAY1 C/6S C/7S SAVE SMALL, LARGE, RIGHT, DIVER, LOG10, SC C/ DOUBLE PRECISION DMACH(5) C EQUIVALENCE (DMACH(1),SMALL(1)) EQUIVALENCE (DMACH(2),LARGE(1)) EQUIVALENCE (DMACH(3),RIGHT(1)) EQUIVALENCE (DMACH(4),DIVER(1)) EQUIVALENCE (DMACH(5),LOG10(1)) C C MACHINE CONSTANTS FOR BIG-ENDIAN IEEE ARITHMETIC (BINARY FORMAT) C MACHINES IN WHICH THE MOST SIGNIFICANT BYTE IS STORED FIRST, C SUCH AS THE AT&T 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. C SUN 3), AND MACHINES THAT USE SPARC, HP, OR IBM RISC CHIPS. C C DATA SMALL(1),SMALL(2) / 1048576, 0 / C DATA LARGE(1),LARGE(2) / 2146435071, -1 / C DATA RIGHT(1),RIGHT(2) / 1017118720, 0 / C DATA DIVER(1),DIVER(2) / 1018167296, 0 / C DATA LOG10(1),LOG10(2) / 1070810131, 1352628735 /, SC/987/ C C MACHINE CONSTANTS FOR LITTLE-ENDIAN (BINARY) IEEE ARITHMETIC C MACHINES IN WHICH THE LEAST SIGNIFICANT BYTE IS STORED FIRST, C E.G. IBM PCS AND OTHER MACHINES THAT USE INTEL 80X87 OR DEC C ALPHA CHIPS. C C DATA SMALL(1),SMALL(2) / 0, 1048576 / C DATA LARGE(1),LARGE(2) / -1, 2146435071 / C DATA RIGHT(1),RIGHT(2) / 0, 1017118720 / C DATA DIVER(1),DIVER(2) / 0, 1018167296 / C DATA LOG10(1),LOG10(2) / 1352628735, 1070810131 /, SC/987/ C C MACHINE CONSTANTS FOR AMDAHL MACHINES. C C DATA SMALL(1),SMALL(2) / 1048576, 0 / C DATA LARGE(1),LARGE(2) / 2147483647, -1 / C DATA RIGHT(1),RIGHT(2) / 856686592, 0 / C DATA DIVER(1),DIVER(2) / 873463808, 0 / C DATA LOG10(1),LOG10(2) / 1091781651, 1352628735 /, SC/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. C C DATA SMALL(1) / ZC00800000 / C DATA SMALL(2) / Z000000000 / C C DATA LARGE(1) / ZDFFFFFFFF / C DATA LARGE(2) / ZFFFFFFFFF / C C DATA RIGHT(1) / ZCC5800000 / C DATA RIGHT(2) / Z000000000 / C C DATA DIVER(1) / ZCC6800000 / C DATA DIVER(2) / Z000000000 / C C DATA LOG10(1) / ZD00E730E7 / C DATA LOG10(2) / ZC77800DC0 /, SC/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM. C C DATA SMALL(1) / O1771000000000000 / C DATA SMALL(2) / O0000000000000000 / C C DATA LARGE(1) / O0777777777777777 / C DATA LARGE(2) / O0007777777777777 / C C DATA RIGHT(1) / O1461000000000000 / C DATA RIGHT(2) / O0000000000000000 / C C DATA DIVER(1) / O1451000000000000 / C DATA DIVER(2) / O0000000000000000 / C C DATA LOG10(1) / O1157163034761674 / C DATA LOG10(2) / O0006677466732724 /, SC/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS. C C DATA SMALL(1) / O1771000000000000 / C DATA SMALL(2) / O7770000000000000 / C C DATA LARGE(1) / O0777777777777777 / C DATA LARGE(2) / O7777777777777777 / C C DATA RIGHT(1) / O1461000000000000 / C DATA RIGHT(2) / O0000000000000000 / C C DATA DIVER(1) / O1451000000000000 / C DATA DIVER(2) / O0000000000000000 / C C DATA LOG10(1) / O1157163034761674 / C DATA LOG10(2) / O0006677466732724 /, SC/987/ C C MACHINE CONSTANTS FOR FTN4 ON THE CDC 6000/7000 SERIES. C C DATA SMALL(1) / 00564000000000000000B / C DATA SMALL(2) / 00000000000000000000B / C C DATA LARGE(1) / 37757777777777777777B / C DATA LARGE(2) / 37157777777777777774B / C C DATA RIGHT(1) / 15624000000000000000B / C DATA RIGHT(2) / 00000000000000000000B / C C DATA DIVER(1) / 15634000000000000000B / C DATA DIVER(2) / 00000000000000000000B / C C DATA LOG10(1) / 17164642023241175717B / C DATA LOG10(2) / 16367571421742254654B /, SC/987/ C C MACHINE CONSTANTS FOR FTN5 ON THE CDC 6000/7000 SERIES. C C DATA SMALL(1) / O"00564000000000000000" / C DATA SMALL(2) / O"00000000000000000000" / C C DATA LARGE(1) / O"37757777777777777777" / C DATA LARGE(2) / O"37157777777777777774" / C C DATA RIGHT(1) / O"15624000000000000000" / C DATA RIGHT(2) / O"00000000000000000000" / C C DATA DIVER(1) / O"15634000000000000000" / C DATA DIVER(2) / O"00000000000000000000" / C C DATA LOG10(1) / O"17164642023241175717" / C DATA LOG10(2) / O"16367571421742254654" /, SC/987/ C C MACHINE CONSTANTS FOR CONVEX C-1 C C DATA SMALL(1),SMALL(2) / '00100000'X, '00000000'X / C DATA LARGE(1),LARGE(2) / '7FFFFFFF'X, 'FFFFFFFF'X / C DATA RIGHT(1),RIGHT(2) / '3CC00000'X, '00000000'X / C DATA DIVER(1),DIVER(2) / '3CD00000'X, '00000000'X / C DATA LOG10(1),LOG10(2) / '3FF34413'X, '509F79FF'X /, SC/987/ C C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3. C C DATA SMALL(1) / 201354000000000000000B / C DATA SMALL(2) / 000000000000000000000B / C C DATA LARGE(1) / 577767777777777777777B / C DATA LARGE(2) / 000007777777777777776B / C C DATA RIGHT(1) / 376434000000000000000B / C DATA RIGHT(2) / 000000000000000000000B / C C DATA DIVER(1) / 376444000000000000000B / C DATA DIVER(2) / 000000000000000000000B / C C DATA LOG10(1) / 377774642023241175717B / C DATA LOG10(2) / 000007571421742254654B /, SC/987/ C C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200 C C SMALL, LARGE, RIGHT, DIVER, LOG10 SHOULD BE DECLARED C INTEGER SMALL(4), LARGE(4), RIGHT(4), DIVER(4), LOG10(4) C C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING LINE - C STATIC DMACH(5) C C DATA SMALL/20K,3*0/,LARGE/77777K,3*177777K/ C DATA RIGHT/31420K,3*0/,DIVER/32020K,3*0/ C DATA LOG10/40423K,42023K,50237K,74776K/, SC/987/ C C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7 C C DATA SMALL(1),SMALL(2) / '20000000, '00000201 / C DATA LARGE(1),LARGE(2) / '37777777, '37777577 / C DATA RIGHT(1),RIGHT(2) / '20000000, '00000333 / C DATA DIVER(1),DIVER(2) / '20000000, '00000334 / C DATA LOG10(1),LOG10(2) / '23210115, '10237777 /, SC/987/ C C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C C DATA SMALL(1),SMALL(2) / O402400000000, O000000000000 / C DATA LARGE(1),LARGE(2) / O376777777777, O777777777777 / C DATA RIGHT(1),RIGHT(2) / O604400000000, O000000000000 / C DATA DIVER(1),DIVER(2) / O606400000000, O000000000000 / C DATA LOG10(1),LOG10(2) / O776464202324, O117571775714 /, SC/987/ C C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86. C C DATA SMALL(1),SMALL(2) / Z00100000, Z00000000 / C DATA LARGE(1),LARGE(2) / Z7FFFFFFF, ZFFFFFFFF / C DATA RIGHT(1),RIGHT(2) / Z33100000, Z00000000 / C DATA DIVER(1),DIVER(2) / Z34100000, Z00000000 / C DATA LOG10(1),LOG10(2) / Z41134413, Z509F79FF /, SC/987/ C C MACHINE CONSTANTS FOR THE INTERDATA 8/32 C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER. C C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S. C C DATA SMALL(1),SMALL(2) / Z'00100000', Z'00000000' / C DATA LARGE(1),LARGE(2) / Z'7EFFFFFF', Z'FFFFFFFF' / C DATA RIGHT(1),RIGHT(2) / Z'33100000', Z'00000000' / C DATA DIVER(1),DIVER(2) / Z'34100000', Z'00000000' / C DATA LOG10(1),LOG10(2) / Z'41134413', Z'509F79FF' /, SC/987/ C C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). C C DATA SMALL(1),SMALL(2) / "033400000000, "000000000000 / C DATA LARGE(1),LARGE(2) / "377777777777, "344777777777 / C DATA RIGHT(1),RIGHT(2) / "113400000000, "000000000000 / C DATA DIVER(1),DIVER(2) / "114400000000, "000000000000 / C DATA LOG10(1),LOG10(2) / "177464202324, "144117571776 /, SC/987/ C C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). C C DATA SMALL(1),SMALL(2) / "000400000000, "000000000000 / C DATA LARGE(1),LARGE(2) / "377777777777, "377777777777 / C DATA RIGHT(1),RIGHT(2) / "103400000000, "000000000000 / C DATA DIVER(1),DIVER(2) / "104400000000, "000000000000 / C DATA LOG10(1),LOG10(2) / "177464202324, "047674776746 /, SC/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C DATA SMALL(1),SMALL(2) / 8388608, 0 / C DATA LARGE(1),LARGE(2) / 2147483647, -1 / C DATA RIGHT(1),RIGHT(2) / 612368384, 0 / C DATA DIVER(1),DIVER(2) / 620756992, 0 / C DATA LOG10(1),LOG10(2) / 1067065498, -2063872008 /, SC/987/ C C DATA SMALL(1),SMALL(2) / O00040000000, O00000000000 / C DATA LARGE(1),LARGE(2) / O17777777777, O37777777777 / C DATA RIGHT(1),RIGHT(2) / O04440000000, O00000000000 / C DATA DIVER(1),DIVER(2) / O04500000000, O00000000000 / C DATA LOG10(1),LOG10(2) / O07746420232, O20476747770 /, SC/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C SMALL, LARGE, RIGHT, DIVER, LOG10 SHOULD BE DECLARED C INTEGER SMALL(4), LARGE(4), RIGHT(4), DIVER(4), LOG10(4) C C DATA SMALL(1),SMALL(2) / 128, 0 / C DATA SMALL(3),SMALL(4) / 0, 0 / C C DATA LARGE(1),LARGE(2) / 32767, -1 / C DATA LARGE(3),LARGE(4) / -1, -1 / C C DATA RIGHT(1),RIGHT(2) / 9344, 0 / C DATA RIGHT(3),RIGHT(4) / 0, 0 / C C DATA DIVER(1),DIVER(2) / 9472, 0 / C DATA DIVER(3),DIVER(4) / 0, 0 / C C DATA LOG10(1),LOG10(2) / 16282, 8346 / C DATA LOG10(3),LOG10(4) / -31493, -12296 /, SC/987/ C C DATA SMALL(1),SMALL(2) / O000200, O000000 / C DATA SMALL(3),SMALL(4) / O000000, O000000 / C C DATA LARGE(1),LARGE(2) / O077777, O177777 / C DATA LARGE(3),LARGE(4) / O177777, O177777 / C C DATA RIGHT(1),RIGHT(2) / O022200, O000000 / C DATA RIGHT(3),RIGHT(4) / O000000, O000000 / C C DATA DIVER(1),DIVER(2) / O022400, O000000 / C DATA DIVER(3),DIVER(4) / O000000, O000000 / C C DATA LOG10(1),LOG10(2) / O037632, O020232 / C DATA LOG10(3),LOG10(4) / O102373, O147770 /, SC/987/ C C MACHINE CONSTANTS FOR THE PRIME 50 SERIES SYSTEMS C WITH 32-BIT INTEGERS AND 64V MODE INSTRUCTIONS, C SUPPLIED BY IGOR BRAY. C C DATA SMALL(1),SMALL(2) / :10000000000, :00000100001 / C DATA LARGE(1),LARGE(2) / :17777777777, :37777677775 / C DATA RIGHT(1),RIGHT(2) / :10000000000, :00000000122 / C DATA DIVER(1),DIVER(2) / :10000000000, :00000000123 / C DATA LOG10(1),LOG10(2) / :11504046501, :07674600177 /, SC/987/ C C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000 C C DATA SMALL(1),SMALL(2) / $00000000, $00100000 / C DATA LARGE(1),LARGE(2) / $FFFFFFFF, $7FEFFFFF / C DATA RIGHT(1),RIGHT(2) / $00000000, $3CA00000 / C DATA DIVER(1),DIVER(2) / $00000000, $3CB00000 / C DATA LOG10(1),LOG10(2) / $509F79FF, $3FD34413 /, SC/987/ C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C DATA SMALL(1),SMALL(2) / O000040000000, O000000000000 / C DATA LARGE(1),LARGE(2) / O377777777777, O777777777777 / C DATA RIGHT(1),RIGHT(2) / O170540000000, O000000000000 / C DATA DIVER(1),DIVER(2) / O170640000000, O000000000000 / C DATA LOG10(1),LOG10(2) / O177746420232, O411757177572 /, SC/987/ C C MACHINE CONSTANTS FOR THE VAX UNIX F77 COMPILER C C DATA SMALL(1),SMALL(2) / 128, 0 / C DATA LARGE(1),LARGE(2) / -32769, -1 / C DATA RIGHT(1),RIGHT(2) / 9344, 0 / C DATA DIVER(1),DIVER(2) / 9472, 0 / C DATA LOG10(1),LOG10(2) / 546979738, -805796613 /, SC/987/ C C MACHINE CONSTANTS FOR THE VAX-11 WITH C FORTRAN IV-PLUS COMPILER C C DATA SMALL(1),SMALL(2) / Z00000080, Z00000000 / C DATA LARGE(1),LARGE(2) / ZFFFF7FFF, ZFFFFFFFF / C DATA RIGHT(1),RIGHT(2) / Z00002480, Z00000000 / C DATA DIVER(1),DIVER(2) / Z00002500, Z00000000 / C DATA LOG10(1),LOG10(2) / Z209A3F9A, ZCFF884FB /, SC/987/ C C MACHINE CONSTANTS FOR VAX/VMS VERSION 2.2 C C DATA SMALL(1),SMALL(2) / '80'X, '0'X / C DATA LARGE(1),LARGE(2) / 'FFFF7FFF'X, 'FFFFFFFF'X / C DATA RIGHT(1),RIGHT(2) / '2480'X, '0'X / C DATA DIVER(1),DIVER(2) / '2500'X, '0'X / C DATA LOG10(1),LOG10(2) / '209A3F9A'X, 'CFF884FB'X /, SC/987/ C C *** ISSUE STOP 779 IF ALL DATA STATEMENTS ARE COMMENTED... IF (SC .NE. 987) THEN DMACH(1) = 1.D13 IF ( SMALL(1) .EQ. 1117925532 * .AND. SMALL(2) .EQ. -448790528) THEN * *** IEEE BIG ENDIAN *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2146435071 LARGE(2) = -1 RIGHT(1) = 1017118720 RIGHT(2) = 0 DIVER(1) = 1018167296 DIVER(2) = 0 LOG10(1) = 1070810131 LOG10(2) = 1352628735 ELSE IF ( SMALL(2) .EQ. 1117925532 * .AND. SMALL(1) .EQ. -448790528) THEN * *** IEEE LITTLE ENDIAN *** SMALL(2) = 1048576 SMALL(1) = 0 LARGE(2) = 2146435071 LARGE(1) = -1 RIGHT(2) = 1017118720 RIGHT(1) = 0 DIVER(2) = 1018167296 DIVER(1) = 0 LOG10(2) = 1070810131 LOG10(1) = 1352628735 ELSE IF ( SMALL(1) .EQ. -2065213935 * .AND. SMALL(2) .EQ. 10752) THEN * *** VAX WITH D_FLOATING *** SMALL(1) = 128 SMALL(2) = 0 LARGE(1) = -32769 LARGE(2) = -1 RIGHT(1) = 9344 RIGHT(2) = 0 DIVER(1) = 9472 DIVER(2) = 0 LOG10(1) = 546979738 LOG10(2) = -805796613 ELSE IF ( SMALL(1) .EQ. 1267827943 * .AND. SMALL(2) .EQ. 704643072) THEN * *** IBM MAINFRAME *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2147483647 LARGE(2) = -1 RIGHT(1) = 856686592 RIGHT(2) = 0 DIVER(1) = 873463808 DIVER(2) = 0 LOG10(1) = 1091781651 LOG10(2) = 1352628735 ELSE IF ( SMALL(1) .EQ. 1120022684 * .AND. SMALL(2) .EQ. -448790528) THEN * *** CONVEX C-1 *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2147483647 LARGE(2) = -1 RIGHT(1) = 1019215872 RIGHT(2) = 0 DIVER(1) = 1020264448 DIVER(2) = 0 LOG10(1) = 1072907283 LOG10(2) = 1352628735 ELSE IF ( SMALL(1) .EQ. 815547074 * .AND. SMALL(2) .EQ. 58688) THEN * *** VAX G-FLOATING *** SMALL(1) = 16 SMALL(2) = 0 LARGE(1) = -32769 LARGE(2) = -1 RIGHT(1) = 15552 RIGHT(2) = 0 DIVER(1) = 15568 DIVER(2) = 0 LOG10(1) = 1142112243 LOG10(2) = 2046775455 ELSE DMACH(2) = 1.D27 + 1 DMACH(3) = 1.D27 LARGE(2) = LARGE(2) - RIGHT(2) IF (LARGE(2) .EQ. 64 .AND. SMALL(2) .EQ. 0) THEN CRAY1(1) = 67291416 DO 10 J = 1, 20 10 CRAY1(J+1) = CRAY1(J) + CRAY1(J) CRAY1(22) = CRAY1(21) + 321322 DO 20 J = 22, 37 20 CRAY1(J+1) = CRAY1(J) + CRAY1(J) IF (CRAY1(38) .EQ. SMALL(1)) THEN * *** CRAY *** * SMALL(1) = 2332160919536140288 SMALL(1) = 2332160 SMALL(1) = 1000000*SMALL(1) + 919536 SMALL(1) = 1000000*SMALL(1) + 140288 SMALL(2) = 0 * LARGE(1) = 6917247552664371199 LARGE(1) = 6917247 LARGE(1) = 1000000*LARGE(1) + 552664 LARGE(1) = 1000000*LARGE(1) + 371199 * LARGE(2) = 281474976710654 LARGE(2) = 28147497 LARGE(2) = 10000000*LARGE(2) + 6710654 * RIGHT(1) = 4585649583081652224 RIGHT(1) = 4585649 RIGHT(1) = 1000000*RIGHT(1) + 583081 RIGHT(1) = 1000000*RIGHT(1) + 652224 RIGHT(2) = 0 * DIVER(1) = 4585931058058362880 DIVER(1) = 4585931 DIVER(1) = 1000000*DIVER(1) + 058058 DIVER(1) = 1000000*DIVER(1) + 362880 DIVER(2) = 0 * LOG10(1) = 4611574008272714703 LOG10(1) = 4611574 LOG10(1) = 1000000*LOG10(1) + 8272 LOG10(1) = 1000000*LOG10(1) + 714703 * LOG10(2) = 272234615232940 LOG10(2) = 27223461 LOG10(2) = 10000000*LOG10(2) + 5232940 ELSE WRITE(*,9000) STOP 779 END IF ELSE WRITE(*,9000) STOP 779 END IF END IF SC = 987 END IF C C *** ISSUE STOP 778 IF ALL DATA STATEMENTS ARE OBVIOUSLY WRONG... IF (DMACH(4) .GE. 1.0D0) STOP 778 *C/6S *C IF (I .LT. 1 .OR. I .GT. 5) *C 1 CALL SETERR(24HD1MACH - I OUT OF BOUNDS,24,1,2) *C/7S * IF (I .LT. 1 .OR. I .GT. 5) * 1 CALL SETERR('D1MACH - I OUT OF BOUNDS',24,1,2) *C/ IF (I .LT. 1 .OR. I .GT. 5) THEN WRITE(*,*) 'D1MACH(I): I =',I,' is out of bounds.' STOP END IF D1MACH = DMACH(I) RETURN C/6S C9000 FORMAT(/46H Adjust D1MACH by uncommenting data statements/ C *30H appropriate for your machine.) C/7S 9000 FORMAT(/' Adjust D1MACH by uncommenting data statements'/ *' appropriate for your machine.') C/ C * /* C source for D1MACH -- remove the * in column 1 */ *#include *#include *#include * *double d1mach_(long *i) *{ * switch(*i){ * case 1: return DBL_MIN; * case 2: return DBL_MAX; * case 3: return DBL_EPSILON/FLT_RADIX; * case 4: return DBL_EPSILON; * case 5: return log10(FLT_RADIX); * } * * fprintf(stderr, "invalid argument: d1mach(%ld)\n", *i); * exit(1); * return 0; /* for compilers that complain of missing return values */ * } END SHAR_EOF fi # end of overwriting check if test -f 'src.f' then echo shar: will not over-write existing file "'src.f'" else cat << \SHAR_EOF > 'src.f' SUBROUTINE VLUGR2 (NPDE, T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, + MNTR) C C======================================================================= C Ccc PURPOSE: C========== C This code solves systems of PDEs of the type C F(t,x,y,U,Ut,Ux,Uy,Uxx,Uxy,Uyy)=0 C with boundary conditions C B(t,x,y,U,Ut,Ux,Uy)=0 C and initial values C U(t0,x,y)=U0 C on a domain bounded by right-angled polygons. C C In space Local Uniform Grid Refinement is applied to resolve local C sharp gradients in the solution. For the time integration the C implicit BDF2 method is used with variable stepsizes. C Although time-independent and hyperbolic PDEs fit into the problem C class, it should be observed that VLUGR2 is tuned for time-dependent C parabolic PDEs (see below `HOW TO REPLACE MODULES' and the part on C INCLUDEd files for the (non)linear solvers). C C C Ccc PARAMETER SPECIFICATION: C========================== INTEGER LENIWK INTEGER NPDE, INFO(*), LENRWK, IWK(LENIWK), LENLWK, MNTR LOGICAL LWK(LENLWK) DOUBLE PRECISION T, TOUT, DT, XL, YL, XR, YU, DX, DY, TOLS, TOLT, + RINFO(*), RWK(LENRWK) C Ccc LANGUAGE: FORTRAN 77 C=========== C Ccc TYPE: Single precision C======= C Ccc REFERENCE: C============ C VLUGR2: A Vectorizable Adaptive Grid Solver for PDEs in 2D C J.G. Blom, R.A. Trompert, and J.G. Verwer, C Report NM-R9403, CWI, Amsterdam. C (to appear in ACM TOMS) C C C Ccc PARAMETER DESCRIPTION: C======================== C NPDE : IN. # PDE components. C T : INOUT. Current value of time variable C IN: If this is the first call the initial time C OUT: Time to which PDE has been integrated C TOUT : IN. Time point at which solution is desired C DT : INOUT. C IN: If this is the first call the initial time stepsize C OUT: Stepsize for next time step C XL : IN. If this is the first call and INFO(3) = 0 C X-coordinate of lowerleft corner of rectangle C YL : IN. If this is the first call and INFO(3) = 0 C Y-coordinate of lowerleft corner of rectangle C XR : IN. If this is the first call and INFO(3) = 0 C X-coordinate of upperright corner of rectangle C YU : IN. If this is the first call and INFO(3) = 0 C Y-coordinate of upperright corner of rectangle C DX : IN. If this is the first call and INFO(3) = 0 C Cell width in X-direction of base grid C DY : IN. If this is the first call and INFO(3) = 0 C Cell width in Y-direction of base grid C TOLS : IN. Space tolerance C TOLT : IN. Time tolerance C INFO : IN. If INFO(1)=0, default parameters are used, otherwise C RINFO : IN. they should be specified in INFO and RINFO array C (for description see below) C RWK : WORK. (LENRWK) C LENRWK : IN. Dimension of RWK. (6.NPDE for VLUGR2)+: C Let NPTS be the max. # points on a grid level and C NPTSA the average # points over all grid levels. C Then LENRWK should be: C MAXLEV=1: 3.NPTS.NPDE+2.NPTS+9.NPTS.NPDE + LSSWRK C LSSWRK: C ( INFO(4)=0 C | 18.NPDE.NPTS.NPDE C !:INFO(4)=10 C 9.NPDE.NPTS.NPDE + C (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=11 C | 9.NPDE.NPTS.NPDE + C (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=12 C | 9.NPDE.NPTS.NPDE + C (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=13 C | 9.NPDE.NPTS.NPDE + C (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=20 C | (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=21 C | (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=22 C | (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=23 C | (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C ) C (default: MAXLR = 5, MAXL = 20) C Indication of the length for a maximum grid level C MAXLEV (default value MAXLEV=3): C 5.NPTS.NPDE.MAXLEV+(2+9.NPDE).NPTS + LSSWRK C IWK : WORK. (LENIWK) C LENIWK : IN. Dimension of IWK. (8.MAXLEV+3 for VLUGR2)+: C MAXLEV=1: 16.NPTS C Indication of the length for a maximum grid level MAXLEV, C 5.NPTSA.MAXLEV+5.NPTS + C ( INFO(4)=0| 9.NPTS |: INFO(4)<20| 6.NPTS ) C LWK : WORK. (LENLWK) C LENLWK : IN. Dimension of LWK. Indication of the length C 2.NPTS C MNTR : INOUT. Monitor of VLUGR2 C IN: State of integration C 0. First call C 1. Continuation call C OUT: Error return flag C 1. OK C -1. Workspace too small C -2. Time step size too small C -10. COMMON to keep the statistics is too small C C C Ccc HOW TO USE: Default case C=========================== C C 3 problem defining routines should be specified C C----------------------------------------------------------------------- C C SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE C DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C C SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, C + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE C DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), C + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), C + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), C + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C----------------------------------------------------------------------- C C SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, C + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) C DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), C + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), C + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C----------------------------------------------------------------------- C C C Ccc HOW TO USE: Extra's C====================== C C If INFO(1) <> 0 a number of parameters can be specified in INFO and C RINFO that are described below. The parenthesized value is the C default value. C C INFO(2) : MAXLEV (3) C maximum # grid levels allowed C INFO(3) : RCTDOM (0) C If RCTDOM=0 the initial domain is a rectangle C otherwise the user should specify a subroutine C INIDOM to define the initial grid (see below) C INFO(4) : LINSYS (0) C Linear system solver in use C 0: BiCGStab + ILU C 10: GCRO + Block-diagonal preconditioning C 11: GCRO + Block-diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 12: GCRO + Diagonal preconditioning C 13: GCRO + Diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 20, 21, 22, 23 as 10, 11, 12, 13 but matrix-free C INFO(5) : LUNPDS (0) C Logical Unit # of file for information on the C integration history. If 0, only global information C will be written on standard output. C INFO(6) : LUNNLS (0) C Logical Unit # of file for information on the C Newton process. If 0, no information will be C written. C INFO(7) : LUNLSS (0) C Logical Unit # of file for information on the C linear system solver. If 0, no information will be C written. C C RINFO(1) : DTMIN (0.0) C minimum time stepsize allowed C RINFO(2) : DTMAX (TOUT-T) C maximum time stepsize allowed C RINFO(3) : UMAX ((1.0)) C approx. max. value of the PDE solution components. C Used for scaling purposes C RINFO(3+NPDE) : SPCWGT ((1.0)) C weigthing factor used in the space monitor to C indicate the relative importance of a PDE C component on the space monitor C RINFO(3+2.NPDE) : TIMWGT ((1.0)) C weigthing factor used in the time monitor to C indicate the relative importance of a PDE C component on the time monitor C C C C After each successful time step a subroutine MONITR is called. C Default is an empty body, but it can be overloaded with C----------------------------------------------------------------------- C C SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, C + LGRID, ISTRUC, LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) C DOUBLE PRECISION T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Control after a successful time step. The solution can be printed, C plotted or compared with the exact solution. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C DT : IN. Current time step size C DTNEW : IN. Time step size for next time step C XL : IN. X-coordinate of lowerleft corner of (virtual) domain C YL : IN. Y-coordinate of lowerleft corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C C----------------------------------------------------------------------- C C C C To force grid refinement at a specific point in space and time and C on a specific level, one can overload the routine CHSPCM with C C----------------------------------------------------------------------- C C SUBROUTINE CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U, SPCMON, TOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LEVEL, NPTS, NPDE C DOUBLE PRECISION T, X(NPTS), Y(NPTS), U(NPTS,NPDE), SPCMON(NPTS), C + TOL C Ccc PURPOSE: C Force grid refinement. C If for a node IPT SPCMON(IPT) > TOL the 16 surrounding cells will be C refined. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C LEVEL : IN. Current grid level C NPTS : IN. Number of grid points at this level C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C NPDE : IN. Number of PDE components C U : IN. Array of PDE components for the gridpoints C SPCMON : INOUT. C IN: Space monitor values as determined by VLUGR2 C OUT: Changed to a value > TOL where refinement is required C TOL : IN. Tolerance with which SPCMON will be compared C C----------------------------------------------------------------------- C C C C If the initial domain is not rectangular one should specify the C initial grid via the function INIDOM C C----------------------------------------------------------------------- C C LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, C + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), C + LLBND(0:*), ILBND(*), LBND(*) C DOUBLE PRECISION XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define initial domain. NB. Boundaries should consist of as many points C as are necessary to employ second-order space discretization, i.e., C a boundary enclosing the internal part of the domain should not C include less than 3 grid points including the corners. If Neumann C boundaries are used the minimum is 4 since otherwise the Jacobian C matrix will be singular. C C A (virtual) rectangle is placed upon the (irregular) domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise, C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C XR : IN. X-coordinate of upper-right point of virtual rectangle C YU : IN. Y-coordinate of upper-right point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C C----------------------------------------------------------------------- C C C C To store the exact partial derivatives of the residual F with respect C to (the derivatives of) U. C C----------------------------------------------------------------------- C C SUBROUTINE DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, C + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, C + ABSTOL, DEL, WORK, C + FU, FUX, FUY, FUXX, FUXY, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) C DOUBLE PRECISION F(NPTS,NPDE), T, X(NPTS), Y(NPTS), U(NPTS,NPDE), C + A0, DT, DX, DY, UIB(*), C + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), C + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), C + ABSTOL(NPDE), DEL(NPTS), WORK(2*NPTS*NPDE), C + FU(NPTS,NPDE,NPDE), FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), C + FUXX(NPTS,NPDE,NPDE),FUXY(NPTS,NPDE,NPDE),FUYY(NPTS,NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUXY : OUT. dF(Uxy)dUxy C FUYY : OUT. dF(Uyy)dUyy C C----------------------------------------------------------------------- C C C Ccc `HANDY' ROUTINES: C=================== C C VLUGR2 contains some routines that facilitate the use of the C data structure. C C C C To make a printout of the domain one has defined with INIDOM one C can call PRDOM C C----------------------------------------------------------------------- C C SUBROUTINE PRDOM (LROW, IROW, ICOL, LLBND, ILBND, LBND, C + IDOM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LROW(0:*), IROW(*), ICOL(*), C + LLBND(0:*), ILBND(*), LBND(*), IDOM(0:120), NX, NY C Ccc PURPOSE: C Print domain. Internal points are printed as .., external points XX, C physical boundary points their ILBND value and internal boundary C as II. C Ccc PARAMETER DESCRIPTION: C See INIDOM C C----------------------------------------------------------------------- C C C C To get the X- and Y-coordinates corresponding with the grid points C C----------------------------------------------------------------------- C C SUBROUTINE SETXY (XL, YL, DX, DY, LROW, IROW, ICOL, X, Y) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LROW(0:*), IROW(*), ICOL(*) C DOUBLE PRECISION XL, YL, DX, DY, X(*), Y(*) C Ccc PURPOSE: C Store X- and Y-coordinates of the grid points, rowwise. C Ccc PARAMETER DESCRIPTION: C See MONITR. C NB. DX = DXB.2^(1-LEVEL); the same for DY. C C----------------------------------------------------------------------- C C C C To print the solution and the corresponding coordinate values at all C grid levels C C----------------------------------------------------------------------- C C SUBROUTINE PRSOL (LUN, T, NPDE, XL, YL, DXB, DYB, LGRID, ISTRUC, C + LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LUN, NPDE, LGRID(0:*), ISTRUC(*), LSOL(*) C DOUBLE PRECISION T, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Print solution and coordinate values at all grid levels. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C NPDE : IN. # PDE components C Others see MONITR. C C----------------------------------------------------------------------- C C C C To write to file the (interpolated) solution values on a uniform grid C of a specified grid level and the maximum grid level used in each C point C C----------------------------------------------------------------------- C C SUBROUTINE WRUNI (LUNS, LUNG, UNILEV, C + T, NPDE, XL, YL, DXB, DYB, NXB, NYB, C + LGRID, ISTRUC, LSOL, SOL, UNIFRM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LUNS, LUNG, UNILEV, C + NPDE, NXB, NYB, LGRID(0:*), ISTRUC(*), LSOL(*), NX, NY C DOUBLE PRECISION T, XL, YL, DXB, DYB, SOL(*), C + UNIFRM(0:NX,0:NY,NPDE) C Ccc PURPOSE: C Write (interpolated) solution values at grid level UNILEV to file C LUNS. C Write maximum gridlevel used in each point to file LUNG. C NB. The data will not be correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc PARAMETER DESCRIPTION: C LUNS : IN. Logical unit number of solution file C LUNG : IN. Logical unit number of grid level file C UNILEV : IN. Maximum grid level to be used to generate the data C NPDE : IN. # PDE components C NXB,NYB: IN. # gridcells in X- and Y-direction, resp., on base grid C UNIFRM : WORK. (Interpolated) solution on level UNILEV / max. grid C level used. C NX, NY : IN. # gridcells in X- and Y-direction, resp., on grid of C of level UNILEV C Others see MONITR. C C----------------------------------------------------------------------- C C C C To dump all necessary information for a restart on file. C C----------------------------------------------------------------------- C C SUBROUTINE DUMP (LUNDMP, RWK, IWK) C C----------------------------------------------------------------------- C C C C C To read all necessary information for a restart from the dump file. C C----------------------------------------------------------------------- C C SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C C C Ccc HOW TO REPLACE MODULES: C========================= C Ccc Space discretization. C Replace the computation of the derivatives in subroutine DERIVS by the C desired discretization. C If the new space discretization uses a larger stencil than the C implemented one (internally a central 9-point stencil and at the C boundary a 3-point one sided), one should use as linear system C solver the matrix-free GCRO variant (INFO(4)=20,21,22 or 23). C Moreover, one should check whether the required grid points are C available on the current grid level, e.g. using the x- and y- C coordinates of the grid points (see SETXY above). C Note that the refinement strategy results in subgrids of at least C 5 points in every coordinate direction. C Ccc Linear system solver. C If the new solver is matrix-free: C rewrite the body of subroutine GCRO using the routines C MVDIFF to compute y=Ax C If the (block-)diagonal preconditioner is wanted, use the routine C BCKBDI to compute w=P^(-1).v C (copy the call used in GCRO and replace the vector arguments for C x, y, v, w, and, optionally for the workspace needed) C otherwise, if the ILU preconditioner is to be used: C rewrite the body of subroutine BICGST using the routines C BCKSLV to compute v=P^(-1).v and C MVDIAG to compute y=Ax C (copy the call used in BICGST and replace the vector argument(s)). C if the (block-)diagonal preconditioner is to be used: C rewrite the body of subroutine GGCRO using the routines C BCKBDI to compute w=P^(-1).v and C MVDIAG to compute y=Ax C C If a user-made preconditioner is wanted, one should adapt INTGRG C (when the Jacobian is used) or INTGRC (for a matrix-free solver). C The calls to JACBD and PINIT, resp. should be replaced by calls to C the routine that computes the preconditioner. In GGCRO and GCRO, C resp., one should call one's own routine to compute w=P^(-1).v C instead of BCKBDI. C C If extra workspace is needed, the easiest way is to declare it in C the subroutine. C C C Ccc DESCRIPTION OF THE SETUP IN THE WORKARRAYS: C============================================= C Ccc Datastructure for the solution at a grid level C The solution is stored rowwise, one component vector after the other C in C DOUBLE PRECISION U(0:NPTS*NPDE) C The element U(0) is added because pointers to non-existing nodes point C to 0. C Ccc Solutions from 3 different time levels have to be saved. For Tn-1 C only the injected one (U); for Tn the original solution (S) belonging C to a specific grid, the injected solution (U), and the injected C solution at the Tn+1 grid; and for Tn+1 the solution (S) and when C finished the injected solution (U). C C The real work storage is set up as follows: C First some method related arrays of length NPDE each: SPCTOL, TIMWGT, C RELTOL, ABSTOL, RTOL, ATOL. C From 6*NPDE+1 work storage for PDESOL where the array RWK starts with C index 1. From there it will contain the following items: C First the X- and Y- coordinates for the base grid: X(NPTSB), Y(NPTSB) C From 2*NPTSB+1 the solutions are stored: C First for Tn-1: U_i for i=LSGNM1(0),(-1),1 C Next for Tn: S_i for i=1,...,LSGN(0) C U_i for i=LSGN(0)-1,(-1),1 C Next for Tn+1: S_1 C U_i(Tn) at grid LSGNP1(i) I C S_i(Tn+1) I for i=2,...,LEVEL C when refinement is finished: C U_i(Tn+1) for i=LSGNP1(0)-1,(-1),1 C After the solutions work storage is available for the (interpolated) C solutions from Tn-1 at the current grid, the current X- and C Y-coordinates, if necessary the (interpolated) solution values at the C internal boundary, the initial solution at Tn+1 at the current grid C (since the not updated solution of the old time level has to be used), C and for the derivatives and the linear solver. C Ccc If the linear solver uses a Jacobian (INFO(4)<20) the Jacobian is C stored as a block 9-diagonal matrix. C If a second-order discretization is used at the boundary the extra C information will be stored in one of the `mixed-derivative blocks'. C Addressing is done with the use of pointers to off 3-diagonal blocks C (cf. LLDG and LUDG below). C If an ILU preconditioner is used (INFO(4)=0) the second-order C discretization at the boundaries is replaced by a first order C discretization, since a true block 9-diagonal matrix is required C to apply the hyperplane method. C The same block structure will be used as for the Jacobian. C C C Ccc Datastructure for the grid at the current grid level C A (virtual) rectangle is placed upon the irregular domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored, rowwise. C C INTEGER ISTRUC(0:*) C Ccc ISTRUC contains the following arrays: C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : (NPTS) C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : (NPTS) C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C C The next 2 arrays are only stored if INFO(4) < 20 C They are used for the Jacobian structure (and possibly its ILU) C LLDG : (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LUDG : (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LUDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C C The next 4 arrays are only stored if INFO(4) = 0 C They are used to hold the data dependency lists C for the ILU factorization and the forward, resp. backward C sweep of the backsolve C LSL : (NPTS) C LSL(ISLPT): pointer to node in actual grid C LLSL : (0:LLSL(0)) C LLSL(0) = # independent data dependency lists in ILU C factorization and forward sweep C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : (NPTS) C LSU(ISLPT): pointer to node in actual grid C LLSU : (0:LLSU(0)) C LLSU(0) = # independent data dependency lists in backward C sweep C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C C For the base grid the complete datastructure is saved (including C the last 6 arrays because of restart), for higher C level grids only the first 3 arrays LROW, IROW and ICOL. C C Pointers to the specific arrays in ISTRUC are obtained by C LLROW = 0 C NROWS = ISTRUC(LLROW) C NPTS = ISTRUC(LLROW+NROWS+1)-1 C LIROW = LLROW+NROWS+2 C LICOL = LIROW+NROWS C LLLBND = LICOL+NPTS C NBNDS = ISTRUC(LLLBND) C NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 C NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 C LILBND = LLLBND+NBNDS+3 C LLBNDP = LILBND+NBNDS C LLBLW = LLBNDP+NBIPTS C LLABV = LLBLW+NPTS C LIWK = LLABV+NPTS C C LLLDG = LIWK C LLUDG = LLLDG+NPTS*3 C LIWK = LLUDG+NPTS*3 C C LLSLP = LIWK C LLLSL = LLSLP+NPTS C LLSUP = LLLSL+ISTRUC(LLLSL)+1 C LLLSU = LLSUP+NPTS C LIWK = LLLSU+ISTRUC(LLLSU)+1 C C Ccc All grids from 3 different time levels have to be saved C The integer work storage is set up as follows: C LSGNM1 : (0:MAXLEV) C LSGNM1(0) = max. grid level used at Tn-1 C LSGNM1(1): pointer to base grid structure ISTRUC C LSGNM1(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn-1 C LSGN : (0:MAXLEV) C LSGN(0) = max. grid level used at Tn C LSGN(1): pointer to base grid structure ISTRUC C LSGN(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn C LSGNP1 : (0:MAXLEV) C LSGNP1(0) = max. grid level used at Tn+1 C LSGNP1(1): pointer to base grid structure ISTRUC C LSGNP1(2): pointer after grid structure of max. refinement C level for time Tn C LSGNP1(LEVEL): pointer to augmented grid structure C (LROW, IROW, ICOL, LLBND, ILBND, LBND) C of refinement level LEVEL for time Tn+1 C LSGNP1(LEVEL+1): pointer to grid structure ISTRUC of C refinement level LEVEL+1 for time Tn+1 C LSUNM1 : (MAXLEV) C LSUNM1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn-1 C LSSN : (MAXLEV) C LSSN(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn C LSUN : (MAXLEV) C LSUN(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn C LSSNP1 : (MAXLEV) C LSSNP1(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn+1 C LSUNP1 : (MAXLEV) C LSUNP1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn+1 C From 8*MAXLEV+4 the grids are stored, in PDESOL the array IWK starts C with the grids at index 1. C Storage order: C First ISTRUC for the base grid C Next for Tn-1: (LROW, IROW, ICOL)_i for i=2,...,LSGNM1(0) C Next for Tn: (LROW, IROW, ICOL)_i for i=2,...,LSGN(0) C Next for Tn+1: (LROW, IROW, ICOL, LLBND, ILBND, LBND)_i for C i=2,...,LEVEL C ISTRUC_i for i=LEVEL+1 C After the grids work storage is available for domain flags and C the linear solver C C======================================================================= C C IMPORTANT: C ========= C C The INCLUDEd file CMNCMMACH contains machine numbers that C are set in the routine MACNUM by calling the appropriate functions C of the BLAS library. If I1MACH and D1MACH of the file blas.f are used, C the functions should be altered for the particular machine used (cf. C comment in I1MACH and D1MACH). C Ccc CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number > 0.0 -I C INTEGER LUNOUT, LUNERR C DOUBLE PRECISION UROUND, XMIN C COMMON /IMACH/ LUNOUT, LUNERR C COMMON /RMACH/ UROUND, XMIN C SAVE /IMACH/, /RMACH/ C C C C The INCLUDE files PARNEWTON, PARBICGSTAB, and PARGCRO contain the C method parameters for the corresponding (non)linear solvers. These C parameters may be changed by the user. C Ccc PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations. C NB. If MAXNIT > 20 the include file CMNSTATS C == should also be changed. C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW C INTEGER MAXNIT, MAXJAC C DOUBLE PRECISION TOLNEW C PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C Ccc PARBICGSTAB C C Parameters for linear system solver BiCGStab C MAXLIT : Max. number of BiCGStab iterations C TOLLSB : Tolerance for linear system solver: C || P^(-1).residual ||_w < TOLLSB/2^NIT C INTEGER MAXLIT C DOUBLE PRECISION TOLLSB C PARAMETER (MAXLIT = 100, TOLLSB = TOLNEW/10) C Ccc PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver C || P^(-1).residual ||_w < TOLLSC/2^NIT C INTEGER IDIAGP, NRRMAX, MAXLR, MAXL C DOUBLE PRECISION TOLLSC C PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (TOLLSC = TOLNEW/10) C COMMON /IGCRO/ IDIAGP C SAVE /IGCRO/ C C Note, that in the actual code the INCLUDE statements have been C replaced by C CCcc INCLUDE 'file' C ... code in file CC end INCLUDE 'file' C C So if one wishes to change the method parameters care should be taken C that it is done for all occurrences. C C======================================================================= C Ccc EXTERNALS USED: EXTERNAL ICOPY, INTGRB, INTGRC, INTGRG, IYPOC, PDESOL, RCOPY C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARBICGSTAB' C C PARBICGSTAB C C Parameters for linear system solver BiCGStab C MAXLIT : Max. number of BiCGStab iterations C TOLLSB : Tolerance for linear system solver INTEGER MAXLIT DOUBLE PRECISION TOLLSB PARAMETER (MAXLIT = 100, TOLLSB = TOLNEW/10) C C end INCLUDE 'PARBICGSTAB' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL DOUBLE PRECISION TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C C C----------------------------------------------------------------------- C INTEGER LSGNM1, LSGN, LSGNP1, LSUNM1, LSUN, LSUNP1, LSSN, LSSNP1, + LGNM1, LGN, LGNP1, LUNM1, LUN, LSN, LSNP1, + MAXLEV, LSPCTL, LTIMWT, LRELTL, LABSTL, LRTOL, LATOL, LSPCWT, + LUMAX, RCTDOM, LINSYS, I, I1, I2, IC, J, LRWK, LIWK, LIWKPN DOUBLE PRECISION DTMIN, DTMAX, TOL C CDIR$ NOVECTOR IF (MNTR .EQ. 1) THEN NPDE = NPDEW T = TW DT = DTW XL = XLW YL = YLW XR = XRW YU = YUW ENDIF C C Set machine numbers in /CMMACH/ CALL MACNUM C C Setup real work storage LSPCTL = 1 LTIMWT = LSPCTL+NPDE LRELTL = LTIMWT+NPDE LABSTL = LRELTL+NPDE LRTOL = LABSTL+NPDE LATOL = LRTOL +NPDE LRWKPS = LATOL +NPDE LSPCWT = LSPCTL LUMAX = LATOL C C Get User info IF (INFO(1) .EQ. 0) THEN MAXLEV = 3 RCTDOM = 0 LINSYS = 0 LUNPDS = 0 LUNNLS = 0 LUNLSS = 0 DTMIN = 0.0 DTMAX = TOUT - T DO 10 IC = 1, NPDE RWK(LUMAX-1 +IC) = 1.0 RWK(LSPCWT-1+IC) = 1.0 RWK(LTIMWT-1+IC) = 1.0 10 CONTINUE ELSE MAXLEV = INFO(2) IF (MAXLEV .EQ. 0) MAXLEV = 3 RCTDOM = INFO(3) IDIAGP = MOD(INFO(4),10) LINSYS = INFO(4)/10 LUNPDS = INFO(5) LUNNLS = INFO(6) LUNLSS = INFO(7) DTMIN = RINFO(1) DTMAX = RINFO(2) IF (DTMAX .EQ. 0.0) DTMAX = TOUT - T DO 20 IC = 1, NPDE RWK(LUMAX-1 +IC) = RINFO(2+IC) RWK(LSPCWT-1+IC) = RINFO(2+NPDE+IC) RWK(LTIMWT-1+IC) = RINFO(2+2*NPDE+IC) 20 CONTINUE ENDIF C C Store method arrays TOL = 1D-1*MIN(TOLT*TOLT,TOLS) DO 30 IC = 1, NPDE RWK(LSPCTL-1+IC) = RWK(LSPCWT-1+IC)/(RWK(LUMAX-1+IC)*TOLS) RWK(LRELTL-1+IC) = TOLT RWK(LABSTL-1+IC) = 0.01*RWK(LUMAX-1+IC)*TOLT RWK(LRTOL-1+IC) = TOL RWK(LATOL-1+IC) = 0.01*RWK(LUMAX-1+IC)*TOL 30 CONTINUE C C Setup integer work storage IF (MXCLEV .LT. MAXLEV) THEN WRITE(LUNERR,*) 'Arrays for the statistic are too small' WRITE(LUNERR,*) 'Either MAXLEV > 10 or MAXNIT > 20' WRITE(LUNERR,*) 'Adapt the parameter statements for /STATS/' MNTR = -10 RETURN ENDIF LSGNM1 = 1 LSGN = LSGNM1 + MAXLEV+1 LSGNP1 = LSGN + MAXLEV+1 LSUNM1 = LSGNP1 + MAXLEV+1 LSSN = LSUNM1 + MAXLEV LSUN = LSSN + MAXLEV LSSNP1 = LSUN + MAXLEV LSUNP1 = LSSNP1 + MAXLEV LIWKPN = LSUNP1 + MAXLEV IF (MNTR .EQ. 0) THEN C This is the first call, initialize pointer arrays and STATS common DO 50 I = 1, LIWKPN-1 IWK(I) = 1 50 CONTINUE NSTEPS = 0 NREJS = 0 DO 60 I = 1, MXCLEV NJACS(I) = 0 NRESID(I) = 0 NNIT(I) = 0 DO 70 J = 1, MXCNIT NLSIT(I,J) = 0 70 CONTINUE 60 CONTINUE ELSE IF (MAXLEV .GT. MAXLVW) THEN C MAXLEV larger than previous call; shift info in IWK array backwards IF (LENIWK .LT. LIWKPN+LIWKB) THEN WRITE(LUNERR,*) 'Integer work space too small, required:', + LIWKPN+LIWKB MNTR = -1 RETURN ENDIF CALL IYPOC (LIWKB, IWK(LIWKPS), IWK(LIWKPN)) LIWK = LIWKPS - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSUNP1)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSSNP1)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSUN)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSSN)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSUNM1)) LIWK = LIWK - MAXLVW-1 CALL IYPOC (MAXLVW+1, IWK(LIWK), IWK(LSGNP1)) LIWK = LIWK - MAXLVW-1 CALL IYPOC (MAXLVW+1, IWK(LIWK), IWK(LSGN)) ELSE IF (MAXLEV .LT. MAXLVW) THEN C MAXLEV smaller than previous call; shift info in IWK array forwards LGNM1 = 1 LGN = LGNM1 + MAXLVW+1 LGNP1 = LGN + MAXLVW+1 LUNM1 = LGNP1 + MAXLVW+1 LSN = LUNM1 + MAXLVW LUN = LSN + MAXLVW LSNP1 = LUN + MAXLVW IF (IWK(LGNM1) .GT. MAXLEV) THEN C Shift grid_n forwards to LGNM1(MAXLEV+1) I1 = IWK(LGN+2) I2 = IWK(LGNM1+MAXLEV+1) CALL ICOPY (LIWKB-I1, IWK(I1), IWK(I2)) DO 110 I = 2, IWK(LGN) IWK(LGN+I) = IWK(LGN+I) - (I1-I2) 110 CONTINUE LIWKB = LIWKB - (I1-I2) C Shift info from U_n-1(MAXLEV) forwards to LUNM1(LGNM1(0)) I1 = IWK(LUNM1-1+MAXLEV) I2 = IWK(LUNM1-1+IWK(LGNM1)) CALL RCOPY (LRWKB-I1, RWK(I1), RWK(I2)) DO 120 I = 1, MAXLEV IWK(LUNM1-1+I) = IWK(LUNM1-1+I) - (I1-I2) 120 CONTINUE DO 130 I = 1, IWK(LGN) IWK(LSN-1+I) = IWK(LSN-1+I) - (I1-I2) IWK(LUN-1+I) = IWK(LUN-1+I) - (I1-I2) 130 CONTINUE IWK(LSNP1) = IWK(LSNP1) - (I1-I2) LRWKB = LRWKB - (I1-I2) IWK(LGNM1) = MAXLEV ENDIF IF (IWK(LGN) .GT. MAXLEV) THEN LIWKB = IWK(LGN+MAXLEV+1) C Shift info from U_n(MAXLEV) forwards to LUN(LGN(0)) I1 = IWK(LUN-1+MAXLEV) I2 = IWK(LUN-1+IWK(LGN)) CALL RCOPY (LRWKB-I1, RWK(I1), RWK(I2)) DO 140 I = 1, MAXLEV IWK(LUN-1+I) = IWK(LUN-1+I) - (I1-I2) 140 CONTINUE IWK(LSNP1) = IWK(LSNP1) - (I1-I2) LRWKB = LRWKB - (I1-I2) IWK(LGN) = MAXLEV ENDIF C Shift pointer arrays and grids forwards CALL ICOPY (MAXLEV+1, IWK(LGN), IWK(LSGN)) CALL ICOPY (MAXLEV+1, IWK(LGNP1), IWK(LSGNP1)) CALL ICOPY (MAXLEV, IWK(LUNM1), IWK(LSUNM1)) CALL ICOPY (MAXLEV, IWK(LSN), IWK(LSSN)) CALL ICOPY (MAXLEV, IWK(LUN), IWK(LSUN)) IWK(LSSNP1) = IWK(LSNP1) CALL ICOPY (LIWKB, IWK(LIWKPS), IWK(LIWKPN)) ENDIF LIWKPS = LIWKPN IF (LUNPDS .NE. 0) THEN LUN = LUNPDS ELSE LUN = LUNOUT ENDIF C C Call main routine LRWK = LENRWK - LRWKPS+1 LIWK = LENIWK - LIWKPS+1 WRITE(LUN,*) 'Newton: MAXNIT, MAXJAC, TOLNEW:', + MAXNIT, MAXJAC, TOLNEW IF (LINSYS .EQ. 0) THEN C Lin. sys. solver = BiCGStab WRITE(LUN,*) 'Lin. solver BiCGStab+ILU: MAXLIT, TOLLSB:', + MAXLIT, TOLLSB CALL PDESOL (MAXLEV, NPDE, IWK(LSGNM1), IWK(LSGN), IWK(LSGNP1), + IWK(LSUNM1), IWK(LSSN), IWK(LSUN), IWK(LSSNP1), IWK(LSUNP1), + T, TOUT, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RWK(LRTOL), RWK(LATOL), RWK(LSPCTL), RWK(LTIMWT), + RWK(LRELTL), RWK(LABSTL), + LINSYS, INTGRB, + RWK(LRWKPS), LRWK, IWK(LIWKPS), LIWK, LWK, LENLWK, MNTR) ELSE IF (LINSYS .EQ. 1) THEN C Lin. sys. solver = GCRO IF (IDIAGP .LE. 1) THEN WRITE(LUN,*) 'Lin. solver GCRO + Block-diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ELSE WRITE(LUN,*) 'Lin. solver GCRO + Diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ENDIF CALL PDESOL (MAXLEV, NPDE, IWK(LSGNM1), IWK(LSGN), IWK(LSGNP1), + IWK(LSUNM1), IWK(LSSN), IWK(LSUN), IWK(LSSNP1), IWK(LSUNP1), + T, TOUT, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RWK(LRTOL), RWK(LATOL), RWK(LSPCTL), RWK(LTIMWT), + RWK(LRELTL), RWK(LABSTL), + LINSYS, INTGRG, + RWK(LRWKPS), LRWK, IWK(LIWKPS), LIWK, LWK, LENLWK, MNTR) ELSE C Lin. sys. solver = matrix-free GCRO IF (IDIAGP .LE. 1) THEN WRITE(LUN,*) 'Lin. solver matrix-free GCRO + Block-diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ELSE WRITE(LUN,*) 'Lin. solver matrix-free GCRO + Diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ENDIF CALL PDESOL (MAXLEV, NPDE, IWK(LSGNM1), IWK(LSGN), IWK(LSGNP1), + IWK(LSUNM1), IWK(LSSN), IWK(LSUN), IWK(LSSNP1), IWK(LSUNP1), + T, TOUT, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RWK(LRTOL), RWK(LATOL), RWK(LSPCTL), RWK(LTIMWT), + RWK(LRELTL), RWK(LABSTL), + LINSYS, INTGRC, + RWK(LRWKPS), LRWK, IWK(LIWKPS), LIWK, LWK, LENLWK, MNTR) ENDIF C C Give final statistics IF (MNTR .NE. 0) THEN WRITE(LUN,'(''Error exit PDESOL, MNTR='',I4)') MNTR ELSE MNTR = 1 ENDIF WRITE(LUN,*) WRITE(LUN,'(''Statistics:'')') WRITE(LUN,'('' # accepted timesteps ='', I5, + '', # rejected timesteps ='', I5)') NSTEPS, NREJS WRITE(LUN,'('' Level # Nit # Jacs # Res'')') DO 200 I = 1, MXCLEV IF (NNIT(I) .NE. 0) + WRITE(LUN,'(2I6,2I8)') I, NNIT(I), NJACS(I), NRESID(I) 200 CONTINUE WRITE(LUN,'('' Nit Level # Lin. sys. it'')') DO 210 J = 1, MXCNIT DO 210 I = 1, MXCLEV IF (NLSIT(I,J) .NE. 0) + WRITE(LUN,'(2I6,I12)') J, I, NLSIT(I,J) 210 CONTINUE C C Take care of all information needed to dump info to file MAXLVW = MAXLEV NPDEW = NPDE LRWKB = IWK(LSSNP1) TW = T TEW = TOUT DTW = DT XLW = XL YLW = YL XRW = XR YUW = YU RETURN END SUBROUTINE PDESOL (MAXLEV, NPDE, LSGNM1, LSGN, LSGNP1, + LSUNM1, LSSN, LSUN, LSSNP1, LSUNP1, + TN, TE, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RTOL, ATOL, SPCTOL, TIMWGT, RELTOL, ABSTOL, + LINSYS, INTGRT, + RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER MAXLEV, NPDE, + LSGNM1(0:MAXLEV), LSGN(0:MAXLEV), LSGNP1(0:MAXLEV), + LSUNM1(MAXLEV), LSSN(MAXLEV), LSUN(MAXLEV), + LSSNP1(MAXLEV), LSUNP1(MAXLEV), LINSYS, + LENRWK, IWK(LENIWK), LENLWK, IERR LOGICAL LWK(LENLWK) DOUBLE PRECISION TN, TE, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RTOL(NPDE), ATOL(NPDE), SPCTOL(NPDE), TIMWGT(NPDE), + RELTOL(NPDE), ABSTOL(NPDE), RWK(LENRWK) EXTERNAL INTGRT C Ccc PARAMETER DESCRIPTION: C MAXLEV : IN. Max. # grid levels allowed C NPDE : IN. # PDE components. C LSGNM1 : IN. (0:MAXLEV) C LSGNM1(0) = max. grid level used at Tn-1 C LSGNM1(1): pointer to base grid structure ISTRUC C LSGNM1(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn-1 C LSGN : IN. (0:MAXLEV) C LSGN(0) = max. grid level used at Tn C LSGN(1): pointer to base grid structure ISTRUC C LSGN(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn C LSGNP1 : IN. (0:MAXLEV) C LSGNP1(0) = max. grid level used at Tn+1 C LSGNP1(1): pointer to base grid structure ISTRUC C LSGNP1(2): pointer after grid structure of max. refinement C level for time Tn C LSGNP1(LEVEL): pointer to augmented grid structure C (LROW, IROW, ICOL, LLBND, ILBND, LBND) C of refinement level LEVEL for time Tn+1 C LSGNP1(LEVEL+1): pointer to grid structure ISTRUC of C refinement level LEVEL+1 for time Tn+1 C LSUNM1 : IN. (MAXLEV) C LSUNM1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn-1 C LSSN : IN. (MAXLEV) C LSSN(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn C LSUN : IN. (MAXLEV) C LSUN(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn C LSSNP1 : IN. (MAXLEV) C LSSNP1(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn+1 C LSUNP1 : IN. (MAXLEV) C LSUNP1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn+1 C NB. All the above pointers should be initialized on 1 C TN : INOUT. Current value of time variable C IN: Initial time C OUT: Time to which PDE has been integrated C TE : IN. Time point at which solution is desired C DT : INOUT. C IN: The initial time stepsize C OUT: Stepsize for next time step C DTMIN : IN. Minimum time stepsize allowed C DTMAX : IN. Maximum time stepsize allowed C If IERR=0 and domain a rectangle: C XL : IN. X-coordinate of lowerleft corner of rectangle C YL : IN. Y-coordinate of lowerleft corner of rectangle C XR : IN. X-coordinate of upperright corner of rectangle C YU : IN. Y-coordinate of upperright corner of rectangle C DX : IN. Cell width in X-direction of base grid C DY : IN. Cell width in Y-direction of base grid C C RTOL : IN. (NPDE) C Relative tolerance for the Newton iteration process C ATOL : IN. (NPDE) C Absolute tolerance for the Newton iteration process C SPCTOL : IN. (NPDE) C Space tolerance used to determine if resolution of grid C is large enough C TIMWGT : IN. (NPDE) C Time weights used in check if time stepsize can be accepted C RELTOL : IN. (NPDE) C Relative time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C ABSTOL : IN. (NPDE) C Absolute time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C LINSYS : IN. Linear system solver in use C 0: BiCGStab + ILU C 10: GCRO + Block-diagonal preconditioning C 11: GCRO + Block-diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 12: GCRO + Diagonal preconditioning C 13: GCRO + Diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 20, 21, 22, 23 as 10, 11, 12, 13 but matrix-free C INTGRT : IN. Name of external routine that performs the integration C If LINSYS=0: INTGRB, LINSYS=1: INTGRG, LINSYS=2: INTGRC C RWK : WORK. (LENRWK) C LENRWK : IN. Dimension of RWK. C Let NPTS be the max. # points on a grid level and C NPTSA the average # points over all grid levels. C Then LENRWK should be: C MAXLEV=1: 3.NPTS.NPDE+2.NPTS+9.NPTS.NPDE + LSSWRK C LSSWRK: C ( INFO(4)=0 C | 18.NPDE.NPTS.NPDE C !:INFO(4)=10 C 9.NPDE.NPTS.NPDE + C (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=11 C | 9.NPDE.NPTS.NPDE + C (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=12 C | 9.NPDE.NPTS.NPDE + C (MAX(8, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=13 C | 9.NPDE.NPTS.NPDE + C (MAX(6, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=20 C | (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=21 C | (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=22 C | (MAX(8, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=23 C | (MAX(6, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C ) C (default: MAXLR = 5, MAXL = 20) C Indication of the length for a maximum grid level C MAXLEV (default value MAXLEV=3): C 5.NPTSA.NPDE.MAXLEV+(2+9.NPDE).NPTS + LSSWRK C IWK : WORK. (LENIWK) C LENIWK : IN. Dimension of IWK. C MAXLEV=1: 16.NPTS C Indication of the length for a maximum grid level MAXLEV, C 5.NPTSA.MAXLEV+5.NPTS + C ( INFO(4)=0| 9.NPTS |: INFO(4)<20| 6.NPTS ) C LWK : WORK. (LENLWK) C LENLWK : IN. Dimension of LWK >= NPTS+1 C IERR : INOUT. C IN: 0: First call of PDESOL C 1: Continuation call C OUT: 0: OK C -1: Workspace too small for required # gridpoints in C base grid. No continuation possible C -2: Stepsize too small C Ccc EXTERNALS USED: LOGICAL CHKWRK, CHKGRD, CHKTIM EXTERNAL CHKWRK, CHKGRD, CHKTIM, GETSOL, GETINI, ICOPY, INIGRD, + MKFGRD, MONITR, PDEIV, PUTSOL, RCOPY, SETXY C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL DOUBLE PRECISION TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER NPTSB, LENUB, LXB, LYB, + LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, NIBPTS, + LGNP1, LX, LY, LUNM1, LUN, LUNP1, LUNP1I, LENU, LUIB, + LGNP1C, LXC, LUNM1C, LUNC, LUNP1C, LENUC, + LGNM1, LGN, LSN, LUNM1T, LENS, LENG, LENGN, LENUN, LEUNP1, + LWT, LF, LCORR, LEV, MLVNM1, MLVN, MLVNP1, + LISTRF, LIWK, LRWK, LLWKN, LIWKN, LRWKN, MAXPTS, + LENPRE, LENLSW, LU, LUO LOGICAL LEVN, LEVNM1, OK DOUBLE PRECISION DTNEW, DTRAT, TOLWGT, SPCMON, TIMMON C IF (IERR .EQ. 0) THEN C Ccc This is the first call of PDESOL. T0 = TN C C Initialize datastructure, X- and Y-coordinates for base grid IF (LINSYS .EQ. 0) THEN LRWKN = (2 + 12*NPDE + 18*NPDE*NPDE) ELSE IF (IDIAGP .EQ. 0) THEN LENPRE = NPDE LENLSW = NPDE*5+3 ELSE IF (IDIAGP .EQ. 1) THEN LENPRE = NPDE LENLSW = NPDE*3+3 ELSE IF (IDIAGP .EQ. 2) THEN LENPRE = 1 LENLSW = 8 ELSE LENPRE = 1 LENLSW = 6 ENDIF IF (LINSYS .EQ. 1) THEN LENLSW = 9*NPDE + 2*MAXLR+MAXL+6 ELSE LENLSW = MAX(LENLSW,2*MAXLR+MAXL+6) ENDIF LRWKN = (2 + 12*NPDE + (LENLSW + LENPRE)*NPDE) ENDIF LIWKN = (16) MAXPTS = MIN((LENRWK-2)/LRWKN, LENIWK/LIWKN, LENLWK-1) CALL INIGRD (MAXPTS, XL, YL, XR, YU, DX, DY, + RWK, IWK, NPTSB, LIWKB, IERR) DXB = DX DYB = DY IF (IERR .EQ. 1) THEN LRWKN = LRWKN*NPTSB+2 LIWKN = LIWKN*NPTSB LLWKN = NPTSB+1 OK = CHKWRK (LRWKN+6*NPDE, LENRWK+6*NPDE, + LIWKN+8*MAXLEV+3, LENIWK+8*MAXLEV+3, LLWKN, LENLWK) IERR = -1 RETURN ELSE IF (IERR .NE. 0) THEN STOP 'Return from INIGRD with unknown IERR' ENDIF LXB = 1 LYB = LXB + NPTSB C C Set max. grid levels for Tn and Tn-1 at 1 LSGNM1(0) = 1 LSGN (0) = 1 C C Set pointers to base grid data structures for Tn-1, Tn and Tn+1 C and to solution for Tn-1 and Tn LSGNM1(1) = 1 LSGN (1) = 1 LSGNP1(1) = 1 LSUNM1(1) = LYB + NPTSB LSSN (1) = LSUNM1(1) LSUN (1) = LSUNM1(1) C C Initialize solution values at base grid at Tn = T0 RWK(LSUN(1)) = 0.0 CALL PDEIV (T0, RWK(LXB), RWK(LYB), RWK(LSUN(1)+1), + NPTSB, NPDE) LENUB = NPTSB*NPDE+1 C C Set pointer to not updated base grid solution at Tn+1 LSSNP1(1) = LSUN(1) + LENUB C C Initialize time integration variables FIRST = .TRUE. SECOND = .FALSE. C ELSE IF (IERR .EQ. 1) THEN C Ccc This is a continuation call of PDESOL. C Set all required variables that were not saved in COMMON IF (LINSYS .NE. 0) THEN IF (IDIAGP .EQ. 0) THEN LENPRE = NPDE LENLSW = NPDE*5+3 ELSE IF (IDIAGP .EQ. 1) THEN LENPRE = NPDE LENLSW = NPDE*3+3 ELSE IF (IDIAGP .EQ. 2) THEN LENPRE = 1 LENLSW = 8 ELSE LENPRE = 1 LENLSW = 6 ENDIF IF (LINSYS .EQ. 1) THEN LENLSW = 9*NPDE + 2*MAXLR+MAXL+6 ELSE LENLSW = MAX(LENLSW,2*MAXLR+MAXL+6) ENDIF ENDIF NPTSB = IWK(IWK(1)+2)-1 LENUB = NPTSB*NPDE+1 LXB = 1 LYB = 1 + NPTSB C ELSE C This shouldn't happen STOP 'PDESOL called with unknown IERR' ENDIF C Ccccc Time integration loop 10 CONTINUE C Adjust time stepsize such that interval TE-TN takes an integer # of C time steps of this size DT = (TE-TN)/INT((TE-TN)/DT+0.95) DT = (TN+DT)-TN C Check if time stepsize is acceptable IF (DT .LT. DTMIN) THEN WRITE(LUNERR,'(''Time step size too small, DT ='',E16.7)') DT IERR = -2 RETURN ENDIF C C Time integration method: BE in first time step, BDF2 in following. C DTRAT = DT / DT_old; 0 => BE IF (FIRST) THEN DTRAT = 0 ELSE DTRAT = DT / DTO ENDIF C LEVEL = 1 C Ccc Set pointer to first free element after grid structure of max. C refinement level for Tn IF (MAXLEV .GT. 1) LSGNP1(2) = LIWKB C LGNP1 = LSGNP1(1) LX = LXB LY = LYB DX = DXB DY = DYB LUNM1 = LSUNM1(1) LUN = LSUN (1) LUNP1 = LSSNP1(1) LENU = LENUB LUIB = LUNP1+LENU C Pointer to space for eventual refined grid structure LISTRF = LIWKB LIWK = LIWKB LRWK = LUNP1 + LENU C Ccc Initial solution at coarse grid is coarse grid solution of previous C time level LUNP1I = LSSN(1) CALL RCOPY (LENU, RWK(LUNP1I), RWK(LUNP1)) C Ccccc Grid refinement Loop C 100 CONTINUE IF (LUNPDS .NE. 0) THEN NROWS = IWK(LGNP1) NPTS = IWK(LGNP1+NROWS+1)-1 WRITE(LUNPDS, + '(''Time integration at T='',E10.2,'', Grid level='',I3, + '', NPTS='',I5)') TN+DT, LEVEL, NPTS ENDIF C Ccc Timestep on current level LWT = LRWK LF = LWT + LENU-1 LCORR = LF + LENU-1 LRWK = LCORR + LENU-1 CALL INTGRT (IWK(LGNP1), RWK(LX), RWK(LY), NPDE, RWK(LUIB), + RWK(LUNP1), RWK(LUN), RWK(LUNM1), RTOL, ATOL, + TN, DT, DTRAT, DX, DY, RWK(LWT), RWK(LF), RWK(LCORR), + RWK(LRWK), IERR) LRWK = LWT IF (IERR .EQ. 10) THEN C If Newton failure redo time step with stepsize quartered NREJS = NREJS+1 IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS, + '(''Newton failure at T='',E10.2,'', Grid level'',I3)') + TN+DT, LEVEL ENDIF IERR = 0 DT = DT/4 GOTO 10 ELSE IF (IERR .NE. 0) THEN C This shouldn't happen STOP 'Return from INTGRT with unknown IERR' ENDIF C Ccc Compute space monitor and if necessary determine new grid IF (LSGN(0) .GT. LEVEL) THEN C More severe tolerance on grid monitor if max.grid level at Tn C exceeded current level TOLWGT = 0.9 ELSE TOLWGT = 1.0 ENDIF OK = CHKGRD (TN+DT, LEVEL, RWK(LUNP1), NPDE, RWK(LX), RWK(LY), + SPCTOL, TOLWGT, IWK(LGNP1), RWK(LRWK), LWK, SPCMON) C If no grid refinement needed, check time error IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''T='',E10.2,'', LEVEL='',I3, + '' ,TOLWGT='',F3.1,'', SPCMON='',E10.2)') + TN+DT, LEVEL, TOLWGT, SPCMON ENDIF IF (OK) GOTO 200 IF (LEVEL .EQ. MAXLEV) THEN WRITE(LUNERR,'(''Max. grid level exceeded at T='',E16.7)') + TN+DT GOTO 200 ENDIF C Ccc Create refined grid C Save coarse grid pointers LGNP1C = LGNP1 LUNP1C = LUNP1 LUNC = LUN LUNM1C = LUNM1 LXC = LX LENUC = LENU C C Make fine grid structure LGNP1 = LISTRF CALL MKFGRD (LWK, IWK, LENIWK, LGNP1C, LGNP1, LINSYS, + NPTS, LIWK, IERR) LENU = NPTS*NPDE+1 C C Check on workspace needed IF (LINSYS .EQ. 0) THEN LRWKN = LUNP1C+LENUC+8*LENU+2*NPTS+6*LENU+18*NPDE*LENU ELSE LRWKN = LUNP1C+LENUC+8*LENU+2*NPTS+6*LENU+ + (LENLSW+LENPRE)*LENU+MAXLR*MAXLR+(MAXL+3)*MAXL ENDIF LIWKN = LIWK+NPTS+1 LLWKN = NPTS+1 OK = CHKWRK (LRWKN+6*NPDE, LENRWK+6*NPDE, + LIWKN+8*MAXLEV+3, LENIWK+8*MAXLEV+3, LLWKN, LENLWK) IF (.NOT. OK) THEN IERR = -1 RETURN ENDIF C C Set fine grid pointers and values LLROW = LGNP1 NROWS = IWK(LLROW) LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = IWK(LLLBND) NBDPTS = IWK(LLLBND+NBNDS+1)-1 NBIPTS = IWK(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LISTRF = LLBNDP+NBIPTS LUN = LUNP1C+LENUC LUNP1 = LUN+LENU LUNM1 = LUNP1+LENU LX = LUNM1+LENU LY = LX+NPTS LUIB = LY+NPTS NIBPTS = NBIPTS-NBDPTS LRWK = LUIB+NIBPTS*NPDE LSGNP1(LEVEL+1) = LGNP1 LSSNP1(LEVEL+1) = LUNP1 DX = DX/2 DY = DY/2 C C Save initial solution at current grid level at end of workspace to C prevent overwriting CALL RCOPY (LENUC, RWK(LUNP1I), RWK(LENRWK-LENUC)) LUNP1I = LENRWK-LENUC C C Store grid values at Tn and Tn-1 in temporary storage LEVN = LSGN(0) .GE. LEVEL+1 LEVNM1 = LSGNM1(0) .GE. LEVEL+1 IF (FIRST) THEN C Store X- and Y- coordinates, and initial solution in Un = Un-1 LUNM1 = LUN LX = LUNP1+LENU LY = LX+NPTS LUIB = LY+NPTS LRWK = LUIB+NIBPTS*NPDE CALL SETXY (XL, YL, DX, DY, IWK(LLROW), IWK(LIROW), IWK(LICOL), + RWK(LX), RWK(LY)) RWK(LUN) = 0.0 CALL PDEIV (T0, RWK(LX), RWK(LY), RWK(LUN+1), NPTS, NPDE) C ELSE IF (SECOND) THEN C Get Un on refined grid CALL GETSOL (NPDE, RWK(LUNC), IWK(LGNP1C), + LEVN, RWK(LSUN(LEVEL+1)), IWK(LSGN(LEVEL+1)), + RWK(LUN), IWK(LGNP1), IWK(LIWK), RWK(LRWK)) C Store X- and Y- coordinates and initial solution in Un-1 CALL SETXY (XL, YL, DX, DY, IWK(LLROW), IWK(LIROW), IWK(LICOL), + RWK(LX), RWK(LY)) RWK(LUNM1) = 0.0 CALL PDEIV (T0, RWK(LX), RWK(LY), RWK(LUNM1+1), NPTS, NPDE) C ELSE C Get Un-1 and Un on refined grid LUNM1T = MAX(LUNM1,LXC) CALL GETSOL (NPDE, RWK(LUNM1C), IWK(LGNP1C), + LEVNM1, RWK(LSUNM1(LEVEL+1)), IWK(LSGNM1(LEVEL+1)), + RWK(LUNM1T), IWK(LGNP1), IWK(LIWK), RWK(LRWK)) IF (LUNM1T .GT. LUNM1) + CALL RCOPY (LENU, RWK(LUNM1T), RWK(LUNM1)) CALL GETSOL (NPDE, RWK(LUNC), IWK(LGNP1C), + LEVN, RWK(LSUN(LEVEL+1)), IWK(LSGN(LEVEL+1)), + RWK(LUN), IWK(LGNP1), IWK(LIWK), RWK(LRWK)) C Store X- and Y- coordinates CALL SETXY (XL, YL, DX, DY, IWK(LLROW), IWK(LIROW), IWK(LICOL), + RWK(LX), RWK(LY)) C ENDIF C Get initial solution Un+1, store internal boundary values also in C UIB list CALL GETINI (NPDE, RWK(LUNP1I), RWK(LUNP1C), IWK(LGNP1C), + LEVN, RWK(LSSN(LEVEL+1)), IWK(LSGN(LEVEL+1)), + RWK(LUNP1), IWK(LGNP1), RWK(LUIB), IWK(LIWK), RWK(LRWK)) LUNP1I = LRWK LRWK = LUNP1I + LENU CALL RCOPY (LENU, RWK(LUNP1), RWK(LUNP1I)) LEVEL = LEVEL+1 GOTO 100 Ccc End Refinement Loop C 200 CONTINUE C Ccc Time step finished C Inject values from finest level LSGNP1(0) = LEVEL LSUNP1(LEVEL) = LSSNP1(LEVEL) DO 210 LEV = LEVEL, 2, -1 LSUNP1(LEV-1) = LSUNP1(LEV) + LENU CALL PUTSOL (NPDE, RWK(LSUNP1(LEV)), IWK(LSGNP1(LEV)), + RWK(LSSNP1(LEV-1)), IWK(LSGNP1(LEV-1)), + RWK(LSUNP1(LEV-1)), LENU) 210 CONTINUE LRWK = LSUNP1(1) + LENU C Ccc Check time-error LU = LSUNP1(1)+LENUB LUO = LSSNP1(1)-LENUB OK = CHKTIM (RWK ,LU, LUO, NPDE, IWK, + LSGNP1, TIMWGT, RELTOL, ABSTOL, RWK(LRWK), DT, DTNEW, TIMMON) IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''TN='',E10.2,'', DT='',E10.2, + '', DTNEW='',E10.2, '', TIMMON='',E10.2)') + TN, DT, DTNEW, TIMMON ENDIF C Restrict stepsize DTNEW = MIN(DTNEW, DTMAX) IF (.NOT. OK) THEN C Ccc Time step rejected NREJS = NREJS+1 IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''Time step rejected'')') ENDIF DT = DTNEW GOTO 10 ELSE C Ccc Time step accepted NSTEPS = NSTEPS+1 C Ccc Time step accepted; move data saved for Tn to nm1-save and C data at Tn+1 to n-save. C C Move updated solution at Tn (Un) to Unm1 save, and gridstructure at Tn C to Gnm1 save C NB. For first step this is not necessary, but harmless MLVNM1 = LSGNM1(0) MLVN = LSGN(0) C Start of Unm1 data (= 2*NPTSB+1) LUNM1 = LSUNM1(MLVNM1) C Start of updated Un data LUN = LSUN(MLVN) C LSSNP1(1)-1: end of updated Un data LENUN = LSSNP1(1) - LUN CALL RCOPY (LENUN, RWK(LUN), RWK(LUNM1)) C Adjust pointers to Unm1 data DO 220 LEV = MLVN, 1, -1 LSUNM1(LEV) = LSUN(LEV) - (LUN-LUNM1) 220 CONTINUE C New start of not-updated Un data LSN = LUNM1 + LENUN C C New max. Gnm1-level LSGNM1(0) = MLVN IF (MLVNM1 .EQ. 1) THEN C Grids already in place, adjust pointers DO 230 LEV = 2, MLVN LSGNM1(LEV) = LSGN(LEV) 230 CONTINUE C New start of Gn data is old one LGN = LIWKB ELSE IF (MLVN .GT. 1) THEN C Both Gnm1 and Gn have more than 1 level, move Gn C Start of Gnm1 data (after base grid) LGNM1 = LSGNM1(2) C Start of Gn data LGN = LSGN(2) C LSGNP1(2)-1: end of Gn data LENGN = LSGNP1(2) - LGN CALL ICOPY (LENGN, IWK(LGN), IWK(LGNM1)) C Adjust pointers to Gnm1 data DO 240 LEV = 2, MLVN LSGNM1(LEV) = LSGN(LEV) - (LGN-LGNM1) 240 CONTINUE C New start of Gn data LGN = LSGNM1(2) + LENGN ELSE C At Tn only base grid, new start of Gn data is after base grid LGN = LSGNM1(2) ENDIF C C Move Tn+1 data, not_updated solution (Snp1) to Sn save, gridstructure C to Gn save, and injected solution to Un save MLVNP1 = LSGNP1(0) LSGN(0) = MLVNP1 C Move not-updated solution Snp1 on base grid CALL RCOPY (LENUB, RWK(LSSNP1(1)), RWK(LSN)) LSSN(1) = LSN LSN = LSN + LENUB C Move Snp1 and (LROW,IROW,ICOL) of higher levels, adjust pointers to C Sn and Gn data DO 250 LEV = 2, MLVNP1 LLROW = LSGNP1(LEV) NROWS = IWK(LLROW) NPTS = IWK(LLROW+NROWS+1)-1 LENS = NPTS*NPDE+1 LENG = NROWS+2 + NROWS + NPTS CALL RCOPY (LENS, RWK(LSSNP1(LEV)), RWK(LSN)) LSSN(LEV) = LSN LSN = LSN + LENS CALL ICOPY (LENG, IWK(LSGNP1(LEV)), IWK(LGN)) LSGN(LEV) = LGN LGN = LGN + LENG 250 CONTINUE C C Adjust pointer to solution on highest grid level LSUN(MLVNP1) = LSSN(MLVNP1) IF (MLVNP1 .GT. 1) THEN C Move updated solutions on grids (max.lev-1),...,2 and adjust C pointers to Un data LUNP1 = LSUNP1(MLVNP1-1) LEUNP1 = LSUNP1(1)+LENUB - LUNP1 CALL RCOPY (LEUNP1, RWK(LUNP1), RWK(LSN)) DO 260 LEV = 1, MLVNP1-1 LSUN(LEV) = LSUNP1(LEV) - (LUNP1-LSN) 260 CONTINUE ENDIF C Ccc Set pointer to not updated base grid solution at Tn+1 LSSNP1(1) = LSUN(1) + LENUB Ccc Set pointer to first free element after grid structure of max. C refinement level for Tn LIWKB = LGN C Ccc Adapt time variables CALL MONITR (TN+DT, DT, DTNEW, XL, YL, DXB, DYB, + LSGN, IWK, LSUN, RWK) TN = TN + DT DTO = DT DT = DTNEW IF (FIRST) THEN FIRST = .FALSE. SECOND = .TRUE. ELSE IF (SECOND) THEN SECOND = .FALSE. ENDIF IF (TN .GE. TE) THEN IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''# steps accepted:'',I5, + '', # steps rejected:'',I5)') NSTEPS, NREJS ENDIF RETURN ELSE GOTO 10 ENDIF ENDIF RETURN END SUBROUTINE INIGRD (MAXPTS, XL, YL, XR, YU, DX, DY, XY, + IWK, NPTS, LIWK, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, IWK(*), NPTS, LIWK, IERR DOUBLE PRECISION XL, YL, XR, YU, DX, DY, XY(*) C Ccc PURPOSE: C Stores datastructure and coordinate values of initial grid (rowwise). C A (virtual) rectangle is placed upon the irregular domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored, rowwise. C In the default case the domain is a rectangle and the user C has to specify only the (XL,YL)- and the (XR,YU)-point, and C the gridwidth in each direction. Otherwise the user has to write C the domain specifying routine INIDOM in which also the coordinate C values and the cellwidths can be specified. C Ccc PARAMETER DESCRIPTION: C MAXPTS : IN. Max. # grid points allowed by the available workspace C XL : INOUT. X-coordinate of lowerleft point of (virtual) rectangle C YL : INOUT. Y-coordinate of lowerleft point of (virtual) rectangle C XR : INOUT. X-coordinate of upperright point of (virtual) C rectangle C YU : INOUT. Y-coordinate of upperright point of (virtual) C rectangle C DX : INOUT. Grid width in X-direction C DY : INOUT. Grid width in Y-direction C XY : OUT. Contains the X- and Y-coordinates for the base grid C IWK : OUT. Contains the following arrays: CcLROW : (0:LROW(0)+1) Cc LROW(0) = NROWS: Actual # rows in grid Cc LROW(1:NROWS): pointers to the start of a row in the grid Cc LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 CcIROW : (NROWS) Cc IROW(IR): row number of row IR in virtual rectangle CcICOL : (NPTS) Cc ICOL(IPT): column number of grid point IPT in virtual Cc rectangle CcLLBND : (0:LLBND(0)+2) Cc LLBND(0) = NBNDS: total # physical boundaries and corners in Cc actual domain. Cc NB. corners should be stored as an independent boundary Cc (cf. ILBND). The order in LLBND should be first the Cc boundaries and then the corners. Cc LLBND(1:NBNDS): pointers to a specific boundary or corner in Cc LBND Cc LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points Cc in LBND + 1 Cc LLBND(NBNDS+1): pointer to internal boundary in LBND Cc LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 CcILBND : (NBNDS) Cc ILBND(IB): type of boundary: Cc 1: Lower boundary -I Cc 2: Left boundary I Cc 3: Upper boundary I max. first order derivative Cc 4: Right boundary -I Cc 12: Lowerleft corner -I Cc 23: Leftupper corner I corners of 90 degrees Cc 34: Upperright corner I (external corners) Cc 41: Rightlower corner -I max. first order deriv. Cc 21: Leftlower corner -I Cc 32: Upperleft corner I corners of 270 degrees Cc 43: Rightupper corner I (internal corners) Cc 14: Lowerright corner -I max. first order deriv. CcLBND : (NBIPTS) Cc LBND(IBPT): pointer to boundary point in actual grid CcLBELOW : (NPTS) Cc LBELOW(IPT): pointer to node below in actual grid Cc 0, if index node is lower boundary point CcLABOVE : (NPTS) Cc LABOVE(IPT): pointer to node above in actual grid Cc 0, if index node is upper boundary point Cc (Even if LINSYS=2, because of restart:) Cc The next 2 arrays are used for the Jacobian structure and its Cc ILU CcLLDG : (NPTS,-4:-2) Cc LLDG(IPT,-4): pointer to node left of node below Cc or to node below the node below Cc LLDG(IPT,-3): pointer to node below Cc LLDG(IPT,-2): pointer to node right of node below Cc or to node left of the node left CcLUDG : (NPTS,2:4) Cc LUDG(IPT,2): pointer to node left of node above Cc or to node right of the node right Cc LUDG(IPT,3): pointer to node above Cc LUDG(IPT,4): pointer to node right of node above Cc or to node above the node above Cc the next 4 arrays are used to hold the data dependency lists Cc for the ILU factorization and the forward, resp. backward Cc sweep of the backsolve CcLSL : LSL(NPTS) Cc LSL(ISLPT): pointer to node in actual grid CcLLSL : LLSL(0:LLSL(0)) Cc LLSL(0) = # independent data dependency lists in ILU Cc factorization and forward sweep Cc LLSL(1:LLSL(0)): pointers to the start of a list in LSL CcLSU : LSU(NPTS) Cc LSU(ISLPT): pointer to node in actual grid CcLLSU : LLSU(0:LLSU(0)) Cc LLSU(0) = # independent data dependency lists in backward C sweep Cc LLSU(1:LLSU(0)): pointers to the start of a list in LSU C NPTS : OUT. # grid points in base grid C LIWK : OUT. Pointer to first free element in IWK C IERR : OUT. Error return flag C 0: OK. C 1: workspace too small for required # gridpoints C Ccc EXTERNALS USED: LOGICAL INIDOM EXTERNAL ICOPY, INIDOM, JACSDP, JACSLP, JACSUP, SETBA, SETXY C C----------------------------------------------------------------------- C INTEGER I1, I2, I3, I4, I5, I6, + LLROW, LIROW, LICOL, LLLBND, LILBND, LLBNDP, LLBLW, LLABV, + NROWS, NBNDS, NBDPTS, LLLDG, LLUDG, LLSLP, LLLSL, LLSUP, LLLSU LOGICAL OK C IERR = 0 C Ccc Get (user defined) initial domain I1 = 1 I2 = I1 + MAXPTS I3 = I2 + MAXPTS I4 = I3 + MAXPTS I5 = I4 + MAXPTS I6 = I5 + MAXPTS OK = INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + IWK(I1), IWK(I2), IWK(I3), IWK(I4), IWK(I5), IWK(I6)) IF (.NOT. OK) THEN IERR = 1 NPTS = MAXPTS RETURN ENDIF C Ccc Copy integer arrays to their correct position in the IWK array NROWS = IWK(I1) NPTS = IWK(I1+NROWS+1)-1 NBNDS = IWK(I4) NBDPTS = IWK(I4+NBNDS+1)-1 C LROW at correct position LLROW = 1 C Copy IROW LIROW = LLROW+NROWS+2 CALL ICOPY (NROWS, IWK(I2), IWK(LIROW)) C Copy ICOL LICOL = LIROW+NROWS CALL ICOPY (NPTS, IWK(I3), IWK(LICOL)) C Copy LLBND LLLBND = LICOL+NPTS CALL ICOPY (NBNDS+2, IWK(I4), IWK(LLLBND)) C No internal boundaries IWK(LLLBND+NBNDS+2) = NBDPTS+1 C Copy ILBND LILBND = LLLBND+NBNDS+3 CALL ICOPY (NBNDS, IWK(I5), IWK(LILBND)) C Copy LBND LLBNDP = LILBND+NBNDS CALL ICOPY (NBDPTS, IWK(I6), IWK(LLBNDP)) C Ccc Store X- and Y-coordinates CALL SETXY (XL, YL, DX, DY, + IWK(LLROW), IWK(LIROW), IWK(LICOL), + XY(1), XY(1+NPTS)) C Ccc Set pointers to nodes below and above a grid point LLBLW = LLBNDP+NBDPTS LLABV = LLBLW+NPTS CALL SETBA (IWK(LLROW), IWK(LIROW), IWK(LICOL), + IWK(LLBLW), IWK(LLABV)) C Ccc Set pointers to lower and upper diagonals in Jacobian for base grid LLLDG = LLABV + NPTS LLUDG = LLLDG + NPTS*3 CALL JACSDP (NPTS, IWK(LLLBND), IWK(LILBND), IWK(LLBNDP), + IWK(LLBLW), IWK(LLABV), IWK(LLLDG), IWK(LLUDG)) C Ccc Make data-dependency lists for ILU on base-grid Jacobian LLSLP = LLUDG + NPTS*3 LLLSL = LLSLP + NPTS LIWK = LLLSL + NPTS CALL JACSLP (NPTS, IWK(LLLBND), IWK(LILBND), IWK(LLBNDP), + IWK(LLLDG), IWK(LIWK), IWK(LLLSL), IWK(LLSLP)) LLSUP = LLLSL + IWK(LLLSL)+1 LLLSU = LLSUP + NPTS LIWK = LLLSU + NPTS CALL JACSUP (NPTS, IWK(LLLBND), IWK(LILBND), IWK(LLBNDP), + IWK(LLUDG), IWK(LIWK), IWK(LLLSU), IWK(LLSUP)) LIWK = LLLSU + IWK(LLLSU)+1 RETURN END SUBROUTINE SETBA (LROW, IROW, ICOL, LBELOW, LABOVE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LROW(0:*), IROW(*), ICOL(*), LBELOW(*), LABOVE(*) C Ccc PURPOSE: C Set pointers to nodes below and above a grid point, if such a node C exists, otherwise the pointer is set to zero. C Ccc PARAMETER DESCRIPTION: C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LBELOW : OUT. (NPTS) C LBELOW(IPT): pointer to node below in actual grid C 0, if indexed node is lower boundary point C LABOVE : OUT. (NPTS) C LABOVE(IPT): pointer to node above in actual grid C 0, if indexed node is upper boundary point C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IPTA, IR, NROWS, NPTS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 DO 10 IPT = 1, NPTS LBELOW(IPT) = 0 LABOVE(IPT) = 0 10 CONTINUE DO 20 IR = 1, NROWS-1 C Check if next row in datastructure is next row in virtual rectangle IF (IROW(IR) .EQ. IROW(IR+1)-1) THEN C Compare column indices in row with those in row above, until C the two match or one of both rows is finished IPTA = LROW(IR+1) DO 30 IPT = LROW(IR), LROW(IR+1)-1 40 IF (ICOL(IPT) .LT. ICOL(IPTA)) THEN GOTO 30 ELSE IF (ICOL(IPT) .EQ. ICOL(IPTA)) THEN C Set above pointer in current row and below pointer in next C row LBELOW(IPTA) = IPT LABOVE(IPT) = IPTA ELSE IPTA = IPTA + 1 IF (IPTA .GT. LROW(IR+2)-1) GOTO 20 GOTO 40 ENDIF 30 CONTINUE ENDIF 20 CONTINUE RETURN END LOGICAL FUNCTION CHKGRD (T, LEVEL, U, NPDE, X, Y, SPCTOL, TOLWGT, + ISTRUC, WORK, REFFLG, SPCMON) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LEVEL, NPDE, ISTRUC(0:*) LOGICAL REFFLG(0:*) DOUBLE PRECISION T, U(0:*), X(*), Y(*), SPCTOL(NPDE), TOLWGT, + WORK(*), SPCMON C Ccc PURPOSE: C Check if grid needs to be refined. If so, CHKGRD = .FALSE. and C flags are set where the refinement is needed. C Ccc PARAMETER DESCRIPTION: C T : IN. Current time level C LEVEL : IN. Current grid level C U : IN. Solution on current grid C NPDE : IN. # PDE components C X, Y : IN. Physical coordinates of grid points C SPCTOL : IN. User defined space tolerance for each PDE component C TOLWGT : IN. Weight factor for tolerance. If new level at previous C time existed TOLWGT < 1, else 1 C ISTRUC : IN. Datastructure for current grid C WORK : WORK. (2*NPTS*NPDE) C REFFLG : OUT. If one of the corners of a cell is flagged the cell C needs to be refined C SPCMON : OUT. Value of space monitor C Ccc EXTERNALS USED: LOGICAL CHKREF EXTERNAL CHKREF C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C Ccc Compute space monitor and check if grid needs to be refined CHKGRD = CHKREF (T, LEVEL, U, NPTS, NPDE, X, Y, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), + SPCTOL, TOLWGT, WORK(1), WORK(1+NPTS*NPDE), REFFLG, SPCMON) RETURN END SUBROUTINE MKFGRD (REFFLG, IWK, LENIWK, LISTRC, LISTRF, LINSYS, + NPTSF, LIWK, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER IWK(LENIWK), LISTRC, LISTRF, LINSYS, NPTSF, LIWK, IERR LOGICAL REFFLG(0:*) C Ccc PURPOSE: C Make fine grid structure and store in IWK(LISTRF+...) C Ccc PARAMETER DESCRIPTION: C REFFLG : IN. If one of the corners of a cell is flagged the cell C needs to be refined C IWK : INOUTWORK. Integer workspace. C IN: Coarse grid structure C OUT: If coarse grid is base grid: coarse grid structure, C otherwise (LROW,...,LBND) of coarse grid structure and C fine grid structure (LROW,...,LLLSU) C WORK: (NPTS+NPTSF) at end of IWK for domain flags C LENIWK : IN. Length of IWK C LISTRC : IN. Pointer to coarse grid structure in IWK C LISTRF : IN. Pointer to place where fine grid structure should be C stored in IWK C LINSYS : IN. Linear system solver in use C 0: BiCGStab + ILU C 1: (Block-)diagonally scaled GCRO C 2: (Block-)diagonally scaled matrix-free GCRO C NPTSF : OUT. # grid points in fine grid C LIWK : OUT. Pointer to first free element in IWK after fine grid C structure C IERR : OUT. Error return flag C 0: OK C 1: workspace too small for required # fine gridpoints C Ccc EXTERNALS USED: EXTERNAL DOMFLG, ICOPY, JACSDP, JACSLP, JACSUP, MKBND, REFDOM, + SETBA C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, LLLDG, + LLROWF, NROWSF, LIROWF, LICOLF, LLLBDF, + NBIPTF, LILBDF, LLBNDF, LLBLWF, LLABVF, + LLLDGF, LLUDGF, LLSLF, LLLSLF, LLSUF, LLLSUF, + LIDOM, LIDOMF, MAXPTS C IERR = 0 C LLROW = LISTRC NROWS = IWK(LLROW) NPTS = IWK(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = IWK(LLLBND) NBIPTS = IWK(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS LLLDG = LLABV+NPTS LIDOM = LENIWK-NPTS C Ccc Make data structure fine grid MAXPTS = (LIDOM-MAX(LISTRF,LLLDG))/4 LIDOMF = LIDOM -MAXPTS-1 LICOLF = LIDOMF-MAXPTS LIROWF = LICOLF-MAXPTS+1 LLROWF = LIROWF-MAXPTS C Set domain flags for coarse grid CALL DOMFLG (NPTS, IWK(LLLBND), IWK(LLBNDP), IWK(LIDOM)) CALL REFDOM (MAXPTS, REFFLG, NBNDS, + IWK(LLROW), IWK(LIROW), IWK(LICOL), IWK(LLBLW), IWK(LLABV), + IWK(LIDOM), IWK(LLROWF), IWK(LIROWF), IWK(LICOLF), IWK(LIDOMF), + NPTSF, IERR) IF (IERR .EQ. 1) THEN LIWK = LENIWK+1 RETURN ENDIF C Ccc Move fine grid structure to their correct position NROWSF = IWK(LLROWF) CALL ICOPY (NROWSF+2, IWK(LLROWF), IWK(LISTRF)) LLROWF = LISTRF CALL ICOPY (NROWSF, IWK(LIROWF), IWK(LLROWF+NROWSF+2)) LIROWF = LLROWF+NROWSF+2 CALL ICOPY (NPTSF, IWK(LICOLF), IWK(LIROWF+NROWSF)) LICOLF = LIROWF+NROWSF C Ccc Copy # physical boundaries and boundary types from coarse grid LLLBDF = LICOLF+NPTSF LILBDF = LLLBDF+NBNDS+3 LLBNDF = LILBDF+NBNDS IWK(LLLBDF) = NBNDS CALL ICOPY (NBNDS, IWK(LILBND), IWK(LILBDF)) C Ccc Set pointers below and above and new boundary lists LLBLWF = LLBNDF+NPTSF LLABVF = LLBLWF+NPTSF LIWK = LLABVF+NPTSF IF (LIWK .GT. LENIWK) THEN IERR = 1 RETURN ENDIF CALL SETBA (IWK(LLROWF), IWK(LIROWF), IWK(LICOLF), + IWK(LLBLWF), IWK(LLABVF)) CALL MKBND (NPTSF, IWK(LLROWF), IWK(LIROWF), IWK(LICOLF), + IWK(LLBLWF), IWK(LLABVF), + IWK(LIDOMF), IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF)) C Ccc Move below/above pointers to their correct position NBIPTF = IWK(LLLBDF+NBNDS+2)-1 CALL ICOPY (NPTSF, IWK(LLBLWF), IWK(LLBNDF+NBIPTF)) LLBLWF = LLBNDF+NBIPTF CALL ICOPY (NPTSF, IWK(LLABVF), IWK(LLBLWF+NPTSF)) LLABVF = LLBLWF+NPTSF LIWK = LLABVF+NPTSF IF (LINSYS .EQ. 2) RETURN C Ccc Set pointers to lower and upper diagonals in Jacobian for fine grid LLLDGF = LIWK LLUDGF = LLLDGF+NPTSF*3 LIWK = LLUDGF+NPTSF*3 IF (LIWK .GT. LENIWK) THEN IERR = 1 RETURN ENDIF CALL JACSDP (NPTSF, IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF), + IWK(LLBLWF), IWK(LLABVF), IWK(LLLDGF), IWK(LLUDGF)) IF (LINSYS .EQ. 1) RETURN C Ccc Make data-dependency lists for ILU on fine grid Jacobian LLSLF = LIWK LLLSLF = LLSLF +NPTSF LIWK = LLLSLF+NPTSF IF (LIWK+NPTSF .GT. LENIWK) THEN IERR = 1 RETURN ENDIF CALL JACSLP (NPTSF, IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF), + IWK(LLLDGF), IWK(LIWK), IWK(LLLSLF), IWK(LLSLF)) LLSUF = LLLSLF+IWK(LLLSLF)+1 LLLSUF = LLSUF +NPTSF LIWK = LLLSUF+NPTSF IF (LIWK+NPTSF .GT. LENIWK) THEN LIWK = LIWK+NPTSF IERR = 1 RETURN ENDIF CALL JACSUP (NPTSF, IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF), + IWK(LLUDGF), IWK(LIWK), IWK(LLLSUF), IWK(LLSUF)) LIWK = LLLSUF+ IWK(LLLSUF)+1 C RETURN END LOGICAL FUNCTION CHKREF (T, LEVEL, U, NPTS, NPDE, X, Y, + LLBND, ILBND, LBND, LBELOW, LABOVE, + SPCTOL, TOLWGT, W1, W2, REFFLG, SPCMON) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LEVEL, NPTS, NPDE, + LLBND(0:*), ILBND(*), LBND(*), LBELOW(NPTS), LABOVE(NPTS) LOGICAL REFFLG(0:NPTS) DOUBLE PRECISION T, U(0:NPTS*NPDE), X(NPTS), Y(NPTS), + SPCTOL(NPDE), TOLWGT, W1(NPTS*NPDE), W2(NPTS*NPDE), SPCMON C Ccc PURPOSE: C Check if grid needs to be refined. If so, CHKREF = .FALSE. and C flags are set where the refinement is needed. C C Space monitor: C SPCMON(ipt) = max SPCTOL(ic).|(dx)^2.Uxx(ipt)| + |(dy)^2.Uyy(ipt)|, C (ic = 1, NPDE) C A user routine is called to eventually enforce refinement by setting C SPCMON. C If max SPCMON(ipt) < TOLWGT then no refinement is needed, C (ipt = 1, NPTS) C otherwise all gridpoints for which SPCMON(ipt) > 1/4 are flagged C plus their 8 neighbours. C On exit CHKREF = .TRUE. if no refinement is required C Ccc PARAMETER DESCRIPTION: C T : IN. Current time level C LEVEL : IN. Current grid level C U : IN. Array of solution values. C NPTS : IN. # grid points C NPDE : IN. # PDE components C X, Y : IN. Physical coordinates of grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C SPCTOL : IN. User defined space tolerance for the monitor values of C different components C TOLWGT : IN. Weight factor for tolerance. If new level at previous C time existed TOLWGT < 1, else 1 C W1, W2 : WORK. C REFFLG : OUT. If the solution in a grid point violates the space C monitor condition, the gridpoint and its 8 neighbours are C flagged C SPCMON : OUT. Max SPCMON(ipt) C Ccc EXTERNALS USED: EXTERNAL CHSPCM C C----------------------------------------------------------------------- C INTEGER I, IB, IC, IPT, IM1, IM2, IP1, IP2, LB, NBNDS, NBIPTS C NBNDS = LLBND(0) NBIPTS = LLBND(NBNDS+2)-1 C Ccc Store (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 C First interior points, boundary values will be rubbish DO 10 I = 2, NPTS*NPDE-1 W1(I) = U(I-1) - 2*U(I) + U(I+1) 10 CONTINUE DO 20 IC = 1, NPDE DO 20 IPT = 1, NPTS I = IPT + (IC-1)*NPTS IM1 = LBELOW(IPT) + (IC-1)*NPTS IP1 = LABOVE(IPT) + (IC-1)*NPTS W2(I) = U(IM1) - 2*U(I) + U(IP1) 20 CONTINUE C C Correct boundaries, first the physical boundaries then the internal C ones DO 30 IB = 1, NBNDS IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correct (dy)^2.Uyy in W2 DO 50 IC = 1, NPDE DO 50 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IP1) + U(IP2) 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correct (dx)^2.Uxx in W1 DO 60 IC = 1, NPDE DO 60 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I+1) + U(I+2) 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correct (dy)^2.Uyy in W2 DO 70 IC = 1, NPDE DO 70 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IM1) + U(IM2) 70 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correct (dx)^2.Uxx in W1 DO 80 IC = 1, NPDE DO 80 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I-1) + U(I-2) 80 CONTINUE ELSE IF (ILBND(IB) .EQ. 12) THEN CDIR$ NOVECTOR C Lowerleft corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 82 IC = 1, NPDE DO 82 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I+1) + U(I+2) IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IP1) + U(IP2) 82 CONTINUE ELSE IF (ILBND(IB) .EQ. 23) THEN C Leftupper corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 84 IC = 1, NPDE DO 84 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I+1) + U(I+2) IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IM1) + U(IM2) 84 CONTINUE ELSE IF (ILBND(IB) .EQ. 34) THEN C Upperright corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 86 IC = 1, NPDE DO 86 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I-1) + U(I-2) IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IM1) + U(IM2) 86 CONTINUE ELSE IF (ILBND(IB) .EQ. 41) THEN C Rightlower corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 88 IC = 1, NPDE DO 88 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I-1) + U(I-2) IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IP1) + U(IP2) 88 CONTINUE ENDIF 30 CONTINUE CDIR$ VECTOR IB = NBNDS + 1 C Internal boundary, Dirichlet condition, space error = 0 DO 90 IC = 1, NPDE DO 90 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = 0.0 W2(I) = 0.0 90 CONTINUE C Ccc Compute space monitor SPCMON, and its maximum IC = 1 DO 100 IPT = 1, NPTS W1(IPT) = SPCTOL(IC)*(ABS(W1(IPT)) + ABS(W2(IPT))) 100 CONTINUE DO 110 IC = 2, NPDE DO 110 IPT = 1, NPTS I = IPT + (IC-1)*NPTS W1(IPT) = MAX(W1(IPT),SPCTOL(IC)*(ABS(W1(I)) + ABS(W2(I)))) 110 CONTINUE C C Call user routine to possibly force refinement CALL CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U(1), W1, TOLWGT) C C Compute maximum SPCMON = W1(1) DO 120 IPT = 2, NPTS SPCMON = MAX(SPCMON,W1(IPT)) 120 CONTINUE C Ccc Check if grid refinement is needed IF (SPCMON .LT. TOLWGT) THEN C No refinement needed CHKREF = .TRUE. RETURN ENDIF C Ccc Flag each node where space monitor is too large + its 8 neighbors. C Cells will be refined if a flag is set on 1 corner CHKREF = .FALSE. DO 200 IPT = 0, NPTS REFFLG(IPT) = .FALSE. 200 CONTINUE C C If neighbors in the grid datastructure are not physical neighbors in C the grid the former are wrongly flagged but since those points C are boundary points the flags will be unset later on DO 210 IPT = 2, NPTS-1 IF (W1(IPT) .GE. 0.25) THEN REFFLG(LABOVE(IPT-1)) = .TRUE. REFFLG( IPT-1) = .TRUE. REFFLG(LBELOW(IPT-1)) = .TRUE. REFFLG(LABOVE(IPT)) = .TRUE. REFFLG( IPT) = .TRUE. REFFLG(LBELOW(IPT)) = .TRUE. REFFLG(LABOVE(IPT+1)) = .TRUE. REFFLG( IPT+1) = .TRUE. REFFLG(LBELOW(IPT+1)) = .TRUE. ENDIF 210 CONTINUE REFFLG(0) = .FALSE. C Unset errorflags at (physical and internal) boundary DO 230 LB = 1, NBIPTS IPT = LBND(LB) REFFLG(IPT) = .FALSE. 230 CONTINUE RETURN END SUBROUTINE DOMFLG (NPTS, LLBND, LBND, IDOM) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), LBND(*), IDOM(0:NPTS) C Ccc PURPOSE: C Set domain flags for determination of location of grid point in grid C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C IDOM : OUT. IDOM(IPT): location in domain of node IPT C 0: interior point C IB: on boundary IB, IB = 1, NBNDS+1 C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IB, LB, NBNDS C NBNDS = LLBND(0) C C Set domain flags DO 10 IPT = 0, NPTS IDOM(IPT) = 0 10 CONTINUE DO 20 IB = 1, NBNDS+1 DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IDOM(LBND(LB)) = IB 30 CONTINUE 20 CONTINUE RETURN END SUBROUTINE REFDOM (MAXPTS, REFFLG, NBNDS, + LROWC, IROWC, ICOLC, LBELOC, LABOVC, IDOMC, + LROW, IROW, ICOL, IDOM, NPTS, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, NBNDS, LROWC(0:*), IROWC(*), ICOLC(*), + LABOVC(*), LBELOC(*), IDOMC(0:*), + LROW(0:*), IROW(*), ICOL(*), IDOM(0:*), NPTS, IERR LOGICAL REFFLG(0:*) C Ccc PURPOSE: C Create refined grid. If one of the corners of a cell is flagged, the C cell is divided in 4. The (LROW,IROW,ICOL) structure of the fine C grid will be stored and IDOM will contain domainflags (only for rows C corresponding with the coarse grid) to indicate the location of a C node in the fine grid. C Ccc PARAMETER DESCRIPTION: C MAXPTS : IN. Max. # grid points allowed on fine grid C REFFLG : IN. (0:NPTSC) C If the solution in a grid point violates the space monitor C condition, the gridpoint and its 8 neighbors are flagged. C Gridpoints at the boundaries are not flagged C LROWC : IN. (0:LROWC(0)+1) C LROWC(0) = NROWSC: Actual # rows in grid C LROWC(1:NROWSC): pointers to the start of a row in the grid C LROWC(NROWSC+1) = NPTSC+1: Actual # nodes in grid + 1 C IROWC : IN. (NROWSC) C IROWC(IR): row number of row IR in virtual rectangle C ICOLC : IN. (NPTSC) C ICOLC(IPT): column number of grid point IPT in virtual C rectangle C LBELOC : IN. (NPTSC) C LBELOC(IPT): pointer to node below in coarse grid C 0, if index node is lower boundary point C LABOVC : IN. (NPTSC) C LABOVC(IPT): pointer to node above in coarse grid C 0, if index node is upper boundary point C IDOMC : IN. (0:NPTSC) C IDOMC(IPT): location in coarse grid of node IPT C 0: interior point C IB: on boundary IB, IB = 1, NBNDS+1 C LROW : OUT. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C IDOM : OUT. (0:NPTS) C IDOM(IPT): location in coarse grid of node IPT (only set for C rows corresponding with coarse grid rows) C -1: grid point does not correspond with a coarse grid point C 0: interior point or new horizontal internal boundary C IB: on coarse grid boundary IB, IB = 1, NBNDS+1 C NPTS : OUT. # grid points on fine grid or MAXPTS if IERR=1 C IERR : OUT. Error return flag C 0: OK. C 1: workspace too small for required # fine gridpoints C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPC, IPT, IPTO, IPTOLD, IRC, IR, NROWSC, NROWS LOGICAL LEFT, MIDDLE, RIGHT C IERR = 0 IDOM(0) = 0 C NROWSC = LROWC(0) C Ccc Create new grid level, all cells with at least one flagged corner C will be refined IPT = 0 IR = 0 DO 10 IRC = 1, NROWSC C Ccc Make coarse grid row of fine grid IPTOLD = IPT IPTO = IPT LEFT = .FALSE. IPC = LROWC(IRC) MIDDLE = REFFLG(LBELOC(IPC)) .OR. REFFLG(IPC) .OR. + REFFLG(LABOVC(IPC)) DO 20 IPC = LROWC(IRC)+1, LROWC(IRC+1)-1 RIGHT = REFFLG(LBELOC(IPC)) .OR. REFFLG(IPC) .OR. + REFFLG(LABOVC(IPC)) IF (MIDDLE .OR. RIGHT) THEN C Refine cell IF (IPT+2 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)) + its right neighbor IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) IF (IDOMC(IPC-1) .NE. 0) THEN C Coarse grid point is at (physical) boundary, so is new IDOM(IPT) = IDOMC(IPC-1) ELSE IF (IPT .EQ. IPTO+1) THEN C First new point in this (sub)row: internal boundary IDOM(IPT) = NBNDS+1 ELSE C Internal point, or internal horizontal boundary IDOM(IPT) = 0 ENDIF IPT = IPT + 1 ICOL(IPT) = ICOL(IPT-1)+1 C If one of both (coarse) neighbors is an internal point, so C is IPT; otherwise it lies on a horizontal boundary and C only one of the neighbors can be a physical corner IF (IDOMC(IPC-1) .EQ. 0 .OR. + IDOMC(IPC) .EQ. 0) THEN IDOM(IPT) = 0 ELSE IF (IDOMC(IPC-1) .EQ. NBNDS+1 .OR. + IDOMC(IPC) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IDOM(IPT) = MIN(IDOMC(IPC-1),IDOMC(IPC)) ENDIF ELSE IF (LEFT) THEN C Previous cell is refined, current not IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)) IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) IF (IDOMC(IPC-1) .NE. 0) THEN C Coarse grid point is at (physical) boundary, so is new IDOM(IPT) = IDOMC(IPC-1) ELSE C Internal boundary IDOM(IPT) = NBNDS+1 ENDIF IPTO = IPT ENDIF LEFT = MIDDLE MIDDLE = RIGHT 20 CONTINUE IF (LEFT) THEN C Last cell in row has been refined IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add last coarse node IPC = LROWC(IRC+1)-1 IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC) C Coarse grid point is at physical or internal boundary, so is new IDOM(IPT) = IDOMC(IPC) ENDIF C IF (IPT .GT. IPTOLD) THEN C Current coarse grid row has been refined IR = IR + 1 LROW(IR) = IPTOLD + 1 IROW(IR) = 2*IROWC(IRC) ENDIF C IF (IRC .EQ. NROWSC) GOTO 10 C Ccc Make intermediate row of fine grid IPTOLD = IPT LEFT = .FALSE. IPC = LROWC(IRC) MIDDLE = REFFLG(IPC) .OR. REFFLG(LABOVC(IPC)) DO 30 IPC = LROWC(IRC)+1, LROWC(IRC+1)-1 RIGHT = REFFLG(IPC) .OR. REFFLG(LABOVC(IPC)) IF (MIDDLE .OR. RIGHT) THEN C Refine cell IF (IPT+2 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)+1/2) + its right neighbor IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) IPT = IPT + 1 ICOL(IPT) = ICOL(IPT-1)+1 ELSE IF (LEFT) THEN C Previous cell is refined, current not IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)+1/2) IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) ENDIF LEFT = MIDDLE MIDDLE = RIGHT 30 CONTINUE IF (LEFT) THEN C Last cell in row has been refined IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add last coarse node IPC = LROWC(IRC+1)-1 IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC) ENDIF C IF (IPT .GT. IPTOLD) THEN C Current intermediate row has been refined IR = IR + 1 LROW(IR) = IPTOLD + 1 IROW(IR) = 2*IROWC(IRC)+1 ENDIF 10 CONTINUE C Ccc Store # find grid rows in LROW(0) and # fine grid points in NPTS C and LROW(NROWS+1) NROWS = IR NPTS = IPT LROW(0) = NROWS LROW(NROWS+1) = NPTS + 1 C RETURN C Ccc Error return 900 CONTINUE NPTS = MAXPTS IERR = 1 C RETURN END SUBROUTINE MKBND (NPTSF, LROW, IROW, ICOL, LBELOW, LABOVE, + IDOM, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTSF INTEGER LROW(0:*), IROW(*), ICOL(*), LBELOW(*), LABOVE(*), + IDOM(0:NPTSF), LLBND(0:*), ILBND(*), LBND(*) C Ccc PURPOSE: C Make boundary list for refined grid using domain flags set on grid C points corresponding to coarse grid points C Ccc PARAMETER DESCRIPTION: C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C LBELOW : IN. (NPTS) C LBELOW(IPT): pointer to node below in coarse grid C 0, if index node is lower boundary point C LABOVE : IN. (NPTS) C LABOVE(IPT): pointer to node above in coarse grid C 0, if index node is upper boundary point C IDOM : INWORK. (0:NPTS) C IDOM(IPT): location in coarse grid of node IPT (only set for C rows corresponding with coarse grid rows) C 0: interior point or horizontal internal boundary C IB: on coarse grid boundary IB, IB = 1, NBNDS+1 C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : OUT. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IB, IDA, IDB, IPT, IR, NROWS, NPTS, NBNDS LOGICAL LEFT, RIGHT, UP, DOWN C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NBNDS = LLBND(0) C Ccc Domain flags have been set at nodes corresponding with coarse grid C nodes, but horizontal internal boundaries are possibly still marked as C internal points. Correct, first all but corners. DO 1 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 1 DO 2 IPT = LROW(IR), LROW(IR+1)-1 IF ((LABOVE(IPT) .EQ. 0 .OR. LBELOW(IPT) .EQ.0) .AND. + IDOM(IPT) .EQ. 0) IDOM(IPT) = NBNDS+1 2 CONTINUE 1 CONTINUE C Now for the internal corners. External corners are already correct. DO 3 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 3 LEFT = .FALSE. CDIR$ IVDEP DO 4 IPT = LROW(IR)+1, LROW(IR+1)-2 RIGHT = ICOL(IPT+1) .NE. ICOL(IPT)+1 IF (IDOM(IPT) .NE. 0) GOTO 5 DOWN = LBELOW(IPT) .EQ. 0 UP = LABOVE(IPT) .EQ. 0 IF (.NOT.(LEFT .OR. DOWN .OR. RIGHT .OR. UP)) THEN IF (LABOVE(IPT-1) .EQ. 0 .OR. + LABOVE(IPT+1) .EQ. 0 .OR. + LBELOW(IPT-1) .EQ. 0 .OR. + LBELOW(IPT+1) .EQ. 0) C Internal corner + IDOM(IPT) = NBNDS+1 ENDIF 5 LEFT = RIGHT 4 CONTINUE 3 CONTINUE C Ccc Set domain flags in intermediate rows DO 10 IR = 1, NROWS IF (IROW(IR)/2*2 .EQ. IROW(IR)) GOTO 10 CDIR$ IVDEP DO 20 IPT = LROW(IR), LROW(IR+1)-1 IDA = IDOM(LABOVE(IPT)) IDB = IDOM(LBELOW(IPT)) C If one of both neighbors is an internal point, so C is IPT; otherwise it lies on a vertical boundary and C only one of the neighbors can be a physical corner IF (IDA .EQ. 0 .OR. IDB .EQ. 0) THEN IDOM(IPT) = 0 ELSE IF (IDA .EQ. NBNDS+1 .OR. IDB .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IDOM(IPT) = MIN(IDA,IDB) ENDIF 20 CONTINUE 10 CONTINUE C Ccc Corners of physical and internal boundaries should be marked as C internal boundary IPT = 1 IF (IDOM(IPT) .NE. 0 .AND. IDOM(IPT) .NE. NBNDS+1) THEN IB = ILBND(IDOM(IPT)) IF ((IB .EQ. 1 .OR. IB .EQ. 14 .OR. IB .EQ. 21) + .AND. IDOM(LABOVE(IPT)) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 2 .OR. IB .EQ. 32 .OR. IB .EQ. 21) + .AND. IDOM(IPT+1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ENDIF ENDIF DO 30 IPT = 2, NPTS-1 IF (IDOM(IPT) .EQ. 0 .OR. IDOM(IPT) .EQ. NBNDS+1) GOTO 30 IDA = IDOM(LABOVE(IPT)) IDB = IDOM(LBELOW(IPT)) IB = ILBND(IDOM(IPT)) IF ((IB .EQ. 1 .OR. IB .EQ. 14 .OR. IB .EQ. 21) + .AND. IDA .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 2 .OR. IB .EQ. 32 .OR. IB .EQ. 21) + .AND. IDOM(IPT+1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 3 .OR. IB .EQ. 32 .OR. IB .EQ. 43) + .AND. IDB .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 4 .OR. IB .EQ. 14 .OR. IB .EQ. 43) + .AND. IDOM(IPT-1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ENDIF 30 CONTINUE IPT = NPTS IF (IDOM(IPT) .NE. 0 .AND. IDOM(IPT) .NE. NBNDS+1) THEN IB = ILBND(IDOM(IPT)) IF ((IB .EQ. 3 .OR. IB .EQ. 32 .OR. IB .EQ. 43) + .AND. IDOM(LBELOW(IPT)) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 4 .OR. IB .EQ. 14 .OR. IB .EQ. 43) + .AND. IDOM(IPT-1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ENDIF ENDIF C Ccc Make boundary lists DO 100 IB = 0, NBNDS+1 LLBND(IB) = 0 100 CONTINUE DO 110 IPT = 1, NPTS LLBND(IDOM(IPT)) = LLBND(IDOM(IPT)) + 1 110 CONTINUE LLBND(0) = 1 DO 120 IB = 1, NBNDS LLBND(IB) = LLBND(IB-1) + LLBND(IB) 120 CONTINUE DO 130 IB = NBNDS, 0, -1 LLBND(IB+2) = LLBND(IB) 130 CONTINUE DO 140 IPT = 1, NPTS IF (IDOM(IPT) .EQ. 0) GOTO 140 LBND(LLBND(IDOM(IPT)+1)) = IPT LLBND(IDOM(IPT)+1) = LLBND(IDOM(IPT)+1) + 1 140 CONTINUE LLBND(0) = NBNDS LLBND(1) = 1 RETURN END SUBROUTINE GETSOL (NPDE, UC, ISTRCN, LEVO, UO, ISTRFO, U, ISTRUC, + IWORK, RWORK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, ISTRCN(0:*), ISTRFO(0:*), ISTRUC(0:*), IWORK(*) LOGICAL LEVO DOUBLE PRECISION UC(0:*), UO(0:*), U(0:*), RWORK(*) C Ccc PURPOSE: C Store solution at a previous time level on a grid of the current time C level. C First copy the (embedded) coarser grid solution, then copy all C available values from the old time grid of the same grid level, and C finally calculate all non-initialized values by interpolation. C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UC : IN. Solution at embedded coarse grid C ISTRCN : IN. Datastructure of the embedded coarse grid C LEVO : IN. .TRUE. if new grid level existed at previous time level C UO : IN. If LEVO the solution at grid ISTRFO C ISTRFO : IN. If LEVO the datastructure of the grid with the same level C as the new grid level but on a previous time level C U : OUT. Solution of previous time level on new grid level C ISTRUC : IN. Data structure of new grid level at current time level C IWORK : WORK. (NPTS) C RWORK : WORK. (0) C Ccc EXTERNALS USED: EXTERNAL INJCF, INJON, INTPOL C C----------------------------------------------------------------------- C INTEGER LLROWC, NROWSC, NPTSC, LIROWC, LICOLC, + LLROWO, NROWSO, NPTSO, LIROWO, LICOLO, + LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV C LLROWC = 0 NROWSC = ISTRCN(LLROWC) NPTSC = ISTRCN(LLROWC+NROWSC+1)-1 LIROWC = LLROWC+NROWSC+2 LICOLC = LIROWC+NROWSC LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C U(0) = 0.0 C C Copy embedded coarse grid solution CALL INJCF (NPDE, UC, U, IWORK, + ISTRCN(LLROWC), ISTRCN(LIROWC), ISTRCN(LICOLC), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) C IF (LEVO) THEN C Copy solution of grid with same level but on previous time level LLROWO = 0 NROWSO = ISTRFO(LLROWO) NPTSO = ISTRFO(LLROWO+NROWSO+1)-1 LIROWO = LLROWO+NROWSO+2 LICOLO = LIROWO+NROWSO CALL INJON (NPDE, UO, U, IWORK, + ISTRFO(LLROWO), ISTRFO(LIROWO), ISTRFO(LICOLO), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) ENDIF C C Calculate all uninitialized values by interpolation CALL INTPOL (NPDE, U, IWORK, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLBLW), ISTRUC(LLABV), RWORK) C RETURN END SUBROUTINE GETINI (NPDE, UIC, UC, ISTRCC, LEVO, UO, ISTRFO, + U, ISTRUC, UIB, IWORK, RWORK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, ISTRCC(0:*), ISTRFO(0:*), ISTRUC(0:*), IWORK(*) LOGICAL LEVO DOUBLE PRECISION UIC(0:*), UC(0:*), UO(0:*), U(0:*), UIB(*), + RWORK(*) C Ccc PURPOSE: C Initialize solution at current time level on the next finer grid C level. Store (Dirichlet) internal boundary values in UIB. C First get the internal bounday values from interpolation of the C solution at the (embedded) coarser grid. C The initial solution is obtained by first copying the (embedded) C coarser grid initial solution, and then all available values from the C solution at the previous time level on the grid of the required grid C level. Finally all as yet non-initialized values are calculated by C interpolation. C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UIC : IN. Initial solution at embedded coarse grid C UC : IN. Solution at embedded coarse grid C ISTRCC : IN. Datastructure of the embedded coarse grid C LEVO : IN. .TRUE. if new grid level existed at previous time level C UO : IN. If LEVO the solution at grid ISTRFO C ISTRFO : IN. If LEVO the datastructure of the grid with the same level C as the new grid level but on a previous time level C U : OUT. Solution of current time level on new grid level C ISTRUC : IN. Data structure of new grid level at current time level C UIB : OUT. List of internal boundary values C IWORK : WORK. (NPTS) C RWORK : WORK. (0) C Ccc EXTERNALS USED: EXTERNAL INJCF, INJCFB, INJON, INTPOL C C----------------------------------------------------------------------- C INTEGER LLROWC, NROWSC, NPTSC, LIROWC, LICOLC, + LLROWO, NROWSO, NPTSO, LIROWO, LICOLO, + LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, NBDPTS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + NIBPTS, I, IB, IC, LB C LLROWC = 0 NROWSC = ISTRCC(LLROWC) NPTSC = ISTRCC(LLROWC+NROWSC+1)-1 LIROWC = LLROWC+NROWSC+2 LICOLC = LIROWC+NROWSC LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS NIBPTS = NBIPTS - NBDPTS C U(0) = 0.0 C Ccc Get internal boundary values C Copy embedded coarse grid solution CALL INJCFB (NPDE, UC, U, IWORK, + ISTRCC(LLROWC), ISTRCC(LIROWC), ISTRCC(LICOLC), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLLBND), ISTRUC(LLBNDP)) C C Calculate all uninitialized values at the internal boundary by C interpolation CALL INTPOL (NPDE, U, IWORK, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLBLW), ISTRUC(LLABV), RWORK) C C Store internal boundary values in list DO 10 IC = 1, NPDE DO 10 LB = 1, NIBPTS I = ISTRUC(LLBNDP+NBDPTS-1+LB) + (IC-1)*NPTS IB = LB + (IC-1)*NIBPTS UIB(IB) = U(I) 10 CONTINUE C Ccc Get initial solution C Copy embedded coarse grid initial solution CALL INJCF (NPDE, UIC, U, IWORK, + ISTRCC(LLROWC), ISTRCC(LIROWC), ISTRCC(LICOLC), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) C IF (LEVO) THEN C C Copy solution of grid with same level but on previous time level LLROWO = 0 NROWSO = ISTRFO(LLROWO) NPTSO = ISTRFO(LLROWO+NROWSO+1)-1 LIROWO = LLROWO+NROWSO+2 LICOLO = LIROWO+NROWSO CALL INJON (NPDE, UO, U, IWORK, + ISTRFO(LLROWO), ISTRFO(LIROWO), ISTRFO(LICOLO), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) C ENDIF C C Calculate all uninitialized values by interpolation CALL INTPOL (NPDE, U, IWORK, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLBLW), ISTRUC(LLABV), RWORK) C RETURN END SUBROUTINE INJCFB (NPDE, UC, U, IPDOM, + LROWC, IROWC, ICOLC, LROW, IROW, ICOL, LLBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROWC(0:*), IROWC(*), ICOLC(*), + LROW(0:*), IROW(*), ICOL(*), LLBND(0:*), LBND(*) DOUBLE PRECISION UC(0:*), U(0:*) C Ccc PURPOSE: C Inject solution from coarse grid into (embedded) fine grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UC : IN. Solution at coarse grid C U : OUT. Solution at coarse gridpoints at internal boundary of C refined grid C IPDOM : OUT. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROWC : IN. -I C IROWC : IN. I Data structure of the coarse grid C ICOLC : IN. -I see description for fine grid below C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C LBND : OUT. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IB, IC, IPC, IPT, IRC, IR, + NBNDS, NPTSC, NPTS, NROWSC, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NBNDS = LLBND(0) NROWSC = LROWC(0) NPTSC = LROWC(NROWSC+1)-1 C Ccc Initialize interpolation flags DO 10 IPT = 1, NPTS IPDOM(IPT) = 0 10 CONTINUE DO 15 IB = LLBND(NBNDS+1), LLBND(NBNDS+2)-1 IPT = LBND(IB) IPDOM(IPT) = -1 15 CONTINUE C Ccc Inject values from coarse level into fine grid solution CDIR$ NOVECTOR IRC = 0 DO 20 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 20 IRC = IRC + 1 30 IF (2*IROWC(IRC) .NE. IROW(IR)) THEN IRC = IRC + 1 GOTO 30 ENDIF IPC = LROWC(IRC)-1 DO 40 IPT = LROW(IR), LROW(IR+1)-1 IF (ICOL(IPT)/2*2 .NE. ICOL(IPT)) GOTO 40 IPC = IPC + 1 50 IF (2*ICOLC(IPC) .NE. ICOL(IPT)) THEN IPC = IPC + 1 GOTO 50 ENDIF DO 60 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = UC(IPC+(IC-1)*NPTSC) 60 CONTINUE IPDOM(IPT) = 0 40 CONTINUE 20 CONTINUE RETURN END SUBROUTINE INJCF (NPDE, UC, U, IPDOM, + LROWC, IROWC, ICOLC, LROW, IROW, ICOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROWC(0:*), IROWC(*), ICOLC(*), + LROW(0:*), IROW(*), ICOL(*) DOUBLE PRECISION UC(0:*), U(0:*) C Ccc PURPOSE: C Inject solution from coarse grid into (embedded) fine grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UC : IN. Solution at coarse grid C U : OUT. Solution at coarse gridpoints in refined grid C IPDOM : OUT. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROWC : IN. -I C IROWC : IN. I Data structure of the coarse grid C ICOLC : IN. -I see description for fine grid below C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPC, IPT, IRC, IR, NPTSC, NPTS, NROWSC, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NROWSC = LROWC(0) NPTSC = LROWC(NROWSC+1)-1 C Ccc Initialize interpolation flags DO 10 IPT = 1, NPTS IPDOM(IPT) = -1 10 CONTINUE C Ccc Inject values from coarse level into fine grid solution CDIR$ NOVECTOR IRC = 0 DO 20 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 20 IRC = IRC + 1 30 IF (2*IROWC(IRC) .NE. IROW(IR)) THEN IRC = IRC + 1 GOTO 30 ENDIF IPC = LROWC(IRC)-1 DO 40 IPT = LROW(IR), LROW(IR+1)-1 IF (ICOL(IPT)/2*2 .NE. ICOL(IPT)) GOTO 40 IPC = IPC + 1 50 IF (2*ICOLC(IPC) .NE. ICOL(IPT)) THEN IPC = IPC + 1 GOTO 50 ENDIF DO 60 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = UC(IPC+(IC-1)*NPTSC) 60 CONTINUE IPDOM(IPT) = 0 40 CONTINUE 20 CONTINUE RETURN END SUBROUTINE INJON (NPDE, UO, U, IPDOM, + LROWO, IROWO, ICOLO, LROW, IROW, ICOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROWO(0:*), IROWO(*), ICOLO(*), + LROW(0:*), IROW(*), ICOL(*) DOUBLE PRECISION UO(0:*), U(0:*) C Ccc PURPOSE: C Inject solution from previous time at grid from same level into C solution at current time grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UO : IN. Solution at previous time C U : INOUT. Solution at corresponding gridpoints injected from UO C IPDOM : INOUT. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROWO : IN. -I C IROWO : IN. I Data structure of the old-time grid C ICOLO : IN. -I see description for current time grid below C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER IC, IPO, IPT, IRO, IR, NPTSO, NPTS, NROWSO, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NROWSO = LROWO(0) NPTSO = LROWO(NROWSO+1)-1 C Ccc Inject values from old time level into current-time solution IRO = 1 DO 10 IR = 1, NROWS 20 IF (IROWO(IRO) .LT. IROW(IR)) THEN IRO = IRO + 1 IF (IRO .LE. NROWSO) GOTO 20 RETURN ELSE IF (IROWO(IRO) .GT. IROW(IR)) THEN GOTO 10 ENDIF IPO = LROWO(IRO) DO 30 IPT = LROW(IR), LROW(IR+1)-1 40 IF (ICOLO(IPO) .LT. ICOL(IPT)) THEN IPO = IPO + 1 IF (IPO .LE. LROWO(IRO+1)-1) GOTO 40 GOTO 10 ELSE IF (ICOLO(IPO) .GT. ICOL(IPT)) THEN GOTO 30 ENDIF DO 50 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = UO(IPO+(IC-1)*NPTSO) 50 CONTINUE IPDOM(IPT) = 0 30 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PUTSOL (NPDE, U, ISTRUC, UC, ISTRCC, UI, LENUC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, ISTRUC(0:*), ISTRCC(0:*), LENUC DOUBLE PRECISION U(0:*), UC(0:*), UI(0:*) C Ccc PURPOSE: C Copy coarse grid solution UC to UI and inject fine grid solution U C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C U : IN. Solution at fine grid C ISTRUC : IN. Datastructure of the fine grid C UC : IN. Solution at coarse grid C ISTRCC : IN. Datastructure of the coarse grid C UI : OUT.Injected solution at coarse grid C LENUC : OUT.Dimension of coarse grid solution array C Ccc EXTERNALS USED: EXTERNAL INJFC, RCOPY C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, + LLROWC, NROWSC, NPTSC, LIROWC, LICOLC C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLROWC = 0 NROWSC = ISTRCC(LLROWC) NPTSC = ISTRCC(LLROWC+NROWSC+1)-1 LIROWC = LLROWC+NROWSC+2 LICOLC = LIROWC+NROWSC LENUC = NPTSC*NPDE + 1 C C Copy coarse grid solution to UI CALL RCOPY (LENUC, UC, UI) C C Inject fine grid solution into UI CALL INJFC (NPDE, U, UI, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRCC(LLROWC), ISTRCC(LIROWC), ISTRCC(LICOLC)) RETURN END SUBROUTINE INJFC (NPDE, U, UC, + LROW, IROW, ICOL, LROWC, IROWC, ICOLC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, LROW(0:*), IROW(*), ICOL(*), + LROWC(0:*), IROWC(*), ICOLC(*) DOUBLE PRECISION U(0:*), UC(0:*) C Ccc PURPOSE: C Inject solution from (embedded) fine grid into coarser grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C U : IN. Fine grid solution C UC : INOUT. C IN: Coarse grid solution C OUT: Injected solution at coarse grid C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LROWC : IN. -I C IROWC : IN. I Data structure of the coarse grid C ICOLC : IN. -I for description see fine grid above C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER IC, IPC, IPT, IRC, IR, NPTSC, NPTS, NROWSC, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NROWSC = LROWC(0) NPTSC = LROWC(NROWSC+1)-1 C Ccc Inject values from fine level into coarse grid solution IRC = 0 DO 10 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 10 IRC = IRC + 1 20 IF (2*IROWC(IRC) .NE. IROW(IR)) THEN IRC = IRC + 1 GOTO 20 ENDIF IPC = LROWC(IRC)-1 DO 30 IPT = LROW(IR), LROW(IR+1)-1 IF (ICOL(IPT)/2*2 .NE. ICOL(IPT)) GOTO 30 IPC = IPC + 1 40 IF (2*ICOLC(IPC) .NE. ICOL(IPT)) THEN IPC = IPC + 1 GOTO 40 ENDIF DO 50 IC = 1, NPDE UC(IPC+(IC-1)*NPTSC) = U(IPT+(IC-1)*NPTS) 50 CONTINUE 30 CONTINUE 10 CONTINUE C RETURN END SUBROUTINE INTPOL (NPDE, U, IPDOM, + LROW, IROW, ICOL, LBELOW, LABOVE, WORK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROW(0:*), IROW(*), ICOL(*), LBELOW(*), LABOVE(*) DOUBLE PRECISION U(0:*), WORK(*) C Ccc PURPOSE: C Interpolate where necessary solution C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C U : INOUT. C IN: Solution values at injected points C OUT: Interpolated solution values at other points C IPDOM : IN. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LBELOW : IN. (NPTS) C LBELOW(IPT): pointer to node below in actual grid C 0, if indexed node is lower boundary point C LABOVE : IN. (NPTS) C LABOVE(IPT): pointer to node above in actual grid C 0, if indexed node is upper boundary point C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER IC, IPT, IR, NPTS, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 C Ccc Interpolation in X-direction DO 10 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 10 DO 20 IPT = LROW(IR)+1, LROW(IR+1)-2 IF (IPDOM(IPT) .NE. 0) THEN DO 30 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = + (U(IPT-1+(IC-1)*NPTS) + U(IPT+1+(IC-1)*NPTS))/2 30 CONTINUE ENDIF 20 CONTINUE 10 CONTINUE C Ccc Interpolation in Y-direction DO 50 IR = 2, NROWS-1 IF (IROW(IR)/2*2 .EQ. IROW(IR)) GOTO 50 DO 60 IPT = LROW(IR), LROW(IR+1)-1 IF (IPDOM(IPT) .NE. 0) THEN DO 70 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = + (U(LBELOW(IPT)+(IC-1)*NPTS) + + U(LABOVE(IPT)+(IC-1)*NPTS))/2 70 CONTINUE ENDIF 60 CONTINUE 50 CONTINUE RETURN END SUBROUTINE RESID (T, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, LLBND, ILBND, LBND, LBELOW, LABOVE, DX, DY, + UT, UX, UY, UXX, UXY, UYY, F) C C----------------------------------------------------------------------- C C PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*), + LBELOW(*), LABOVE(*) DOUBLE PRECISION T, X(*), Y(*), UNP1(0:*), UN(0:*), UNM1(0:*), + DT, DTRAT, + UIB(*), DX, DY, UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + F(*) C C PURPOSE: C Compute time and space derivatives of U and residual F(t,Un+1,Udot) C C PARAMETER DESCRIPTION: C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C UNP1 : IN. Solution at Tn+1 on current grid C UN : IN. Solution at Tn on current grid C UNM1 : IN. Solution at Tn-1 on current grid C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C UIB : IN. Solution at T on internal boundaries C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C UT : OUT. Time derivative of U on current grid C UX : OUT. -I C UY : OUT. I C UXX : OUT. I Space derivatives of U on current grid C UXY : OUT. I C UYY : OUT. -I C F : OUT. Residual C Ccc EXTERNALS USED: EXTERNAL DERIVS, DERIVT, RES C C----------------------------------------------------------------------- C Ccc Compute derivatives CALL DERIVT (NPTS, NPDE, UNP1(1), UN(1), UNM1(1), DT, DTRAT, UT) CALL DERIVS (NPTS, NPDE, UNP1, LLBND, ILBND, LBND, LBELOW, LABOVE, + DX, DY, UX, UY, UXX, UXY, UYY) C Ccc Compute residual CALL RES (T, X, Y, NPTS, NPDE, UNP1(1), LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, F) C RETURN END SUBROUTINE DERIVT (NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, UT) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION UNP1(NPTS,NPDE), UN(NPTS,NPDE), UNM1(NPTS,NPDE), + DT, DTRAT, + UT(NPTS,NPDE) C Ccc PURPOSE: C Compute time derivative. If DTRAT = 0 first order results, C if DTRAT = DT/DT_old second order. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points of current grid C NPDE : IN. # PDE components C UNP1 : IN. Solution at Tn+1 on current grid C UN : IN. Solution at Tn on current grid C UNM1 : IN. Solution at Tn-1 on current grid C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C UT : OUT. Time derivative of U on current grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER I, IC DOUBLE PRECISION A0, A1, A2 A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) A1 = -(1+DTRAT)**2 / ((1+DTRAT)*DT) A2 = DTRAT**2 / ((1+DTRAT)*DT) DO 10 IC = 1, NPDE DO 10 I = 1, NPTS UT(I,IC) = A0*UNP1(I,IC) + A1*UN(I,IC) + A2*UNM1(I,IC) 10 CONTINUE RETURN END SUBROUTINE DERIVS (NPTS, NPDE, U, + LLBND, ILBND, LBND, LBELOW, LABOVE, + DX, DY, UX, UY, UXX, UXY, UYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*), + LBELOW(NPTS), LABOVE(NPTS) DOUBLE PRECISION U(0:NPTS*NPDE), DX, DY, UX(NPTS*NPDE), + UY(NPTS*NPDE), + UXX(NPTS*NPDE), UXY(NPTS*NPDE), UYY(NPTS*NPDE) C Ccc PURPOSE: C Compute space derivatives with second order approximation. Second C order derivatives are required only in the interior of the domain. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points of current grid C NPDE : IN. # PDE components C U : IN. Solution on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C UX : OUT. -I C UY : OUT. I C UXX : OUT. I Space derivatives of U on current grid C UXY : OUT. I C UYY : OUT. -I C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER I, IB, IC, IPT, LB, IM1, IM2, IP1, IP2, I1, I2, I3, I4 DOUBLE PRECISION FACX, FACY, FACXX, FACXY, FACYY C Ccc Zero derivative arrays in first and last point C (will possibly not be initialized) CDIR$ NEXTSCALAR DO 10 IC = 1, NPDE IPT = 1 I = IPT + (IC-1)*NPTS UX (I) = 0.0 UY (I) = 0.0 UXX(I) = 0.0 UXY(I) = 0.0 UYY(I) = 0.0 IPT = NPTS I = IPT + (IC-1)*NPTS UX (I) = 0.0 UY (I) = 0.0 UXX(I) = 0.0 UXY(I) = 0.0 UYY(I) = 0.0 10 CONTINUE C Ccc Compute derivatives in interior points, boundary values will be C rubbish FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACXY = 1/(2*DX*2*DY) FACYY = 1/DY**2 C DO 20 I = 2, NPTS*NPDE-1 UX (I) = (U(I+1)-U(I-1))*FACX UXX(I) = (U(I+1)-2*U(I)+U(I-1))*FACXX 20 CONTINUE C DO 30 IC = 1, NPDE DO 30 IPT = 2, NPTS-1 IM1 = LBELOW(IPT) + (IC-1)*NPTS I = IPT + (IC-1)*NPTS IP1 = LABOVE(IPT) + (IC-1)*NPTS UY (I) = (U(IP1)-U(IM1))*FACY UYY(I) = (U(IP1)-2*U(I)+U(IM1))*FACYY C I1 = LABOVE(IPT-1) + (IC-1)*NPTS I2 = LABOVE(IPT+1) + (IC-1)*NPTS I3 = LBELOW(IPT-1) + (IC-1)*NPTS I4 = LBELOW(IPT+1) + (IC-1)*NPTS UXY(I) = (U(I2)-U(I1)-U(I4)+U(I3))*FACXY 30 CONTINUE C Ccc Correct physical boundaries DO 40 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correct Uy DO 50 IC = 1, NPDE DO 50 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS UY(I) = (-3*U(I)+4*U(IP1)-U(IP2))*FACY 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correct Ux DO 60 IC = 1, NPDE DO 60 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (-3*U(I)+4*U(I+1)-U(I+2))*FACX 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correct Uy DO 70 IC = 1, NPDE DO 70 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS UY(I) = (+3*U(I)-4*U(IM1)+U(IM2))*FACY 70 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correct Ux DO 80 IC = 1, NPDE DO 80 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (+3*U(I)-4*U(I-1)+U(I-2))*FACX 80 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft or leftlower corner, correct Ux and Uy DO 100 IC = 1, NPDE DO 100 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (-3*U(I)+4*U(I+1)-U(I+2))*FACX IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS UY(I) = (-3*U(I)+4*U(IP1)-U(IP2))*FACY 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper or upperleft corner, correct Ux and Uy DO 110 IC = 1, NPDE DO 110 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (-3*U(I)+4*U(I+1)-U(I+2))*FACX IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS UY(I) = (3*U(I)-4*U(IM1)+U(IM2))*FACY 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright or rightupper corner, correct Ux and Uy DO 120 IC = 1, NPDE DO 120 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (+3*U(I)-4*U(I-1)+U(I-2))*FACX IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS UY(I) = (+3*U(I)-4*U(IM1)+U(IM2))*FACY 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower or lowerright corner, correct Ux and Uy DO 130 IC = 1, NPDE DO 130 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (+3*U(I)-4*U(I-1)+U(I-2))*FACX IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS UY(I) = (-3*U(I)+4*U(IP1)-U(IP2))*FACY 130 CONTINUE ENDIF 40 CONTINUE C RETURN END SUBROUTINE RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, F) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION T, X(*), Y(*), U(NPTS*NPDE), UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), F(NPTS*NPDE) C Ccc PURPOSE: C Compute residual F(t,U,Ut) C C PARAMETER DESCRIPTION: C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C F : OUT. Residual C Ccc EXTERNALS USED: EXTERNAL PDEBC, PDEF C C----------------------------------------------------------------------- C INTEGER I, IB, IC, LB, NBNDS, NIBPTS, IBS, IBE C Ccc Get residual on internal domain CALL PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, F, NPTS, NPDE) C Ccc Correct residual on physical boundaries CALL PDEBC (T, X, Y, U, UT, UX, UY, F, NPTS, NPDE, + LLBND, ILBND, LBND) C Ccc Correct residual on internal boundaries NBNDS = LLBND(0) IBS = LLBND(NBNDS+1) IBE = LLBND(NBNDS+2)-1 NIBPTS = IBE-IBS+1 DO 10 IC = 1, NPDE DO 10 LB = IBS, IBE I = LBND(LB) + (IC-1)*NPTS IB = LB-IBS+1 + (IC-1)*NIBPTS F(I) = U(I) - UIB(IB) 10 CONTINUE RETURN END LOGICAL FUNCTION CHKTIM (RWK, LU, LUO, NPDE, IWK, LSG, + TIMWGT, RELTOL, ABSTOL, WORK, DT, DTNEW, TIMON) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LU, LUO, NPDE, IWK(*), LSG(0:*) DOUBLE PRECISION RWK(*), TIMWGT(NPDE), RELTOL(NPDE), ABSTOL(NPDE), + WORK(*), DT, DTNEW, TIMON C Ccc PURPOSE: C Check if time step was OK. If so, CHKTIM = .TRUE. and DTNEW is set C to the stepsize for the next time step. If not CHKTIM = .FALSE. and C DTNEW is the stepsize for the next try. C Ccc PARAMETER DESCRIPTION: C RWK : IN. Work array containing both U and U_old on all grids of C this time level C LU : IN. Pointer after last element of U on base grid C LUO : IN. Pointer to first element of U_old on base grid C NPDE : IN. Number of PDE components C IWK : IN. Work array containing the datastructures for the C different grids on this level C LSG : IN. (0:LSG(0)) C LSG(0): # grid levels for this time step C LSG(I): pointer in IWK to datastructure for grid of level I C TIMWGT : IN. User defined time weight for each PDE component C used in check if time stepsize can be accepted C RELTOL : IN. (NPDE) C Relative time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C ABSTOL : IN. (NPDE) C Absolute time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C WORK : WORK. (max. # grid points on a level) C DT : IN. Current time stepsize C DTNEW : OUT. Stepsize for, new or retry of, timestep C Ccc EXTERNALS USED: DOUBLE PRECISION TIMMON EXTERNAL TIMMON C C----------------------------------------------------------------------- C INTEGER LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LENU DOUBLE PRECISION TIMONL C TIMON = 0.0 DO 10 LEVEL = 1, LSG(0) LLROW = LSG(LEVEL) NROWS = IWK(LLROW) NPTS = IWK(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = IWK(LLLBND) NBDPTS = IWK(LLLBND+NBNDS+1)-1 NBIPTS = IWK(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LENU = NPTS*NPDE+1 LU = LU - LENU C Compute time monitor for this grid level TIMONL = TIMMON (RWK(LU+1), RWK(LUO+1), NPTS, NPDE, + IWK(LLBNDP), NBIPTS, TIMWGT, RELTOL, ABSTOL, WORK) LUO = LUO + LENU*2 C Compute maximum of monitor values for all levels TIMON = MAX(TIMON,TIMONL) 10 CONTINUE C Ccc Compute new stepsize and check if current step can be accepted C Compute new stepsize such that prediction of next time monitor is 0.5 IF (TIMON .GT. 1.0) THEN C Reject step CHKTIM = .FALSE. DTNEW = 0.5 / TIMON * DT C restrict time step variance DTNEW = MAX(DTNEW, DT/4) ELSE C Accept step CHKTIM = .TRUE. C restrict time step variance DTNEW = 2*DT IF (TIMON .GT. 0.25) DTNEW = 0.5 / TIMON * DT ENDIF RETURN END DOUBLE PRECISION FUNCTION TIMMON (U, UO, NPTS, NPDE, LBND, NBIPTS, + TIMWGT, RELTOL, ABSTOL, DTUT) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NBIPTS INTEGER NPTS, NPDE, LBND(NBIPTS) DOUBLE PRECISION U(NPTS,NPDE), UO(NPTS,NPDE), TIMWGT(NPDE), + RELTOL(NPDE), ABSTOL(NPDE), DTUT(NPTS) C Ccc PURPOSE: C Compute time monitor for a specific grid level. C C Time monitor: C TIMMON = C sqrt{ sum TIMWGT(ic)/N sum [dt.Ut(ipt,ic) / w(ipt,ic)] ** 2 } C (ic=1,NPDE) (ipt=1,NPTS) C with N = NPTS*NPDE and w(ipt,ic) = ABSTOL(ic) + RELTOL(ic).|U(ipt,ic)| C On the boundaries Ut is set to zero. C Ccc PARAMETER DESCRIPTION: C U : IN. Array of solution values at Tn+1 on current grid C UO : IN. Array of solution values at Tn on current grid C NPTS : IN. # grid points C NPDE : IN. # PDE components C LBND : IN. Array containing pointers to boundary points in the grid C NBIPTS : IN. Total # boundary points C TIMWGT : IN. User defined time weight for each PDE component C used in check if time stepsize can be accepted C RELTOL : IN. (NPDE) C Relative time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C ABSTOL : IN. (NPDE) C Absolute time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C DTUT : WORK. (NPTS) C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPT, LB, N DOUBLE PRECISION TMIC, W2 C N = NPTS*NPDE C TIMMON = 0.0 DO 10 IC = 1, NPDE IF (TIMWGT(IC) .EQ. 0.0) GOTO 10 DO 20 IPT = 1, NPTS DTUT(IPT) = U(IPT,IC)-UO(IPT,IC) 20 CONTINUE DO 30 LB = 1, NBIPTS IPT = LBND(LB) DTUT(IPT) = 0.0 30 CONTINUE TMIC = 0.0 DO 40 IPT = 1, NPTS W2 = ABSTOL(IC) + RELTOL(IC)*ABS(U(IPT,IC)) TMIC = TMIC + (DTUT(IPT) / W2) ** 2 40 CONTINUE TIMMON = TIMMON + TIMWGT(IC)*TMIC/N 10 CONTINUE TIMMON = SQRT(TIMMON) RETURN END SUBROUTINE INTGRB (ISTRUC, X, Y, NPDE, UIB, UNP1, UN, UNM1, + RELTOL, ABSTOL, TN, DT, DTRAT, DX, DY, WT, F, CORR, RWORK, + IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ISTRUC(0:*), NPDE, IERR DOUBLE PRECISION X(*), Y(*), UIB(*), UNP1(0:*), UN(0:*), + UNM1(0:*), RELTOL(NPDE), ABSTOL(NPDE), + TN, DT, DTRAT, DX, DY, + WT(*), F(*), CORR(*), RWORK(*) C Ccc PURPOSE: C Integration in time with BDF2 (first timestep BE). C Solve nonlinear system F(Tn+1, Un+1, Udot) = 0 with modified Newton. C Solve linear systems with ILU-preconditioned BiCGStab. C Ccc PARAMETER DESCRIPTION: C ISTRUC : IN. Data structure Un+1 grid. C X,Y : IN. Physical coordinates grid. C NPDE : IN. # PDE components C UIB : IN. Dirichlet boundary values on internal boundary. C UNP1 : INOUT. On entry: Initial solution, on exit final solution C Newton converged C UN : IN. Solution at Tn on Un+1 grid C UNM1 : IN. Solution at Tn-1 on Un+1 grid C RELTOL : IN. Relative tolerance for Newton process C ABSTOL : IN. Absolute tolerance for Newton process C TN : IN. Previous time C DT : IN. Current time step C DX : IN. Current grid spacing in X-direction C DY : IN. Current grid spacing in Y-direction C DTRAT : IN. If BE: 0, if BDF2: DT/DT_old C WT : WORK. (NPTS*NPDE) C Weight function for norm computation C F : WORK. (NPTS*NPDE) C Residual C CORR : WORK. (NPTS*NPDE) C Correction in Newton iteration C RWORK : WORK. (JACILU+max(RESWRK,LSSWRK)) C JACILU: 2.9.NPDE.LENU C RESWRK: LENU.6 C LSSWRK: LENU.5 C LENU : NPTS*NPDE C IERR : OUT. C 0: OK. C 10: Newton process did not converge C C Ccc EXTERNALS USED: DOUBLE PRECISION MAXNRM, WDNRM2 EXTERNAL ERRWGT, BICGST, JAC, JACPB, MAXNRM, RESID, WDNRM2 C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARBICGSTAB' C C PARBICGSTAB C C Parameters for linear system solver BiCGStab C MAXLIT : Max. number of BiCGStab iterations C TOLLSB : Tolerance for linear system solver INTEGER MAXLIT DOUBLE PRECISION TOLLSB PARAMETER (MAXLIT = 100, TOLLSB = TOLNEW/10) C C end INCLUDE 'PARBICGSTAB' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + LLLDG, LLUDG, LLSLP, LLLSL, LLSUP, LLLSU, + LENU, LENGLU, LUT, LUX, LUY, LUXX, LUXY, LUYY, + LBCG1, LBCG2, LBCG3, LBCG4, LBCG5, LG, LGLU, LJACWK, + NJAC, NRES, I, NIT, ITER LOGICAL NEWJAC DOUBLE PRECISION ERR, CORNRM, OLDNRM, RATE, TOL, UNRM C IERR = 0 C IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Nonlinear system solver at T ='',E16.7)') + TN+DT ENDIF C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C LLLDG = LLABV+NPTS LLUDG = LLLDG+NPTS*3 LLSLP = LLUDG+NPTS*3 LLLSL = LLSLP+NPTS LLSUP = LLLSL+ISTRUC(LLLSL)+1 LLLSU = LLSUP+NPTS C LENU = NPTS*NPDE LENGLU = LENU*NPDE*9 C LUT = 1 LUX = LUT + LENU LUY = LUX + LENU LUXX = LUY + LENU LUXY = LUXX + LENU LUYY = LUXY + LENU C LBCG1 = LUX LBCG2 = LBCG1 + LENU LBCG3 = LBCG2 + LENU LBCG4 = LBCG3 + LENU LBCG5 = LBCG4 + LENU C LG = MAX (LUYY+LENU, LBCG5+LENU) LGLU = LG+LENGLU LJACWK = LGLU C Ccc Set error weights for use in Newton process CALL ERRWGT (NPTS, NPDE, UNP1(1), RELTOL, ABSTOL, WT) C Ccc Compute weighted norm of initial solution for convergence check UNRM = WDNRM2 (LENU, UNP1(1), WT) C Ccc Compute derivatives and residual CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = 1 IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WDNRM2 (LENU, F, WT) ENDIF C Ccc Compute Jacobian G = dF/dU and its incomplete factorization GLU CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, DX, DY, + UNP1(1), ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LJACWK), RWORK(LG)) C Copy Jacobian for factorization CALL RCOPY (LENGLU, RWORK(LG), RWORK(LGLU)) C Compute ILU CALL JACPB (NPTS, NPDE, RWORK(LGLU), ISTRUC(LLLDG), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLSLP), ISTRUC(LLLSL)) NEWJAC = .TRUE. NJAC = 1 C Ccc Newton iteration loop 9 CONTINUE DO 10 NIT = 1, MAXNIT C Cccccc Solve G.corr = F. Store the residual in F. TOL = TOLLSB / (2**NIT) CALL BICGST (NPTS, NPDE, RWORK(LG), CORR, F, WT, TOL, + MAXLIT, RWORK(LGLU), ISTRUC(LLLDG), ISTRUC(LLUDG), + ISTRUC(LLSLP), ISTRUC(LLLSL), ISTRUC(LLSUP), ISTRUC(LLLSU), + LUNLSS, RWORK(LBCG1), RWORK(LBCG2), RWORK(LBCG3), + RWORK(LBCG4), RWORK(LBCG5), ITER, ERR, IERR) NLSIT(LEVEL,NIT) = NLSIT(LEVEL,NIT)+ ITER IF (IERR .NE. 0) GOTO 100 C Cccccc Test for convergence CORNRM = WDNRM2 (LENU, CORR, WT) IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' NI:'',I3,'', NLI:'',I4,'', ERLI'':,E16.7, + '', ERNI:'',E16.7)') NIT, ITER, ERR, CORNRM ENDIF IF (CORNRM .LE. 100*UROUND*UNRM) GOTO 900 IF (.NOT. NEWJAC) THEN RATE = SQRT(CORNRM/OLDNRM) IF (RATE .GT. 0.9) THEN C Divergence GOTO 100 ELSE IF (RATE/(1-RATE)*CORNRM .LE. TOLNEW) THEN C Convergence GOTO 900 ENDIF ENDIF OLDNRM = CORNRM C Ccccc Update solution DO 20 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 20 CONTINUE C Ccc Compute derivatives and residual and start next iteration CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = NRES+1 NEWJAC = .FALSE. IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WDNRM2 (LENU, F, WT) ENDIF 10 CONTINUE Ccc End Newton iteration loop C Ccc No convergence in max. # iterations C Ccccc Check if Jacobian is recent 100 CONTINUE IF (.NOT. NEWJAC .AND. NJAC .LT. MAXJAC) THEN IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' New Jacobian, NIT='',I4)') NIT ENDIF C Compute new Jacobian and retry CALL DERIVS (NPTS, NPDE, UNP1, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, + DX, DY, UNP1(1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LJACWK), RWORK(LG)) C Copy Jacobian for factorization CALL RCOPY (LENGLU, RWORK(LG), RWORK(LGLU)) C Compute ILU CALL JACPB (NPTS, NPDE, RWORK(LGLU), ISTRUC(LLLDG), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLSLP), ISTRUC(LLLSL)) C NEWJAC = .TRUE. NJAC = NJAC + 1 GOTO 9 ELSE C Newton failure IERR = 10 NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Newton failure, NIT='',I4)') NIT ENDIF RETURN ENDIF C Ccc Nonlinear proces has been solved 900 CONTINUE C Update solution DO 30 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 30 CONTINUE C NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC C RETURN END SUBROUTINE JAC (NPTS, NPDE, F, T, X, Y, DT, DTRAT, + DX, DY, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, ABSTOL, WORK, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION F(*), T, X(*), Y(*), DT, DTRAT, DX, DY, U(*), + UIB(*), UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), WORK(*), G(*) C Ccc PURPOSE: C Compute Jacobian G = dF/dU and store in block 9-diagonal mode. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C U : IN. Solution at T on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C WORK : WORK. (6*LENFU+2*LENU+NPTS) C G : OUT. Jacobian stored in block 9-diagonal mode C Ccc EXTERNALS USED: EXTERNAL DERIVF, JACG C C----------------------------------------------------------------------- C INTEGER LENU, LENFU, LFU, LFUX, LFUY, LFUXX, LFUXY, LFUYY, + LDEL, LRWK DOUBLE PRECISION A0 C LENU = NPTS*NPDE LENFU = LENU*NPDE C LFU = 1 LFUX = LFU + LENFU LFUY = LFUX + LENFU LFUXX = LFUY + LENFU LFUXY = LFUXX + LENFU LFUYY = LFUXY + LENFU LDEL = LFUYY + LENFU LRWK = LDEL + NPTS C Ccc Compute dF/dU, dF/dUt, dF/dUx, dF/dUy, dF/dUxx, dF/dUxy, dF/dUyy A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) CALL DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, WORK(LDEL), WORK(LRWK), + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUXY), WORK(LFUYY)) C Ccc Compute G = dF/dU + dF/dUx.dUx/dU + ... CALL JACG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUXY), WORK(LFUYY), G) C RETURN END SUBROUTINE PRTRBU (ICPTB, NPTS, NPDE, U, A0, DT, UT, TOL, DEL, + UBAR, UTBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ICPTB, NPTS, NPDE DOUBLE PRECISION U(NPTS,NPDE), A0, DT, UT(NPTS,NPDE), TOL, + DEL(NPTS), UBAR(NPTS,NPDE), UTBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb the ICPTB-th component of U. Return perturbance in DEL and C perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C ICPTB : IN. Component of U to be perturbed C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C TOL : IN. Threshold for perturbation C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IPT DOUBLE PRECISION DELI, EPS CALL RCOPY (NPTS*NPDE, U, UBAR) CALL RCOPY (NPTS*NPDE, UT, UTBAR) EPS = SQRT(UROUND) DO 10 IPT = 1, NPTS C Compute perturbance, if U=0, U(T+dt)=dtUt, if both are zero take C threshold DELI = EPS*MAX(ABS(U(IPT,ICPTB)),ABS(DT*UT(IPT,ICPTB)),TOL) DELI = SIGN(DELI,DT*UT(IPT,ICPTB)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT) = (U(IPT,ICPTB)+DELI)-U(IPT,ICPTB) UBAR(IPT,ICPTB) = U(IPT,ICPTB) + DEL(IPT) UTBAR(IPT,ICPTB) = UT(IPT,ICPTB) + A0*DEL(IPT) 10 CONTINUE RETURN END SUBROUTINE PERTRB (ICPTB, NPTS, NPDE, U, TOL, DEL, UBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ICPTB, NPTS, NPDE DOUBLE PRECISION U(NPTS,NPDE), TOL, DEL(NPTS), UBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb the ICPTB-th component of U. Return perturbance in DEL and C perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C ICPTB : IN. Component of U to be perturbed C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C TOL : IN. Threshold for perturbation C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IPT DOUBLE PRECISION DELI, EPS CALL RCOPY (NPTS*NPDE, U, UBAR) EPS = SQRT(UROUND) DO 10 IPT = 1, NPTS C Compute perturbance DELI = EPS*MAX(ABS(U(IPT,ICPTB)),TOL) C To ensure that UBAR has the same sign as U DELI = SIGN(DELI,U(IPT,ICPTB)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT) = (U(IPT,ICPTB)+DELI)-U(IPT,ICPTB) UBAR(IPT,ICPTB) = U(IPT,ICPTB) + DEL(IPT) 10 CONTINUE RETURN END SUBROUTINE JACG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + FU, FUX, FUY, FUXX, FUXY, FUYY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION DX, DY, + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE),FUXY(NPTS*NPDE,NPDE),FUYY(NPTS*NPDE,NPDE), + G(NPTS*NPDE,NPDE,-4:4) C Ccc PURPOSE: C Compute Jacobian G = dF/dU using derivatives of residual wrt C (derivatives of) U C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FU : IN. Derivative residual F(.,U,Ut,.) wrt U C FUX : IN. Derivative residual F(.,Ux,.) wrt Ux C FUY : IN. Derivative residual F(.,Uy,.) wrt Uy C FUXX : IN. Derivative residual F(.,Uxx,.) wrt Uxx C FUXY : IN. Derivative residual F(.,Uxy,.) wrt Uxy C FUYY : IN. Derivative residual F(.,Uyy,.) wrt Uyy C G : OUT. Jacobian stored in block 9-diagonal mode C Ccc EXTERNALS USED: EXTERNAL JACGBD C C----------------------------------------------------------------------- C INTEGER I, JC, LENU DOUBLE PRECISION FACX, FACY, FACXX, FACXY, FACYY C LENU = NPTS*NPDE C FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACXY = 1/(2*DX*2*DY) FACYY = 1/DY**2 C Ccc First internal domain DO 10 JC = 1, NPDE DO 10 I = 1, LENU C dF(ipt,ic)/dU(below(ipt)-1,jc) G(I,JC,-4) = FUXY(I,JC)*(+FACXY) C dF(ipt,ic)/dU(below(ipt),jc) G(I,JC,-3) = + FUY(I,JC)*(-FACY) + FUYY(I,JC)*(+FACYY) C dF(ipt,ic)/dU(below(ipt)+1,jc) G(I,JC,-2) = FUXY(I,JC)*(-FACXY) C dF(ipt,ic)/dU(ipt-1,jc) G(I,JC,-1) = + FUX(I,JC)*(-FACX) + FUXX(I,JC)*(+FACXX) C dF(ipt,ic)/dU(ipt,jc) G(I,JC, 0) = + FU(I,JC) + + FUXX(I,JC)*(-2*FACXX) + FUYY(I,JC)*(-2*FACYY) C dF(ipt,ic)/dU(ipt+1,jc) G(I,JC,+1) = + FUX(I,JC)*(+FACX) + FUXX(I,JC)*(+FACXX) C dF(ipt,ic)/dU(above(ipt)-1,jc) G(I,JC,+2) = FUXY(I,JC)*(-FACXY) C dF(ipt,ic)/dU(above(ipt),jc) G(I,JC,+3) = + FUY(I,JC)*(+FACY) + FUYY(I,JC)*(+FACYY) C dF(ipt,ic)/dU(above(ipt)+1,jc) G(I,JC,+4) = FUXY(I,JC)*(+FACXY) 10 CONTINUE C C Correct boundaries CALL JACGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C RETURN END SUBROUTINE JACGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION FACX, FACY, + FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), + G(NPTS,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Correct Jacobian G = dF/dU for second order approximation of C first order derivatives at boundaries C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C FACX : IN. 1/(2*DX) C FACY : IN. 1/(2*DY) C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FUX : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Ux C FUY : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Uy C G : INOUT. C IN: Jacobian stored in block 9-diagonal mode C OUT: Jacobian corrected for first order derivatives at C boundaries C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, JC, IB, LB C Ccc Boundary corrections, no corrections needed for internal boundaries DO 20 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dUy DO 30 JC = 1, NPDE DO 30 IC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-3) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(-3*FACY) G(IPT,IC,JC,+3) = FUY(IPT,IC,JC)*(+4*FACY) C dF(ipt,ic)/dU(above(above(ipt)),jc) G(IPT,IC,JC,+4) = FUY(IPT,IC,JC)*(-FACY) 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dUx DO 40 JC = 1, NPDE DO 40 IC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-1) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(-3*FACX) G(IPT,IC,JC,+1) = FUX(IPT,IC,JC)*(+4*FACX) C dF(ipt,ic)/dU(ipt+2),jc) G(IPT,IC,JC,+2) = FUX(IPT,IC,JC)*(-FACX) 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dUy DO 50 JC = 1, NPDE DO 50 IC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(below(below(ipt)),jc) G(IPT,IC,JC,-4) = FUY(IPT,IC,JC)*(+FACY) G(IPT,IC,JC,-3) = FUY(IPT,IC,JC)*(-4*FACY) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(+3*FACY) G(IPT,IC,JC,+3) = 0.0 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dUx DO 60 JC = 1, NPDE DO 60 IC = 1, NPDE CDIR$ IVDEP DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(ipt-2),jc) G(IPT,IC,JC,-2) = FUX(IPT,IC,JC)*(+FACX) G(IPT,IC,JC,-1) = FUX(IPT,IC,JC)*(-4*FACX) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(+3*FACX) G(IPT,IC,JC,+1) = 0.0 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dUx and dF/dUy DO 100 JC = 1, NPDE DO 100 IC = 1, NPDE DO 105 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-3) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(-3*FACY) G(IPT,IC,JC,+3) = FUY(IPT,IC,JC)*(+4*FACY) C dF(ipt,ic)/dU(above(above(ipt)),jc) G(IPT,IC,JC,+4) = FUY(IPT,IC,JC)*(-FACY) G(IPT,IC,JC,-1) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(-3*FACX) G(IPT,IC,JC,+1) = FUX(IPT,IC,JC)*(+4*FACX) C dF(ipt,ic)/dU(ipt+2),jc) G(IPT,IC,JC,+2) = FUX(IPT,IC,JC)*(-FACX) 105 CONTINUE 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dUx and dF/dUy DO 110 JC = 1, NPDE DO 110 IC = 1, NPDE DO 115 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-1) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(-3*FACX) G(IPT,IC,JC,+1) = FUX(IPT,IC,JC)*(+4*FACX) C dF(ipt,ic)/dU(ipt+2),jc) G(IPT,IC,JC,+2) = FUX(IPT,IC,JC)*(-FACX) C dF(ipt,ic)/dU(below(below(ipt)),jc) G(IPT,IC,JC,-4) = FUY(IPT,IC,JC)*(+FACY) G(IPT,IC,JC,-3) = FUY(IPT,IC,JC)*(-4*FACY) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(+3*FACY) G(IPT,IC,JC,+3) = 0.0 115 CONTINUE 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dUx and dF/dUy DO 120 JC = 1, NPDE DO 120 IC = 1, NPDE DO 125 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(below(below(ipt)),jc) G(IPT,IC,JC,-4) = FUY(IPT,IC,JC)*(+FACY) G(IPT,IC,JC,-3) = FUY(IPT,IC,JC)*(-4*FACY) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(+3*FACY) G(IPT,IC,JC,+3) = 0.0 C dF(ipt,ic)/dU(ipt-2),jc) G(IPT,IC,JC,-2) = FUX(IPT,IC,JC)*(+FACX) G(IPT,IC,JC,-1) = FUX(IPT,IC,JC)*(-4*FACX) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(+3*FACX) G(IPT,IC,JC,+1) = 0.0 125 CONTINUE 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dUx and dF/dUy DO 130 JC = 1, NPDE DO 130 IC = 1, NPDE DO 135 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(ipt-2),jc) G(IPT,IC,JC,-2) = FUX(IPT,IC,JC)*(+FACX) G(IPT,IC,JC,-1) = FUX(IPT,IC,JC)*(-4*FACX) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(+3*FACX) G(IPT,IC,JC,+1) = 0.0 G(IPT,IC,JC,-3) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(-3*FACY) G(IPT,IC,JC,+3) = FUY(IPT,IC,JC)*(+4*FACY) C dF(ipt,ic)/dU(above(above(ipt)),jc) G(IPT,IC,JC,+4) = FUY(IPT,IC,JC)*(-FACY) 135 CONTINUE 130 CONTINUE ENDIF 20 CONTINUE C RETURN END SUBROUTINE JACSDP (NPTS, LLBND, ILBND, LBND, + LBELOW, LABOVE, LLDG, LUDG) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), ILBND(*), LBND(*), + LBELOW(NPTS), LABOVE(NPTS), LLDG(NPTS,-4:-2), LUDG(NPTS,2:4) C Ccc PURPOSE: C Set pointers to nodes of lower 3 subdiagonals of Jacobian in LLDG and C to nodes of upper 3 superdiagonals in LUDG. All nonexisting diagonals C should point to the main diagonal nodes. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C LLDG : OUT. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LUDG : OUT. (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LUDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, NBNDS, IB, LB C Ccc First internal domain IPT = 1 LUDG(IPT,+3) = LABOVE(IPT) DO 10 IPT = 2, NPTS-1 LLDG(IPT,-4) = LBELOW(IPT-1) LLDG(IPT,-3) = LBELOW(IPT) LLDG(IPT,-2) = LBELOW(IPT+1) LUDG(IPT,+2) = LABOVE(IPT-1) LUDG(IPT,+3) = LABOVE(IPT) LUDG(IPT,+4) = LABOVE(IPT+1) 10 CONTINUE IPT = NPTS LLDG(IPT,-3) = LBELOW(IPT) C Ccc Correct boundaries NBNDS = LLBND(0) DO 20 IB = 1, NBNDS IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, no subdiagonals, adjust supers C X C . X . C X O X DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT LUDG(IPT,+4) = LABOVE(LABOVE(IPT)) 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, adjust sub and super C X . C O X X C X . DO 40 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LUDG(IPT,+2) = IPT+2 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, no super diagonals, adjust subs C X O X C . X . C X DO 50 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = LBELOW(LBELOW(IPT)) LUDG(IPT,+2) = IPT LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, adjust sub and super C . X C X X O C . X DO 60 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-2) = IPT-2 LUDG(IPT,+4) = IPT 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner C X C X C O X X DO 100 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT LUDG(IPT,+2) = IPT+2 LUDG(IPT,+4) = LABOVE(LABOVE(IPT)) 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner C O X X C X . C X DO 110 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = LBELOW(LBELOW(IPT)) LUDG(IPT,+2) = IPT+2 LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner C X X 0 C X C X DO 120 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = LBELOW(LBELOW(IPT)) LLDG(IPT,-2) = IPT-2 LUDG(IPT,+2) = IPT LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner C X C . X C X X 0 DO 130 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT-2 LUDG(IPT,+4) = LABOVE(LABOVE(IPT)) 130 CONTINUE ENDIF 20 CONTINUE C IB = NBNDS+1 CDIR$ VECTOR C Internal boundary, Dirichlet condition, no off diagonals C . . . C . O . C . . . DO 200 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT LUDG(IPT,+2) = IPT LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 200 CONTINUE C RETURN END SUBROUTINE JACPB (NPTS, NPDE, GLU, LLDG, + LLBND, ILBND, LBND, LSL, LLSL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(*), + LLBND(0:*), ILBND(*), LBND(*), LSL(*), LLSL(0:*) DOUBLE PRECISION GLU(*) C Ccc PURPOSE: C Compute ILU factorization of the Jacobian in block 9-diagonal mode. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C GLU : INOUT. C IN: Jacobian stored in block 9-diagonal mode C OUT: ILU factorization of Jacobian stored in block C 9-diagonal mode C LLDG : IN. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LSL : IN. (NPTS) C LSL(ISLPT): pointer to node in actual grid C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # independent data dependency lists in ILU C factorization and forward sweep C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: EXTERNAL ILU, JAC9 C C----------------------------------------------------------------------- C Ccc Adapt Jacobian to real block 9-diagonal structure by replacing C second-order boundary discretization by first-order CALL JAC9 (NPTS, NPDE, GLU, LLBND, ILBND, LBND) C Ccc Incomplete LU factorization CALL ILU (NPTS, NPDE, GLU, LLDG, LSL, LLSL) C RETURN END SUBROUTINE JAC9 (NPTS, NPDE, A, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION A(NPTS,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Replace second-order boundary discretization by first-order in C Jacobian to get real block 9-diagonal structure C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C A : INOUT. C IN: Jacobian C OUT: Jacobian with second-order boundary discretization C replaced by first-order C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, JC, IB, LB C DO 10 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dy DO 20 IC = 1, NPDE DO 20 JC = 1, NPDE CDIR$ IVDEP DO 25 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,4) A(IPT,IC,JC,4) = 0.0 25 CONTINUE 20 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dx DO 30 IC = 1, NPDE DO 30 JC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,2) A(IPT,IC,JC,2) = 0.0 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dy DO 40 IC = 1, NPDE DO 40 JC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-4) A(IPT,IC,JC,-4) = 0.0 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dx DO 50 IC = 1, NPDE DO 50 JC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-2) A(IPT,IC,JC,-2) = 0.0 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dx and dF/dy DO 60 IC = 1, NPDE DO 60 JC = 1, NPDE DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,4) A(IPT,IC,JC,4) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,2) A(IPT,IC,JC,2) = 0.0 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dx and dF/dy DO 70 IC = 1, NPDE DO 70 JC = 1, NPDE DO 75 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,2) A(IPT,IC,JC,2) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-4) A(IPT,IC,JC,-4) = 0.0 75 CONTINUE 70 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dx and dF/dy DO 80 IC = 1, NPDE DO 80 JC = 1, NPDE DO 85 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-2) A(IPT,IC,JC,-2) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-4) A(IPT,IC,JC,-4) = 0.0 85 CONTINUE 80 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dx and dF/dy DO 90 IC = 1, NPDE DO 90 JC = 1, NPDE DO 95 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-2) A(IPT,IC,JC,-2) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,4) A(IPT,IC,JC,4) = 0.0 95 CONTINUE 90 CONTINUE ENDIF 10 CONTINUE C RETURN END SUBROUTINE JACSLP (NPTS, LLBND, ILBND, LBND, LLDG, M, LLS, LS) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), ILBND(*), LBND(*), LLDG(NPTS,-4:-2), + M(NPTS), LLS(0:*), LS(NPTS) C Ccc PURPOSE: C Make data-dependency list for ILU factorization and forward sweep of C backsolve. C C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LLDG : IN. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C M : WORK. (NPTS) C M(IPT) contains list # of node IPT C LLS : OUT. (0:LLS(0)) C LLS(0) = # independent data dependency lists in ILU C factorization and forward sweep C LLS(1:LLS(0)): pointers to the start of a list in LS C LS : OUT. (NPTS) C LS(ISPT): pointer to node in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, NBNDS, IB, LB, IW, ISW, IS, ISE, MAXM, MI C Ccc Determine for each grid point the # of its data dependency list. C LLS(MI) contains # nodes in list MI C M(IPT) contains list # of node IPT C C Initialize LLS and M DO 1 IPT = 1, NPTS LLS(IPT-1) = 0 M(IPT) = 0 1 CONTINUE C C First list contains independent points, i.e., lowerleft corners and C internal boundary points. C For first list the pointers to the nodes in the grid can already be C stored in LS NBNDS = LLBND(0) DO 10 IB = 1, NBNDS IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, node in starting list DO 20 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 20 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, mark node DO 25 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 25 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN CDIR$ VECTOR C Left boundary, mark node DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 30 CONTINUE ENDIF 10 CONTINUE IB = NBNDS+1 C Internal boundary, Dirichlet condition, node in starting list DO 40 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 40 CONTINUE C C C Compute for rest of nodes their list #; a node is dependent from C its neighbors at compass points W, SW, S and SE MAXM = 0 DO 50 IPT = 1, NPTS IF (M(IPT) .GT. 0) THEN C Node already in list GOTO 50 ELSE IF (M(IPT) .LT. 0) THEN C Left boundary IW = IPT M(IPT) = 0 ELSE IW = IPT-1 ENDIF ISW = LLDG(IPT,-4) IS = LLDG(IPT,-3) ISE = LLDG(IPT,-2) MI = MAX(M(IW),M(ISW),M(IS),M(ISE)) + 1 M(IPT) = MI LLS(MI) = LLS(MI) + 1 MAXM = MAX(MAXM,MI) 50 CONTINUE C Ccc Store list pointers in LLS and grid pointers in LS C C LLS(i):=SUM (# nodes in list_j) C j=1,i DO 60 IS = 2, MAXM LLS(IS) = LLS(IS) + LLS(IS-1) 60 CONTINUE C C Store grid pointers C LLS(i-1) is pointer to next free place in list i-1 in LS LLS(0) = LLS(1) DO 70 IPT = 2, NPTS IF (M(IPT) .NE. 1) THEN MI = M(IPT) LLS(MI-1) = LLS(MI-1) + 1 LS(LLS(MI-1)) = IPT ENDIF 70 CONTINUE C LLS(i-1) points to list i in LS, should be i-1 DO 80 IS = MAXM, 1, -1 LLS(IS) = LLS(IS-1) 80 CONTINUE C Ccc Store # lists in LLS(0) LLS(0) = MAXM RETURN END SUBROUTINE JACSUP (NPTS, LLBND, ILBND, LBND, LUDG, M, LLS, LS) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), ILBND(*), LBND(*), LUDG(NPTS,2:4), + M(NPTS), LLS(0:*), LS(NPTS) C Ccc PURPOSE: C Make data-dependency list for backward sweep of backsolve. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LUDG : IN. (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LLDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C M : WORK. (NPTS) C M(IPT) contains list # of node IPT C LLS : OUT. (0:LLS(0)) C LLS(0) = # independent data dependency lists in C backward sweep C LLS(1:LLS(0)): pointers to the start of a list in LS C LS : OUT. (NPTS) C LS(ISPT): pointer to node in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, NBNDS, IB, LB, IE, INW, IN, INE, IS, MAXM, MI C Ccc Determine for each grid point the # of its data dependency list. C LLS(MI) contains # nodes in list MI C M(IPT) contains list # of node IPT C C Initialize LLS and M DO 1 IPT = 1, NPTS LLS(IPT-1) = 0 M(IPT) = 0 1 CONTINUE C C First list contains independent points, i.e., upperright corners and C internal boundary points. C For first list the pointers to the nodes in the grid can already be C stored in LS NBNDS = LLBND(0) DO 10 IB = 1, NBNDS IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN CDIR$ NOVECTOR C Upperright corner, node in starting list DO 20 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 20 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, mark node DO 25 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 25 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN CDIR$ VECTOR C Right boundary, mark node DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 30 CONTINUE ENDIF 10 CONTINUE IB = NBNDS+1 C Internal boundary, Dirichlet condition, node in starting list DO 40 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 40 CONTINUE C C C Compute for rest of nodes their list #; a node is dependent from C its neighbors at compass points E, NW, N and NE MAXM = 0 DO 50 IPT = NPTS, 1, -1 IF (M(IPT) .GT. 0) THEN C Node already in list GOTO 50 ELSE IF (M(IPT) .LT. 0) THEN C Right boundary IE = IPT M(IPT) = 0 ELSE IE = IPT+1 ENDIF INW = LUDG(IPT,2) IN = LUDG(IPT,3) INE = LUDG(IPT,4) MI = MAX(M(IE),M(INW),M(IN),M(INE)) + 1 M(IPT) = MI LLS(MI) = LLS(MI) + 1 MAXM = MAX(MAXM,MI) 50 CONTINUE C Ccc Store list pointers in LLS and grid pointers in LS C C LLS(i):=SUM (# nodes in list_j) C j=1,i DO 60 IS = 2, MAXM LLS(IS) = LLS(IS) + LLS(IS-1) 60 CONTINUE C C Store grid pointers C LLS(i-1) is pointer to next free place in list i-1 in LS LLS(0) = LLS(1) DO 70 IPT = NPTS-1, 1, -1 IF (M(IPT) .NE. 1) THEN MI = M(IPT) LLS(MI-1) = LLS(MI-1) + 1 LS(LLS(MI-1)) = IPT ENDIF 70 CONTINUE C LLS(i-1) points to list i in LS, should be i-1 DO 80 IS = MAXM, 1, -1 LLS(IS) = LLS(IS-1) 80 CONTINUE C Ccc Store # lists in LLS(0) LLS(0) = MAXM RETURN END SUBROUTINE BICGST (NPTS, NPDE, A, X, B, WT, TOL, ITMAX, + ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + LUN, R, R0, P, T, V, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, ITMAX, + LLDG(*), LUDG(*), LSL(*), LLSL(*), LSU(*), LLSU(*), + LUN, ITER, IERR DOUBLE PRECISION A(*), X(NPTS*NPDE), B(NPTS*NPDE), WT(NPTS*NPDE), + TOL, ALU(*), R(NPTS*NPDE), R0(NPTS*NPDE), P(NPTS*NPDE), + T(NPTS*NPDE), V(NPTS*NPDE), ERR C Ccc PURPOSE: C Solve a Non-Symmetric linear system Ax = b using the Preconditioned C BiConjugate Gradient STAB method. Preconditioning is done with an C Incomplete LU factorization of A. C Actually solved is the system [P^(-1).G].x = [P^(-1).F] C until ||residual||_WRMS < TOL. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C A : IN. -I C LLDG : IN I These arrays hold the matrix A in block diagonal C LUDG : IN -I storage mode (see description in MVDIAG) C X : OUT. Final approximate solution. C B : IN. Right-hand side vector. C WT : IN. Contains weight factors to compute weighted norm. C TOL : IN. System is considered to be solved if C weighted max. norm < TOL C ITMAX : IN. Maximum number of iterations. C ALU : IN. -I C LSL : IN I These arrays should hold the ILU factorization of A in C LLSL : IN I diagonal storage mode and the data dependency lists C LSU : IN I for the forward and the backward solve C LLSU : IN. -I (see description in BCKSLV) C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C R : WORK. (NPTS*NPDE) C R0 : WORK. (NPTS*NPDE) C P : WORK. (NPTS*NPDE) C T : WORK. (NPTS*NPDE) C V : WORK. (NPTS*NPDE) C ITER : OUT. Number of iterations required to reach convergence, or C ITMAX+1 if convergence criterion could not be achieved in C ITMAX iterations. C ERR : OUT. Weighted max. norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in ITMAX steps C 2: Breakdown of the method detected ( ~ 0.0) C Ccc EXTERNALS USED: DOUBLE PRECISION WDNRM2, DDOT EXTERNAL MVDIAG, BCKSLV, RCOPY, WDNRM2, DDOT, DAXPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, N DOUBLE PRECISION ALPHA, BETA, OMEGA, RHOIM1, RHOI, SXMIN, TNRM2 C N = NPTS*NPDE ITER = 0 IERR = 0 SXMIN = SQRT(XMIN) C Ccc Initialize X and set initial residual to B CALL ZERO (N, X) DO 10 I = 1, N R0(I) = B(I) 10 CONTINUE CALL BCKSLV (NPTS, NPDE, ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + R0) C Ccc Check stopping criterion ERR = WDNRM2 (N, R0, WT) IF (LUN .NE. 0) THEN WRITE(LUN,'(''ILU preconditioned BiCGStab for N ='',I6)') N WRITE(LUN,'('' ITER Error Estimate Alpha'', + '' Beta Omega'')') WRITE(LUN,'(I5,E16.7)') ITER, ERR ENDIF IF (ERR .LT. TOL) RETURN C Ccc BiCGStab loop CALL RCOPY (N, R0, R) DO 100 ITER = 1, ITMAX C Compute innerproduct original residual with previous residual RHOI = DDOT(N, R0, 1, R, 1) C Calculate coefficient Beta and direction vector Pi IF( ITER.EQ.1 ) THEN DO 110 I = 1, N BETA = 0.0 P(I) = R(I) 110 CONTINUE ELSE BETA = RHOI/RHOIM1*ALPHA/OMEGA DO 120 I = 1, N P(I) = R(I) + BETA*(P(I)-OMEGA*V(I)) 120 CONTINUE ENDIF C Calculate Vi and coefficient Alfa CALL MVDIAG (NPTS, NPDE, A, P, LLDG, LUDG, V) CALL BCKSLV (NPTS, NPDE, ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + V) ALPHA = RHOI / DDOT(N, R0, 1, V, 1) C Calculate polynomial coefficient Omega_i C store intermediate vector S in R DO 130 I = 1, N R(I) = R(I) - ALPHA*V(I) 130 CONTINUE CALL MVDIAG (NPTS, NPDE, A, R, LLDG, LUDG, T) CALL BCKSLV (NPTS, NPDE, ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + T) TNRM2 = DDOT(N,T,1,T,1) IF (TNRM2 .LT. SXMIN) THEN C Lucky breakdown OMEGA = 0.0 ELSE OMEGA = DDOT(N,T,1,R,1) / TNRM2 ENDIF C Adapt Xi = Xi-1 + Alfa*Pi + Omega_i*S. CALL DAXPY (N, ALPHA, P, 1, X, 1) CALL DAXPY (N, OMEGA, R, 1, X, 1) C Compute residual R = S - Omega_i*T DO 140 I = 1, N R(I) = R(I) - OMEGA*T(I) 140 CONTINUE C C Check stopping criterion. ERR = WDNRM2 (N, R, WT) IF(LUN .NE. 0) + WRITE(LUN,'(I5,4E16.7)') ITER, ERR, ALPHA, BETA, OMEGA IF (ERR .LT. TOL) RETURN C C Check if last residual is not parallel to original residual IF (ABS(RHOI) .LT. SXMIN) GOTO 990 RHOIM1 = RHOI 100 CONTINUE C Ccc end of BiCGStab loop C Ccc Stopping criterion not satisfied ITER = ITMAX + 1 IERR = 1 RETURN C Ccc Breakdown of method detected. 990 IERR = 2 RETURN C END SUBROUTINE MVDIAG (NPTS, NPDE, AD, X, LLDG, LUDG, Y) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(NPTS,-4:-2), LUDG(NPTS,2:4) DOUBLE PRECISION AD(NPTS,NPDE,NPDE,-4:4), X(NPTS,NPDE), + Y(NPTS,NPDE) C Ccc PURPOSE: C Compute y = Ax where A is stored in block 9-diagonal mode. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C AD : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C X : IN. Multiplying vector C LLDG : IN. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LUDG : IN. (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LUDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C If one of the above nodes does not exist, the pointer is C to the node itself. C Y : OUT. Result vector C Ccc EXTERNALS USED: EXTERNAL ZERO C C ---------------------------------------------------------------------- C INTEGER IC, JC, IPT, JD C CALL ZERO (NPTS*NPDE, Y) C DO 10 JC = 1, NPDE DO 10 IC = 1, NPDE DO 20 IPT = 1, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC, 0)*X(IPT,JC) 20 CONTINUE DO 30 IPT = 1, NPTS-1 Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,+1)*X(IPT+1,JC) 30 CONTINUE DO 40 IPT = 2, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,-1)*X(IPT-1,JC) 40 CONTINUE C C The next loops can be done for all points, because if an entry C in the Jacobian does not exist in reality the value in AD is zero C and the pointer in LUDG or LLDG points to the node itself. DO 60 JD = 2, 4 DO 60 IPT = 1, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,JD)*X(LUDG(IPT,JD),JC) 60 CONTINUE DO 70 JD = -2, -4, -1 DO 70 IPT = 1, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,JD)*X(LLDG(IPT,JD),JC) 70 CONTINUE 10 CONTINUE RETURN END SUBROUTINE INTGRG (ISTRUC, X, Y, NPDE, UIB, UNP1, UN, UNM1, + RELTOL, ABSTOL, TN, DT, DTRAT, DX, DY, WT, F, CORR, RWORK, + IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ISTRUC(0:*), NPDE, IERR DOUBLE PRECISION X(*), Y(*), UIB(*), UNP1(0:*), UN(0:*), + UNM1(0:*), RELTOL(NPDE), ABSTOL(NPDE), + TN, DT, DTRAT, DX, DY, + WT(*), F(*), CORR(*), RWORK(*) C Ccc PURPOSE: C Integration in time with BDF2 (first timestep BE). C Solve nonlinear system F(Tn+1, Un+1, Udot) = 0 with modified Newton. C Solve linear systems with (block-)diagonally scaled GCRO. C Ccc PARAMETER DESCRIPTION: C ISTRUC : IN. Data structure Un+1 grid. C X,Y : IN. Physical coordinates grid. C NPDE : IN. # PDE components C UIB : IN. Dirichlet boundary values on internal boundary. C UNP1 : INOUT. On entry: Initial solution, on exit final solution C Newton converged C UN : IN. Solution at Tn on Un+1 grid C UNM1 : IN. Solution at Tn-1 on Un+1 grid C RELTOL : IN. Relative tolerance for Newton process C ABSTOL : IN. Absolute tolerance for Newton process C TN : IN. Previous time C DT : IN. Current time step C DX : IN. Current grid spacing in X-direction C DY : IN. Current grid spacing in Y-direction C DTRAT : IN. If BE: 0, if BDF2: DT/DT_old C WT : WORK. (NPTS*NPDE) C Weight function for norm computation C F : WORK. (NPTS*NPDE) C Residual C CORR : WORK. (NPTS*NPDE) C Correction in Newton iteration C RWORK : WORK. (JAC+RESWRK+LSSWRK) C JAC: 9.NPDE.LENU C RESWRK: LENU.6 C LSSWRK: LENU.(2.MAXLR+MAXL+6)+LENJAC+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C LENJAC: ( IDIAGP <= 1 ! LENU.NPDE ! LENU ) C LENU : NPTS.NPDE C IERR : OUT. C 0: OK. C 10: Newton process did not converge C Ccc EXTERNALS USED: DOUBLE PRECISION MAXNRM, WDNRM2 EXTERNAL ERRWGT, GGCRO, JAC, JACBD, MAXNRM, RESID, WDNRM2 C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL DOUBLE PRECISION TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + LLLDG, LLUDG, LENGLU, LG, + LIWK, LENU, LUT, LUX, LUY, LUXX, LUXY, LUYY, + LPREC, LR, LU, LC, LZW, LRWK, + NJAC, NRES, I, NIT, ITER LOGICAL BDPREC, NEWJAC DOUBLE PRECISION ERR, CORNRM, OLDNRM, RATE, TOL, UNRM C IERR = 0 C BDPREC = IDIAGP .LE. 1 C IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Nonlinear system solver at T ='',E16.7)') + TN+DT ENDIF C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS LIWK = LLABV+NPTS C LLLDG = LIWK LLUDG = LLLDG+NPTS*3 LIWK = LLUDG+NPTS*3 C LENU = NPTS*NPDE LENGLU = LENU*NPDE*9 C LUT = 1 LUX = LUT + LENU LUY = LUX + LENU LUXX = LUY + LENU LUXY = LUXX + LENU LUYY = LUXY + LENU C LG = LUYY+LENU LPREC = LG+LENGLU IF (BDPREC) THEN C Block-diagonal preconditioner LRWK = LPREC + LENU*NPDE ELSE C Diagonal preconditioner LRWK = LPREC + LENU ENDIF C LR = LRWK LU = LR + LENU LC = LU + (LENU*MAXLR) LZW = LC + (LENU*MAXLR) LRWK = LZW+ (MAXLR*MAXLR) C Ccc Set error weights for use in Newton process CALL ERRWGT (NPTS, NPDE, UNP1(1), RELTOL, ABSTOL, WT) C Ccc Compute weighted norm of initial solution for convergence check UNRM = WDNRM2 (LENU, UNP1(1), WT) C Ccc Compute derivatives and residual CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = 1 IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WDNRM2 (LENU, F, WT) ENDIF C Ccc Compute Jacobian G = dF/dU CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, DX, DY, + UNP1(1), ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LPREC), RWORK(LG)) C Ccc Compute preconditioner: (block-)diagonal of Jacobian G = dF/dU. C Store LU-decomposition in PREC, main diagonal inverted. CALL JACBD (NPTS, NPDE, RWORK(LG), IDIAGP, RWORK(LPREC)) NEWJAC = .TRUE. NJAC = 1 C Ccc Newton iteration loop 9 CONTINUE DO 10 NIT = 1, MAXNIT C Cccccc Solve G.corr = F. Store the residual in F. TOL = TOLLSC / (2**NIT) CALL GGCRO (NPTS, NPDE, RWORK(LG), CORR, F, WT, TOL, + BDPREC, RWORK(LPREC), ISTRUC(LLLDG), ISTRUC(LLUDG), + NRRMAX, MAXLR, MAXL, LUNLSS, + RWORK(LR), RWORK(LU), RWORK(LC), RWORK(LZW), RWORK(LRWK), + ITER, ERR, IERR) NLSIT(LEVEL,NIT) = NLSIT(LEVEL,NIT)+ ITER IF (IERR .NE. 0) GOTO 100 C Cccccc Test for convergence CORNRM = WDNRM2 (LENU, CORR, WT) IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' NI:'',I3,'', NLI:'',I4,'', ERLI'':,E16.7, + '', ERNI:'',E16.7)') NIT, ITER, ERR, CORNRM ENDIF IF (CORNRM .LE. 100*UROUND*UNRM) GOTO 900 IF (.NOT. NEWJAC) THEN RATE = SQRT(CORNRM/OLDNRM) IF (RATE .GT. 0.9) THEN C Divergence GOTO 100 ELSE IF (RATE/(1-RATE)*CORNRM .LE. TOLNEW) THEN C Convergence GOTO 900 ENDIF ENDIF OLDNRM = CORNRM C Ccccc Update solution DO 20 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 20 CONTINUE C Ccc Compute derivatives and residual and start next iteration CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = NRES+1 NEWJAC = .FALSE. IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WDNRM2 (LENU, F, WT) ENDIF 10 CONTINUE Ccc End Newton iteration loop C Ccc No convergence in max. # iterations C Ccccc Check if Jacobian is recent 100 CONTINUE IF (.NOT. NEWJAC .AND. NJAC .LT. MAXJAC) THEN IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' New Jacobian, NIT='',I4)') NIT ENDIF C Compute new Jacobian and retry CALL DERIVS (NPTS, NPDE, UNP1, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, + DX, DY, UNP1(1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LPREC), RWORK(LG)) C Ccc Compute preconditioner: (block-)diagonal of Jacobian G = dF/dU. C Store LU-decomposition in PREC, main diagonal inverted. CALL JACBD (NPTS, NPDE, RWORK(LG), IDIAGP, RWORK(LPREC)) NEWJAC = .TRUE. NJAC = NJAC + 1 GOTO 9 ELSE C Newton failure IERR = 10 NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Newton failure, NIT='',I4)') NIT ENDIF RETURN ENDIF C Ccc Nonlinear proces has been solved 900 CONTINUE C Update solution DO 30 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 30 CONTINUE C NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC C RETURN END SUBROUTINE JACBD (NPTS, NPDE, G, IDIAGP, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, IDIAGP DOUBLE PRECISION G(NPTS*NPDE,NPDE,-4:4), PREC(NPTS*NPDE,*) C Ccc PURPOSE: C Store the LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C G : IN. Jacobian stored in block 9-diagonal mode C IDIAGP : IN. Type of preconditioner C 0: block-diagonal C 1: block-diagonal C 2: diagonal C 3: diagonal C PREC : OUT. LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C Ccc EXTERNALS USED: EXTERNAL BLU, PREJD C C----------------------------------------------------------------------- C INTEGER IC, I, LENU C LENU = NPTS*NPDE C IF (IDIAGP .LE. 1) THEN DO 10 IC = 1, NPDE DO 10 I = 1, LENU PREC(I,IC) = G(I,IC,0) 10 CONTINUE Ccc Store LU of G in PREC, invert main diagonal CALL BLU (NPTS, NPDE, PREC) ELSE CALL PREJD (NPTS, NPDE, G, PREC) ENDIF RETURN END SUBROUTINE BLU (NPTS, NPDE, A) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION A(NPTS,NPDE,NPDE) C Ccc PURPOSE: C LU decomposition of block-diagonal A C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: main block diagonal C OUT: A(.,ic,jc): jc < ic: block diagonal of L C diagonal L == I C jc >=ic: block diagonal of U C diagonal U inverted C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, LC, N DOUBLE PRECISION D C DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 N = 1, NPTS A(N,IC,JC) = A(N,IC,JC) + - A(N,IC,LC)*A(N,LC,JC) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 N = 1, NPTS A(N,JC,IC) = A(N,JC,IC) + - A(N,JC,LC)*A(N,LC,IC) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 N = 1, NPTS D = A(N,IC,IC) IF (ABS(D) .LT. 1D-7) THEN A(N,IC,IC) = 1.0 ELSE A(N,IC,IC) = 1.0 / D ENDIF 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 N = 1, NPTS A(N,JC,IC) = A(N,JC,IC) * A(N,IC,IC) 559 CONTINUE 557 CONTINUE 550 CONTINUE C RETURN END SUBROUTINE BCKBDI (NPTS, NPDE, A, B, X) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION A(NPTS,NPDE,NPDE), X(NPTS,NPDE), B(NPTS,NPDE) C Ccc PURPOSE: C Solve LUx = b C A is a block-diagonal matrix C A((i,j,k),1:NPDE,1:NPDE) contains a block of NPDE.NPDE elements C corresponding with node (i,j,k) C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,ic,jc): jc < ic: block diagonal of L C diagonal L == I C jc >=ic: block diagonal of U C diagonal U inverted C X : OUT: solution vector x C B : IN: right-hand side vector b C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, N C CALL RCOPY (NPTS*NPDE, B, X) C CCC Ly = b C DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 N = 1, NPTS X(N,IC) = X(N,IC) - A(N,IC,JC)*X(N,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C CCC Ux = y C DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 N = 1, NPTS X(N,IC) = X(N,IC) - A(N,IC,JC)*X(N,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 N = 1, NPTS X(N,IC) = X(N,IC) * A(N,IC,IC) 133 CONTINUE 130 CONTINUE C RETURN END SUBROUTINE PREJD (NPTS,NPDE, G, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION G(NPTS,NPDE,NPDE,-4:4), PREC(NPTS,NPDE) C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IC, IPT DOUBLE PRECISION DG, EPS C EPS = SQRT(UROUND) DO 10 IC = 1, NPDE DO 20 IPT = 1, NPTS DG = G(IPT,IC,IC,0) IF (ABS(DG) .LT. EPS) THEN PREC(IPT,IC) = 1.0 ELSE PREC(IPT,IC) = 1.0/DG ENDIF 20 CONTINUE 10 CONTINUE C RETURN END SUBROUTINE GGCRO (NPTS, NPDE, G, XV, F, WT, TOL, BDPREC, PREC, + LLDG, LUDG, + NRRMAX, MAXLR, MAXL, LUN, + R, U, C, ZW, WORK, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(*), LUDG(*), NRRMAX, MAXLR, MAXL, LUN, + ITER, IERR LOGICAL BDPREC DOUBLE PRECISION G(*), XV(NPTS*NPDE), F(NPTS*NPDE), WT(NPTS*NPDE), + TOL, PREC(NPTS*NPDE), + R(NPTS*NPDE), U(NPTS*NPDE,0:MAXLR-1), C(NPTS*NPDE,0:MAXLR-1), + ZW(0:MAXLR-1,0:MAXLR-1), WORK(*), ERR C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C Ccc PURPOSE: C Solve a Non-Symmetric linear system Gx = F using the C (block)-diagonally scaled GCRO(NRRMAX+1,MAXLR,(MAXL)) method. C Actually solved is the system [W.D^(-1).G.W^(-1)].[W.x] = [W.D^(-1).F] C where W = diag(WT(i)) and D is the (block) diagonal of G C until max(||residual||_2,||GM^(-1).residual||_2) < TOL, C with GM the projection of the matrix unto the Krylov base obtained C with the GMRES inner iteration. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C G : IN. -I C LLDG : IN I These arrays hold the matrix G in block diagonal C LUDG : IN -I storage mode (see description in MVDIAG) C XV : OUT. Final approximate solution. C F : IN. Right-hand side vector. C WT : IN. Contains weight factors to compute weighted norm. C TOL : IN. System is considered to be solved if C weighted 2-norm < TOL C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C NRRMAX : IN. # restarts outer loop C MAXLR : IN. max. iterations outer loop C MAXL : IN. max. iterations GMRES (no restarts) C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C R : WORK. C U : WORK. C C : WORK. C ZW : WORK. C WORK : WORK. (N.(MAXL+1)+(MAXL+3).MAXL+4.N+1) C with N=NPTS.NPDE is the dimension of the system. C ITER : OUT. Number of iterations required to reach convergence, or C until (NRRMAX+1).MAXLR. outer loop iterations have been C performed. ITER is the sum of the number of outerloop C iterations + number of GMRES (preconditioner) iterations. C ERR : OUT. Weighted 2-norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in (NRRMAX+1).MAXLR. outer loop C iterations C 2: Break down in outer loop C Ccc EXTERNALS USED: DOUBLE PRECISION DDOT, DNRM2 EXTERNAL BCKBDI, GGMRSO, MVDIAG, RCOPY, DAXPY, DDOT, DNRM2, ZERO C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, IR, J, K, N, GRITER, PRITER, GMITER, + LV, LHES, LQ, LRWRK DOUBLE PRECISION RNRM, UNRM C N = NPTS*NPDE C Ccc Distribute workspace for GMRES LV = 1 LHES = LV + N*(MAXL+1) LQ = LHES + (MAXL+1)*MAXL LRWRK= LQ + 2*MAXL C ITER = 0 IERR = 0 GRITER = 0 PRITER = 0 C Ccc Initialize X and set initial residual to r_0 = W.D^(-1).F CALL ZERO (N, XV) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, F, R) DO 10 I = 1, N R(I) = WT(I)*R(I) 10 CONTINUE ELSE DO 11 I = 1, N R(I) = WT(I)*PREC(I)*F(I) 11 CONTINUE ENDIF C C Ccc Check stopping criterion ERR = DNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,*) + 'Diag. scaled GCRO(NRRMAX,MAXLR))' WRITE(LUN,'(''NRRMAX, MAXLR, N:'',3I10)') + NRRMAX, MAXLR, N WRITE(LUN,*) '# it. GCRO # it.GMRES Error Estimate' WRITE(LUN,'(2I10,E20.7)') GRITER, PRITER, ERR ENDIF IF (ERR .LT. SQRT(UROUND)*TOL) RETURN C Ccc Restart loop DO 150 IR = 0, NRRMAX IERR = 0 C Ccc Outer loop DO 200 K = 0, MAXLR-1 C C Perform the diagonally scaled GMRES algorithm to solve C (I-C_k-1C_k-1^T).[W.D^(-1).G.W^(-1)].u_k = A_k-1.u_k = r_k-1, C r_k = r_k-1 - A_k-1.u_k C c_k = (r_k-1 - r_k)/ C to compute the initial preconditioner for the E-N process C If u_k is solved accurately enough ||u_k = H_k.r_k||_2 is a good C measure for the error when solving DAE systems. CALL GGMRSO (NPTS, NPDE, G, LLDG, LUDG, + U(1,K), R, WT, BDPREC, PREC, C, K, TOL, MAXL, + WORK(LV), WORK(LHES), WORK(LQ), WORK(LRWRK), + LUN, GMITER, ERR, IERR) PRITER = PRITER + GMITER IF (LUN .GT. 0) THEN WRITE(LUN,*) 'Result GMRES:', GMITER, TOL, ERR, IERR ENDIF IF (IERR .GT. 1) THEN PRINT *, 'wat nu?' STOP ENDIF IERR = 0 C Ccc Check stopping criterion UNRM = DNRM2 (N, U(1,K), 1) C C Compute v = [W.D^(-1).G.W^(-1)].u_k DO 210 I = 1, N WORK(LV+N-1+I) = U(I,K)/WT(I)/UNRM 210 CONTINUE CALL MVDIAG (NPTS, NPDE, G, WORK(LV+N), LLDG, LUDG, WORK(LV)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, WORK(LV), WORK(LV+N)) DO 220 I = 1, N WORK(LV-1+I) = WT(I)*WORK(LV+N-1+I)*UNRM 220 CONTINUE ELSE DO 221 I = 1, N WORK(LV-1+I) = WT(I)*PREC(I)*WORK(LV-1+I)*UNRM 221 CONTINUE ENDIF C C C Compute ZW[0:k-1,k] = C_k^T.v DO 300 I = 0, K-1 ZW(I,K) = DDOT(N, C(1,I),1, WORK(LV),1) 300 CONTINUE C GRITER = GRITER + 1 C Ccc Check stopping criterion RNRM = DNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,'(2I10,2E20.7)') GRITER, PRITER, RNRM, UNRM ENDIF IF (MAX(RNRM,UNRM) .LT. TOL) THEN C Compute x = x + U_k.Z_k^(-1).1 DO 310 I = K, 0, -1 WORK(LV+I) = 1 DO 320 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 320 CONTINUE CALL DAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 310 CONTINUE ITER = GRITER + PRITER GOTO 900 ENDIF 200 CONTINUE Ccc End outer loop C Compute x = x + U_k.Z_k^(-1).1 K = MAXLR-1 DO 330 I = K, 0, -1 WORK(LV+I) = 1 DO 340 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 340 CONTINUE CALL DAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 330 CONTINUE C 150 CONTINUE Ccc End Restart loop C IERR = 1 ITER = GRITER + PRITER C 900 CONTINUE C Unscale x DO 910 I = 1, N XV(I) = XV(I) / WT(I) 910 CONTINUE RETURN END SUBROUTINE GGMRSO (NPTS, NPDE, G, LLDG, LUDG, + XV, BV, WT, BDPREC, PREC, CO, M, TOL, MAXL, + V, HES, Q, WORK, LUN, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(*), LUDG(*), M, MAXL, LUN, + ITER, IERR LOGICAL BDPREC DOUBLE PRECISION G(*), XV(NPTS*NPDE), BV(NPTS*NPDE), + WT(NPTS*NPDE), PREC(NPTS*NPDE), CO(NPTS*NPDE,0:M), TOL, + V(NPTS*NPDE,MAXL+1), HES(MAXL+1,MAXL), + Q(2*MAXL), WORK(*), ERR C Ccc PURPOSE: C Solve a Non-Symmetric linear system C [W.D^(-1).G.W^(-1)].[Wx] = [W.D^(-1).b] C using the (block)-diagonally scaled GMRES(MAXL) method, orthogonalize C new V_k not only against previous ones but also against C's from C outer iteration. C W = diag(WT(i)) and D is the (block) diagonal of G. C The right hand-side W.D^(-1).b is stored in B, C the matrix G and the preconditioner are stored in RWORK and IWORK. C (Dx) is returned in X. C The routine MVDIAG should perform y = Gx C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C G : IN. -I C LLDG : IN I These arrays hold the matrix G in block diagonal C LUDG : IN -I storage mode (see description in MVDIAG) C XV : OUT. Final approximate solution. C BV : IN. Preconditioned right-hand side vector. C OUT. Residual vector. C WT : IN. Contains weight factors to compute weighted norm. C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C CO : IN. (.,0:M-1): vectors from outer iteration against which C V's should be orthogonalized. C OUT. (.,M) = Residual_outer_old - Residual C M : IN. Outer loop iteration count C TOL : IN. System is considered to be solved if C 2-norm < TOL C MAXL : IN. max. iterations GMRES (no restarts) C V : WORK. C HES : WORK. C Q : WORK. C WORK : WORK. 4.N+1 C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C ITER : OUT. Number of iterations required to reach convergence, or C MAXL+1 if convergence criterion could not be achieved in C MAXL iterations. C ERR : OUT. Weighted max. norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in MAXL iterations C Ccc EXTERNALS USED: DOUBLE PRECISION DDOT, DNRM2 EXTERNAL BCKBDI, MVDIAG, RCOPY, DAXPY, DDOT, DNRM2, ZERO C C----------------------------------------------------------------------- C INTEGER I, J, K, N DOUBLE PRECISION C, CNM2, R0NRM, PROD, RHO, S, TEM, T1, T2, T, + VNRM C N = NPTS*NPDE IERR = 0 ITER = 0 C Ccc Initialize solution on zero, the initial residual R0 is the C left preconditioned vector B CALL ZERO (N, XV) CALL RCOPY (N, BV, V(1,1)) R0NRM = DNRM2(N, V(1,1),1) C Ccc Check stopping criterion ERR = R0NRM IF (LUN .NE. 0) THEN WRITE(LUN,'(''Diagonally scaled GMRESO(MAXL)'',I5)') + MAXL WRITE(LUN, + '('' ITER Error Estimate'')') WRITE(LUN,'(I5,E20.7)') ITER, ERR ENDIF C Ccc Rescale so that the norm of V(1,1) is one DO 80 I = 1, N V(I,1) = V(I,1)/R0NRM 80 CONTINUE C Ccc Initialize HES array. CALL ZERO (MAXL*(MAXL+1), HES) C Ccc Main loop to compute the vectors V(*,2) to V(*,MAXL). C The running product PROD is needed for the convergence test. PROD = 1.0 DO 10 K = 1, MAXL ITER = K C C V(*,K+1) = [W.D^(-1).G.W^(-1)] . V(*,K) DO 11 I = 1, N WORK(I) = V(I,K)/WT(I) 11 CONTINUE CALL MVDIAG (NPTS, NPDE, G, WORK, LLDG, LUDG, V(1,K+1)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, V(1,K+1), WORK) DO 12 I = 1, N V(I,K+1) = WT(I)*WORK(I) 12 CONTINUE ELSE DO 13 I = 1, N V(I,K+1) = WT(I)*PREC(I)*V(I,K+1) 13 CONTINUE ENDIF C C Orthogonalize V(*,K+1) first against the previous C using C modified Gram-Schmidt DO 801 I = 0, M-1 TEM = DDOT (N, CO(1,I), 1, V(1,K+1), 1) / + DDOT (N, CO(1,I), 1, CO(1,I), 1) CALL DAXPY (N, -TEM, CO(1,I), 1, V(1,K+1), 1) 801 CONTINUE C C Orthogonalize V(*,K+1) against the previous V using C modified Gram-Schmidt DO 81 I = 1, K HES(I,K) = DDOT (N, V(1,I), 1, V(1,K+1), 1) CALL DAXPY (N, -HES(I,K), V(1,I), 1, V(1,K+1), 1) 81 CONTINUE VNRM = DNRM2(N, V(1,K+1), 1) HES(K+1,K) = VNRM C C Update the QR factors of HES (Q.HES = R) using Givens rotations C First, multiply new column by previous Givens rotations DO 82 I = 1, K-1 T1 = HES(I,K) T2 = HES(I+1,K) C = Q(2*I-1) S = Q(2*I) HES(I ,K) = C*T1 - S*T2 HES(I+1,K) = S*T1 + C*T2 82 CONTINUE C Form last Givens rotation and multiply it with last 2 elements of HES T1 = HES(K,K) T2 = HES(K+1,K) IF (T2 .EQ. 0.0) THEN C = 1.0 S = 0.0 ELSE IF (ABS(T2) .GE. ABS(T1)) THEN T = T1/T2 S = -1.0/SQRT(1.0+T*T) C = -S*T ELSE T = T2/T1 C = 1.0/SQRT(1.0+T*T) S = -C*T ENDIF Q(2*K-1) = C Q(2*K ) = S HES(K,K) = C*T1 - S*T2 IF (HES(K,K) .EQ. 0.0) THEN IERR = 2 RETURN ENDIF C C Update RHO, the estimate of the norm of the residual R0-A*XL. PROD = PROD*Q(2*K) RHO = ABS(PROD*R0NRM) C Ccc Check stopping criterion ERR = RHO IF (LUN .NE. 0) THEN WRITE(LUN,'(I5,2E20.7)') ITER, ERR, ERR/R0NRM ENDIF IF (ERR/R0NRM .LT. 0.001 .AND. ERR .LT. TOL) GOTO 100 IF (K .EQ. MAXL) GOTO 20 C C Rescale so that the norm of V(1,K+1) is one. DO 83 I = 1, N V(I,K+1) = V(I,K+1)/VNRM 83 CONTINUE 10 CONTINUE C 20 CONTINUE IF (RHO .GT. R0NRM) THEN IERR = 2 RETURN ELSE IERR = 1 ENDIF C Ccc Compute the approximation XL to the solution. C Min. ||beta.e1 - Hk+1k.y||_2 C X = X + Vk.y 100 CONTINUE K = ITER WORK(1) = R0NRM DO 110 I = 2, K+1 WORK(I) = 0.0 110 CONTINUE C Q.beta.e1 DO 84 I = 1, K C = Q(2*I-1) S = Q(2*I) T1 = WORK(I) T2 = WORK(I+1) WORK(I ) = C*T1 - S*T2 WORK(I+1) = S*T1 + C*T2 84 CONTINUE C Solve R.y = Q.beta.e1 DO 85 I = 1, K J = K+1-I WORK(J) = WORK(J) / HES(J,J) CALL DAXPY (J-1, -WORK(J), HES(1,J),1, WORK,1) 85 CONTINUE C C X = X + Vk.y DO 120 I = 1,K CALL DAXPY(N, WORK(I), V(1,I), 1, XV, 1) 120 CONTINUE C C Calculate the residual vector CALL RCOPY (N, V(1,1), WORK(K+1)) DO 86 I = 1, K-1 S = Q(2*I) C = Q(2*I-1) DO 87 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 87 CONTINUE 86 CONTINUE I = K S = Q(2*I) C = Q(2*I-1)/VNRM DO 88 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 88 CONTINUE DO 89 J = 1, N WORK(K+J) = WORK(K+J)*R0NRM*PROD 89 CONTINUE C C Compute c_m = (b - r) / DO 130 J = 1, N CO(J,M) = BV(J) - WORK(K+J) 130 CONTINUE CNM2 = 1 / DDOT (N, CO(1,M), 1, CO(1,M), 1) DO 140 J = 1, N CO(J,M) = CO(J,M) * CNM2 140 CONTINUE C C Inner residual = outer residual CALL RCOPY (N, WORK(K+1), BV) C RETURN END SUBROUTINE INTGRC (ISTRUC, X, Y, NPDE, UIB, UNP1, UN, UNM1, + RELTOL, ABSTOL, TN, DT, DTRAT, DX, DY, WT, F, CORR, RWORK, + IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ISTRUC(0:*), NPDE, IERR DOUBLE PRECISION X(*), Y(*), UIB(*), UNP1(0:*), UN(0:*), + UNM1(0:*), RELTOL(NPDE), ABSTOL(NPDE), + TN, DT, DTRAT, DX, DY, + WT(*), F(*), CORR(*), RWORK(*) C Ccc PURPOSE: C Integration in time with BDF2 (first timestep BE). C Solve nonlinear system F(Tn+1,Un+1,Udot) = 0 with matrix-free Newton. C Solve linear systems with (block-)diagonally scaled GCRO. C Ccc PARAMETER DESCRIPTION: C ISTRUC : IN. Data structure Un+1 grid. C X,Y : IN. Physical coordinates grid. C NPDE : IN. # PDE components C UIB : IN. Dirichlet boundary values on internal boundary. C UNP1 : INOUT. On entry: Initial solution, on exit final solution C Newton converged C UN : IN. Solution at Tn on Un+1 grid C UNM1 : IN. Solution at Tn-1 on Un+1 grid C RELTOL : IN. Relative tolerance for Newton process C ABSTOL : IN. Absolute tolerance for Newton process C TN : IN. Previous time C DT : IN. Current time step C DX : IN. Current grid spacing in X-direction C DY : IN. Current grid spacing in Y-direction C DTRAT : IN. If BE: 0, if BDF2: DT/DT_old C WT : WORK. (NPTS*NPDE) C Weight function for norm computation C F : WORK. (NPTS*NPDE) C Residual C CORR : WORK. (NPTS*NPDE) C Correction in Newton iteration C RWORK : WORK. (RESWRK+LSSWRK) C RESWRK: LENU.6 C LSSWRK: MAX(LENPWK,LENU.(2.MAXLR+MAXL+6))+LENPRE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C LENPRE: ( IDIAGP <= 1 ! LENU.NPDE ! LENU ) C LENPWK: ( IDIAGP = 0 ! LENU.(NPDE.5+2)+NPTS C |:IDIAGP = 1 ! LENU.(NPDE.3+2)+NPTS C |:IDIAGP = 2 ! LENU.8 C |:IDIAGP = 3 ! LENU.7 ) C LENU : NPTS.NPDE C IERR : OUT. C 0: OK. C 10: Newton process did not converge C Ccc EXTERNALS USED: DOUBLE PRECISION MAXNRM, WDNRM2 EXTERNAL ERRWGT, GCRO, PINIT, MAXNRM, RESID, WDNRM2 C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC DOUBLE PRECISION TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL DOUBLE PRECISION TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + LIWK, LENU, LUT, LUX, LUY, LUXX, LUXY, LUYY, + LPREC, LR, LU, LC, LZW, LRWK, + NPRE, NRES, I, NIT, ITER LOGICAL BDPREC, NEWPRE DOUBLE PRECISION A0, ERR, CORNRM, OLDNRM, RATE, TOL, UNRM C IERR = 0 C A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) BDPREC = IDIAGP .LE. 1 C IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Nonlinear system solver at T ='',E16.7)') + TN+DT ENDIF C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C LIWK = LLABV+NPTS C LENU = NPTS*NPDE C LUT = 1 LUX = LUT + LENU LUY = LUX + LENU LUXX = LUY + LENU LUXY = LUXX + LENU LUYY = LUXY + LENU C LPREC = LUYY+LENU IF (BDPREC) THEN C Block-diagonal preconditioner LR = LPREC + LENU*NPDE ELSE C Diagonal preconditioner LR = LPREC + LENU ENDIF LU = LR + LENU LC = LU + (LENU*MAXLR) LZW = LC + (LENU*MAXLR) LRWK = LZW+ (MAXLR*MAXLR) C Ccc Set error weights for use in Newton process CALL ERRWGT (NPTS, NPDE, UNP1(1), RELTOL, ABSTOL, WT) C Ccc Compute weighted norm of initial solution for convergence check UNRM = WDNRM2 (LENU, UNP1(1), WT) C Ccc Compute derivatives and residual CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = 1 IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WDNRM2 (LENU, F, WT) ENDIF C Ccc Compute preconditioner: (block-)diagonal of Jacobian G = dF/dU. C Store LU-decomposition in PREC, main diagonal inverted. CALL PINIT (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, DX, DY, + UNP1(1), ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LR), IDIAGP, RWORK(LPREC)) NEWPRE = .TRUE. NPRE = 1 C Ccc Newton iteration loop 9 CONTINUE DO 10 NIT = 1, MAXNIT C Cccccc Solve G.corr = F. Store the residual in F. TOL = TOLLSC / (2**NIT) CALL GCRO (LENU, CORR, F, WT, TOL, BDPREC, RWORK(LPREC), + ISTRUC, X, Y, NPDE, UIB, UNP1, + TN+DT, A0, DX, DY, RWORK, + NRRMAX, MAXLR, MAXL, LUNLSS, + RWORK(LR), RWORK(LU), RWORK(LC), RWORK(LZW), RWORK(LRWK), + ITER, ERR, IERR) NLSIT(LEVEL,NIT) = NLSIT(LEVEL,NIT)+ ITER IF (IERR .NE. 0) GOTO 100 C Cccccc Test for convergence CORNRM = WDNRM2 (LENU, CORR, WT) IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' NI:'',I3,'', NLI:'',I4,'', ERLI'':,E16.7, + '', ERNI:'',E16.7)') NIT, ITER, ERR, CORNRM ENDIF IF (CORNRM .LE. 100*UROUND*UNRM) GOTO 900 IF (.NOT. NEWPRE) THEN RATE = SQRT(CORNRM/OLDNRM) IF (RATE .GT. 0.9) THEN C Divergence GOTO 100 ELSE IF (RATE/(1-RATE)*CORNRM .LE. TOLNEW) THEN C Convergence GOTO 900 ENDIF ENDIF OLDNRM = CORNRM C Ccccc Update solution DO 20 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 20 CONTINUE C Ccc Compute derivatives and residual and start next iteration CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = NRES+1 NEWPRE = .FALSE. IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WDNRM2 (LENU, F, WT) ENDIF 10 CONTINUE Ccc End Newton iteration loop C Ccc No convergence in max. # iterations C Ccccc Check if Jacobian is recent 100 CONTINUE IF (.NOT. NEWPRE .AND. NPRE .LT. MAXJAC) THEN IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' New preconditioner, NIT='',I4)') NIT ENDIF C Compute new preconditioner and retry C Compute space derivatives anew since they are disturbed by C MVDIFF CALL DERIVS (NPTS, NPDE, UNP1, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL PINIT (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, + DX, DY, UNP1(1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LR), IDIAGP, RWORK(LPREC)) NEWPRE = .TRUE. NPRE = NPRE + 1 GOTO 9 ELSE C Newton failure IERR = 10 NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NPRE IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Newton failure, NIT='',I4)') NIT ENDIF RETURN ENDIF C Ccc Nonlinear proces has been solved 900 CONTINUE C Update solution DO 30 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 30 CONTINUE C NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NPRE C RETURN END SUBROUTINE PINIT (NPTS, NPDE, F, T, X, Y, DT, DTRAT, + DX, DY, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, ABSTOL, WORK, IDIAGP, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*), IDIAGP DOUBLE PRECISION F(*), T, X(*), Y(*), DT, DTRAT, DX, DY, U(*), + UIB(*), UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), WORK(*), PREC(NPTS,NPDE,*) C Ccc PURPOSE: C Store the LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C U : IN. Solution at T on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C WORK : WORK. ( ( IDIAGP = 0 ! LENU.(NPDE.5+2)+NPTS C |:IDIAGP = 1 ! LENU.(NPDE.3+2)+NPTS C |:IDIAGP = 2 ! LENU.8 C |:IDIAGP = 3 ! LENU.6 ) ) C IDIAGP : IN. Type of preconditioner C 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C PREC : OUT. LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C Ccc EXTERNALS USED: EXTERNAL BLU, DERVF, DERVFB, PREG, PREGB C C----------------------------------------------------------------------- C INTEGER LENDEL, LENU, LENFU, LENFU1, + LFU, LFUX, LFUY, LFUXX, LFUYY, LDEL, LRWK LOGICAL PRECFO DOUBLE PRECISION A0 C PRECFO = IDIAGP .EQ. 0 .OR. IDIAGP .EQ. 2 LENU = NPTS*NPDE IF (IDIAGP .LE. 1) THEN LENDEL = NPTS LENFU = LENU*NPDE ELSE LENDEL = LENU LENFU = LENU ENDIF IF (PRECFO) THEN LENFU1 = LENFU ELSE LENFU1 = 0 ENDIF C LFU = 1 LFUX = LFU + LENFU LFUY = LFUX + LENFU1 LFUXX = LFUY + LENFU1 LFUYY = LFUXX + LENFU LDEL = LFUYY + LENFU LRWK = LDEL + LENDEL A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) IF (IDIAGP .LE. 1) THEN C Ccc Compute dF/dU, (dF/dUx, dF/dUy,) dF/dUxx, dF/dUyy CALL DERVFB (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, WORK(LDEL), WORK(LRWK), + PRECFO, WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY)) C Ccc Compute block-diagonal C G = dF/dU + (dF/dUx.dUx/dU + ...) + dF/dUxx.dUxx/dU + ... CALL PREGB (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY), PRECFO, PREC) C Ccc Store LU of G in PREC, invert main diagonal CALL BLU (NPTS, NPDE, PREC) ELSE C Ccc Compute dF/dU, (dF/dUx, dF/dUy,) dF/dUxx, dF/dUxy, dF/dUyy CALL DERVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, WORK(LDEL), WORK(LRWK), + PRECFO, WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY)) C Ccc Compute diagonal G = dF/dU + (dF/dUx.dUx/dU + ...) + dF/dUxx.dUxx/dU C + ... C Store inverted in PREC CALL PREG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY), PRECFO, PREC) ENDIF C RETURN END SUBROUTINE DERVFB (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + PRECFO, FU, FUX, FUY, FUXX, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO DOUBLE PRECISION F(NPTS*NPDE), T, X(*), Y(*), U(*), A0, DT, DX, + DY, UIB(*), UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), DEL(NPTS), WORK(2*NPTS*NPDE), + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE), FUYY(NPTS*NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U by numerical C differencing C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C PRECFO : IN. If FALSE first order derivatives may be neglected C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUYY : OUT. dF(Uyy)dUyy C Ccc EXTERNALS USED: EXTERNAL PERTRB, PRTRBU, RES C C----------------------------------------------------------------------- C INTEGER I, IC, ICPTB, IPT, LUTBAR DOUBLE PRECISION FACX, FACY, FACXX, FACYY, TOL LUTBAR = 1 + NPTS*NPDE C Ccc How to decide if derivatives are `zero'? C Take `zero'-value of U divided by the grid width FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACYY = 1/DY**2 C Ccc Loop over the components of the (derivatives of) U DO 10 ICPTB = 1, NPDE C C dF(U,Ut)/dU TOL = ABSTOL(ICPTB) CALL PRTRBU (ICPTB, NPTS, NPDE, U, A0, DT, UT, TOL, DEL, + WORK, WORK(LUTBAR)) CALL RES (T, X, Y, NPTS, NPDE, WORK, LLBND, ILBND, LBND, UIB, + WORK(LUTBAR), UX, UY, UXX, UXY, UYY, FU(1,ICPTB)) DO 20 IC = 1, NPDE DO 20 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FU(I,ICPTB) = (FU(I,ICPTB) - F(I)) / DEL(IPT) 20 CONTINUE IF (PRECFO) THEN C C dF(Ux)/dUx TOL = ABSTOL(ICPTB)*FACX CALL PERTRB (ICPTB, NPTS, NPDE, UX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, WORK, UY, UXX, UXY, UYY, FUX(1,ICPTB)) DO 40 IC = 1, NPDE DO 40 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUX(I,ICPTB) = (FUX(I,ICPTB) - F(I)) / DEL(IPT) 40 CONTINUE C C dF(Uy)/dUy TOL = ABSTOL(ICPTB)*FACY CALL PERTRB (ICPTB, NPTS, NPDE, UY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, WORK, UXX, UXY, UYY, FUY(1,ICPTB)) DO 50 IC = 1, NPDE DO 50 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUY(I,ICPTB) = (FUY(I,ICPTB) - F(I)) / DEL(IPT) 50 CONTINUE ENDIF C C dF(Uxx)/dUxx TOL = ABSTOL(ICPTB)*FACXX CALL PERTRB (ICPTB, NPTS, NPDE, UXX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, WORK, UXY, UYY, FUXX(1,ICPTB)) DO 60 IC = 1, NPDE DO 60 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUXX(I,ICPTB) = (FUXX(I,ICPTB) - F(I)) / DEL(IPT) 60 CONTINUE C C dF(Uyy)/dUyy TOL = ABSTOL(ICPTB)*FACYY CALL PERTRB (ICPTB, NPTS, NPDE, UYY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, WORK, FUYY(1,ICPTB)) DO 80 IC = 1, NPDE DO 80 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUYY(I,ICPTB) = (FUYY(I,ICPTB) - F(I)) / DEL(IPT) 80 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PREGB (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + FU, FUX, FUY, FUXX, FUYY, PRECFO, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO DOUBLE PRECISION DX, DY, + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE),FUYY(NPTS*NPDE,NPDE), + PREC(NPTS*NPDE,NPDE) C Ccc PURPOSE: C Compute block-diagonal of Jacobian G = dF/dU using derivatives of C residual wrt (derivatives of) U C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FU : IN. Derivative residual F(.,U,Ut,.) wrt U C FUX : IN. Derivative residual F(.,Ux,.) wrt Ux C FUY : IN. Derivative residual F(.,Uy,.) wrt Uy C FUXX : IN. Derivative residual F(.,Uxx,.) wrt Uxx C FUYY : IN. Derivative residual F(.,Uyy,.) wrt Uyy C PRECFO : IN. If FALSE first order derivatives may be neglected C PREC : OUT. Block-diagonal of Jacobian. C Ccc EXTERNALS USED: EXTERNAL PRGBBD C C----------------------------------------------------------------------- C INTEGER I, JC, LENU DOUBLE PRECISION FACX, FACY, FACXX, FACYY C LENU = NPTS*NPDE C FACXX = 1/DX**2 FACYY = 1/DY**2 C DO 10 JC = 1, NPDE DO 10 I = 1, LENU C dF(ipt,ic)/dU(ipt,jc) PREC(I,JC) = FU(I,JC) + + FUXX(I,JC)*(-2*FACXX) + FUYY(I,JC)*(-2*FACYY) 10 CONTINUE C IF (PRECFO) THEN FACX = 1/(2*DX) FACY = 1/(2*DY) CALL PRGBBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, PREC) ENDIF C RETURN END SUBROUTINE PRGBBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION FACX, FACY, + FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), + G(NPTS,NPDE,NPDE) C Ccc PURPOSE: C Correct Jacobian G = dF/dU for second order approximation of C first order derivatives at boundaries C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C FACX : IN. 1/(2*DX) C FACY : IN. 1/(2*DY) C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FUX : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Ux C FUY : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Uy C G : INOUT. C IN: block-diagonal of Jacobian C OUT: corrected for first order derivatives at C boundaries C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, JC, IB, LB C Ccc Boundary corrections, no corrections needed for internal boundaries DO 20 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dUy DO 30 JC = 1, NPDE DO 30 IC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(-3*FACY) 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dUx DO 40 JC = 1, NPDE DO 40 IC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(-3*FACX) 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dUy DO 50 JC = 1, NPDE DO 50 IC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(+3*FACY) 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dUx DO 60 JC = 1, NPDE DO 60 IC = 1, NPDE CDIR$ IVDEP DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(+3*FACX) 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dUx and dF/dUy DO 100 JC = 1, NPDE DO 100 IC = 1, NPDE DO 105 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(-3*FACY) + + FUX(IPT,IC,JC)*(-3*FACX) 105 CONTINUE 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dUx and dF/dUy DO 110 JC = 1, NPDE DO 110 IC = 1, NPDE DO 115 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(-3*FACX) + + FUY(IPT,IC,JC)*(+3*FACY) 115 CONTINUE 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dUx and dF/dUy DO 120 JC = 1, NPDE DO 120 IC = 1, NPDE DO 125 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(+3*FACY) + + FUX(IPT,IC,JC)*(+3*FACX) 125 CONTINUE 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dUx and dF/dUy DO 130 JC = 1, NPDE DO 130 IC = 1, NPDE DO 135 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(+3*FACX) + + FUY(IPT,IC,JC)*(-3*FACY) 135 CONTINUE 130 CONTINUE ENDIF 20 CONTINUE C RETURN END SUBROUTINE DERVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + PRECFO, FU, FUX, FUY, FUXX, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO DOUBLE PRECISION F(NPTS*NPDE), T, X(*), Y(*), U(*), A0, DT, DX, + DY, UIB(*), UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), DEL(NPTS*NPDE), WORK(2*NPTS*NPDE), + FU(NPTS*NPDE), FUX(NPTS*NPDE), FUY(NPTS*NPDE), + FUXX(NPTS*NPDE), FUYY(NPTS*NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U by numerical C differencing C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (LENU) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUYY : OUT. dF(Uyy)dUyy C Ccc EXTERNALS USED: EXTERNAL PERTRG, PRTRGU, RES C C----------------------------------------------------------------------- C INTEGER I, LENU, LUTBAR DOUBLE PRECISION FACX, FACY, FACXX, FACYY LENU = NPTS*NPDE LUTBAR = 1 + LENU C Ccc How to decide if derivatives are `zero'? C Take `zero'-value of U divided by the grid width FACXX = 1/DX**2 FACYY = 1/DY**2 C C dF(U,Ut)/dU CALL PRTRGU (NPTS, NPDE, U, A0, DT, UT, ABSTOL, DEL, + WORK, WORK(LUTBAR)) CALL RES (T, X, Y, NPTS, NPDE, WORK, LLBND, ILBND, LBND, UIB, + WORK(LUTBAR), UX, UY, UXX, UXY, UYY, FU) DO 10 I = 1, LENU FU(I) = (FU(I) - F(I)) / DEL(I) 10 CONTINUE IF (PRECFO) THEN C FACX = 1/(2*DX) FACY = 1/(2*DY) C C dF(Ux)/dUx CALL PERTRG (NPTS, NPDE, UX, ABSTOL, FACX, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, WORK, UY, UXX, UXY, UYY, FUX) DO 11 I = 1, LENU FUX(I) = (FUX(I) - F(I)) / DEL(I) 11 CONTINUE C C dF(Uy)/dUy CALL PERTRG (NPTS, NPDE, UY, ABSTOL, FACY, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, WORK, UXX, UXY, UYY, FUY) DO 12 I = 1, LENU FUY(I) = (FUY(I) - F(I)) / DEL(I) 12 CONTINUE ENDIF C C dF(Uxx)/dUxx CALL PERTRG (NPTS, NPDE, UXX, ABSTOL, FACXX, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, WORK, UXY, UYY, FUXX) DO 20 I = 1, LENU FUXX(I) = (FUXX(I) - F(I)) / DEL(I) 20 CONTINUE C C dF(Uyy)/dUyy CALL PERTRG (NPTS, NPDE, UYY, ABSTOL, FACYY, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, WORK, FUYY) DO 30 I = 1, LENU FUYY(I) = (FUYY(I) - F(I)) / DEL(I) 30 CONTINUE RETURN END SUBROUTINE PRTRGU (NPTS, NPDE, U, A0, DT, UT, ABSTOL, DEL, + UBAR, UTBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION U(NPTS,NPDE), A0, DT, UT(NPTS,NPDE), + ABSTOL(NPDE), DEL(NPTS,NPDE), UBAR(NPTS,NPDE), UTBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb U. Return perturbance in DEL and perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C DT : IN. Current time step size C UT : IN. Time derivative of U on current grid C ABSTOL : IN. Absolute tolerance for Newton process C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C UTBAR : OUT. Perturbed values of UT C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IC, IPT DOUBLE PRECISION DELI, EPS, TOL CALL RCOPY (NPTS*NPDE, U, UBAR) CALL RCOPY (NPTS*NPDE, UT, UTBAR) EPS = SQRT(UROUND) DO 10 IC = 1, NPDE TOL = ABSTOL(IC) DO 20 IPT = 1, NPTS C Compute perturbance, if U=0, U(T+dt)=dtUt, if both are zero take C threshold DELI = EPS*MAX(ABS(U(IPT,IC)),ABS(DT*UT(IPT,IC)),TOL) DELI = SIGN(DELI,DT*UT(IPT,IC)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT,IC) = (U(IPT,IC)+DELI)-U(IPT,IC) UBAR(IPT,IC) = U(IPT,IC) + DEL(IPT,IC) UTBAR(IPT,IC) = UT(IPT,IC) + A0*DEL(IPT,IC) 20 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PERTRG (NPTS, NPDE, U, ABSTOL, FAC, DEL, UBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE DOUBLE PRECISION U(NPTS,NPDE), ABSTOL(NPDE), FAC, DEL(NPTS,NPDE), + UBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb U. Return perturbance in DEL and perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C ABSTOL : IN. Absolute tolerance for Newton process C FAC : IN. Grid factor for tolerance to get threshold C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IC, IPT DOUBLE PRECISION DELI, EPS, TOL CALL RCOPY (NPTS*NPDE, U, UBAR) EPS = SQRT(UROUND) DO 10 IC = 1, NPDE TOL = ABSTOL(IC)*FAC DO 20 IPT = 1, NPTS C Compute perturbance DELI = EPS*MAX(ABS(U(IPT,IC)),TOL) C To ensure that UBAR has the same sign as U DELI = SIGN(DELI,U(IPT,IC)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT,IC) = (U(IPT,IC)+DELI)-U(IPT,IC) UBAR(IPT,IC) = U(IPT,IC) + DEL(IPT,IC) 20 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PREG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + FU, FUX, FUY, FUXX, FUYY, PRECFO, DGINV) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO DOUBLE PRECISION DX, DY, + FU(NPTS*NPDE), FUX(NPTS*NPDE), FUY(NPTS*NPDE), + FUXX(NPTS*NPDE), FUYY(NPTS*NPDE), + DGINV(NPTS*NPDE) C Ccc PURPOSE: C Compute inverse of diagonal of Jacobian G = dF/dU using derivatives C of residual wrt (derivatives of) U. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FU : IN. Derivative residual F(.,U,Ut,.) wrt U C FUX : IN. Derivative residual F(.,Ux,.) wrt Ux C FUY : IN. Derivative residual F(.,Uy,.) wrt Uy C FUXX : IN. Derivative residual F(.,Uxx,.) wrt Uxx C FUYY : IN. Derivative residual F(.,Uyy,.) wrt Uyy C PRECFO : IN. If FALSE first order derivatives may be neglected C DGINV : OUT. Inverse of diagonal of Jacobian. C Ccc EXTERNALS USED: EXTERNAL PREGBD C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, LENU DOUBLE PRECISION DG, EPS, FACX, FACY, FACXX, FACYY C EPS = SQRT(UROUND) C LENU = NPTS*NPDE C FACXX = 1/DX**2 FACYY = 1/DY**2 C DO 10 I = 1, LENU C dF(ipt,ic)/dU(ipt,ic) DGINV(I) = FU(I) + + FUXX(I)*(-2*FACXX) + FUYY(I)*(-2*FACYY) 10 CONTINUE C C Correct boundaries IF (PRECFO) THEN FACX = 1/(2*DX) FACY = 1/(2*DY) CALL PREGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, DGINV) ENDIF DO 20 I = 1, LENU DG = DGINV(I) IF (ABS(DG) .LT. EPS) THEN DGINV(I) = 1.0 ELSE DGINV(I) = 1.0/DG ENDIF 20 CONTINUE C RETURN END SUBROUTINE PREGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) DOUBLE PRECISION FACX, FACY, + FUX(NPTS,NPDE), FUY(NPTS,NPDE), G(NPTS,NPDE) C Ccc PURPOSE: C Correct Jacobian G = dF/dU for second order approximation of C first order derivatives at boundaries C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C FACX : IN. 1/(2*DX) C FACY : IN. 1/(2*DY) C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FUX : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Ux C FUY : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Uy C G : INOUT. C IN: Main diagonal of Jacobian C OUT: G corrected for first order derivatives at C boundaries C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, IB, LB C Ccc Boundary corrections, no corrections needed for internal boundaries DO 20 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dUy DO 30 IC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUY(IPT,IC)*(-3*FACY) 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dUx DO 40 IC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUX(IPT,IC)*(-3*FACX) 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dUy DO 50 IC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUY(IPT,IC)*(+3*FACY) 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dUx DO 60 IC = 1, NPDE CDIR$ IVDEP DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUX(IPT,IC)*(+3*FACX) 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dUx and dF/dUy DO 100 IC = 1, NPDE DO 105 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUY(IPT,IC)*(-3*FACY) + + FUX(IPT,IC)*(-3*FACX) 105 CONTINUE 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dUx and dF/dUy DO 110 IC = 1, NPDE DO 115 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUX(IPT,IC)*(-3*FACX) + + FUY(IPT,IC)*(+3*FACY) 115 CONTINUE 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dUx and dF/dUy DO 120 IC = 1, NPDE DO 125 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUY(IPT,IC)*(+3*FACY) + + FUX(IPT,IC)*(+3*FACX) 125 CONTINUE 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dUx and dF/dUy DO 130 IC = 1, NPDE DO 135 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUX(IPT,IC)*(+3*FACX) + + FUY(IPT,IC)*(-3*FACY) 135 CONTINUE 130 CONTINUE ENDIF 20 CONTINUE C RETURN END SUBROUTINE GCRO (N, XV, F, WT, TOL, BDPREC, PREC, + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + NRRMAX, MAXLR, MAXL, LUN, + R, U, C, ZW, WORK, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, ISTRUC(0:*), NPDE, NRRMAX, MAXLR, MAXL, LUN, + ITER, IERR LOGICAL BDPREC DOUBLE PRECISION XV(N), F(N), WT(N), TOL, PREC(N), + X(*), Y(*), UIB(*), UNP1(0:*), + TNP1, A0, DX, DY, RWORK(*), + R(N), U(N,0:MAXLR-1), C(N,0:MAXLR-1), ZW(0:MAXLR-1,0:MAXLR-1), + WORK(*), ERR C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C Ccc PURPOSE: C Solve a Non-Symmetric linear system Gx = F using the matrix-free C (block)-diagonally scaled GCRO(NRRMAX+1,MAXLR,(MAXL)) method. C Actually solved is the system [W.D^(-1).G.W^(-1)].[W.x] = [W.D^(-1).F] C where W = diag(WT(i)) and D is the (block) diagonal of G C until max(||residual||_2,||GM^(-1).residual||_2) < TOL, C with GM the projection of the matrix unto the Krylov base obtained C with the GMRES inner iteration. C Ccc PARAMETER DESCRIPTION: C N : IN. Dimension of the system C XV : OUT. Final approximate solution. C F : IN. Right-hand side vector. C WT : IN. Contains weight factors to compute weighted norm. C TOL : IN. System is considered to be solved if C weighted 2-norm < TOL C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C ISTRUC : IN. -I Parameters C ... I for C RWORK : IN. -I residual evaluation C NRRMAX : IN. # restarts outer loop C MAXLR : IN. max. iterations outer loop C MAXL : IN. max. iterations GMRES (no restarts) C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C R : WORK. C U : WORK. C C : WORK. C ZW : WORK. C WORK : WORK. (N.(MAXL+1)+(MAXL+3).MAXL+4.N+1) C ITER : OUT. Number of iterations required to reach convergence, or C until (NRRMAX+1).MAXLR. outer loop iterations have been C performed. ITER is the sum of the number of outerloop C iterations + number of GMRES (preconditioner) iterations. C ERR : OUT. Weighted 2-norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in (NRRMAX+1).MAXLR. outer loop C iterations C 2: Break down in outer loop C Ccc EXTERNALS USED: DOUBLE PRECISION DDOT, DNRM2 EXTERNAL BCKBDI, GMRESO, MVDIFF, RCOPY, DAXPY, DDOT, DNRM2, ZERO C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, IR, J, K, GRITER, PRITER, GMITER, + LV, LHES, LQ, LRWRK DOUBLE PRECISION RNRM, UNRM C Ccc Distribute workspace for GMRES LV = 1 LHES = LV + N*(MAXL+1) LQ = LHES + (MAXL+1)*MAXL LRWRK= LQ + 2*MAXL C ITER = 0 IERR = 0 GRITER = 0 PRITER = 0 C Ccc Initialize X and set initial residual to r_0 = W.D^(-1).F CALL ZERO (N, XV) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, F, R) DO 10 I = 1, N R(I) = WT(I)*R(I) 10 CONTINUE ELSE DO 11 I = 1, N R(I) = WT(I)*PREC(I)*F(I) 11 CONTINUE ENDIF C C Ccc Check stopping criterion ERR = DNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,*) + 'Diag. scaled GCRO(NRRMAX,MAXLR))' WRITE(LUN,'(''NRRMAX, MAXLR, N:'',3I10)') + NRRMAX, MAXLR, N WRITE(LUN,*) '# it. GCRO # it.GMRES Error Estimate' WRITE(LUN,'(2I10,E20.7)') GRITER, PRITER, ERR ENDIF IF (ERR .LT. SQRT(UROUND)*TOL) RETURN C Ccc Restart loop DO 150 IR = 0, NRRMAX IERR = 0 C Ccc Outer loop DO 200 K = 0, MAXLR-1 C C Perform the diagonally scaled GMRES algorithm to solve C (I-C_k-1C_k-1^T).[W.D^(-1).G.W^(-1)].u_k = A_k-1.u_k = r_k-1, C r_k = r_k-1 - A_k-1.u_k C c_k = (r_k-1 - r_k)/ C to compute the initial preconditioner for the E-N process C If u_k is solved accurately enough ||u_k = H_k.r_k||_2 is a good C measure for the error when solving DAE systems. CALL GMRESO (N, U(1,K), R, WT, BDPREC, PREC, C, K, TOL, MAXL, + F, ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK(LV), WORK(LHES), WORK(LQ), WORK(LRWRK), + LUN, GMITER, ERR, IERR) PRITER = PRITER + GMITER IF (LUN .GT. 0) THEN WRITE(LUN,*) 'Result GMRES:', GMITER, TOL, ERR, IERR ENDIF IF (IERR .GT. 1) THEN PRINT *, 'wat nu?' STOP ENDIF IERR = 0 C Ccc Check stopping criterion UNRM = DNRM2 (N, U(1,K), 1) C C Compute v = [W.D^(-1).G.W^(-1)].u_k DO 210 I = 1, N WORK(LV+N-1+I) = U(I,K)/WT(I)/UNRM 210 CONTINUE CALL MVDIFF (N, F, WORK(LV+N), + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK(LHES), WORK(LV)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, WORK(LV), WORK(LV+N)) DO 220 I = 1, N WORK(LV-1+I) = WT(I)*WORK(LV+N-1+I)*UNRM 220 CONTINUE ELSE DO 221 I = 1, N WORK(LV-1+I) = WT(I)*PREC(I)*WORK(LV-1+I)*UNRM 221 CONTINUE ENDIF C C C Compute ZW[0:k-1,k] = C_k^T.v DO 300 I = 0, K-1 ZW(I,K) = DDOT(N, C(1,I),1, WORK(LV),1) 300 CONTINUE C GRITER = GRITER + 1 C Ccc Check stopping criterion RNRM = DNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,'(2I10,2E20.7)') GRITER, PRITER, RNRM, UNRM ENDIF IF (MAX(RNRM,UNRM) .LT. TOL) THEN C Compute x = x + U_k.Z_k^(-1).1 DO 310 I = K, 0, -1 WORK(LV+I) = 1 DO 320 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 320 CONTINUE CALL DAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 310 CONTINUE ITER = GRITER + PRITER GOTO 900 ENDIF 200 CONTINUE Ccc End outer loop C Compute x = x + U_k.Z_k^(-1).1 K = MAXLR-1 DO 330 I = K, 0, -1 WORK(LV+I) = 1 DO 340 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 340 CONTINUE CALL DAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 330 CONTINUE C 150 CONTINUE Ccc End Restart loop C IERR = 1 ITER = GRITER + PRITER C 900 CONTINUE C Unscale x DO 910 I = 1, N XV(I) = XV(I) / WT(I) 910 CONTINUE RETURN END SUBROUTINE GMRESO (N, XV, BV, WT, BDPREC, PREC, CO, M, TOL, MAXL, + F, ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + V, HES, Q, WORK, + LUN, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, M, ISTRUC(0:*), NPDE, MAXL, LUN, + ITER, IERR LOGICAL BDPREC DOUBLE PRECISION XV(N), BV(N), WT(N), PREC(N), CO(N,0:M), TOL, + F(*), X(*), Y(*), UIB(*), UNP1(0:*), + TNP1, A0, DX, DY, RWORK(*), + V(N,MAXL+1), HES(MAXL+1,MAXL), + Q(2*MAXL), WORK(*), ERR C Ccc PURPOSE: C Solve a Non-Symmetric linear system C [W.D^(-1).G.W^(-1)].[Wx] = [W.D^(-1).b] C using the (block)-diagonally scaled GMRES(MAXL) method, orthogonalize C new V_k not only against previous ones but also against C's from C outer iteration. C W = diag(WT(i)) and D is the (block) diagonal of G. C The right hand-side W.D^(-1).b is stored in B, C the matrix G and the preconditioner are stored in RWORK and IWORK. C (Dx) is returned in X. C The routine MVDIFF (N, RWORK, IWORK, X, Y) should perform y = Gx C Ccc PARAMETER DESCRIPTION: C N : IN. # grid points C XV : OUT. Final approximate solution. C BV : IN. Preconditioned right-hand side vector. C OUT. Residual vector. C WT : IN. Contains weight factors to compute weighted norm. C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C CO : IN. (.,0:M-1): vectors from outer iteration against which C V's should be orthogonalized. C OUT. (.,M) = Residual_outer_old - Residual C M : IN. Outer loop iteration count C TOL : IN. System is considered to be solved if C 2-norm < TOL C F : IN. -I Parameters C ... I for C RWORK : IN. -I residual evaluation C MAXL : IN. max. iterations GMRES (no restarts) C V : WORK. C HES : WORK. C Q : WORK. C WORK : WORK. 4.N+1 C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C ITER : OUT. Number of iterations required to reach convergence, or C MAXL+1 if convergence criterion could not be achieved in C MAXL iterations. C ERR : OUT. Weighted max. norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in MAXL iterations C Ccc EXTERNALS USED: DOUBLE PRECISION DDOT, DNRM2 EXTERNAL BCKBDI, MVDIFF, RCOPY, DAXPY, DDOT, DNRM2, ZERO C C----------------------------------------------------------------------- C INTEGER I, J, K DOUBLE PRECISION C, CNM2, R0NRM, PROD, RHO, S, TEM, T1, T2, T, + VNRM C IERR = 0 ITER = 0 C Ccc Initialize solution on zero, the initial residual R0 is the C left preconditioned vector B CALL ZERO (N, XV) CALL RCOPY (N, BV, V(1,1)) R0NRM = DNRM2(N, V(1,1),1) C Ccc Check stopping criterion ERR = R0NRM IF (LUN .NE. 0) THEN WRITE(LUN,'(''Diagonally scaled GMRESO(MAXL)'',I5)') + MAXL WRITE(LUN, + '('' ITER Error Estimate'')') WRITE(LUN,'(I5,E20.7)') ITER, ERR ENDIF C Ccc Rescale so that the norm of V(1,1) is one DO 80 I = 1, N V(I,1) = V(I,1)/R0NRM 80 CONTINUE C Ccc Initialize HES array. CALL ZERO (MAXL*(MAXL+1), HES) C Ccc Main loop to compute the vectors V(*,2) to V(*,MAXL). C The running product PROD is needed for the convergence test. PROD = 1.0 DO 10 K = 1, MAXL ITER = K C C V(*,K+1) = [W.D^(-1).G.W^(-1)] . V(*,K) DO 11 I = 1, N WORK(I) = V(I,K)/WT(I) 11 CONTINUE CALL MVDIFF (N, F, WORK, + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK(1+N), V(1,K+1)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, V(1,K+1), WORK) DO 12 I = 1, N V(I,K+1) = WT(I)*WORK(I) 12 CONTINUE ELSE DO 13 I = 1, N V(I,K+1) = WT(I)*PREC(I)*V(I,K+1) 13 CONTINUE ENDIF C C Orthogonalize V(*,K+1) first against the previous C using C modified Gram-Schmidt DO 801 I = 0, M-1 TEM = DDOT (N, CO(1,I), 1, V(1,K+1), 1) / + DDOT (N, CO(1,I), 1, CO(1,I), 1) CALL DAXPY (N, -TEM, CO(1,I), 1, V(1,K+1), 1) 801 CONTINUE C C Orthogonalize V(*,K+1) against the previous V using C modified Gram-Schmidt DO 81 I = 1, K HES(I,K) = DDOT (N, V(1,I), 1, V(1,K+1), 1) CALL DAXPY (N, -HES(I,K), V(1,I), 1, V(1,K+1), 1) 81 CONTINUE VNRM = DNRM2(N, V(1,K+1), 1) HES(K+1,K) = VNRM C C Update the QR factors of HES (Q.HES = R) using Givens rotations C First, multiply new column by previous Givens rotations DO 82 I = 1, K-1 T1 = HES(I,K) T2 = HES(I+1,K) C = Q(2*I-1) S = Q(2*I) HES(I ,K) = C*T1 - S*T2 HES(I+1,K) = S*T1 + C*T2 82 CONTINUE C Form last Givens rotation and multiply it with last 2 elements of HES T1 = HES(K,K) T2 = HES(K+1,K) IF (T2 .EQ. 0.0) THEN C = 1.0 S = 0.0 ELSE IF (ABS(T2) .GE. ABS(T1)) THEN T = T1/T2 S = -1.0/SQRT(1.0+T*T) C = -S*T ELSE T = T2/T1 C = 1.0/SQRT(1.0+T*T) S = -C*T ENDIF Q(2*K-1) = C Q(2*K ) = S HES(K,K) = C*T1 - S*T2 IF (HES(K,K) .EQ. 0.0) THEN IERR = 2 RETURN ENDIF C C Update RHO, the estimate of the norm of the residual R0-A*XL. PROD = PROD*Q(2*K) RHO = ABS(PROD*R0NRM) C Ccc Check stopping criterion ERR = RHO IF (LUN .NE. 0) THEN WRITE(LUN,'(I5,2E20.7)') ITER, ERR, ERR/R0NRM ENDIF IF (ERR/R0NRM .LT. 0.001 .AND. ERR .LT. TOL) GOTO 100 IF (K .EQ. MAXL) GOTO 20 C C Rescale so that the norm of V(1,K+1) is one. DO 83 I = 1, N V(I,K+1) = V(I,K+1)/VNRM 83 CONTINUE 10 CONTINUE C 20 CONTINUE IF (RHO .GT. R0NRM) THEN IERR = 2 RETURN ELSE IERR = 1 ENDIF C Ccc Compute the approximation XL to the solution. C Min. ||beta.e1 - Hk+1k.y||_2 C X = X + Vk.y 100 CONTINUE K = ITER WORK(1) = R0NRM DO 110 I = 2, K+1 WORK(I) = 0.0 110 CONTINUE C Q.beta.e1 DO 84 I = 1, K C = Q(2*I-1) S = Q(2*I) T1 = WORK(I) T2 = WORK(I+1) WORK(I ) = C*T1 - S*T2 WORK(I+1) = S*T1 + C*T2 84 CONTINUE C Solve R.y = Q.beta.e1 DO 85 I = 1, K J = K+1-I WORK(J) = WORK(J) / HES(J,J) CALL DAXPY (J-1, -WORK(J), HES(1,J),1, WORK,1) 85 CONTINUE C C X = X + Vk.y DO 120 I = 1,K CALL DAXPY(N, WORK(I), V(1,I), 1, XV, 1) 120 CONTINUE C C Calculate the residual vector CALL RCOPY (N, V(1,1), WORK(K+1)) DO 86 I = 1, K-1 S = Q(2*I) C = Q(2*I-1) DO 87 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 87 CONTINUE 86 CONTINUE I = K S = Q(2*I) C = Q(2*I-1)/VNRM DO 88 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 88 CONTINUE DO 89 J = 1, N WORK(K+J) = WORK(K+J)*R0NRM*PROD 89 CONTINUE C C Compute c_m = (b - r) / DO 130 J = 1, N CO(J,M) = BV(J) - WORK(K+J) 130 CONTINUE CNM2 = 1 / DDOT (N, CO(1,M), 1, CO(1,M), 1) DO 140 J = 1, N CO(J,M) = CO(J,M) * CNM2 140 CONTINUE C C Inner residual = outer residual CALL RCOPY (N, WORK(K+1), BV) C RETURN END SUBROUTINE MVDIFF (N, F, XV, + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK, YV) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, ISTRUC(0:*), NPDE DOUBLE PRECISION F(N), XV(N), + X(*), Y(*), UIB(*), UNP1(0:*), + TNP1, A0, DX, DY, RWORK(*), + WORK(*), YV(N) C Ccc PURPOSE: C Compute y = Gx where Gx ~ F(t,U+x,(U+x)_t)-F(t,U,(U+x)_t) C Ccc PARAMETER DESCRIPTION: C N : IN. Dimension of x C F : IN. Residual F(t,U,Udot), U=UNP1, Udot = A0.U+UH C XV : IN. Multiplying vector C ISTRUC : IN. -I Parameters C ... I for C RWORK : IN. -I residual evaluation C WORK : WORK. (N+1 + 2N) C YV : OUT. Result vector C Ccc EXTERNALS USED: EXTERNAL RESID C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, + LLLBND, NBNDS, NBDPTS, NBIPTS, LILBND, LLBNDP, + LLBLW, LLABV, + LUT, LUX, LUY, LUXX, LUXY, LUYY, + LUBAR, LUTBAR, LFBAR, I C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW +NPTS C LUT = 1 LUX = LUT + N LUY = LUX + N LUXX = LUY + N LUXY = LUXX + N LUYY = LUXY + N C LUBAR = 1 LUTBAR = LUBAR + 1+N LFBAR = LUTBAR + N C Ccc Store U+x in WORK(LUBAR), and d(U+x)/dt in WORK(LUTBAR) WORK(LUBAR) = 0.0 DO 10 I = 1, N WORK(LUBAR+I) = UNP1(I) + XV(I) WORK(LUTBAR-1+I) = RWORK(LUT-1+I) + A0*XV(I) 10 CONTINUE C Ccc Compute space derivatives and residual CALL DERIVS (NPTS, NPDE, WORK(LUBAR), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), + DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL RES (TNP1, X, Y, NPTS, NPDE, WORK(LUBAR+1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + WORK(LUTBAR), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), WORK(LFBAR)) C DO 20 I = 1, N YV(I) = WORK(LFBAR-1+I) - F(I) 20 CONTINUE RETURN END SUBROUTINE PRDOM (LROW, IROW, ICOL, LLBND, ILBND, LBND, + IDOM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*), IDOM(0:*), NX, NY C Ccc PURPOSE: C Print domain. Internal points are .., external points XX, C physical boundary points their ILBND value and internal boundary C values II. C Ccc PARAMETER DESCRIPTION: C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C IDOM : WORK. IDOM(0:NPTS): location in domain C 0: interior point C IB: on boundary IB, IB = 1, NBNDS+1 C Ccc EXTERNALS USED: EXTERNAL DOMFLG C C----------------------------------------------------------------------- C CHARACTER*78 LINE(0:25) INTEGER I, J, IR, IPT, NROWS, NPTS, NBNDS C IF (NX .GE. 26 .OR. NY .GE. 26) THEN PRINT *, 'Sorry, Nx, Ny < 26; adapt PRDOM' RETURN ENDIF C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NBNDS = LLBND(0) C C Set domain values CALL DOMFLG (NPTS, LLBND, LBND, IDOM) LINE(0) = ' ' DO 10 I = 1, NX+1 WRITE(LINE(0)(3*I-2:3*I),'('' XX'')') 10 CONTINUE DO 15 J = 1, NY LINE(J) = LINE(0) 15 CONTINUE DO 20 IR = 1, NROWS J = IROW(IR) DO 30 IPT = LROW(IR), LROW(IR+1)-1 I = ICOL(IPT)+1 IF (IDOM(IPT) .EQ. 0) THEN WRITE(LINE(J)(3*I-2:3*I),'('' ..'')') ELSE IF (IDOM(IPT) .EQ. NBNDS+1) THEN WRITE(LINE(J)(3*I-2:3*I),'('' II'')') ELSE WRITE(LINE(J)(3*I-2:3*I),'(I3)') ILBND(IDOM(IPT)) ENDIF 30 CONTINUE 20 CONTINUE DO 40 J = NY, 0, -1 PRINT '(A)', LINE(J) PRINT * 40 CONTINUE RETURN END SUBROUTINE SETXY (XL, YL, DX, DY, LROW, IROW, ICOL, X, Y) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LROW(0:*), IROW(*), ICOL(*) DOUBLE PRECISION XL, YL, DX, DY, X(*), Y(*) C Ccc PURPOSE: C Store X- and Y-coordinates of the grid points, rowwise. C Ccc PARAMETER DESCRIPTION: C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C X : OUT. Contains the X-coordinates for the grid C Y : OUT. Contains the Y-coordinates for the grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IR, NROWS DOUBLE PRECISION YIR C NROWS = LROW(0) DO 10 IR = 1, NROWS YIR = YL + IROW(IR)*DY DO 20 IPT = LROW(IR), LROW(IR+1)-1 X(IPT) = XL + ICOL(IPT)*DX Y(IPT) = YIR 20 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PRSOL (LUN, T, NPDE, XL, YL, DXB, DYB, LGRID, ISTRUC, + LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, NPDE, LGRID(0:*), ISTRUC(*), LSOL(*) DOUBLE PRECISION T, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Print solution and coordinate values at all grid levels. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C T : IN. Current value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lowerleft corner of (virtual) domain C YL : IN. Y-coordinate of lowerleft corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C Ccc EXTERNALS USED: EXTERNAL PRSOLL C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL DOUBLE PRECISION DX, DY MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + SOL(LSOL(LEVEL)+1)) DX = DX/2 DY = DY/2 10 CONTINUE RETURN END SUBROUTINE PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + LROW, IROW, ICOL, U) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, LEVEL, NPTS, NPDE, LROW(0:*), IROW(*), ICOL(*) DOUBLE PRECISION T, XL, YL, DX, DY, U(NPTS,NPDE) C Ccc PURPOSE: C Print solution and X- and Y-coordinates of gridlevel LEVEL. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C LEVEL : IN. Grid level corresponding with solution U. C T : IN. Current value of time variable C NPTS : IN. # grid points at this level C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C U : IN. Solution on this grid level C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPT, IR, NROWS DOUBLE PRECISION X, Y C NROWS = LROW(0) WRITE(LUN,'(//// T10,A,T30,A,T46,A,T62,A,T71,A //)') + 'Level', 't', 'Y', 'X', 'Solution' IR = 1 Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T13,I2,T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + LEVEL, T, Y, X, U(IPT,1) DO 10 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 10 CONTINUE DO 20 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 30 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 30 CONTINUE 20 CONTINUE DO 40 IR = 2, NROWS Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + T, Y, X, U(IPT,1) DO 50 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 50 CONTINUE DO 60 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 70 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 70 CONTINUE 60 CONTINUE 40 CONTINUE RETURN END SUBROUTINE WRUNI (LUNS, LUNG, UNILEV, + T, NPDE, XL, YL, DXB, DYB, NXB, NYB, + LGRID, ISTRUC, LSOL, SOL, UNIFRM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUNS, LUNG, UNILEV, + NPDE, NXB, NYB, LGRID(0:*), ISTRUC(*), LSOL(*), NX, NY DOUBLE PRECISION T, XL, YL, DXB, DYB, SOL(*), + UNIFRM(0:NX,0:NY,NPDE) C Ccc PURPOSE: C Write (interpolated) solution values at grid level UNILEV to file C LUNS. C Write maximum gridlevel used in each point to file LUNG. C NB. The data will not be correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc PARAMETER DESCRIPTION: C LUNS : IN. Logical unit number of solution file C LUNG : IN. Logical unit number of grid level file C UNILEV : IN. Maximum grid level to be used to generate the data C T : IN. Value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower left corner of (virtual) domain C YL : IN. Y-coordinate of lower left corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C NXB,NYB: IN. # gridcells in X- and Y-direction, resp., on base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C UNIFRM : WORK. (Interpolated) solution on level UNILEV / max. grid C level used. C NX, NY : IN. # gridcells in X- and Y-direction, resp., on grid of C of level UNILEV C C----------------------------------------------------------------------- C C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C !!! !!! C !!! In subroutine WRUNI the constant NONVAL should be adjusted to !!! C !!! the data (NONVAL = impossible value for the first componenent) !!! C !!! !!! DOUBLE PRECISION NONVAL PARAMETER (NONVAL = -999.999) C !!! !!! C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C C----------------------------------------------------------------------- C INTEGER I, IC, ICOL, IMUL, IPT, IR, IROW, J, + LEVEL, LLROW, LIROW, LICOL, MAXLEV, NROWS, NPTS DO 1 IC = 1, NPDE DO 1 IROW = 0, NY DO 1 ICOL = 0, NX UNIFRM(ICOL,IROW,IC) = NONVAL 1 CONTINUE MAXLEV = LGRID(0) DO 10 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 20 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 30 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL DO 40 IC = 1, NPDE UNIFRM(ICOL,IROW,IC) = + SOL(LSOL(LEVEL)+(IC-1)*NPTS+IPT) 40 CONTINUE 30 CONTINUE 20 CONTINUE 10 CONTINUE DO 100 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 110 J = IMUL, NY, IMUL*2 DO 110 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 120 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I,J-IMUL,IC)+UNIFRM(I,J+IMUL,IC))/2 120 CONTINUE ENDIF 110 CONTINUE DO 130 J = 0, NY, IMUL DO 130 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 140 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I-IMUL,J,IC)+UNIFRM(I+IMUL,J,IC))/2 140 CONTINUE ENDIF 130 CONTINUE 100 CONTINUE DO 150 J = 0, NY DO 150 I = 0, NX WRITE(LUNS,'(100E13.3)') (UNIFRM(I,J,IC), IC = 1, NPDE) 150 CONTINUE C C Grids DO 201 IROW = 0, NY DO 201 ICOL = 0, NX UNIFRM(ICOL,IROW,1) = 0 201 CONTINUE DO 210 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 220 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 230 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL UNIFRM(ICOL,IROW,1) = LEVEL 230 CONTINUE 220 CONTINUE 210 CONTINUE DO 300 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 310 J = IMUL, NY, IMUL*2 DO 310 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I,J-IMUL,1),UNIFRM(I,J+IMUL,1)) ENDIF 310 CONTINUE DO 330 J = 0, NY, IMUL DO 330 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I-IMUL,J,1),UNIFRM(I+IMUL,J,1)) ENDIF 330 CONTINUE 300 CONTINUE DO 350 J = 0, NY DO 350 I = 0, NX WRITE(LUNG,'(I2)') NINT(UNIFRM(I,J,1)) 350 CONTINUE RETURN END SUBROUTINE DUMP (LUNDMP, RWK, IWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUNDMP, IWK(*) DOUBLE PRECISION RWK(*) C Ccc PURPOSE: C Dump all information necessary for a restart of VLUGR2 on file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : IN. Real workstorage as returned from VLUGR2 C IWK : IN. Integer workstorage as returned from VLUGR2 C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J WRITE(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO WRITE(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) WRITE(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) WRITE(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) RETURN END SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER LUNDMP, LENRWK, IWK(LENIWK) DOUBLE PRECISION RWK(LENRWK) C Ccc PURPOSE: C Read all information necessary for a restart of VLUGR2 from file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : OUT. Real workstorage intended to pass to VLUGR2 C LENRWK : IN. Dimension of RWK. C IWK : OUT. Integer workstorage intended to pass to VLUGR2 C LENIWK : IN. Dimension of IWK. C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND DOUBLE PRECISION T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, + DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J READ(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO IF (LENRWK .LT. LRWKPS+LRWKB .OR. LENIWK .LT. LIWKPS+LIWKB) THEN PRINT *, LENRWK, LRWKPS+LRWKB, LENIWK, LIWKPS+LIWKB STOP 'work space too small' ENDIF READ(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) READ(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) READ(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) C RETURN END LOGICAL FUNCTION CHKWRK (LRWKN, LENRWK, LIWKN, LENIWK, + LLWKN, LENLWK) C----------------------------------------------------------------------- INTEGER LRWKN, LENRWK, LIWKN, LENIWK, LLWKN, LENLWK C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C----------------------------------------------------------------------- CHKWRK = .TRUE. IF (LRWKN .GT. LENRWK) THEN WRITE(LUNERR, + '(''Real workspace too small, required at least:'',I10)') + LRWKN CHKWRK = .FALSE. ENDIF IF (LIWKN .GT. LENIWK) THEN WRITE(LUNERR, + '(''Integer workspace too small, required at least:'',I10)') + LIWKN CHKWRK = .FALSE. ENDIF IF (LLWKN .GT. LENLWK) THEN WRITE(LUNERR, + '(''Logical workspace too small, required at least:'',I10)') + LLWKN CHKWRK = .FALSE. ENDIF RETURN END SUBROUTINE ERRWGT (NPTS, NPDE, U, RELTOL, ABSTOL, WT) C----------------------------------------------------------------------- INTEGER NPTS, NPDE DOUBLE PRECISION U(NPTS,NPDE), RELTOL(NPDE), ABSTOL(NPDE), + WT(NPTS,NPDE) C----------------------------------------------------------------------- INTEGER IC, IPT DOUBLE PRECISION SN SN = 1.0/SQRT(DBLE(NPTS*NPDE)) DO 10 IC = 1, NPDE DO 20 IPT = 1, NPTS WT(IPT,IC) = SN/(RELTOL(IC)*ABS(U(IPT,IC)) + ABSTOL(IC)) 20 CONTINUE 10 CONTINUE RETURN END DOUBLE PRECISION FUNCTION MAXNRM (N, V) C----------------------------------------------------------------------- INTEGER N DOUBLE PRECISION V(N) C----------------------------------------------------------------------- INTEGER I MAXNRM = 0.0 DO 10 I = 1, N MAXNRM = MAX(MAXNRM, ABS(V(I))) 10 CONTINUE RETURN END DOUBLE PRECISION FUNCTION WMXNRM (N, V, W) C----------------------------------------------------------------------- INTEGER N DOUBLE PRECISION V(N), W(N) C----------------------------------------------------------------------- INTEGER I WMXNRM = 0.0 DO 10 I = 1, N WMXNRM = MAX(WMXNRM, ABS(V(I)*W(I))) 10 CONTINUE WMXNRM = WMXNRM*SQRT(DBLE(N)) RETURN END DOUBLE PRECISION FUNCTION WDNRM2 (N, V, W) C----------------------------------------------------------------------- INTEGER N DOUBLE PRECISION V(N), W(N) C----------------------------------------------------------------------- INTEGER I WDNRM2 = 0.0 DO 10 I = 1, N WDNRM2 = WDNRM2 + (V(I)*W(I))**2 10 CONTINUE WDNRM2 = SQRT(WDNRM2) RETURN END SUBROUTINE ICOPY (LEN, A, B) C----------------------------------------------------------------------- INTEGER LEN INTEGER A(LEN), B(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = 1, LEN B(I) = A(I) 10 CONTINUE RETURN END SUBROUTINE IYPOC (LEN, A, B) C----------------------------------------------------------------------- INTEGER LEN INTEGER A(LEN), B(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = LEN, 1, -1 B(I) = A(I) 10 CONTINUE RETURN END SUBROUTINE RCOPY (LEN, A, B) C----------------------------------------------------------------------- INTEGER LEN DOUBLE PRECISION A(LEN), B(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = 1, LEN B(I) = A(I) 10 CONTINUE RETURN END SUBROUTINE ZERO (LEN, A) C----------------------------------------------------------------------- INTEGER LEN DOUBLE PRECISION A(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = 1, LEN A(I) = 0.0 10 CONTINUE RETURN END SUBROUTINE MACNUM C----------------------------------------------------------------------- C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR DOUBLE PRECISION UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C Ccc EXTERNALS USED: INTEGER I1MACH DOUBLE PRECISION D1MACH EXTERNAL D1MACH, I1MACH C----------------------------------------------------------------------- C LUNOUT = I1MACH(2) LUNERR = I1MACH(4) UROUND = D1MACH(4) XMIN = D1MACH(1) RETURN END SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'Sp' then mkdir 'Sp' fi cd 'Sp' if test -f 'ilubs1.f' then echo shar: will not over-write existing file "'ilubs1.f'" else cat << \SHAR_EOF > 'ilubs1.f' SUBROUTINE ILU (N, NPD, A, LLDG, LSL, LLSL) INTEGER NPDE PARAMETER (NPDE = 1) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LSL(*), LLSL(0:*) REAL A(N,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER K, L, M C IF (NPDE .NE. NPD) STOP 'Wrong ILUBS loaded.' C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,0) = 1.0 / A(K,0) 553 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower diagonals CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,-4) = A(K,-4) * A(LLDG(K,-4),0) A(K,-3) = (A(K,-3) - A(K,-4)*A(LLDG(K,-4),1)) + * A(LLDG(K,-3),0) A(K,-2) = (A(K,-2) - A(K,-3)*A(LLDG(K,-3),1)) + * A(LLDG(K,-2),0) A(K,-1) = (A(K,-1) - A(K,-4)*A(LLDG(K,-4),3) + - A(K,-3)*A(LLDG(K,-3),2)) * A(K-1,0) C C Compute main diagonal A(K,0) = 1.0 / (A(K, 0) - A(K,-4)*A(LLDG(K,-4),4) + - A(K,-3)*A(LLDG(K,-3),3) + - A(K,-2)*A(LLDG(K,-2),2) + - A(K,-1)*A(K-1 ,1)) C C Compute upper diagonals A(K,1) = A(K, 1) - A(K,-3)*A(LLDG(K,-3),4) + - A(K,-2)*A(LLDG(K,-2),3) A(K,2) = A(K, 2) - A(K,-1)*A(K-1 ,3) A(K,3) = A(K, 3) - A(K,-1)*A(K-1 ,4) 20 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPD, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) INTEGER NPDE PARAMETER (NPDE = 1) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) REAL A(N,-4:4), B(N) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K) = B(K) - A(K,-1)*B(K- 1) + - A(K,-2)*B(LLDG(K,-2)) + - A(K,-3)*B(LLDG(K,-3)) + - A(K,-4)*B(LLDG(K,-4)) 20 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K) = B(K) * A(K,0) 133 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K) = (B(K) - A(K,1)*B(K+1 ) + - A(K,2)*B(LUDG(K,2)) + - A(K,3)*B(LUDG(K,3)) + - A(K,4)*B(LUDG(K,4))) * A(K,0) 40 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'ilubs2.f' then echo shar: will not over-write existing file "'ilubs2.f'" else cat << \SHAR_EOF > 'ilubs2.f' SUBROUTINE ILU (N, NPD, A, LLDG, LSL, LLSL) INTEGER NPDE PARAMETER (NPDE = 2) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LSL(*), LLSL(0:*) REAL A(N,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, LC, K, L, M C IF (NPDE .NE. NPD) STOP 'Wrong ILUBS loaded.' C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 C C Compute main block diagonal DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 L = 1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K,LC,JC,0) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K,LC,IC,0) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 559 CONTINUE 557 CONTINUE 550 CONTINUE C C Compute upper block diagonals DO 560 IC = 1, NPDE DO 563 LC = 1, IC-1 DO 564 JC = 1, NPDE CDIR$ IVDEP DO 561 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 561 CONTINUE 564 CONTINUE 563 CONTINUE 560 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower block diagonals DO 120 JC = 1, NPDE DO 121 LC = 1, JC-1 CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 122 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,0) 122 CONTINUE 20 CONTINUE 121 CONTINUE CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 123 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) * A(LLDG(K,-4),JC,JC,0) 123 CONTINUE 21 CONTINUE 120 CONTINUE DO 130 JC = 1, NPDE CDIR$ IVDEP DO 30 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 131 LC = 1, NPDE CFPP$ UNROLL DO 132 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,1) 132 CONTINUE 131 CONTINUE 30 CONTINUE DO 133 LC = 1, JC-1 CDIR$ IVDEP DO 31 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 134 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,0) 134 CONTINUE 31 CONTINUE 133 CONTINUE CDIR$ IVDEP DO 32 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 135 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) * A(LLDG(K,-3),JC,JC,0) 135 CONTINUE 32 CONTINUE 130 CONTINUE DO 140 JC = 1, NPDE CDIR$ IVDEP DO 40 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 141 LC = 1, NPDE CFPP$ UNROLL DO 142 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,1) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,2) 142 CONTINUE 141 CONTINUE 40 CONTINUE DO 143 LC = 1, JC-1 CDIR$ IVDEP DO 41 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 144 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,0) 144 CONTINUE 41 CONTINUE 143 CONTINUE CDIR$ IVDEP DO 42 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 145 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) * A(LLDG(K,-2),JC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) * A(K-1 ,JC,JC,0) 145 CONTINUE 42 CONTINUE 140 CONTINUE C C Compute main block diagonal DO 150 IC = 1, NPDE DO 152 JC = IC, NPDE CDIR$ IVDEP DO 50 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 151 LC = 1, NPDE A(K,IC,JC,0) = A(K,IC,JC, 0) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,4) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,3) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,1) 151 CONTINUE 50 CONTINUE 152 CONTINUE DO 153 JC = IC+1, NPDE CDIR$ IVDEP DO 51 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 1151 LC = 1, NPDE A(K,JC,IC,0) = A(K,JC,IC, 0) + - A(K,JC,LC,-4)*A(LLDG(K,-4),LC,IC,4) + - A(K,JC,LC,-3)*A(LLDG(K,-3),LC,IC,3) + - A(K,JC,LC,-2)*A(LLDG(K,-2),LC,IC,2) + - A(K,JC,LC,-1)*A(K-1 ,LC,IC,1) 1151 CONTINUE 51 CONTINUE 153 CONTINUE DO 154 LC = 1, IC-1 DO 155 JC = IC, NPDE CDIR$ IVDEP DO 52 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K ,LC,JC,0) 52 CONTINUE 155 CONTINUE DO 156 JC = IC+1, NPDE CDIR$ IVDEP DO 53 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K ,LC,IC,0) 53 CONTINUE 156 CONTINUE 154 CONTINUE CDIR$ IVDEP DO 54 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 54 CONTINUE DO 157 JC = IC+1, NPDE CDIR$ IVDEP DO 55 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 55 CONTINUE 157 CONTINUE 150 CONTINUE C C Compute upper block diagonals DO 160 IC = 1, NPDE CDIR$ IVDEP DO 60 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 161 LC = 1, NPDE CFPP$ UNROLL DO 162 JC = 1, NPDE A(K,IC,JC,1) = A(K,IC,JC, 1) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,4) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,3) A(K,IC,JC,2) = A(K,IC,JC, 2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,3) A(K,IC,JC,3) = A(K,IC,JC, 3) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,4) 162 CONTINUE 161 CONTINUE 60 CONTINUE DO 163 LC = 1, IC-1 CDIR$ IVDEP DO 61 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 164 JC = 1, NPDE A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 164 CONTINUE 61 CONTINUE 163 CONTINUE 160 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPD, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) INTEGER NPDE PARAMETER (NPDE = 2) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) REAL A(N,NPDE,NPDE,-4:4), B(N,NPDE) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C LSL_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 L = 1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 120 IC = 1, NPDE CFPP$ UNROLL DO 121 JC = 1, NPDE B(K,IC) = B(K,IC) - A(K,IC,JC,-1)*B(K- 1 ,JC) + - A(K,IC,JC,-2)*B(LLDG(K,-2),JC) + - A(K,IC,JC,-3)*B(LLDG(K,-3),JC) + - A(K,IC,JC,-4)*B(LLDG(K,-4),JC) 121 CONTINUE 120 CONTINUE 20 CONTINUE DO 123 IC = 2, NPDE DO 122 JC = 1, IC-1 CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 21 CONTINUE 122 CONTINUE 123 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 133 CONTINUE 130 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) CFPP$ UNROLL DO 150 IC = NPDE, 1, -1 CFPP$ UNROLL DO 151 JC = NPDE, 1, -1 B(K,IC) = B(K,IC) - A(K,IC,JC,1)*B(K+1 ,JC) + - A(K,IC,JC,2)*B(LUDG(K,2),JC) + - A(K,IC,JC,3)*B(LUDG(K,3),JC) + - A(K,IC,JC,4)*B(LUDG(K,4),JC) 151 CONTINUE 150 CONTINUE 40 CONTINUE DO 1150 IC = NPDE, 1, -1 DO 152 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 51 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 51 CONTINUE 152 CONTINUE CDIR$ IVDEP DO 52 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 52 CONTINUE 1150 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'ilubs3.f' then echo shar: will not over-write existing file "'ilubs3.f'" else cat << \SHAR_EOF > 'ilubs3.f' SUBROUTINE ILU (N, NPD, A, LLDG, LSL, LLSL) INTEGER NPDE PARAMETER (NPDE = 3) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LSL(*), LLSL(0:*) REAL A(N,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, LC, K, L, M C IF (NPDE .NE. NPD) STOP 'Wrong ILUBS loaded.' C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 C C Compute main block diagonal DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 L = 1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K,LC,JC,0) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K,LC,IC,0) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 559 CONTINUE 557 CONTINUE 550 CONTINUE C C Compute upper block diagonals DO 560 IC = 1, NPDE DO 563 LC = 1, IC-1 DO 564 JC = 1, NPDE CDIR$ IVDEP DO 561 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 561 CONTINUE 564 CONTINUE 563 CONTINUE 560 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower block diagonals DO 120 JC = 1, NPDE DO 121 LC = 1, JC-1 CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 122 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,0) 122 CONTINUE 20 CONTINUE 121 CONTINUE CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 123 IC = 1, NPDE A(K,IC,JC,-4) = A(K,IC,JC,-4) * A(LLDG(K,-4),JC,JC,0) 123 CONTINUE 21 CONTINUE 120 CONTINUE DO 130 JC = 1, NPDE CDIR$ IVDEP DO 30 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 131 LC = 1, NPDE CFPP$ UNROLL DO 132 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,1) 132 CONTINUE 131 CONTINUE 30 CONTINUE DO 133 LC = 1, JC-1 CDIR$ IVDEP DO 31 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 134 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,0) 134 CONTINUE 31 CONTINUE 133 CONTINUE CDIR$ IVDEP DO 32 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 135 IC = 1, NPDE A(K,IC,JC,-3) = A(K,IC,JC,-3) * A(LLDG(K,-3),JC,JC,0) 135 CONTINUE 32 CONTINUE 130 CONTINUE DO 140 JC = 1, NPDE CDIR$ IVDEP DO 40 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 141 LC = 1, NPDE CFPP$ UNROLL DO 142 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,1) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,2) 142 CONTINUE 141 CONTINUE 40 CONTINUE DO 143 LC = 1, JC-1 CDIR$ IVDEP DO 41 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 144 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,0) 144 CONTINUE 41 CONTINUE 143 CONTINUE CDIR$ IVDEP DO 42 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 145 IC = 1, NPDE A(K,IC,JC,-2) = A(K,IC,JC,-2) * A(LLDG(K,-2),JC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) * A(K-1 ,JC,JC,0) 145 CONTINUE 42 CONTINUE 140 CONTINUE C C Compute main block diagonal DO 150 IC = 1, NPDE DO 152 JC = IC, NPDE CDIR$ IVDEP DO 50 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 151 LC = 1, NPDE A(K,IC,JC,0) = A(K,IC,JC, 0) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,4) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,3) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,1) 151 CONTINUE 50 CONTINUE 152 CONTINUE DO 153 JC = IC+1, NPDE CDIR$ IVDEP DO 51 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 1151 LC = 1, NPDE A(K,JC,IC,0) = A(K,JC,IC, 0) + - A(K,JC,LC,-4)*A(LLDG(K,-4),LC,IC,4) + - A(K,JC,LC,-3)*A(LLDG(K,-3),LC,IC,3) + - A(K,JC,LC,-2)*A(LLDG(K,-2),LC,IC,2) + - A(K,JC,LC,-1)*A(K-1 ,LC,IC,1) 1151 CONTINUE 51 CONTINUE 153 CONTINUE DO 154 LC = 1, IC-1 DO 155 JC = IC, NPDE CDIR$ IVDEP DO 52 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K ,LC,JC,0) 52 CONTINUE 155 CONTINUE DO 156 JC = IC+1, NPDE CDIR$ IVDEP DO 53 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K ,LC,IC,0) 53 CONTINUE 156 CONTINUE 154 CONTINUE CDIR$ IVDEP DO 54 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 54 CONTINUE DO 157 JC = IC+1, NPDE CDIR$ IVDEP DO 55 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 55 CONTINUE 157 CONTINUE 150 CONTINUE C C Compute upper block diagonals DO 160 IC = 1, NPDE CDIR$ IVDEP DO 60 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 161 LC = 1, NPDE CFPP$ UNROLL A(K,IC,1,1) = A(K,IC,1,1) - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,1,4) - A 1 (K,IC,LC,-2)*A(LLDG(K,-2),LC,1,3) A(K,IC,1,2) = A(K,IC,1,2) - A(K,IC,LC,-1)*A(K-1,LC,1,3) A(K,IC,1,3) = A(K,IC,1,3) - A(K,IC,LC,-1)*A(K-1,LC,1,4) A(K,IC,2,1) = A(K,IC,2,1) - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,2,4) - A 1 (K,IC,LC,-2)*A(LLDG(K,-2),LC,2,3) A(K,IC,2,2) = A(K,IC,2,2) - A(K,IC,LC,-1)*A(K-1,LC,2,3) A(K,IC,2,3) = A(K,IC,2,3) - A(K,IC,LC,-1)*A(K-1,LC,2,4) A(K,IC,3,1) = A(K,IC,3,1) - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,3,4) - A 1 (K,IC,LC,-2)*A(LLDG(K,-2),LC,3,3) A(K,IC,3,2) = A(K,IC,3,2) - A(K,IC,LC,-1)*A(K-1,LC,3,3) A(K,IC,3,3) = A(K,IC,3,3) - A(K,IC,LC,-1)*A(K-1,LC,3,4) 161 CONTINUE 60 CONTINUE DO 163 LC = 1, IC-1 CDIR$ IVDEP DO 61 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 164 JC = 1, NPDE A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 164 CONTINUE 61 CONTINUE 163 CONTINUE 160 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPD, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) INTEGER NPDE PARAMETER (NPDE = 3) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPD, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) REAL A(N,NPDE,NPDE,-4:4), B(N,NPDE) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C ---------------------------------------------------------------------- C INTEGER IC, JC, K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C LSL_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 L = 1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) CFPP$ UNROLL DO 120 IC = 1, NPDE CFPP$ UNROLL DO 121 JC = 1, NPDE B(K,IC) = B(K,IC) - A(K,IC,JC,-1)*B(K- 1 ,JC) + - A(K,IC,JC,-2)*B(LLDG(K,-2),JC) + - A(K,IC,JC,-3)*B(LLDG(K,-3),JC) + - A(K,IC,JC,-4)*B(LLDG(K,-4),JC) 121 CONTINUE 120 CONTINUE 20 CONTINUE DO 123 IC = 2, NPDE DO 122 JC = 1, IC-1 CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 21 CONTINUE 122 CONTINUE 123 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 133 CONTINUE 130 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) CFPP$ UNROLL DO 150 IC = NPDE, 1, -1 CFPP$ UNROLL DO 151 JC = NPDE, 1, -1 B(K,IC) = B(K,IC) - A(K,IC,JC,1)*B(K+1 ,JC) + - A(K,IC,JC,2)*B(LUDG(K,2),JC) + - A(K,IC,JC,3)*B(LUDG(K,3),JC) + - A(K,IC,JC,4)*B(LUDG(K,4),JC) 151 CONTINUE 150 CONTINUE 40 CONTINUE DO 1150 IC = NPDE, 1, -1 DO 152 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 51 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 51 CONTINUE 152 CONTINUE CDIR$ IVDEP DO 52 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 52 CONTINUE 1150 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'ilubsn.f' then echo shar: will not over-write existing file "'ilubsn.f'" else cat << \SHAR_EOF > 'ilubsn.f' SUBROUTINE ILU (N, NPDE, A, LLDG, LSL, LLSL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPDE, LLDG(N,-4:-2), LSL(*), LLSL(0:*) REAL A(N,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Incomplete LU decomposition of A C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C OUT: A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, LC, K, L, M C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = S_m(LLSL(l)) C C S_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 C C Compute main block diagonal DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 L = 1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K,LC,JC,0) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K,LC,IC,0) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 L = 1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 L = 1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 559 CONTINUE 557 CONTINUE 550 CONTINUE C C Compute upper block diagonals DO 560 IC = 1, NPDE DO 563 LC = 1, IC-1 DO 564 JC = 1, NPDE CDIR$ IVDEP DO 561 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 561 CONTINUE 564 CONTINUE 563 CONTINUE 560 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute lower block diagonals DO 120 JC = 1, NPDE DO 121 LC = 1, JC-1 DO 122 IC = 1, NPDE CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-4) = A(K,IC,JC,-4) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,0) 20 CONTINUE 122 CONTINUE 121 CONTINUE DO 123 IC = 1, NPDE CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-4) = A(K,IC,JC,-4) * A(LLDG(K,-4),JC,JC,0) 21 CONTINUE 123 CONTINUE 120 CONTINUE DO 130 JC = 1, NPDE DO 131 LC = 1, NPDE DO 132 IC = 1, NPDE CDIR$ IVDEP DO 30 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,1) 30 CONTINUE 132 CONTINUE 131 CONTINUE DO 133 LC = 1, JC-1 DO 134 IC = 1, NPDE CDIR$ IVDEP DO 31 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-3) = A(K,IC,JC,-3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,0) 31 CONTINUE 134 CONTINUE 133 CONTINUE DO 135 IC = 1, NPDE CDIR$ IVDEP DO 32 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-3) = A(K,IC,JC,-3) * A(LLDG(K,-3),JC,JC,0) 32 CONTINUE 135 CONTINUE 130 CONTINUE DO 140 JC = 1, NPDE DO 141 LC = 1, NPDE DO 142 IC = 1, NPDE CDIR$ IVDEP DO 40 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,1) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,3) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,2) 40 CONTINUE 142 CONTINUE 141 CONTINUE DO 143 LC = 1, JC-1 DO 144 IC = 1, NPDE CDIR$ IVDEP DO 41 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-2) = A(K,IC,JC,-2) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,0) 41 CONTINUE 144 CONTINUE 143 CONTINUE DO 145 IC = 1, NPDE CDIR$ IVDEP DO 42 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,-2) = A(K,IC,JC,-2) * A(LLDG(K,-2),JC,JC,0) A(K,IC,JC,-1) = A(K,IC,JC,-1) * A(K-1 ,JC,JC,0) 42 CONTINUE 145 CONTINUE 140 CONTINUE C C Compute main block diagonal DO 150 IC = 1, NPDE DO 151 LC = 1, NPDE DO 152 JC = IC, NPDE CDIR$ IVDEP DO 50 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC, 0) + - A(K,IC,LC,-4)*A(LLDG(K,-4),LC,JC,4) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,3) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,1) 50 CONTINUE 152 CONTINUE DO 153 JC = IC+1, NPDE CDIR$ IVDEP DO 51 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC, 0) + - A(K,JC,LC,-4)*A(LLDG(K,-4),LC,IC,4) + - A(K,JC,LC,-3)*A(LLDG(K,-3),LC,IC,3) + - A(K,JC,LC,-2)*A(LLDG(K,-2),LC,IC,2) + - A(K,JC,LC,-1)*A(K-1 ,LC,IC,1) 51 CONTINUE 153 CONTINUE 151 CONTINUE DO 154 LC = 1, IC-1 DO 155 JC = IC, NPDE CDIR$ IVDEP DO 52 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,0) = A(K,IC,JC,0) + - A(K,IC,LC,0)*A(K ,LC,JC,0) 52 CONTINUE 155 CONTINUE DO 156 JC = IC+1, NPDE CDIR$ IVDEP DO 53 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) + - A(K,JC,LC,0)*A(K ,LC,IC,0) 53 CONTINUE 156 CONTINUE 154 CONTINUE CDIR$ IVDEP DO 54 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,IC,0) = 1.0 / A(K,IC,IC,0) 54 CONTINUE DO 157 JC = IC+1, NPDE CDIR$ IVDEP DO 55 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,JC,IC,0) = A(K,JC,IC,0) * A(K,IC,IC,0) 55 CONTINUE 157 CONTINUE 150 CONTINUE C C Compute upper block diagonals DO 160 IC = 1, NPDE DO 161 LC = 1, NPDE DO 162 JC = 1, NPDE CDIR$ IVDEP DO 60 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC, 1) + - A(K,IC,LC,-3)*A(LLDG(K,-3),LC,JC,4) + - A(K,IC,LC,-2)*A(LLDG(K,-2),LC,JC,3) A(K,IC,JC,2) = A(K,IC,JC, 2) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,3) A(K,IC,JC,3) = A(K,IC,JC, 3) + - A(K,IC,LC,-1)*A(K-1 ,LC,JC,4) 60 CONTINUE 162 CONTINUE 161 CONTINUE DO 163 LC = 1, IC-1 DO 164 JC = 1, NPDE CDIR$ IVDEP DO 61 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) A(K,IC,JC,1) = A(K,IC,JC,1) + - A(K,IC,LC,0)*A(K,LC,JC,1) A(K,IC,JC,2) = A(K,IC,JC,2) + - A(K,IC,LC,0)*A(K,LC,JC,2) A(K,IC,JC,3) = A(K,IC,JC,3) + - A(K,IC,LC,0)*A(K,LC,JC,3) A(K,IC,JC,4) = A(K,IC,JC,4) + - A(K,IC,LC,0)*A(K,LC,JC,4) 61 CONTINUE 164 CONTINUE 163 CONTINUE 160 CONTINUE C 10 CONTINUE C RETURN END SUBROUTINE BCKSLV (N, NPDE, A, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + B) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, NPDE, LLDG(N,-4:-2), LUDG(N,2:4), + LSL(*), LLSL(0:*), LSU(*), LLSU(0:*) REAL A(N,NPDE,NPDE,-4:4), B(N,NPDE) C Ccc PURPOSE: C Solve LUx = b C A stems from a 9-point stencil on a grid with irregular row lengths C A = ILU, vectorized by `hyperplane' ordening, where the `hyperplanes' C are sets of points that can be treated simultaneously. C A((i,j),1:NPDE,1:NPDE,.) contains a block of NPDE.NPDE elements C corresponding with node (i,j) C Ccc PARAMETER DESCRIPTION: C N : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals of L C A(.,ic,jc,0): jc < ic: main block diagonal of L C main diagonal L == I C jc >=ic: main block diagonal of U C main diagonal U inverted C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals of U C LLDG : IN. Block-column index of lower 3 block-diagonals C LLDG(K,.) = K, K = 1, NX C LUDG : IN. Block-column index of upper 3 block-diagonals C LUDG(K,.) = K, K = N-NX+1, N C LSL : IN. (NPTS) C LSL(LLSL(m-1)+1:LLSL(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ly = b C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # iterations needed C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : IN. (NPTS) C LSU(LLSU(m-1)+1:LLSU(m)): pointers to set of points S_m C in actual grid that can be treated at the m-th iteration C of Ux = y C LLSU : IN. (0:LLSU(0)) C LLSU(0) = # iterations needed C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C B : INOUT. C IN: right-hand side vector b C OUT: solution vector x C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, K, L, M C CCC Ly = b C C Loop over `hyperplanes' S_m, m = 1, LLSL(0) C Node # K = LSL_m(LLSL(l)) C C LSL_1 = {(i,j)| (i,j) not dependent on (i-ii,j-jj), C ii,jj >= 0, not ii=jj=0; C i.e., Dirichlet points and lower left corner (K=1)} M = 1 DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 L = 1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the first row and the first C point of the second row, since K > 1 in the loop and C LLDG(K,.) = K, K = 1, NX (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 10 M = 2, LLSL(0) C C Compute y elements in this set DO 120 IC = 1, NPDE DO 121 JC = 1, NPDE CDIR$ IVDEP DO 20 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,-1)*B(K- 1 ,JC) + - A(K,IC,JC,-2)*B(LLDG(K,-2),JC) + - A(K,IC,JC,-3)*B(LLDG(K,-3),JC) + - A(K,IC,JC,-4)*B(LLDG(K,-4),JC) 20 CONTINUE 121 CONTINUE 120 CONTINUE DO 123 IC = 2, NPDE DO 122 JC = 1, IC-1 CDIR$ IVDEP DO 21 L = LLSL(M-1)+1, LLSL(M) K = LSL(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 21 CONTINUE 122 CONTINUE 123 CONTINUE C 10 CONTINUE C CCC Ux = y C C Loop over `hyperplanes' LSU_m, m = 1, LLSU(0) C Node # K = LSU_m(LLSU(l)) C C LSU_1 = {(i,j)| (i,j) not dependent on (i+ii,j+jj), C ii,jj >= 0, not ii=jj=0; C e.g., Dirichlet points and upper right corner (K=N)} C M = 1 DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 L = 1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 133 CONTINUE 130 CONTINUE C C Loop over rest of `hyperplane' sets C NB. No exception handling is necessary for the last row and the first C point of the second last row, since K < N in the loop and C LUDG(K,.) = K, K = N-NX+1, N (=> no array index problems), C and the multiplicator of `non existing' array elements is zero. C DO 30 M = 2, LLSU(0) C C Compute x elements in this set DO 150 IC = NPDE, 1, -1 DO 151 JC = NPDE, 1, -1 CDIR$ IVDEP DO 40 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,1)*B(K+1 ,JC) + - A(K,IC,JC,2)*B(LUDG(K,2),JC) + - A(K,IC,JC,3)*B(LUDG(K,3),JC) + - A(K,IC,JC,4)*B(LUDG(K,4),JC) 40 CONTINUE 151 CONTINUE DO 152 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 51 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) - A(K,IC,JC,0)*B(K,JC) 51 CONTINUE 152 CONTINUE CDIR$ IVDEP DO 52 L = LLSU(M-1)+1, LLSU(M) K = LSU(L) B(K,IC) = B(K,IC) * A(K,IC,IC,0) 52 CONTINUE 150 CONTINUE C 30 CONTINUE C RETURN END SHAR_EOF fi # end of overwriting check if test -f 'user.f' then echo shar: will not over-write existing file "'user.f'" else cat << \SHAR_EOF > 'user.f' LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*) REAL XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define grid for initial rectangular domain ((XL,YL),(XR,YU)) in C in physical coordinates and ((0,0),(Nx,Ny) in column, resp. row C coordinates, where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise, C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : IN. X-coordinate of lowerleft point of rectangle C YL : IN. Y-coordinate of lowerleft point of rectangle C XR : IN. X-coordinate of upperright point of rectangle C YU : IN. Y-coordinate of upperright point of rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER NX, NY, I, IPT, J, NROWS, NPTS, NBNDS NX = NINT((XR-XL)/DX) NY = NINT((YU-YL)/DY) C Ccc Make initial grid NPTS = (NX+1)*(NY+1) IF (MAXPTS .LT. NPTS) THEN INIDOM = .FALSE. MAXPTS = NPTS RETURN ELSE INIDOM = .TRUE. ENDIF NROWS = NY+1 C C Make grid structure LROW(0) = NROWS IPT = 1 DO 10 I = 0, NY LROW(I+1) = IPT IROW(I+1) = I DO 20 J = 0, NX ICOL(IPT) = J IPT = IPT + 1 20 CONTINUE 10 CONTINUE LROW(NROWS+1) = NPTS+1 C C Boundaries NBNDS = 8 ILBND(1) = 1 ILBND(2) = 2 ILBND(3) = 3 ILBND(4) = 4 ILBND(5) = 12 ILBND(6) = 23 ILBND(7) = 34 ILBND(8) = 41 LLBND(0) = NBNDS LLBND(1) = 1 LLBND(2) = LLBND(1) + (NX-1) LLBND(3) = LLBND(2) + (NY-1) LLBND(4) = LLBND(3) + (NX-1) LLBND(5) = LLBND(4) + (NY-1) LLBND(6) = LLBND(5) + 1 LLBND(7) = LLBND(6) + 1 LLBND(8) = LLBND(7) + 1 LLBND(9) = LLBND(8) + 1 C Lower and upper boundary pointers DO 50 J = 1, NX-1 LBND(LLBND(1)+J-1) = J + 1 LBND(LLBND(3)+J-1) = NPTS - J 50 CONTINUE C Left and right boundary pointers DO 60 I = 1, NY-1 LBND(LLBND(2)+I-1) = I*(NX+1) + 1 LBND(LLBND(4)+I-1) = (I+1)*(NX+1) 60 CONTINUE C Corners LBND(LLBND(5)) = 1 LBND(LLBND(6)) = NPTS - NX LBND(LLBND(7)) = NPTS LBND(LLBND(8)) = NX+1 RETURN END SUBROUTINE DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + FU, FUX, FUY, FUXX, FUXY, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL F(NPTS*NPDE), T, X(*), Y(*), U(*), A0, DT, DX, DY, UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), DEL(NPTS), WORK(2*NPTS*NPDE), + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE),FUXY(NPTS*NPDE,NPDE),FUYY(NPTS*NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U by numerical C differencing C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUXY : OUT. dF(Uxy)dUxy C FUYY : OUT. dF(Uyy)dUyy C Ccc EXTERNALS USED: EXTERNAL PERTRB, PRTRBU, RES C C----------------------------------------------------------------------- C INTEGER I, IC, ICPTB, IPT, LUTBAR REAL FACX, FACY, FACXX, FACXY, FACYY, TOL LUTBAR = 1 + NPTS*NPDE C Ccc How to decide if derivatives are `zero'? C Take `zero'-value of U divided by the grid width FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACXY = 1/(2*DX*2*DY) FACYY = 1/DY**2 C Ccc Loop over the components of the (derivatives of) U DO 10 ICPTB = 1, NPDE C C dF(U,Ut)/dU TOL = ABSTOL(ICPTB) CALL PRTRBU (ICPTB, NPTS, NPDE, U, A0, DT, UT, TOL, DEL, + WORK, WORK(LUTBAR)) CALL RES (T, X, Y, NPTS, NPDE, WORK, LLBND, ILBND, LBND, UIB, + WORK(LUTBAR), UX, UY, UXX, UXY, UYY, FU(1,ICPTB)) DO 20 IC = 1, NPDE DO 20 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FU(I,ICPTB) = (FU(I,ICPTB) - F(I)) / DEL(IPT) 20 CONTINUE C C dF(Ux)/dUx TOL = ABSTOL(ICPTB)*FACX CALL PERTRB (ICPTB, NPTS, NPDE, UX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, WORK, UY, UXX, UXY, UYY, FUX(1,ICPTB)) DO 40 IC = 1, NPDE DO 40 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUX(I,ICPTB) = (FUX(I,ICPTB) - F(I)) / DEL(IPT) 40 CONTINUE C C dF(Uy)/dUy TOL = ABSTOL(ICPTB)*FACY CALL PERTRB (ICPTB, NPTS, NPDE, UY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, WORK, UXX, UXY, UYY, FUY(1,ICPTB)) DO 50 IC = 1, NPDE DO 50 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUY(I,ICPTB) = (FUY(I,ICPTB) - F(I)) / DEL(IPT) 50 CONTINUE C C dF(Uxx)/dUxx TOL = ABSTOL(ICPTB)*FACXX CALL PERTRB (ICPTB, NPTS, NPDE, UXX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, WORK, UXY, UYY, FUXX(1,ICPTB)) DO 60 IC = 1, NPDE DO 60 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUXX(I,ICPTB) = (FUXX(I,ICPTB) - F(I)) / DEL(IPT) 60 CONTINUE C C dF(Uxy)/dUxy TOL = ABSTOL(ICPTB)*FACXY CALL PERTRB (ICPTB, NPTS, NPDE, UXY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, WORK, UYY, FUXY(1,ICPTB)) DO 70 IC = 1, NPDE DO 70 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUXY(I,ICPTB) = (FUXY(I,ICPTB) - F(I)) / DEL(IPT) 70 CONTINUE C C dF(Uyy)/dUyy TOL = ABSTOL(ICPTB)*FACYY CALL PERTRB (ICPTB, NPTS, NPDE, UYY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, WORK, FUYY(1,ICPTB)) DO 80 IC = 1, NPDE DO 80 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUYY(I,ICPTB) = (FUYY(I,ICPTB) - F(I)) / DEL(IPT) 80 CONTINUE 10 CONTINUE RETURN END SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, + LGRID, ISTRUC, LSOL, SOL) INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) REAL T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) RETURN END SUBROUTINE CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U, SPCMON, TOL) INTEGER LEVEL, NPTS, NPDE REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), SPCMON(NPTS), TOL RETURN END SHAR_EOF fi # end of overwriting check if test -f 'blas1.f' then echo shar: will not over-write existing file "'blas1.f'" else cat << \SHAR_EOF > 'blas1.f' real function sdot(n,sx,incx,sy,incy) c c forms the dot product of two vectors. c uses unrolled loop for increments equal to one. c jack dongarra, linpack, 3/11/78. c real sx(1),sy(1),stemp integer i,incx,incy,ix,iy,m,mp1,n c sdot = 0.0e0 stemp = 0.0e0 if(n.le.0)return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n stemp = stemp + sx(ix)*sy(iy) ix = ix + incx iy = iy + incy 10 continue sdot = stemp return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,5) if( m .eq. 0 ) go to 40 do 30 i = 1,m stemp = stemp + sx(i)*sy(i) 30 continue if( n .lt. 5 ) go to 60 40 mp1 = m + 1 do 50 i = mp1,n,5 stemp = stemp + sx(i)*sy(i) + sx(i + 1)*sy(i + 1) + * sx(i + 2)*sy(i + 2) + sx(i + 3)*sy(i + 3) + sx(i + 4)*sy(i + 4) 50 continue 60 sdot = stemp return end subroutine saxpy(n,sa,sx,incx,sy,incy) c c constant times a vector plus a vector. c uses unrolled loop for increments equal to one. c jack dongarra, linpack, 3/11/78. c real sx(1),sy(1),sa integer i,incx,incy,ix,iy,m,mp1,n c if(n.le.0)return if (sa .eq. 0.0e0) return if(incx.eq.1.and.incy.eq.1)go to 20 c c code for unequal increments or equal increments c not equal to 1 c ix = 1 iy = 1 if(incx.lt.0)ix = (-n+1)*incx + 1 if(incy.lt.0)iy = (-n+1)*incy + 1 do 10 i = 1,n sy(iy) = sy(iy) + sa*sx(ix) ix = ix + incx iy = iy + incy 10 continue return c c code for both increments equal to 1 c c c clean-up loop c 20 m = mod(n,4) if( m .eq. 0 ) go to 40 do 30 i = 1,m sy(i) = sy(i) + sa*sx(i) 30 continue if( n .lt. 4 ) return 40 mp1 = m + 1 do 50 i = mp1,n,4 sy(i) = sy(i) + sa*sx(i) sy(i + 1) = sy(i + 1) + sa*sx(i + 1) sy(i + 2) = sy(i + 2) + sa*sx(i + 2) sy(i + 3) = sy(i + 3) + sa*sx(i + 3) 50 continue return end REAL FUNCTION SNRM2 ( N, SX, INCX) INTEGER NEXT REAL SX(1), CUTLO, CUTHI, HITEST, SUM, XMAX, ZERO, ONE DATA ZERO, ONE /0.0E0, 1.0E0/ C C EUCLIDEAN NORM OF THE N-VECTOR STORED IN SX() WITH STORAGE C INCREMENT INCX . C IF N .LE. 0 RETURN WITH RESULT = 0. C IF N .GE. 1 THEN INCX MUST BE .GE. 1 C C C.L.LAWSON, 1978 JAN 08 C C FOUR PHASE METHOD USING TWO BUILT-IN CONSTANTS THAT ARE C HOPEFULLY APPLICABLE TO ALL MACHINES. C CUTLO = MAXIMUM OF SQRT(U/EPS) OVER ALL KNOWN MACHINES. C CUTHI = MINIMUM OF SQRT(V) OVER ALL KNOWN MACHINES. C WHERE C EPS = SMALLEST NO. SUCH THAT EPS + 1. .GT. 1. C U = SMALLEST POSITIVE NO. (UNDERFLOW LIMIT) C V = LARGEST NO. (OVERFLOW LIMIT) C C BRIEF OUTLINE OF ALGORITHM.. C C PHASE 1 SCANS ZERO COMPONENTS. C MOVE TO PHASE 2 WHEN A COMPONENT IS NONZERO AND .LE. CUTLO C MOVE TO PHASE 3 WHEN A COMPONENT IS .GT. CUTLO C MOVE TO PHASE 4 WHEN A COMPONENT IS .GE. CUTHI/M C WHERE M = N FOR X() REAL AND M = 2*N FOR COMPLEX. C C VALUES FOR CUTLO AND CUTHI.. C FROM THE ENVIRONMENTAL PARAMETERS LISTED IN THE IMSL CONVERTER C DOCUMENT THE LIMITING VALUES ARE AS FOLLOWS.. C CUTLO, S.P. U/EPS = 2**(-102) FOR HONEYWELL. CLOSE SECONDS ARE C UNIVAC AND DEC AT 2**(-103) C THUS CUTLO = 2**(-51) = 4.44089E-16 C CUTHI, S.P. V = 2**127 FOR UNIVAC, HONEYWELL, AND DEC. C THUS CUTHI = 2**(63.5) = 1.30438E19 C CUTLO, D.P. U/EPS = 2**(-67) FOR HONEYWELL AND DEC. C THUS CUTLO = 2**(-33.5) = 8.23181D-11 C CUTHI, D.P. SAME AS S.P. CUTHI = 1.30438D19 C DATA CUTLO, CUTHI / 8.232D-11, 1.304D19 / C DATA CUTLO, CUTHI / 4.441E-16, 1.304E19 / DATA CUTLO, CUTHI / 4.441E-16, 1.304E19 / C IF(N .GT. 0) GO TO 10 SNRM2 = ZERO GO TO 300 C 10 ASSIGN 30 TO NEXT SUM = ZERO NN = N * INCX C BEGIN MAIN LOOP I = 1 20 GO TO NEXT,(30, 50, 70, 110) 30 IF( ABS(SX(I)) .GT. CUTLO) GO TO 85 ASSIGN 50 TO NEXT XMAX = ZERO C C PHASE 1. SUM IS ZERO C 50 IF( SX(I) .EQ. ZERO) GO TO 200 IF( ABS(SX(I)) .GT. CUTLO) GO TO 85 C C PREPARE FOR PHASE 2. ASSIGN 70 TO NEXT GO TO 105 C C PREPARE FOR PHASE 4. C 100 I = J ASSIGN 110 TO NEXT SUM = (SUM / SX(I)) / SX(I) 105 XMAX = ABS(SX(I)) GO TO 115 C C PHASE 2. SUM IS SMALL. C SCALE TO AVOID DESTRUCTIVE UNDERFLOW. C 70 IF( ABS(SX(I)) .GT. CUTLO ) GO TO 75 C C COMMON CODE FOR PHASES 2 AND 4. C IN PHASE 4 SUM IS LARGE. SCALE TO AVOID OVERFLOW. C 110 IF( ABS(SX(I)) .LE. XMAX ) GO TO 115 SUM = ONE + SUM * (XMAX / SX(I))**2 XMAX = ABS(SX(I)) GO TO 200 C 115 SUM = SUM + (SX(I)/XMAX)**2 GO TO 200 C C C PREPARE FOR PHASE 3. C 75 SUM = (SUM * XMAX) * XMAX C C C FOR REAL OR D.P. SET HITEST = CUTHI/N C FOR COMPLEX SET HITEST = CUTHI/(2*N) C 85 HITEST = CUTHI/FLOAT( N ) C C PHASE 3. SUM IS MID-RANGE. NO SCALING. C DO 95 J =I,NN,INCX IF(ABS(SX(J)) .GE. HITEST) GO TO 100 95 SUM = SUM + SX(J)**2 SNRM2 = SQRT( SUM ) GO TO 300 C 200 CONTINUE I = I + INCX IF ( I .LE. NN ) GO TO 20 C C END OF MAIN LOOP. C C COMPUTE SQUARE ROOT AND ADJUST FOR SCALING. C SNRM2 = XMAX * SQRT(SUM) 300 CONTINUE RETURN END SHAR_EOF fi # end of overwriting check if test -f 'port.f' then echo shar: will not over-write existing file "'port.f'" else cat << \SHAR_EOF > 'port.f' INTEGER FUNCTION I1MACH(I) INTEGER I C C I/O UNIT NUMBERS. C C I1MACH( 1) = THE STANDARD INPUT UNIT. C C I1MACH( 2) = THE STANDARD OUTPUT UNIT. C C I1MACH( 3) = THE STANDARD PUNCH UNIT. C C I1MACH( 4) = THE STANDARD ERROR MESSAGE UNIT. C C WORDS. C C I1MACH( 5) = THE NUMBER OF BITS PER INTEGER STORAGE UNIT. C C I1MACH( 6) = THE NUMBER OF CHARACTERS PER CHARACTER STORAGE UNIT. C FOR FORTRAN 77, THIS IS ALWAYS 1. FOR FORTRAN 66, C CHARACTER STORAGE UNIT = INTEGER STORAGE UNIT. C C INTEGERS. C C ASSUME INTEGERS ARE REPRESENTED IN THE S-DIGIT, BASE-A FORM C C SIGN ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) ) C C WHERE 0 .LE. X(I) .LT. A FOR I=0,...,S-1. C C I1MACH( 7) = A, THE BASE. C C I1MACH( 8) = S, THE NUMBER OF BASE-A DIGITS. C C I1MACH( 9) = A**S - 1, THE LARGEST MAGNITUDE. C C FLOATING-POINT NUMBERS. C C ASSUME FLOATING-POINT NUMBERS ARE REPRESENTED IN THE T-DIGIT, C BASE-B FORM C C SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) ) C C WHERE 0 .LE. X(I) .LT. B FOR I=1,...,T, C 0 .LT. X(1), AND EMIN .LE. E .LE. EMAX. C C I1MACH(10) = B, THE BASE. C C SINGLE-PRECISION C C I1MACH(11) = T, THE NUMBER OF BASE-B DIGITS. C C I1MACH(12) = EMIN, THE SMALLEST EXPONENT E. C C I1MACH(13) = EMAX, THE LARGEST EXPONENT E. C C DOUBLE-PRECISION C C I1MACH(14) = T, THE NUMBER OF BASE-B DIGITS. C C I1MACH(15) = EMIN, THE SMALLEST EXPONENT E. C C I1MACH(16) = EMAX, THE LARGEST EXPONENT E. C C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT, C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY C REMOVING THE C FROM COLUMN 1. ALSO, THE VALUES OF C I1MACH(1) - I1MACH(4) SHOULD BE CHECKED FOR CONSISTENCY C WITH THE LOCAL OPERATING SYSTEM. FOR FORTRAN 77, YOU MAY WISH C TO ADJUST THE DATA STATEMENT SO IMACH(6) IS SET TO 1, AND C THEN TO COMMENT OUT THE EXECUTABLE TEST ON I .EQ. 6 BELOW. C C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST C SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE, EXCEPT PERHAPS C FOR IMACH(1) - IMACH(4). C C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *) C GIVE C SOURCE FOR I1MACH. C INTEGER CRAY1, IMACH(16), OUTPUT, SANITY, SMALL(2) COMMON /D8MACH/ CRAY1 C/6S C/7S SAVE IMACH, SANITY C/ REAL RMACH C EQUIVALENCE (IMACH(4),OUTPUT), (RMACH,SMALL(1)) C C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T C PC 7300), AND 8087 BASED MICROS (E.G. IBM PC AND AT&T 6300). C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -125 / C DATA IMACH(13) / 128 / C DATA IMACH(14) / 53 / C DATA IMACH(15) / -1021 / C DATA IMACH(16) / 1024 /, SANITY/987/ C C MACHINE CONSTANTS FOR AMDAHL MACHINES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 63 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 63 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. C C DATA IMACH( 1) / 7 / C DATA IMACH( 2) / 2 / C DATA IMACH( 3) / 2 / C DATA IMACH( 4) / 2 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 33 / C DATA IMACH( 9) / Z1FFFFFFFF / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -256 / C DATA IMACH(13) / 255 / C DATA IMACH(14) / 60 / C DATA IMACH(15) / -256 / C DATA IMACH(16) / 255 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 48 / C DATA IMACH( 6) / 6 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 39 / C DATA IMACH( 9) / O0007777777777777 / C DATA IMACH(10) / 8 / C DATA IMACH(11) / 13 / C DATA IMACH(12) / -50 / C DATA IMACH(13) / 76 / C DATA IMACH(14) / 26 / C DATA IMACH(15) / -50 / C DATA IMACH(16) / 76 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 48 / C DATA IMACH( 6) / 6 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 39 / C DATA IMACH( 9) / O0007777777777777 / C DATA IMACH(10) / 8 / C DATA IMACH(11) / 13 / C DATA IMACH(12) / -50 / C DATA IMACH(13) / 76 / C DATA IMACH(14) / 26 / C DATA IMACH(15) / -32754 / C DATA IMACH(16) / 32780 /, SANITY/987/ C C MACHINE CONSTANTS FOR FTN4 ON THE CDC 6000/7000 SERIES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 60 / C DATA IMACH( 6) / 10 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 48 / C DATA IMACH( 9) / 00007777777777777777B / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 47 / C DATA IMACH(12) / -929 / C DATA IMACH(13) / 1070 / C DATA IMACH(14) / 94 / C DATA IMACH(15) / -929 / C DATA IMACH(16) / 1069 /, SANITY/987/ C C MACHINE CONSTANTS FOR FTN5 ON THE CDC 6000/7000 SERIES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 60 / C DATA IMACH( 6) / 10 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 48 / C DATA IMACH( 9) / O"00007777777777777777" / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 47 / C DATA IMACH(12) / -929 / C DATA IMACH(13) / 1070 / C DATA IMACH(14) / 94 / C DATA IMACH(15) / -929 / C DATA IMACH(16) / 1069 /, SANITY/987/ C C MACHINE CONSTANTS FOR CONVEX C-1. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 53 / C DATA IMACH(15) /-1024 / C DATA IMACH(16) / 1023 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 102 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 64 / C DATA IMACH( 6) / 8 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 63 / C DATA IMACH( 9) / 777777777777777777777B / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 47 / C DATA IMACH(12) / -8189 / C DATA IMACH(13) / 8190 / C DATA IMACH(14) / 94 / C DATA IMACH(15) / -8099 / C DATA IMACH(16) / 8190 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200. C C DATA IMACH( 1) / 11 / C DATA IMACH( 2) / 12 / C DATA IMACH( 3) / 8 / C DATA IMACH( 4) / 10 / C DATA IMACH( 5) / 16 / C DATA IMACH( 6) / 2 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 15 / C DATA IMACH( 9) /32767 / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 63 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 63 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 0 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 24 / C DATA IMACH( 6) / 3 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 23 / C DATA IMACH( 9) / 8388607 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 23 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 38 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 43 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / O377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 63 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / Z7FFFFFFF / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 63 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 63 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE INTERDATA 8/32 C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER. C C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 6 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / Z'7FFFFFFF' / C DATA IMACH(10) / 16 / C DATA IMACH(11) / 6 / C DATA IMACH(12) / -64 / C DATA IMACH(13) / 62 / C DATA IMACH(14) / 14 / C DATA IMACH(15) / -64 / C DATA IMACH(16) / 62 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 5 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / "377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 54 / C DATA IMACH(15) / -101 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 5 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / "377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 62 / C DATA IMACH(15) / -128 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 32-BIT INTEGER ARITHMETIC. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 56 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 16-BIT INTEGER ARITHMETIC. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 16 / C DATA IMACH( 6) / 2 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 15 / C DATA IMACH( 9) / 32767 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 56 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE PRIME 50 SERIES SYSTEMS C WTIH 32-BIT INTEGERS AND 64V MODE INSTRUCTIONS, C SUPPLIED BY IGOR BRAY. C C DATA IMACH( 1) / 1 / C DATA IMACH( 2) / 1 / C DATA IMACH( 3) / 2 / C DATA IMACH( 4) / 1 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / :17777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 23 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / +127 / C DATA IMACH(14) / 47 / C DATA IMACH(15) / -32895 / C DATA IMACH(16) / +32637 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000. C C DATA IMACH( 1) / 0 / C DATA IMACH( 2) / 0 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 0 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 1 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -125 / C DATA IMACH(13) / 128 / C DATA IMACH(14) / 53 / C DATA IMACH(15) / -1021 / C DATA IMACH(16) / 1024 /, SANITY/987/ C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C NOTE THAT THE PUNCH UNIT, I1MACH(3), HAS BEEN SET TO 7 C WHICH IS APPROPRIATE FOR THE UNIVAC-FOR SYSTEM. C IF YOU HAVE THE UNIVAC-FTN SYSTEM, SET IT TO 1. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 6 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / O377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 60 / C DATA IMACH(15) /-1024 / C DATA IMACH(16) / 1023 /, SANITY/987/ C C MACHINE CONSTANTS FOR VAX. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 56 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SANITY/987/ C C *** ISSUE STOP 775 IF ALL DATA STATEMENTS ARE COMMENTED... IF (SANITY .NE. 987) THEN * *** CHECK FOR AUTODOUBLE *** SMALL(2) = 0 RMACH = 1E13 IF (SMALL(2) .NE. 0) THEN * *** AUTODOUBLED *** IF ( (SMALL(1) .EQ. 1117925532 * .AND. SMALL(2) .EQ. -448790528) * .OR. (SMALL(2) .EQ. 1117925532 * .AND. SMALL(1) .EQ. -448790528)) THEN * *** IEEE *** IMACH(10) = 2 IMACH(14) = 53 IMACH(15) = -1021 IMACH(16) = 1024 ELSE IF ( SMALL(1) .EQ. -2065213935 * .AND. SMALL(2) .EQ. 10752) THEN * *** VAX WITH D_FLOATING *** IMACH(10) = 2 IMACH(14) = 56 IMACH(15) = -127 IMACH(16) = 127 ELSE IF ( SMALL(1) .EQ. 1267827943 * .AND. SMALL(2) .EQ. 704643072) THEN * *** IBM MAINFRAME *** IMACH(10) = 16 IMACH(14) = 14 IMACH(15) = -64 IMACH(16) = 63 ELSE WRITE(*,9010) STOP 777 END IF IMACH(11) = IMACH(14) IMACH(12) = IMACH(15) IMACH(13) = IMACH(16) ELSE RMACH = 1234567. IF (SMALL(1) .EQ. 1234613304) THEN * *** IEEE *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -125 IMACH(13) = 128 IMACH(14) = 53 IMACH(15) = -1021 IMACH(16) = 1024 SANITY = 987 ELSE IF (SMALL(1) .EQ. -1271379306) THEN * *** VAX *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -127 IMACH(13) = 127 IMACH(14) = 56 IMACH(15) = -127 IMACH(16) = 127 SANITY = 987 ELSE IF (SMALL(1) .EQ. 1175639687) THEN * *** IBM MAINFRAME *** IMACH(10) = 16 IMACH(11) = 6 IMACH(12) = -64 IMACH(13) = 63 IMACH(14) = 14 IMACH(15) = -64 IMACH(16) = 63 SANITY = 987 ELSE IF (SMALL(1) .EQ. 1251390520) THEN * *** CONVEX C-1 *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -128 IMACH(13) = 127 IMACH(14) = 53 IMACH(15) = -1024 IMACH(16) = 1023 SANITY = 987 ELSE * CRAY1 = 4617762693716115456 CRAY1 = 4617762 CRAY1 = 1000000*CRAY1 + 693716 CRAY1 = 1000000*CRAY1 + 115456 IF (SMALL(1) .NE. CRAY1) THEN WRITE(*,9020) STOP 777 END IF * *** CRAY 1, XMP, 2, AND 3 *** IMACH(1) = 5 IMACH(2) = 6 IMACH(3) = 102 IMACH(4) = 6 IMACH(5) = 64 IMACH(6) = 8 IMACH(7) = 2 IMACH(8) = 63 * IMACH(9) = 9223372036854775807 IMACH(9) = 9223372 IMACH(9) = 1000000*IMACH(9) + 36854 IMACH(9) = 1000000*IMACH(9) + 775807 IMACH(10) = 2 IMACH(11) = 47 IMACH(12) = -8189 IMACH(13) = 8190 IMACH(14) = 94 IMACH(15) = -8099 IMACH(16) = 8190 SANITY = 987 GO TO 10 END IF END IF IMACH( 1) = 5 IMACH( 2) = 6 IMACH( 3) = 7 IMACH( 4) = 6 IMACH( 5) = 32 IMACH( 6) = 4 IMACH( 7) = 2 IMACH( 8) = 31 IMACH( 9) = 2147483647 SANITY = 987 END IF C/6S C9010 FORMAT(/47H Adjust autodoubled I1MACH by uncommenting data/ C * 52H statements appropriate for your machine and setting/ C * 46H IMACH(I) = IMACH(I+3) for I = 11, 12, and 13.) C9020 FORMAT(/46H Adjust I1MACH by uncommenting data statements/ C * 30H appropriate for your machine.) C/7S 9010 FORMAT(/' Adjust autodoubled I1MACH by uncommenting data'/ * ' statements appropriate for your machine and setting'/ * ' IMACH(I) = IMACH(I+3) for I = 11, 12, and 13.') 9020 FORMAT(/' Adjust I1MACH by uncommenting data statements'/ * ' appropriate for your machine.') C/ 10 IF (I .LT. 1 .OR. I .GT. 16) GO TO 30 C I1MACH = IMACH(I) C/6S C/7S IF (I .EQ. 6) I1MACH = 1 C/ RETURN C 30 WRITE(*,*) 'I1MACH(I): I =',I,' is out of bounds.' C * CALL FDUMP C STOP C * /* C source for I1MACH -- remove the * in column 1 */ * /* Note that some values may need changing -- see the comments below. */ *#include *#include *#include *#include * *long i1mach_(long *i) *{ * switch(*i){ * case 1: return 5; /* standard input unit -- may need changing */ * case 2: return 6; /* standard output unit -- may need changing */ * case 3: return 7; /* standard punch unit -- may need changing */ * case 4: return 0; /* standard error unit -- may need changing */ * case 5: return 32; /* bits per integer -- may need changing */ * case 6: return 1; /* Fortran 77 value: 1 character */ * /* per character storage unit */ * case 7: return 2; /* base for integers -- may need changing */ * case 8: return 31; /* digits of integer base -- may need changing */ * case 9: return LONG_MAX; * case 10: return FLT_RADIX; * case 11: return FLT_MANT_DIG; * case 12: return FLT_MIN_EXP; * case 13: return FLT_MAX_EXP; * case 14: return DBL_MANT_DIG; * case 15: return DBL_MIN_EXP; * case 16: return DBL_MAX_EXP; * } * * fprintf(stderr, "invalid argument: i1mach(%ld)\n", *i); * exit(1); * return 0; /* for compilers that complain of missing return values */ * } END REAL FUNCTION R1MACH(I) INTEGER I C C SINGLE-PRECISION MACHINE CONSTANTS C C R1MACH(1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE. C C R1MACH(2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. C C R1MACH(3) = B**(-T), THE SMALLEST RELATIVE SPACING. C C R1MACH(4) = B**(1-T), THE LARGEST RELATIVE SPACING. C C R1MACH(5) = LOG10(B) C C TO ALTER THIS FUNCTION FOR A PARTICULAR ENVIRONMENT, C THE DESIRED SET OF DATA STATEMENTS SHOULD BE ACTIVATED BY C REMOVING THE C FROM COLUMN 1. C C FOR IEEE-ARITHMETIC MACHINES (BINARY STANDARD), THE FIRST C SET OF CONSTANTS BELOW SHOULD BE APPROPRIATE. C C WHERE POSSIBLE, DECIMAL, OCTAL OR HEXADECIMAL CONSTANTS ARE USED C TO SPECIFY THE CONSTANTS EXACTLY. SOMETIMES THIS REQUIRES USING C EQUIVALENT INTEGER ARRAYS. IF YOUR COMPILER USES HALF-WORD C INTEGERS BY DEFAULT (SOMETIMES CALLED INTEGER*2), YOU MAY NEED TO C CHANGE INTEGER TO INTEGER*4 OR OTHERWISE INSTRUCT YOUR COMPILER C TO USE FULL-WORD INTEGERS IN THE NEXT 5 DECLARATIONS. C C COMMENTS JUST BEFORE THE END STATEMENT (LINES STARTING WITH *) C GIVE C SOURCE FOR R1MACH. C INTEGER SMALL(2) INTEGER LARGE(2) INTEGER RIGHT(2) INTEGER DIVER(2) INTEGER LOG10(2) INTEGER CRAY1, SC COMMON /D8MACH/ CRAY1 C/6S C/7S SAVE SMALL, LARGE, RIGHT, DIVER, LOG10, SC C/ REAL RMACH(5) C EQUIVALENCE (RMACH(1),SMALL(1)) EQUIVALENCE (RMACH(2),LARGE(1)) EQUIVALENCE (RMACH(3),RIGHT(1)) EQUIVALENCE (RMACH(4),DIVER(1)) EQUIVALENCE (RMACH(5),LOG10(1)) C C MACHINE CONSTANTS FOR IEEE ARITHMETIC MACHINES, SUCH AS THE AT&T C 3B SERIES, MOTOROLA 68000 BASED MACHINES (E.G. SUN 3 AND AT&T C PC 7300), AND 8087 BASED MICROS (E.G. IBM PC AND AT&T 6300). C C DATA SMALL(1) / 8388608 / C DATA LARGE(1) / 2139095039 / C DATA RIGHT(1) / 864026624 / C DATA DIVER(1) / 872415232 / C DATA LOG10(1) / 1050288283 /, SC/987/ C C MACHINE CONSTANTS FOR AMDAHL MACHINES. C C DATA SMALL(1) / 1048576 / C DATA LARGE(1) / 2147483647 / C DATA RIGHT(1) / 990904320 / C DATA DIVER(1) / 1007681536 / C DATA LOG10(1) / 1091781651 /, SC/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. C C DATA RMACH(1) / Z400800000 / C DATA RMACH(2) / Z5FFFFFFFF / C DATA RMACH(3) / Z4E9800000 / C DATA RMACH(4) / Z4EA800000 / C DATA RMACH(5) / Z500E730E8 /, SC/987/ C C MACHINE CONSTANTS FOR THE BURROUGHS 5700/6700/7700 SYSTEMS. C C DATA RMACH(1) / O1771000000000000 / C DATA RMACH(2) / O0777777777777777 / C DATA RMACH(3) / O1311000000000000 / C DATA RMACH(4) / O1301000000000000 / C DATA RMACH(5) / O1157163034761675 /, SC/987/ C C MACHINE CONSTANTS FOR FTN4 ON THE CDC 6000/7000 SERIES. C C DATA RMACH(1) / 00564000000000000000B / C DATA RMACH(2) / 37767777777777777776B / C DATA RMACH(3) / 16414000000000000000B / C DATA RMACH(4) / 16424000000000000000B / C DATA RMACH(5) / 17164642023241175720B /, SC/987/ C C MACHINE CONSTANTS FOR FTN5 ON THE CDC 6000/7000 SERIES. C C DATA RMACH(1) / O"00564000000000000000" / C DATA RMACH(2) / O"37767777777777777776" / C DATA RMACH(3) / O"16414000000000000000" / C DATA RMACH(4) / O"16424000000000000000" / C DATA RMACH(5) / O"17164642023241175720" /, SC/987/ C C MACHINE CONSTANTS FOR CONVEX C-1. C C DATA RMACH(1) / '00800000'X / C DATA RMACH(2) / '7FFFFFFF'X / C DATA RMACH(3) / '34800000'X / C DATA RMACH(4) / '35000000'X / C DATA RMACH(5) / '3F9A209B'X /, SC/987/ C C MACHINE CONSTANTS FOR THE CRAY 1, XMP, 2, AND 3. C C DATA RMACH(1) / 200034000000000000000B / C DATA RMACH(2) / 577767777777777777776B / C DATA RMACH(3) / 377224000000000000000B / C DATA RMACH(4) / 377234000000000000000B / C DATA RMACH(5) / 377774642023241175720B /, SC/987/ C C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200. C C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING LINE - C STATIC RMACH(5) C C DATA SMALL/20K,0/,LARGE/77777K,177777K/ C DATA RIGHT/35420K,0/,DIVER/36020K,0/ C DATA LOG10/40423K,42023K/, SC/987/ C C MACHINE CONSTANTS FOR THE HARRIS SLASH 6 AND SLASH 7. C C DATA SMALL(1),SMALL(2) / '20000000, '00000201 / C DATA LARGE(1),LARGE(2) / '37777777, '00000177 / C DATA RIGHT(1),RIGHT(2) / '20000000, '00000352 / C DATA DIVER(1),DIVER(2) / '20000000, '00000353 / C DATA LOG10(1),LOG10(2) / '23210115, '00000377 /, SC/987/ C C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C C DATA RMACH(1) / O402400000000 / C DATA RMACH(2) / O376777777777 / C DATA RMACH(3) / O714400000000 / C DATA RMACH(4) / O716400000000 / C DATA RMACH(5) / O776464202324 /, SC/987/ C C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86. C C DATA RMACH(1) / Z00100000 / C DATA RMACH(2) / Z7FFFFFFF / C DATA RMACH(3) / Z3B100000 / C DATA RMACH(4) / Z3C100000 / C DATA RMACH(5) / Z41134413 /, SC/987/ C C MACHINE CONSTANTS FOR THE INTERDATA 8/32 C WITH THE UNIX SYSTEM FORTRAN 77 COMPILER. C C FOR THE INTERDATA FORTRAN VII COMPILER REPLACE C THE Z'S SPECIFYING HEX CONSTANTS WITH Y'S. C C DATA RMACH(1) / Z'00100000' / C DATA RMACH(2) / Z'7EFFFFFF' / C DATA RMACH(3) / Z'3B100000' / C DATA RMACH(4) / Z'3C100000' / C DATA RMACH(5) / Z'41134413' /, SC/987/ C C MACHINE CONSTANTS FOR THE PDP-10 (KA OR KI PROCESSOR). C C DATA RMACH(1) / "000400000000 / C DATA RMACH(2) / "377777777777 / C DATA RMACH(3) / "146400000000 / C DATA RMACH(4) / "147400000000 / C DATA RMACH(5) / "177464202324 /, SC/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C DATA SMALL(1) / 8388608 / C DATA LARGE(1) / 2147483647 / C DATA RIGHT(1) / 880803840 / C DATA DIVER(1) / 889192448 / C DATA LOG10(1) / 1067065499 /, SC/987/ C C DATA RMACH(1) / O00040000000 / C DATA RMACH(2) / O17777777777 / C DATA RMACH(3) / O06440000000 / C DATA RMACH(4) / O06500000000 / C DATA RMACH(5) / O07746420233 /, SC/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C DATA SMALL(1),SMALL(2) / 128, 0 / C DATA LARGE(1),LARGE(2) / 32767, -1 / C DATA RIGHT(1),RIGHT(2) / 13440, 0 / C DATA DIVER(1),DIVER(2) / 13568, 0 / C DATA LOG10(1),LOG10(2) / 16282, 8347 /, SC/987/ C C DATA SMALL(1),SMALL(2) / O000200, O000000 / C DATA LARGE(1),LARGE(2) / O077777, O177777 / C DATA RIGHT(1),RIGHT(2) / O032200, O000000 / C DATA DIVER(1),DIVER(2) / O032400, O000000 / C DATA LOG10(1),LOG10(2) / O037632, O020233 /, SC/987/ C C MACHINE CONSTANTS FOR THE SEQUENT BALANCE 8000. C C DATA SMALL(1) / $00800000 / C DATA LARGE(1) / $7F7FFFFF / C DATA RIGHT(1) / $33800000 / C DATA DIVER(1) / $34000000 / C DATA LOG10(1) / $3E9A209B /, SC/987/ C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C DATA RMACH(1) / O000400000000 / C DATA RMACH(2) / O377777777777 / C DATA RMACH(3) / O146400000000 / C DATA RMACH(4) / O147400000000 / C DATA RMACH(5) / O177464202324 /, SC/987/ C C MACHINE CONSTANTS FOR THE VAX UNIX F77 COMPILER. C C DATA SMALL(1) / 128 / C DATA LARGE(1) / -32769 / C DATA RIGHT(1) / 13440 / C DATA DIVER(1) / 13568 / C DATA LOG10(1) / 547045274 /, SC/987/ C C MACHINE CONSTANTS FOR THE VAX-11 WITH C FORTRAN IV-PLUS COMPILER. C C DATA RMACH(1) / Z00000080 / C DATA RMACH(2) / ZFFFF7FFF / C DATA RMACH(3) / Z00003480 / C DATA RMACH(4) / Z00003500 / C DATA RMACH(5) / Z209B3F9A /, SC/987/ C C MACHINE CONSTANTS FOR VAX/VMS VERSION 2.2. C C DATA RMACH(1) / '80'X / C DATA RMACH(2) / 'FFFF7FFF'X / C DATA RMACH(3) / '3480'X / C DATA RMACH(4) / '3500'X / C DATA RMACH(5) / '209B3F9A'X /, SC/987/ C C *** ISSUE STOP 777 IF ALL DATA STATEMENTS ARE COMMENTED... IF (SC .NE. 987) THEN * *** CHECK FOR AUTODOUBLE *** SMALL(2) = 0 RMACH(1) = 1E13 IF (SMALL(2) .NE. 0) THEN * *** AUTODOUBLED *** IF ( SMALL(1) .EQ. 1117925532 * .AND. SMALL(2) .EQ. -448790528) THEN * *** IEEE BIG ENDIAN *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2146435071 LARGE(2) = -1 RIGHT(1) = 1017118720 RIGHT(2) = 0 DIVER(1) = 1018167296 DIVER(2) = 0 LOG10(1) = 1070810131 LOG10(2) = 1352628735 ELSE IF ( SMALL(2) .EQ. 1117925532 * .AND. SMALL(1) .EQ. -448790528) THEN * *** IEEE LITTLE ENDIAN *** SMALL(2) = 1048576 SMALL(1) = 0 LARGE(2) = 2146435071 LARGE(1) = -1 RIGHT(2) = 1017118720 RIGHT(1) = 0 DIVER(2) = 1018167296 DIVER(1) = 0 LOG10(2) = 1070810131 LOG10(1) = 1352628735 ELSE IF ( SMALL(1) .EQ. -2065213935 * .AND. SMALL(2) .EQ. 10752) THEN * *** VAX WITH D_FLOATING *** SMALL(1) = 128 SMALL(2) = 0 LARGE(1) = -32769 LARGE(2) = -1 RIGHT(1) = 9344 RIGHT(2) = 0 DIVER(1) = 9472 DIVER(2) = 0 LOG10(1) = 546979738 LOG10(2) = -805796613 ELSE IF ( SMALL(1) .EQ. 1267827943 * .AND. SMALL(2) .EQ. 704643072) THEN * *** IBM MAINFRAME *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2147483647 LARGE(2) = -1 RIGHT(1) = 856686592 RIGHT(2) = 0 DIVER(1) = 873463808 DIVER(2) = 0 LOG10(1) = 1091781651 LOG10(2) = 1352628735 ELSE WRITE(*,9010) STOP 777 END IF ELSE RMACH(1) = 1234567. IF (SMALL(1) .EQ. 1234613304) THEN * *** IEEE *** SMALL(1) = 8388608 LARGE(1) = 2139095039 RIGHT(1) = 864026624 DIVER(1) = 872415232 LOG10(1) = 1050288283 ELSE IF (SMALL(1) .EQ. -1271379306) THEN * *** VAX *** SMALL(1) = 128 LARGE(1) = -32769 RIGHT(1) = 13440 DIVER(1) = 13568 LOG10(1) = 547045274 ELSE IF (SMALL(1) .EQ. 1175639687) THEN * *** IBM MAINFRAME *** SMALL(1) = 1048576 LARGE(1) = 2147483647 RIGHT(1) = 990904320 DIVER(1) = 1007681536 LOG10(1) = 1091781651 ELSE IF (SMALL(1) .EQ. 1251390520) THEN * *** CONVEX C-1 *** SMALL(1) = 8388608 LARGE(1) = 2147483647 RIGHT(1) = 880803840 DIVER(1) = 889192448 LOG10(1) = 1067065499 ELSE * CRAY1 = 4617762693716115456 CRAY1 = 4617762 CRAY1 = 1000000*CRAY1 + 693716 CRAY1 = 1000000*CRAY1 + 115456 IF (SMALL(1) .NE. CRAY1) THEN WRITE(*,9020) STOP 777 END IF * *** CRAY 1, XMP, 2, AND 3 *** * SMALL(1) = 2306828171632181248 SMALL(1) = 2306828 SMALL(1) = 1000000*SMALL(1) + 171632 SMALL(1) = 1000000*SMALL(1) + 181248 * LARGE(1) = 6917247552664371198 LARGE(1) = 6917247 LARGE(1) = 1000000*LARGE(1) + 552664 LARGE(1) = 1000000*LARGE(1) + 371198 * RIGHT(1) = 4598878906987053056 RIGHT(1) = 4598878 RIGHT(1) = 1000000*RIGHT(1) + 906987 RIGHT(1) = 1000000*RIGHT(1) + 053056 * DIVER(1) = 4599160381963763712 DIVER(1) = 4599160 DIVER(1) = 1000000*DIVER(1) + 381963 DIVER(1) = 1000000*DIVER(1) + 763712 * LOG10(1) = 4611574008272714704 LOG10(1) = 4611574 LOG10(1) = 1000000*LOG10(1) + 008272 LOG10(1) = 1000000*LOG10(1) + 714704 END IF END IF SC = 987 END IF C C *** ISSUE STOP 776 IF ALL DATA STATEMENTS ARE OBVIOUSLY WRONG... IF (RMACH(4) .GE. 1.0) STOP 776 *C/6S *C IF (I .LT. 1 .OR. I .GT. 5) *C 1 CALL SETERR(24HR1MACH - I OUT OF BOUNDS,24,1,2) *C/7S * IF (I .LT. 1 .OR. I .GT. 5) * 1 CALL SETERR('R1MACH - I OUT OF BOUNDS',24,1,2) *C/ C IF (I .LT. 1 .OR. I .GT. 5) THEN WRITE(*,*) 'R1MACH(I): I =',I,' is out of bounds.' STOP END IF R1MACH = RMACH(I) RETURN C/6S C9010 FORMAT(/42H Adjust autodoubled R1MACH by getting data/ C *42H appropriate for your machine from D1MACH.) C9020 FORMAT(/46H Adjust R1MACH by uncommenting data statements/ C *30H appropriate for your machine.) C/7S 9010 FORMAT(/' Adjust autodoubled R1MACH by getting data'/ *' appropriate for your machine from D1MACH.') 9020 FORMAT(/' Adjust R1MACH by uncommenting data statements'/ *' appropriate for your machine.') C/ C * /* C source for R1MACH -- remove the * in column 1 */ *#include *#include *#include * *float r1mach_(long *i) *{ * switch(*i){ * case 1: return FLT_MIN; * case 2: return FLT_MAX; * case 3: return FLT_EPSILON/FLT_RADIX; * case 4: return FLT_EPSILON; * case 5: return log10(FLT_RADIX); * } * * fprintf(stderr, "invalid argument: r1mach(%ld)\n", *i); * exit(1); * return 0; /* for compilers that complain of missing return values */ * } END SHAR_EOF fi # end of overwriting check if test -f 'src.f' then echo shar: will not over-write existing file "'src.f'" else cat << \SHAR_EOF > 'src.f' SUBROUTINE VLUGR2 (NPDE, T, TOUT, DT, XL, YL, XR, YU, DX, DY, + TOLS, TOLT, INFO, RINFO, RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, + MNTR) C C======================================================================= C Ccc PURPOSE: C========== C This code solves systems of PDEs of the type C F(t,x,y,U,Ut,Ux,Uy,Uxx,Uxy,Uyy)=0 C with boundary conditions C B(t,x,y,U,Ut,Ux,Uy)=0 C and initial values C U(t0,x,y)=U0 C on a domain bounded by right-angled polygons. C C In space Local Uniform Grid Refinement is applied to resolve local C sharp gradients in the solution. For the time integration the C implicit BDF2 method is used with variable stepsizes. C Although time-independent and hyperbolic PDEs fit into the problem C class, it should be observed that VLUGR2 is tuned for time-dependent C parabolic PDEs (see below `HOW TO REPLACE MODULES' and the part on C INCLUDEd files for the (non)linear solvers). C C C Ccc PARAMETER SPECIFICATION: C========================== INTEGER LENIWK INTEGER NPDE, INFO(*), LENRWK, IWK(LENIWK), LENLWK, MNTR LOGICAL LWK(LENLWK) REAL T, TOUT, DT, XL, YL, XR, YU, DX, DY, TOLS, TOLT, RINFO(*), + RWK(LENRWK) C Ccc LANGUAGE: FORTRAN 77 C=========== C Ccc TYPE: Single precision C======= C Ccc REFERENCE: C============ C VLUGR2: A Vectorizable Adaptive Grid Solver for PDEs in 2D C J.G. Blom, R.A. Trompert, and J.G. Verwer, C Report NM-R9403, CWI, Amsterdam. C (to appear in ACM TOMS) C C C Ccc PARAMETER DESCRIPTION: C======================== C NPDE : IN. # PDE components. C T : INOUT. Current value of time variable C IN: If this is the first call the initial time C OUT: Time to which PDE has been integrated C TOUT : IN. Time point at which solution is desired C DT : INOUT. C IN: If this is the first call the initial time stepsize C OUT: Stepsize for next time step C XL : IN. If this is the first call and INFO(3) = 0 C X-coordinate of lowerleft corner of rectangle C YL : IN. If this is the first call and INFO(3) = 0 C Y-coordinate of lowerleft corner of rectangle C XR : IN. If this is the first call and INFO(3) = 0 C X-coordinate of upperright corner of rectangle C YU : IN. If this is the first call and INFO(3) = 0 C Y-coordinate of upperright corner of rectangle C DX : IN. If this is the first call and INFO(3) = 0 C Cell width in X-direction of base grid C DY : IN. If this is the first call and INFO(3) = 0 C Cell width in Y-direction of base grid C TOLS : IN. Space tolerance C TOLT : IN. Time tolerance C INFO : IN. If INFO(1)=0, default parameters are used, otherwise C RINFO : IN. they should be specified in INFO and RINFO array C (for description see below) C RWK : WORK. (LENRWK) C LENRWK : IN. Dimension of RWK. (6.NPDE for VLUGR2)+: C Let NPTS be the max. # points on a grid level and C NPTSA the average # points over all grid levels. C Then LENRWK should be: C MAXLEV=1: 3.NPTS.NPDE+2.NPTS+9.NPTS.NPDE + LSSWRK C LSSWRK: C ( INFO(4)=0 C | 18.NPDE.NPTS.NPDE C !:INFO(4)=10 C 9.NPDE.NPTS.NPDE + C (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=11 C | 9.NPDE.NPTS.NPDE + C (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=12 C | 9.NPDE.NPTS.NPDE + C (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=13 C | 9.NPDE.NPTS.NPDE + C (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=20 C | (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=21 C | (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=22 C | (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=23 C | (2.MAXLR+MAXL+7).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C ) C (default: MAXLR = 5, MAXL = 20) C Indication of the length for a maximum grid level C MAXLEV (default value MAXLEV=3): C 5.NPTS.NPDE.MAXLEV+(2+9.NPDE).NPTS + LSSWRK C IWK : WORK. (LENIWK) C LENIWK : IN. Dimension of IWK. (8.MAXLEV+3 for VLUGR2)+: C MAXLEV=1: 16.NPTS C Indication of the length for a maximum grid level MAXLEV, C 5.NPTSA.MAXLEV+5.NPTS + C ( INFO(4)=0| 9.NPTS |: INFO(4)<20| 6.NPTS ) C LWK : WORK. (LENLWK) C LENLWK : IN. Dimension of LWK. Indication of the length C 2.NPTS C MNTR : INOUT. Monitor of VLUGR2 C IN: State of integration C 0. First call C 1. Continuation call C OUT: Error return flag C 1. OK C -1. Workspace too small C -2. Time step size too small C -10. COMMON to keep the statistics is too small C C C Ccc HOW TO USE: Default case C=========================== C C 3 problem defining routines should be specified C C----------------------------------------------------------------------- C C SUBROUTINE PDEIV (T, X, Y, U, NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE C REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE) C Ccc PURPOSE: C Define (initial) solution of PDE. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which (initial) solution should be given C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : OUT. Array of PDE component values for the gridpoints. C NPTS : IN. Number of gridpoints C NPDE : IN. # PDE components C C----------------------------------------------------------------------- C C SUBROUTINE PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, RES, C + NPTS, NPDE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE C REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), C + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), C + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), C + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of PDE on interior of domain. Boundary values will be C overwritten later on. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which residual should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. I C UXX : IN. I Arrays containing space derivatives of PDE components C UXY : IN. I C UYY : IN. -I C RES : OUT. Array containg PDE residual at gridpoints in interior of C domain. The residual values at boundary points will be C overwritten by a call to PDEBC. C NPTS : IN. Number of gridpoints C NPDE : IN. Number of PDE components C C----------------------------------------------------------------------- C C SUBROUTINE PDEBC (T, X, Y, U, UT, UX, UY, RES, C + NPTS, NPDE, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) C REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), C + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), C + RES(NPTS,NPDE) C Ccc PURPOSE: C Define residual of boundary equations of PDE. The residual on interior C points has already been stored in RES. C Ccc PARAMETER DESCRIPTION: C T : IN. Time at which BC's should be evaluated C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C U : IN. Array of PDE components for the gridpoints. C UT : IN. Array of time derivative of PDE components C UX : IN. -I C UY : IN. -I Arrays containing space derivatives of PDE components C RES : INOUT. C IN: PDE residual for interior points (set by PDEF) C OUT: Array with PDE residual at physical boundary points C inserted C NPTS : IN. Number of grid components C NPDE : IN. Number of PDE components C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBDPTS) C LBND(LB): pointer to boundary point in actual grid C structure (as in X, Y, and U) C C----------------------------------------------------------------------- C C C Ccc HOW TO USE: Extra's C====================== C C If INFO(1) <> 0 a number of parameters can be specified in INFO and C RINFO that are described below. The parenthesized value is the C default value. C C INFO(2) : MAXLEV (3) C maximum # grid levels allowed C INFO(3) : RCTDOM (0) C If RCTDOM=0 the initial domain is a rectangle C otherwise the user should specify a subroutine C INIDOM to define the initial grid (see below) C INFO(4) : LINSYS (0) C Linear system solver in use C 0: BiCGStab + ILU C 10: GCRO + Block-diagonal preconditioning C 11: GCRO + Block-diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 12: GCRO + Diagonal preconditioning C 13: GCRO + Diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 20, 21, 22, 23 as 10, 11, 12, 13 but matrix-free C INFO(5) : LUNPDS (0) C Logical Unit # of file for information on the C integration history. If 0, only global information C will be written on standard output. C INFO(6) : LUNNLS (0) C Logical Unit # of file for information on the C Newton process. If 0, no information will be C written. C INFO(7) : LUNLSS (0) C Logical Unit # of file for information on the C linear system solver. If 0, no information will be C written. C C RINFO(1) : DTMIN (0.0) C minimum time stepsize allowed C RINFO(2) : DTMAX (TOUT-T) C maximum time stepsize allowed C RINFO(3) : UMAX ((1.0)) C approx. max. value of the PDE solution components. C Used for scaling purposes C RINFO(3+NPDE) : SPCWGT ((1.0)) C weigthing factor used in the space monitor to C indicate the relative importance of a PDE C component on the space monitor C RINFO(3+2.NPDE) : TIMWGT ((1.0)) C weigthing factor used in the time monitor to C indicate the relative importance of a PDE C component on the time monitor C C C C After each successful time step a subroutine MONITR is called. C Default is an empty body, but it can be overloaded with C----------------------------------------------------------------------- C C SUBROUTINE MONITR (T, DT, DTNEW, XL, YL, DXB, DYB, C + LGRID, ISTRUC, LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LGRID(0:*), ISTRUC(*), LSOL(*) C REAL T, DT, DTNEW, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Control after a successful time step. The solution can be printed, C plotted or compared with the exact solution. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C DT : IN. Current time step size C DTNEW : IN. Time step size for next time step C XL : IN. X-coordinate of lowerleft corner of (virtual) domain C YL : IN. Y-coordinate of lowerleft corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C C----------------------------------------------------------------------- C C C C To force grid refinement at a specific point in space and time and C on a specific level, one can overload the routine CHSPCM with C C----------------------------------------------------------------------- C C SUBROUTINE CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U, SPCMON, TOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LEVEL, NPTS, NPDE C REAL T, X(NPTS), Y(NPTS), U(NPTS,NPDE), SPCMON(NPTS), TOL C Ccc PURPOSE: C Force grid refinement. C If for a node IPT SPCMON(IPT) > TOL the 16 surrounding cells will be C refined. C Ccc PARAMETER DESCRIPTION: C T : IN. Current value of time variable C LEVEL : IN. Current grid level C NPTS : IN. Number of grid points at this level C X : IN. Array of X-coordinates for the gridpoints C Y : IN. Array of Y-coordinates for the gridpoints C NPDE : IN. Number of PDE components C U : IN. Array of PDE components for the gridpoints C SPCMON : INOUT. C IN: Space monitor values as determined by VLUGR2 C OUT: Changed to a value > TOL where refinement is required C TOL : IN. Tolerance with which SPCMON will be compared C C----------------------------------------------------------------------- C C C C If the initial domain is not rectangular one should specify the C initial grid via the function INIDOM C C----------------------------------------------------------------------- C C LOGICAL FUNCTION INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, C + LROW, IROW, ICOL, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER MAXPTS, LROW(0:*), IROW(*), ICOL(*), C + LLBND(0:*), ILBND(*), LBND(*) C REAL XL, YL, XR, YU, DX, DY C Ccc PURPOSE: C Define initial domain. NB. Boundaries should consist of as many points C as are necessary to employ second-order space discretization, i.e., C a boundary enclosing the internal part of the domain should not C include less than 3 grid points including the corners. If Neumann C boundaries are used the minimum is 4 since otherwise the Jacobian C matrix will be singular. C C A (virtual) rectangle is placed upon the (irregular) domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored. C The coordinate values of the initial grid should be stored rowwise, C in LROW, IROW, ICOL. C Pointers to the boundary points should be stored in a list together C with the type of the boundary. (LLBND, ILBND, LBND) C C On exit INIDOM = .FALSE. if the # grid points required is larger C than MAXPTS and MAXPTS is set to the required # points. C Ccc PARAMETER DESCRIPTION: C MAXPTS : INOUT. C IN: Max. # grid points allowed by the available workspace C OUT: # grid points required, if larger than # points allowed C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C XR : IN. X-coordinate of upper-right point of virtual rectangle C YU : IN. Y-coordinate of upper-right point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : OUT. INTEGER array of dimension (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C structure C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. INTEGER array of dimension (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. INTEGER array of dimension (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C structure C C----------------------------------------------------------------------- C C C C To store the exact partial derivatives of the residual F with respect C to (the derivatives of) U. C C----------------------------------------------------------------------- C C SUBROUTINE DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, C + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, C + ABSTOL, DEL, WORK, C + FU, FUX, FUY, FUXX, FUXY, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) C REAL F(NPTS,NPDE), T, X(NPTS), Y(NPTS), U(NPTS,NPDE), C + A0, DT, DX, DY, UIB(*), C + UT(NPTS,NPDE), UX(NPTS,NPDE), UY(NPTS,NPDE), C + UXX(NPTS,NPDE), UXY(NPTS,NPDE), UYY(NPTS,NPDE), C + ABSTOL(NPDE), DEL(NPTS), WORK(2*NPTS*NPDE), C + FU(NPTS,NPDE,NPDE), FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), C + FUXX(NPTS,NPDE,NPDE),FUXY(NPTS,NPDE,NPDE),FUYY(NPTS,NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUXY : OUT. dF(Uxy)dUxy C FUYY : OUT. dF(Uyy)dUyy C C----------------------------------------------------------------------- C C C Ccc `HANDY' ROUTINES: C=================== C C VLUGR2 contains some routines that facilitate the use of the C data structure. C C C C To make a printout of the domain one has defined with INIDOM one C can call PRDOM C C----------------------------------------------------------------------- C C SUBROUTINE PRDOM (LROW, IROW, ICOL, LLBND, ILBND, LBND, C + IDOM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LROW(0:*), IROW(*), ICOL(*), C + LLBND(0:*), ILBND(*), LBND(*), IDOM(0:120), NX, NY C Ccc PURPOSE: C Print domain. Internal points are printed as .., external points XX, C physical boundary points their ILBND value and internal boundary C as II. C Ccc PARAMETER DESCRIPTION: C See INIDOM C C----------------------------------------------------------------------- C C C C To get the X- and Y-coordinates corresponding with the grid points C C----------------------------------------------------------------------- C C SUBROUTINE SETXY (XL, YL, DX, DY, LROW, IROW, ICOL, X, Y) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LROW(0:*), IROW(*), ICOL(*) C REAL XL, YL, DX, DY, X(*), Y(*) C Ccc PURPOSE: C Store X- and Y-coordinates of the grid points, rowwise. C Ccc PARAMETER DESCRIPTION: C See MONITR. C NB. DX = DXB.2^(1-LEVEL); the same for DY. C C----------------------------------------------------------------------- C C C C To print the solution and the corresponding coordinate values at all C grid levels C C----------------------------------------------------------------------- C C SUBROUTINE PRSOL (LUN, T, NPDE, XL, YL, DXB, DYB, LGRID, ISTRUC, C + LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LUN, NPDE, LGRID(0:*), ISTRUC(*), LSOL(*) C REAL T, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Print solution and coordinate values at all grid levels. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C NPDE : IN. # PDE components C Others see MONITR. C C----------------------------------------------------------------------- C C C C To write to file the (interpolated) solution values on a uniform grid C of a specified grid level and the maximum grid level used in each C point C C----------------------------------------------------------------------- C C SUBROUTINE WRUNI (LUNS, LUNG, UNILEV, C + T, NPDE, XL, YL, DXB, DYB, NXB, NYB, C + LGRID, ISTRUC, LSOL, SOL, UNIFRM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C INTEGER LUNS, LUNG, UNILEV, C + NPDE, NXB, NYB, LGRID(0:*), ISTRUC(*), LSOL(*), NX, NY C REAL T, XL, YL, DXB, DYB, SOL(*), UNIFRM(0:NX,0:NY,NPDE) C Ccc PURPOSE: C Write (interpolated) solution values at grid level UNILEV to file C LUNS. C Write maximum gridlevel used in each point to file LUNG. C NB. The data will not be correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc PARAMETER DESCRIPTION: C LUNS : IN. Logical unit number of solution file C LUNG : IN. Logical unit number of grid level file C UNILEV : IN. Maximum grid level to be used to generate the data C NPDE : IN. # PDE components C NXB,NYB: IN. # gridcells in X- and Y-direction, resp., on base grid C UNIFRM : WORK. (Interpolated) solution on level UNILEV / max. grid C level used. C NX, NY : IN. # gridcells in X- and Y-direction, resp., on grid of C of level UNILEV C Others see MONITR. C C----------------------------------------------------------------------- C C C C To dump all necessary information for a restart on file. C C----------------------------------------------------------------------- C C SUBROUTINE DUMP (LUNDMP, RWK, IWK) C C----------------------------------------------------------------------- C C C C C To read all necessary information for a restart from the dump file. C C----------------------------------------------------------------------- C C SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C C C Ccc HOW TO REPLACE MODULES: C========================= C Ccc Space discretization. C Replace the computation of the derivatives in subroutine DERIVS by the C desired discretization. C If the new space discretization uses a larger stencil than the C implemented one (internally a central 9-point stencil and at the C boundary a 3-point one sided), one should use as linear system C solver the matrix-free GCRO variant (INFO(4)=20,21,22 or 23). C Moreover, one should check whether the required grid points are C available on the current grid level, e.g. using the x- and y- C coordinates of the grid points (see SETXY above). C Note that the refinement strategy results in subgrids of at least C 5 points in every coordinate direction. C Ccc Linear system solver. C If the new solver is matrix-free: C rewrite the body of subroutine GCRO using the routines C MVDIFF to compute y=Ax C If the (block-)diagonal preconditioner is wanted, use the routine C BCKBDI to compute w=P^(-1).v C (copy the call used in GCRO and replace the vector arguments for C x, y, v, w, and, optionally for the workspace needed) C otherwise, if the ILU preconditioner is to be used: C rewrite the body of subroutine BICGST using the routines C BCKSLV to compute v=P^(-1).v and C MVDIAG to compute y=Ax C (copy the call used in BICGST and replace the vector argument(s)). C if the (block-)diagonal preconditioner is to be used: C rewrite the body of subroutine GGCRO using the routines C BCKBDI to compute w=P^(-1).v and C MVDIAG to compute y=Ax C C If a user-made preconditioner is wanted, one should adapt INTGRG C (when the Jacobian is used) or INTGRC (for a matrix-free solver). C The calls to JACBD and PINIT, resp. should be replaced by calls to C the routine that computes the preconditioner. In GGCRO and GCRO, C resp., one should call one's own routine to compute w=P^(-1).v C instead of BCKBDI. C C If extra workspace is needed, the easiest way is to declare it in C the subroutine. C C C Ccc DESCRIPTION OF THE SETUP IN THE WORKARRAYS: C============================================= C Ccc Datastructure for the solution at a grid level C The solution is stored rowwise, one component vector after the other C in C REAL U(0:NPTS*NPDE) C The element U(0) is added because pointers to non-existing nodes point C to 0. C Ccc Solutions from 3 different time levels have to be saved. For Tn-1 C only the injected one (U); for Tn the original solution (S) belonging C to a specific grid, the injected solution (U), and the injected C solution at the Tn+1 grid; and for Tn+1 the solution (S) and when C finished the injected solution (U). C C The real work storage is set up as follows: C First some method related arrays of length NPDE each: SPCTOL, TIMWGT, C RELTOL, ABSTOL, RTOL, ATOL. C From 6*NPDE+1 work storage for PDESOL where the array RWK starts with C index 1. From there it will contain the following items: C First the X- and Y- coordinates for the base grid: X(NPTSB), Y(NPTSB) C From 2*NPTSB+1 the solutions are stored: C First for Tn-1: U_i for i=LSGNM1(0),(-1),1 C Next for Tn: S_i for i=1,...,LSGN(0) C U_i for i=LSGN(0)-1,(-1),1 C Next for Tn+1: S_1 C U_i(Tn) at grid LSGNP1(i) I C S_i(Tn+1) I for i=2,...,LEVEL C when refinement is finished: C U_i(Tn+1) for i=LSGNP1(0)-1,(-1),1 C After the solutions work storage is available for the (interpolated) C solutions from Tn-1 at the current grid, the current X- and C Y-coordinates, if necessary the (interpolated) solution values at the C internal boundary, the initial solution at Tn+1 at the current grid C (since the not updated solution of the old time level has to be used), C and for the derivatives and the linear solver. C Ccc If the linear solver uses a Jacobian (INFO(4)<20) the Jacobian is C stored as a block 9-diagonal matrix. C If a second-order discretization is used at the boundary the extra C information will be stored in one of the `mixed-derivative blocks'. C Addressing is done with the use of pointers to off 3-diagonal blocks C (cf. LLDG and LUDG below). C If an ILU preconditioner is used (INFO(4)=0) the second-order C discretization at the boundaries is replaced by a first order C discretization, since a true block 9-diagonal matrix is required C to apply the hyperplane method. C The same block structure will be used as for the Jacobian. C C C Ccc Datastructure for the grid at the current grid level C A (virtual) rectangle is placed upon the irregular domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored, rowwise. C C INTEGER ISTRUC(0:*) C Ccc ISTRUC contains the following arrays: C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : (NPTS) C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : (NPTS) C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C C The next 2 arrays are only stored if INFO(4) < 20 C They are used for the Jacobian structure (and possibly its ILU) C LLDG : (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LUDG : (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LUDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C C The next 4 arrays are only stored if INFO(4) = 0 C They are used to hold the data dependency lists C for the ILU factorization and the forward, resp. backward C sweep of the backsolve C LSL : (NPTS) C LSL(ISLPT): pointer to node in actual grid C LLSL : (0:LLSL(0)) C LLSL(0) = # independent data dependency lists in ILU C factorization and forward sweep C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C LSU : (NPTS) C LSU(ISLPT): pointer to node in actual grid C LLSU : (0:LLSU(0)) C LLSU(0) = # independent data dependency lists in backward C sweep C LLSU(1:LLSU(0)): pointers to the start of a list in LSU C C For the base grid the complete datastructure is saved (including C the last 6 arrays because of restart), for higher C level grids only the first 3 arrays LROW, IROW and ICOL. C C Pointers to the specific arrays in ISTRUC are obtained by C LLROW = 0 C NROWS = ISTRUC(LLROW) C NPTS = ISTRUC(LLROW+NROWS+1)-1 C LIROW = LLROW+NROWS+2 C LICOL = LIROW+NROWS C LLLBND = LICOL+NPTS C NBNDS = ISTRUC(LLLBND) C NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 C NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 C LILBND = LLLBND+NBNDS+3 C LLBNDP = LILBND+NBNDS C LLBLW = LLBNDP+NBIPTS C LLABV = LLBLW+NPTS C LIWK = LLABV+NPTS C C LLLDG = LIWK C LLUDG = LLLDG+NPTS*3 C LIWK = LLUDG+NPTS*3 C C LLSLP = LIWK C LLLSL = LLSLP+NPTS C LLSUP = LLLSL+ISTRUC(LLLSL)+1 C LLLSU = LLSUP+NPTS C LIWK = LLLSU+ISTRUC(LLLSU)+1 C C Ccc All grids from 3 different time levels have to be saved C The integer work storage is set up as follows: C LSGNM1 : (0:MAXLEV) C LSGNM1(0) = max. grid level used at Tn-1 C LSGNM1(1): pointer to base grid structure ISTRUC C LSGNM1(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn-1 C LSGN : (0:MAXLEV) C LSGN(0) = max. grid level used at Tn C LSGN(1): pointer to base grid structure ISTRUC C LSGN(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn C LSGNP1 : (0:MAXLEV) C LSGNP1(0) = max. grid level used at Tn+1 C LSGNP1(1): pointer to base grid structure ISTRUC C LSGNP1(2): pointer after grid structure of max. refinement C level for time Tn C LSGNP1(LEVEL): pointer to augmented grid structure C (LROW, IROW, ICOL, LLBND, ILBND, LBND) C of refinement level LEVEL for time Tn+1 C LSGNP1(LEVEL+1): pointer to grid structure ISTRUC of C refinement level LEVEL+1 for time Tn+1 C LSUNM1 : (MAXLEV) C LSUNM1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn-1 C LSSN : (MAXLEV) C LSSN(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn C LSUN : (MAXLEV) C LSUN(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn C LSSNP1 : (MAXLEV) C LSSNP1(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn+1 C LSUNP1 : (MAXLEV) C LSUNP1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn+1 C From 8*MAXLEV+4 the grids are stored, in PDESOL the array IWK starts C with the grids at index 1. C Storage order: C First ISTRUC for the base grid C Next for Tn-1: (LROW, IROW, ICOL)_i for i=2,...,LSGNM1(0) C Next for Tn: (LROW, IROW, ICOL)_i for i=2,...,LSGN(0) C Next for Tn+1: (LROW, IROW, ICOL, LLBND, ILBND, LBND)_i for C i=2,...,LEVEL C ISTRUC_i for i=LEVEL+1 C After the grids work storage is available for domain flags and C the linear solver C C======================================================================= C C IMPORTANT: C ========= C C The INCLUDEd file CMNCMMACH contains machine numbers that C are set in the routine MACNUM by calling the appropriate functions C of the BLAS library. If I1MACH and R1MACH of the file blas.f are used, C the functions should be altered for the particular machine used (cf. C comment in I1MACH and R1MACH). C Ccc CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number > 0.0 -I C INTEGER LUNOUT, LUNERR C REAL UROUND, XMIN C COMMON /IMACH/ LUNOUT, LUNERR C COMMON /RMACH/ UROUND, XMIN C SAVE /IMACH/, /RMACH/ C C C C The INCLUDE files PARNEWTON, PARBICGSTAB, and PARGCRO contain the C method parameters for the corresponding (non)linear solvers. These C parameters may be changed by the user. C Ccc PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations. C NB. If MAXNIT > 20 the include file CMNSTATS C == should also be changed. C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW C INTEGER MAXNIT, MAXJAC C REAL TOLNEW C PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C Ccc PARBICGSTAB C C Parameters for linear system solver BiCGStab C MAXLIT : Max. number of BiCGStab iterations C TOLLSB : Tolerance for linear system solver: C || P^(-1).residual ||_w < TOLLSB/2^NIT C INTEGER MAXLIT C REAL TOLLSB C PARAMETER (MAXLIT = 100, TOLLSB = TOLNEW/10) C Ccc PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver C || P^(-1).residual ||_w < TOLLSC/2^NIT C INTEGER IDIAGP, NRRMAX, MAXLR, MAXL C REAL TOLLSC C PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (TOLLSC = TOLNEW/10) C COMMON /IGCRO/ IDIAGP C SAVE /IGCRO/ C C Note, that in the actual code the INCLUDE statements have been C replaced by C CCcc INCLUDE 'file' C ... code in file CC end INCLUDE 'file' C C So if one wishes to change the method parameters care should be taken C that it is done for all occurrences. C C======================================================================= C Ccc EXTERNALS USED: EXTERNAL ICOPY, INTGRB, INTGRC, INTGRG, IYPOC, PDESOL, RCOPY C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARBICGSTAB' C C PARBICGSTAB C C Parameters for linear system solver BiCGStab C MAXLIT : Max. number of BiCGStab iterations C TOLLSB : Tolerance for linear system solver INTEGER MAXLIT REAL TOLLSB PARAMETER (MAXLIT = 100, TOLLSB = TOLNEW/10) C C end INCLUDE 'PARBICGSTAB' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL REAL TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C C C----------------------------------------------------------------------- C INTEGER LSGNM1, LSGN, LSGNP1, LSUNM1, LSUN, LSUNP1, LSSN, LSSNP1, + LGNM1, LGN, LGNP1, LUNM1, LUN, LSN, LSNP1, + MAXLEV, LSPCTL, LTIMWT, LRELTL, LABSTL, LRTOL, LATOL, LSPCWT, + LUMAX, RCTDOM, LINSYS, I, I1, I2, IC, J, LRWK, LIWK, LIWKPN REAL DTMIN, DTMAX, TOL C CDIR$ NOVECTOR IF (MNTR .EQ. 1) THEN NPDE = NPDEW T = TW DT = DTW XL = XLW YL = YLW XR = XRW YU = YUW ENDIF C C Set machine numbers in /CMMACH/ CALL MACNUM C C Setup real work storage LSPCTL = 1 LTIMWT = LSPCTL+NPDE LRELTL = LTIMWT+NPDE LABSTL = LRELTL+NPDE LRTOL = LABSTL+NPDE LATOL = LRTOL +NPDE LRWKPS = LATOL +NPDE LSPCWT = LSPCTL LUMAX = LATOL C C Get User info IF (INFO(1) .EQ. 0) THEN MAXLEV = 3 RCTDOM = 0 LINSYS = 0 LUNPDS = 0 LUNNLS = 0 LUNLSS = 0 DTMIN = 0.0 DTMAX = TOUT - T DO 10 IC = 1, NPDE RWK(LUMAX-1 +IC) = 1.0 RWK(LSPCWT-1+IC) = 1.0 RWK(LTIMWT-1+IC) = 1.0 10 CONTINUE ELSE MAXLEV = INFO(2) IF (MAXLEV .EQ. 0) MAXLEV = 3 RCTDOM = INFO(3) IDIAGP = MOD(INFO(4),10) LINSYS = INFO(4)/10 LUNPDS = INFO(5) LUNNLS = INFO(6) LUNLSS = INFO(7) DTMIN = RINFO(1) DTMAX = RINFO(2) IF (DTMAX .EQ. 0.0) DTMAX = TOUT - T DO 20 IC = 1, NPDE RWK(LUMAX-1 +IC) = RINFO(2+IC) RWK(LSPCWT-1+IC) = RINFO(2+NPDE+IC) RWK(LTIMWT-1+IC) = RINFO(2+2*NPDE+IC) 20 CONTINUE ENDIF C C Store method arrays TOL = 1E-1*MIN(TOLT*TOLT,TOLS) DO 30 IC = 1, NPDE RWK(LSPCTL-1+IC) = RWK(LSPCWT-1+IC)/(RWK(LUMAX-1+IC)*TOLS) RWK(LRELTL-1+IC) = TOLT RWK(LABSTL-1+IC) = 0.01*RWK(LUMAX-1+IC)*TOLT RWK(LRTOL-1+IC) = TOL RWK(LATOL-1+IC) = 0.01*RWK(LUMAX-1+IC)*TOL 30 CONTINUE C C Setup integer work storage IF (MXCLEV .LT. MAXLEV) THEN WRITE(LUNERR,*) 'Arrays for the statistic are too small' WRITE(LUNERR,*) 'Either MAXLEV > 10 or MAXNIT > 20' WRITE(LUNERR,*) 'Adapt the parameter statements for /STATS/' MNTR = -10 RETURN ENDIF LSGNM1 = 1 LSGN = LSGNM1 + MAXLEV+1 LSGNP1 = LSGN + MAXLEV+1 LSUNM1 = LSGNP1 + MAXLEV+1 LSSN = LSUNM1 + MAXLEV LSUN = LSSN + MAXLEV LSSNP1 = LSUN + MAXLEV LSUNP1 = LSSNP1 + MAXLEV LIWKPN = LSUNP1 + MAXLEV IF (MNTR .EQ. 0) THEN C This is the first call, initialize pointer arrays and STATS common DO 50 I = 1, LIWKPN-1 IWK(I) = 1 50 CONTINUE NSTEPS = 0 NREJS = 0 DO 60 I = 1, MXCLEV NJACS(I) = 0 NRESID(I) = 0 NNIT(I) = 0 DO 70 J = 1, MXCNIT NLSIT(I,J) = 0 70 CONTINUE 60 CONTINUE ELSE IF (MAXLEV .GT. MAXLVW) THEN C MAXLEV larger than previous call; shift info in IWK array backwards IF (LENIWK .LT. LIWKPN+LIWKB) THEN WRITE(LUNERR,*) 'Integer work space too small, required:', + LIWKPN+LIWKB MNTR = -1 RETURN ENDIF CALL IYPOC (LIWKB, IWK(LIWKPS), IWK(LIWKPN)) LIWK = LIWKPS - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSUNP1)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSSNP1)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSUN)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSSN)) LIWK = LIWK - MAXLVW CALL IYPOC (MAXLVW, IWK(LIWK), IWK(LSUNM1)) LIWK = LIWK - MAXLVW-1 CALL IYPOC (MAXLVW+1, IWK(LIWK), IWK(LSGNP1)) LIWK = LIWK - MAXLVW-1 CALL IYPOC (MAXLVW+1, IWK(LIWK), IWK(LSGN)) ELSE IF (MAXLEV .LT. MAXLVW) THEN C MAXLEV smaller than previous call; shift info in IWK array forwards LGNM1 = 1 LGN = LGNM1 + MAXLVW+1 LGNP1 = LGN + MAXLVW+1 LUNM1 = LGNP1 + MAXLVW+1 LSN = LUNM1 + MAXLVW LUN = LSN + MAXLVW LSNP1 = LUN + MAXLVW IF (IWK(LGNM1) .GT. MAXLEV) THEN C Shift grid_n forwards to LGNM1(MAXLEV+1) I1 = IWK(LGN+2) I2 = IWK(LGNM1+MAXLEV+1) CALL ICOPY (LIWKB-I1, IWK(I1), IWK(I2)) DO 110 I = 2, IWK(LGN) IWK(LGN+I) = IWK(LGN+I) - (I1-I2) 110 CONTINUE LIWKB = LIWKB - (I1-I2) C Shift info from U_n-1(MAXLEV) forwards to LUNM1(LGNM1(0)) I1 = IWK(LUNM1-1+MAXLEV) I2 = IWK(LUNM1-1+IWK(LGNM1)) CALL RCOPY (LRWKB-I1, RWK(I1), RWK(I2)) DO 120 I = 1, MAXLEV IWK(LUNM1-1+I) = IWK(LUNM1-1+I) - (I1-I2) 120 CONTINUE DO 130 I = 1, IWK(LGN) IWK(LSN-1+I) = IWK(LSN-1+I) - (I1-I2) IWK(LUN-1+I) = IWK(LUN-1+I) - (I1-I2) 130 CONTINUE IWK(LSNP1) = IWK(LSNP1) - (I1-I2) LRWKB = LRWKB - (I1-I2) IWK(LGNM1) = MAXLEV ENDIF IF (IWK(LGN) .GT. MAXLEV) THEN LIWKB = IWK(LGN+MAXLEV+1) C Shift info from U_n(MAXLEV) forwards to LUN(LGN(0)) I1 = IWK(LUN-1+MAXLEV) I2 = IWK(LUN-1+IWK(LGN)) CALL RCOPY (LRWKB-I1, RWK(I1), RWK(I2)) DO 140 I = 1, MAXLEV IWK(LUN-1+I) = IWK(LUN-1+I) - (I1-I2) 140 CONTINUE IWK(LSNP1) = IWK(LSNP1) - (I1-I2) LRWKB = LRWKB - (I1-I2) IWK(LGN) = MAXLEV ENDIF C Shift pointer arrays and grids forwards CALL ICOPY (MAXLEV+1, IWK(LGN), IWK(LSGN)) CALL ICOPY (MAXLEV+1, IWK(LGNP1), IWK(LSGNP1)) CALL ICOPY (MAXLEV, IWK(LUNM1), IWK(LSUNM1)) CALL ICOPY (MAXLEV, IWK(LSN), IWK(LSSN)) CALL ICOPY (MAXLEV, IWK(LUN), IWK(LSUN)) IWK(LSSNP1) = IWK(LSNP1) CALL ICOPY (LIWKB, IWK(LIWKPS), IWK(LIWKPN)) ENDIF LIWKPS = LIWKPN IF (LUNPDS .NE. 0) THEN LUN = LUNPDS ELSE LUN = LUNOUT ENDIF C C Call main routine LRWK = LENRWK - LRWKPS+1 LIWK = LENIWK - LIWKPS+1 WRITE(LUN,*) 'Newton: MAXNIT, MAXJAC, TOLNEW:', + MAXNIT, MAXJAC, TOLNEW IF (LINSYS .EQ. 0) THEN C Lin. sys. solver = BiCGStab WRITE(LUN,*) 'Lin. solver BiCGStab+ILU: MAXLIT, TOLLSB:', + MAXLIT, TOLLSB CALL PDESOL (MAXLEV, NPDE, IWK(LSGNM1), IWK(LSGN), IWK(LSGNP1), + IWK(LSUNM1), IWK(LSSN), IWK(LSUN), IWK(LSSNP1), IWK(LSUNP1), + T, TOUT, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RWK(LRTOL), RWK(LATOL), RWK(LSPCTL), RWK(LTIMWT), + RWK(LRELTL), RWK(LABSTL), + LINSYS, INTGRB, + RWK(LRWKPS), LRWK, IWK(LIWKPS), LIWK, LWK, LENLWK, MNTR) ELSE IF (LINSYS .EQ. 1) THEN C Lin. sys. solver = GCRO IF (IDIAGP .LE. 1) THEN WRITE(LUN,*) 'Lin. solver GCRO + Block-diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ELSE WRITE(LUN,*) 'Lin. solver GCRO + Diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ENDIF CALL PDESOL (MAXLEV, NPDE, IWK(LSGNM1), IWK(LSGN), IWK(LSGNP1), + IWK(LSUNM1), IWK(LSSN), IWK(LSUN), IWK(LSSNP1), IWK(LSUNP1), + T, TOUT, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RWK(LRTOL), RWK(LATOL), RWK(LSPCTL), RWK(LTIMWT), + RWK(LRELTL), RWK(LABSTL), + LINSYS, INTGRG, + RWK(LRWKPS), LRWK, IWK(LIWKPS), LIWK, LWK, LENLWK, MNTR) ELSE C Lin. sys. solver = matrix-free GCRO IF (IDIAGP .LE. 1) THEN WRITE(LUN,*) 'Lin. solver matrix-free GCRO + Block-diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ELSE WRITE(LUN,*) 'Lin. solver matrix-free GCRO + Diag:', + 'NRRMAX, MAXLR, MAXL, TOLLSC:', NRRMAX, MAXLR, MAXL, TOLLSC ENDIF CALL PDESOL (MAXLEV, NPDE, IWK(LSGNM1), IWK(LSGN), IWK(LSGNP1), + IWK(LSUNM1), IWK(LSSN), IWK(LSUN), IWK(LSSNP1), IWK(LSUNP1), + T, TOUT, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RWK(LRTOL), RWK(LATOL), RWK(LSPCTL), RWK(LTIMWT), + RWK(LRELTL), RWK(LABSTL), + LINSYS, INTGRC, + RWK(LRWKPS), LRWK, IWK(LIWKPS), LIWK, LWK, LENLWK, MNTR) ENDIF C C Give final statistics IF (MNTR .NE. 0) THEN WRITE(LUN,'(''Error exit PDESOL, MNTR='',I4)') MNTR ELSE MNTR = 1 ENDIF WRITE(LUN,*) WRITE(LUN,'(''Statistics:'')') WRITE(LUN,'('' # accepted timesteps ='', I5, + '', # rejected timesteps ='', I5)') NSTEPS, NREJS WRITE(LUN,'('' Level # Nit # Jacs # Res'')') DO 200 I = 1, MXCLEV IF (NNIT(I) .NE. 0) + WRITE(LUN,'(2I6,2I8)') I, NNIT(I), NJACS(I), NRESID(I) 200 CONTINUE WRITE(LUN,'('' Nit Level # Lin. sys. it'')') DO 210 J = 1, MXCNIT DO 210 I = 1, MXCLEV IF (NLSIT(I,J) .NE. 0) + WRITE(LUN,'(2I6,I12)') J, I, NLSIT(I,J) 210 CONTINUE C C Take care of all information needed to dump info to file MAXLVW = MAXLEV NPDEW = NPDE LRWKB = IWK(LSSNP1) TW = T TEW = TOUT DTW = DT XLW = XL YLW = YL XRW = XR YUW = YU RETURN END SUBROUTINE PDESOL (MAXLEV, NPDE, LSGNM1, LSGN, LSGNP1, + LSUNM1, LSSN, LSUN, LSSNP1, LSUNP1, + TN, TE, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RTOL, ATOL, SPCTOL, TIMWGT, RELTOL, ABSTOL, + LINSYS, INTGRT, + RWK, LENRWK, IWK, LENIWK, LWK, LENLWK, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER MAXLEV, NPDE, + LSGNM1(0:MAXLEV), LSGN(0:MAXLEV), LSGNP1(0:MAXLEV), + LSUNM1(MAXLEV), LSSN(MAXLEV), LSUN(MAXLEV), + LSSNP1(MAXLEV), LSUNP1(MAXLEV), LINSYS, + LENRWK, IWK(LENIWK), LENLWK, IERR LOGICAL LWK(LENLWK) REAL TN, TE, DT, DTMIN, DTMAX, XL, YL, XR, YU, DX, DY, + RTOL(NPDE), ATOL(NPDE), SPCTOL(NPDE), TIMWGT(NPDE), + RELTOL(NPDE), ABSTOL(NPDE), RWK(LENRWK) EXTERNAL INTGRT C Ccc PARAMETER DESCRIPTION: C MAXLEV : IN. Max. # grid levels allowed C NPDE : IN. # PDE components. C LSGNM1 : IN. (0:MAXLEV) C LSGNM1(0) = max. grid level used at Tn-1 C LSGNM1(1): pointer to base grid structure ISTRUC C LSGNM1(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn-1 C LSGN : IN. (0:MAXLEV) C LSGN(0) = max. grid level used at Tn C LSGN(1): pointer to base grid structure ISTRUC C LSGN(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time Tn C LSGNP1 : IN. (0:MAXLEV) C LSGNP1(0) = max. grid level used at Tn+1 C LSGNP1(1): pointer to base grid structure ISTRUC C LSGNP1(2): pointer after grid structure of max. refinement C level for time Tn C LSGNP1(LEVEL): pointer to augmented grid structure C (LROW, IROW, ICOL, LLBND, ILBND, LBND) C of refinement level LEVEL for time Tn+1 C LSGNP1(LEVEL+1): pointer to grid structure ISTRUC of C refinement level LEVEL+1 for time Tn+1 C LSUNM1 : IN. (MAXLEV) C LSUNM1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn-1 C LSSN : IN. (MAXLEV) C LSSN(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn C LSUN : IN. (MAXLEV) C LSUN(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn C LSSNP1 : IN. (MAXLEV) C LSSNP1(LEVEL): pointer to original solution belonging C to refinement level LEVEL for time Tn+1 C LSUNP1 : IN. (MAXLEV) C LSUNP1(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time Tn+1 C NB. All the above pointers should be initialized on 1 C TN : INOUT. Current value of time variable C IN: Initial time C OUT: Time to which PDE has been integrated C TE : IN. Time point at which solution is desired C DT : INOUT. C IN: The initial time stepsize C OUT: Stepsize for next time step C DTMIN : IN. Minimum time stepsize allowed C DTMAX : IN. Maximum time stepsize allowed C If IERR=0 and domain a rectangle: C XL : IN. X-coordinate of lowerleft corner of rectangle C YL : IN. Y-coordinate of lowerleft corner of rectangle C XR : IN. X-coordinate of upperright corner of rectangle C YU : IN. Y-coordinate of upperright corner of rectangle C DX : IN. Cell width in X-direction of base grid C DY : IN. Cell width in Y-direction of base grid C C RTOL : IN. (NPDE) C Relative tolerance for the Newton iteration process C ATOL : IN. (NPDE) C Absolute tolerance for the Newton iteration process C SPCTOL : IN. (NPDE) C Space tolerance used to determine if resolution of grid C is large enough C TIMWGT : IN. (NPDE) C Time weights used in check if time stepsize can be accepted C RELTOL : IN. (NPDE) C Relative time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C ABSTOL : IN. (NPDE) C Absolute time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C LINSYS : IN. Linear system solver in use C 0: BiCGStab + ILU C 10: GCRO + Block-diagonal preconditioning C 11: GCRO + Block-diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 12: GCRO + Diagonal preconditioning C 13: GCRO + Diagonal preconditioning C (neglecting first-order derivatives C at the boundaries) C 20, 21, 22, 23 as 10, 11, 12, 13 but matrix-free C INTGRT : IN. Name of external routine that performs the integration C If LINSYS=0: INTGRB, LINSYS=1: INTGRG, LINSYS=2: INTGRC C RWK : WORK. (LENRWK) C LENRWK : IN. Dimension of RWK. C Let NPTS be the max. # points on a grid level and C NPTSA the average # points over all grid levels. C Then LENRWK should be: C MAXLEV=1: 3.NPTS.NPDE+2.NPTS+9.NPTS.NPDE + LSSWRK C LSSWRK: C ( INFO(4)=0 C | 18.NPDE.NPTS.NPDE C !:INFO(4)=10 C 9.NPDE.NPTS.NPDE + C (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=11 C | 9.NPDE.NPTS.NPDE + C (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=12 C | 9.NPDE.NPTS.NPDE + C (MAX(8, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=13 C | 9.NPDE.NPTS.NPDE + C (MAX(6, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=20 C | (MAX(NPDE.5+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=21 C | (MAX(NPDE.3+3,2.MAXLR+MAXL+6)+NPDE).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=22 C | (MAX(8, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C !:INFO(4)=23 C | (MAX(6, 2.MAXLR+MAXL+6) +1).NPTS.NPDE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C ) C (default: MAXLR = 5, MAXL = 20) C Indication of the length for a maximum grid level C MAXLEV (default value MAXLEV=3): C 5.NPTSA.NPDE.MAXLEV+(2+9.NPDE).NPTS + LSSWRK C IWK : WORK. (LENIWK) C LENIWK : IN. Dimension of IWK. C MAXLEV=1: 16.NPTS C Indication of the length for a maximum grid level MAXLEV, C 5.NPTSA.MAXLEV+5.NPTS + C ( INFO(4)=0| 9.NPTS |: INFO(4)<20| 6.NPTS ) C LWK : WORK. (LENLWK) C LENLWK : IN. Dimension of LWK >= NPTS+1 C IERR : INOUT. C IN: 0: First call of PDESOL C 1: Continuation call C OUT: 0: OK C -1: Workspace too small for required # gridpoints in C base grid. No continuation possible C -2: Stepsize too small C Ccc EXTERNALS USED: LOGICAL CHKWRK, CHKGRD, CHKTIM EXTERNAL CHKWRK, CHKGRD, CHKTIM, GETSOL, GETINI, ICOPY, INIGRD, + MKFGRD, MONITR, PDEIV, PUTSOL, RCOPY, SETXY C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL REAL TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER NPTSB, LENUB, LXB, LYB, + LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, NIBPTS, + LGNP1, LX, LY, LUNM1, LUN, LUNP1, LUNP1I, LENU, LUIB, + LGNP1C, LXC, LUNM1C, LUNC, LUNP1C, LENUC, + LGNM1, LGN, LSN, LUNM1T, LENS, LENG, LENGN, LENUN, LEUNP1, + LWT, LF, LCORR, LEV, MLVNM1, MLVN, MLVNP1, + LISTRF, LIWK, LRWK, LLWKN, LIWKN, LRWKN, MAXPTS, + LENPRE, LENLSW, LU, LUO LOGICAL LEVN, LEVNM1, OK REAL DTNEW, DTRAT, TOLWGT, SPCMON, TIMMON C IF (IERR .EQ. 0) THEN C Ccc This is the first call of PDESOL. T0 = TN C C Initialize datastructure, X- and Y-coordinates for base grid IF (LINSYS .EQ. 0) THEN LRWKN = (2 + 12*NPDE + 18*NPDE*NPDE) ELSE IF (IDIAGP .EQ. 0) THEN LENPRE = NPDE LENLSW = NPDE*5+3 ELSE IF (IDIAGP .EQ. 1) THEN LENPRE = NPDE LENLSW = NPDE*3+3 ELSE IF (IDIAGP .EQ. 2) THEN LENPRE = 1 LENLSW = 8 ELSE LENPRE = 1 LENLSW = 6 ENDIF IF (LINSYS .EQ. 1) THEN LENLSW = 9*NPDE + 2*MAXLR+MAXL+6 ELSE LENLSW = MAX(LENLSW,2*MAXLR+MAXL+6) ENDIF LRWKN = (2 + 12*NPDE + (LENLSW + LENPRE)*NPDE) ENDIF LIWKN = (16) MAXPTS = MIN((LENRWK-2)/LRWKN, LENIWK/LIWKN, LENLWK-1) CALL INIGRD (MAXPTS, XL, YL, XR, YU, DX, DY, + RWK, IWK, NPTSB, LIWKB, IERR) DXB = DX DYB = DY IF (IERR .EQ. 1) THEN LRWKN = LRWKN*NPTSB+2 LIWKN = LIWKN*NPTSB LLWKN = NPTSB+1 OK = CHKWRK (LRWKN+6*NPDE, LENRWK+6*NPDE, + LIWKN+8*MAXLEV+3, LENIWK+8*MAXLEV+3, LLWKN, LENLWK) IERR = -1 RETURN ELSE IF (IERR .NE. 0) THEN STOP 'Return from INIGRD with unknown IERR' ENDIF LXB = 1 LYB = LXB + NPTSB C C Set max. grid levels for Tn and Tn-1 at 1 LSGNM1(0) = 1 LSGN (0) = 1 C C Set pointers to base grid data structures for Tn-1, Tn and Tn+1 C and to solution for Tn-1 and Tn LSGNM1(1) = 1 LSGN (1) = 1 LSGNP1(1) = 1 LSUNM1(1) = LYB + NPTSB LSSN (1) = LSUNM1(1) LSUN (1) = LSUNM1(1) C C Initialize solution values at base grid at Tn = T0 RWK(LSUN(1)) = 0.0 CALL PDEIV (T0, RWK(LXB), RWK(LYB), RWK(LSUN(1)+1), + NPTSB, NPDE) LENUB = NPTSB*NPDE+1 C C Set pointer to not updated base grid solution at Tn+1 LSSNP1(1) = LSUN(1) + LENUB C C Initialize time integration variables FIRST = .TRUE. SECOND = .FALSE. C ELSE IF (IERR .EQ. 1) THEN C Ccc This is a continuation call of PDESOL. C Set all required variables that were not saved in COMMON IF (LINSYS .NE. 0) THEN IF (IDIAGP .EQ. 0) THEN LENPRE = NPDE LENLSW = NPDE*5+3 ELSE IF (IDIAGP .EQ. 1) THEN LENPRE = NPDE LENLSW = NPDE*3+3 ELSE IF (IDIAGP .EQ. 2) THEN LENPRE = 1 LENLSW = 8 ELSE LENPRE = 1 LENLSW = 6 ENDIF IF (LINSYS .EQ. 1) THEN LENLSW = 9*NPDE + 2*MAXLR+MAXL+6 ELSE LENLSW = MAX(LENLSW,2*MAXLR+MAXL+6) ENDIF ENDIF NPTSB = IWK(IWK(1)+2)-1 LENUB = NPTSB*NPDE+1 LXB = 1 LYB = 1 + NPTSB C ELSE C This shouldn't happen STOP 'PDESOL called with unknown IERR' ENDIF C Ccccc Time integration loop 10 CONTINUE C Adjust time stepsize such that interval TE-TN takes an integer # of C time steps of this size DT = (TE-TN)/INT((TE-TN)/DT+0.95) DT = (TN+DT)-TN C Check if time stepsize is acceptable IF (DT .LT. DTMIN) THEN WRITE(LUNERR,'(''Time step size too small, DT ='',E16.7)') DT IERR = -2 RETURN ENDIF C C Time integration method: BE in first time step, BDF2 in following. C DTRAT = DT / DT_old; 0 => BE IF (FIRST) THEN DTRAT = 0 ELSE DTRAT = DT / DTO ENDIF C LEVEL = 1 C Ccc Set pointer to first free element after grid structure of max. C refinement level for Tn IF (MAXLEV .GT. 1) LSGNP1(2) = LIWKB C LGNP1 = LSGNP1(1) LX = LXB LY = LYB DX = DXB DY = DYB LUNM1 = LSUNM1(1) LUN = LSUN (1) LUNP1 = LSSNP1(1) LENU = LENUB LUIB = LUNP1+LENU C Pointer to space for eventual refined grid structure LISTRF = LIWKB LIWK = LIWKB LRWK = LUNP1 + LENU C Ccc Initial solution at coarse grid is coarse grid solution of previous C time level LUNP1I = LSSN(1) CALL RCOPY (LENU, RWK(LUNP1I), RWK(LUNP1)) C Ccccc Grid refinement Loop C 100 CONTINUE IF (LUNPDS .NE. 0) THEN NROWS = IWK(LGNP1) NPTS = IWK(LGNP1+NROWS+1)-1 WRITE(LUNPDS, + '(''Time integration at T='',E10.2,'', Grid level='',I3, + '', NPTS='',I5)') TN+DT, LEVEL, NPTS ENDIF C Ccc Timestep on current level LWT = LRWK LF = LWT + LENU-1 LCORR = LF + LENU-1 LRWK = LCORR + LENU-1 CALL INTGRT (IWK(LGNP1), RWK(LX), RWK(LY), NPDE, RWK(LUIB), + RWK(LUNP1), RWK(LUN), RWK(LUNM1), RTOL, ATOL, + TN, DT, DTRAT, DX, DY, RWK(LWT), RWK(LF), RWK(LCORR), + RWK(LRWK), IERR) LRWK = LWT IF (IERR .EQ. 10) THEN C If Newton failure redo time step with stepsize quartered NREJS = NREJS+1 IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS, + '(''Newton failure at T='',E10.2,'', Grid level'',I3)') + TN+DT, LEVEL ENDIF IERR = 0 DT = DT/4 GOTO 10 ELSE IF (IERR .NE. 0) THEN C This shouldn't happen STOP 'Return from INTGRT with unknown IERR' ENDIF C Ccc Compute space monitor and if necessary determine new grid IF (LSGN(0) .GT. LEVEL) THEN C More severe tolerance on grid monitor if max.grid level at Tn C exceeded current level TOLWGT = 0.9 ELSE TOLWGT = 1.0 ENDIF OK = CHKGRD (TN+DT, LEVEL, RWK(LUNP1), NPDE, RWK(LX), RWK(LY), + SPCTOL, TOLWGT, IWK(LGNP1), RWK(LRWK), LWK, SPCMON) C If no grid refinement needed, check time error IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''T='',E10.2,'', LEVEL='',I3, + '' ,TOLWGT='',F3.1,'', SPCMON='',E10.2)') + TN+DT, LEVEL, TOLWGT, SPCMON ENDIF IF (OK) GOTO 200 IF (LEVEL .EQ. MAXLEV) THEN WRITE(LUNERR,'(''Max. grid level exceeded at T='',E16.7)') + TN+DT GOTO 200 ENDIF C Ccc Create refined grid C Save coarse grid pointers LGNP1C = LGNP1 LUNP1C = LUNP1 LUNC = LUN LUNM1C = LUNM1 LXC = LX LENUC = LENU C C Make fine grid structure LGNP1 = LISTRF CALL MKFGRD (LWK, IWK, LENIWK, LGNP1C, LGNP1, LINSYS, + NPTS, LIWK, IERR) LENU = NPTS*NPDE+1 C C Check on workspace needed IF (LINSYS .EQ. 0) THEN LRWKN = LUNP1C+LENUC+8*LENU+2*NPTS+6*LENU+18*NPDE*LENU ELSE LRWKN = LUNP1C+LENUC+8*LENU+2*NPTS+6*LENU+ + (LENLSW+LENPRE)*LENU+MAXLR*MAXLR+(MAXL+3)*MAXL ENDIF LIWKN = LIWK+NPTS+1 LLWKN = NPTS+1 OK = CHKWRK (LRWKN+6*NPDE, LENRWK+6*NPDE, + LIWKN+8*MAXLEV+3, LENIWK+8*MAXLEV+3, LLWKN, LENLWK) IF (.NOT. OK) THEN IERR = -1 RETURN ENDIF C C Set fine grid pointers and values LLROW = LGNP1 NROWS = IWK(LLROW) LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = IWK(LLLBND) NBDPTS = IWK(LLLBND+NBNDS+1)-1 NBIPTS = IWK(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LISTRF = LLBNDP+NBIPTS LUN = LUNP1C+LENUC LUNP1 = LUN+LENU LUNM1 = LUNP1+LENU LX = LUNM1+LENU LY = LX+NPTS LUIB = LY+NPTS NIBPTS = NBIPTS-NBDPTS LRWK = LUIB+NIBPTS*NPDE LSGNP1(LEVEL+1) = LGNP1 LSSNP1(LEVEL+1) = LUNP1 DX = DX/2 DY = DY/2 C C Save initial solution at current grid level at end of workspace to C prevent overwriting CALL RCOPY (LENUC, RWK(LUNP1I), RWK(LENRWK-LENUC)) LUNP1I = LENRWK-LENUC C C Store grid values at Tn and Tn-1 in temporary storage LEVN = LSGN(0) .GE. LEVEL+1 LEVNM1 = LSGNM1(0) .GE. LEVEL+1 IF (FIRST) THEN C Store X- and Y- coordinates, and initial solution in Un = Un-1 LUNM1 = LUN LX = LUNP1+LENU LY = LX+NPTS LUIB = LY+NPTS LRWK = LUIB+NIBPTS*NPDE CALL SETXY (XL, YL, DX, DY, IWK(LLROW), IWK(LIROW), IWK(LICOL), + RWK(LX), RWK(LY)) RWK(LUN) = 0.0 CALL PDEIV (T0, RWK(LX), RWK(LY), RWK(LUN+1), NPTS, NPDE) C ELSE IF (SECOND) THEN C Get Un on refined grid CALL GETSOL (NPDE, RWK(LUNC), IWK(LGNP1C), + LEVN, RWK(LSUN(LEVEL+1)), IWK(LSGN(LEVEL+1)), + RWK(LUN), IWK(LGNP1), IWK(LIWK), RWK(LRWK)) C Store X- and Y- coordinates and initial solution in Un-1 CALL SETXY (XL, YL, DX, DY, IWK(LLROW), IWK(LIROW), IWK(LICOL), + RWK(LX), RWK(LY)) RWK(LUNM1) = 0.0 CALL PDEIV (T0, RWK(LX), RWK(LY), RWK(LUNM1+1), NPTS, NPDE) C ELSE C Get Un-1 and Un on refined grid LUNM1T = MAX(LUNM1,LXC) CALL GETSOL (NPDE, RWK(LUNM1C), IWK(LGNP1C), + LEVNM1, RWK(LSUNM1(LEVEL+1)), IWK(LSGNM1(LEVEL+1)), + RWK(LUNM1T), IWK(LGNP1), IWK(LIWK), RWK(LRWK)) IF (LUNM1T .GT. LUNM1) + CALL RCOPY (LENU, RWK(LUNM1T), RWK(LUNM1)) CALL GETSOL (NPDE, RWK(LUNC), IWK(LGNP1C), + LEVN, RWK(LSUN(LEVEL+1)), IWK(LSGN(LEVEL+1)), + RWK(LUN), IWK(LGNP1), IWK(LIWK), RWK(LRWK)) C Store X- and Y- coordinates CALL SETXY (XL, YL, DX, DY, IWK(LLROW), IWK(LIROW), IWK(LICOL), + RWK(LX), RWK(LY)) C ENDIF C Get initial solution Un+1, store internal boundary values also in UIB C list CALL GETINI (NPDE, RWK(LUNP1I), RWK(LUNP1C), IWK(LGNP1C), + LEVN, RWK(LSSN(LEVEL+1)), IWK(LSGN(LEVEL+1)), + RWK(LUNP1), IWK(LGNP1), RWK(LUIB), IWK(LIWK), RWK(LRWK)) LUNP1I = LRWK LRWK = LUNP1I + LENU CALL RCOPY (LENU, RWK(LUNP1), RWK(LUNP1I)) LEVEL = LEVEL+1 GOTO 100 Ccc End Refinement Loop C 200 CONTINUE C Ccc Time step finished C Inject values from finest level LSGNP1(0) = LEVEL LSUNP1(LEVEL) = LSSNP1(LEVEL) DO 210 LEV = LEVEL, 2, -1 LSUNP1(LEV-1) = LSUNP1(LEV) + LENU CALL PUTSOL (NPDE, RWK(LSUNP1(LEV)), IWK(LSGNP1(LEV)), + RWK(LSSNP1(LEV-1)), IWK(LSGNP1(LEV-1)), + RWK(LSUNP1(LEV-1)), LENU) 210 CONTINUE LRWK = LSUNP1(1) + LENU C Ccc Check time-error LU = LSUNP1(1)+LENUB LUO = LSSNP1(1)-LENUB OK = CHKTIM (RWK ,LU, LUO, NPDE, IWK, + LSGNP1, TIMWGT, RELTOL, ABSTOL, RWK(LRWK), DT, DTNEW, TIMMON) IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''TN='',E10.2,'', DT='',E10.2, + '', DTNEW='',E10.2, '', TIMMON='',E10.2)') + TN, DT, DTNEW, TIMMON ENDIF C Restrict stepsize DTNEW = MIN(DTNEW, DTMAX) IF (.NOT. OK) THEN C Ccc Time step rejected NREJS = NREJS+1 IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''Time step rejected'')') ENDIF DT = DTNEW GOTO 10 ELSE C Ccc Time step accepted NSTEPS = NSTEPS+1 C Ccc Time step accepted; move data saved for Tn to nm1-save and C data at Tn+1 to n-save. C C Move updated solution at Tn (Un) to Unm1 save, and gridstructure at Tn C to Gnm1 save C NB. For first step this is not necessary, but harmless MLVNM1 = LSGNM1(0) MLVN = LSGN(0) C Start of Unm1 data (= 2*NPTSB+1) LUNM1 = LSUNM1(MLVNM1) C Start of updated Un data LUN = LSUN(MLVN) C LSSNP1(1)-1: end of updated Un data LENUN = LSSNP1(1) - LUN CALL RCOPY (LENUN, RWK(LUN), RWK(LUNM1)) C Adjust pointers to Unm1 data DO 220 LEV = MLVN, 1, -1 LSUNM1(LEV) = LSUN(LEV) - (LUN-LUNM1) 220 CONTINUE C New start of not-updated Un data LSN = LUNM1 + LENUN C C New max. Gnm1-level LSGNM1(0) = MLVN IF (MLVNM1 .EQ. 1) THEN C Grids already in place, adjust pointers DO 230 LEV = 2, MLVN LSGNM1(LEV) = LSGN(LEV) 230 CONTINUE C New start of Gn data is old one LGN = LIWKB ELSE IF (MLVN .GT. 1) THEN C Both Gnm1 and Gn have more than 1 level, move Gn C Start of Gnm1 data (after base grid) LGNM1 = LSGNM1(2) C Start of Gn data LGN = LSGN(2) C LSGNP1(2)-1: end of Gn data LENGN = LSGNP1(2) - LGN CALL ICOPY (LENGN, IWK(LGN), IWK(LGNM1)) C Adjust pointers to Gnm1 data DO 240 LEV = 2, MLVN LSGNM1(LEV) = LSGN(LEV) - (LGN-LGNM1) 240 CONTINUE C New start of Gn data LGN = LSGNM1(2) + LENGN ELSE C At Tn only base grid, new start of Gn data is after base grid LGN = LSGNM1(2) ENDIF C C Move Tn+1 data, not_updated solution (Snp1) to Sn save, gridstructure C to Gn save, and injected solution to Un save MLVNP1 = LSGNP1(0) LSGN(0) = MLVNP1 C Move not-updated solution Snp1 on base grid CALL RCOPY (LENUB, RWK(LSSNP1(1)), RWK(LSN)) LSSN(1) = LSN LSN = LSN + LENUB C Move Snp1 and (LROW,IROW,ICOL) of higher levels, adjust pointers to C Sn and Gn data DO 250 LEV = 2, MLVNP1 LLROW = LSGNP1(LEV) NROWS = IWK(LLROW) NPTS = IWK(LLROW+NROWS+1)-1 LENS = NPTS*NPDE+1 LENG = NROWS+2 + NROWS + NPTS CALL RCOPY (LENS, RWK(LSSNP1(LEV)), RWK(LSN)) LSSN(LEV) = LSN LSN = LSN + LENS CALL ICOPY (LENG, IWK(LSGNP1(LEV)), IWK(LGN)) LSGN(LEV) = LGN LGN = LGN + LENG 250 CONTINUE C C Adjust pointer to solution on highest grid level LSUN(MLVNP1) = LSSN(MLVNP1) IF (MLVNP1 .GT. 1) THEN C Move updated solutions on grids (max.lev-1),...,2 and adjust C pointers to Un data LUNP1 = LSUNP1(MLVNP1-1) LEUNP1 = LSUNP1(1)+LENUB - LUNP1 CALL RCOPY (LEUNP1, RWK(LUNP1), RWK(LSN)) DO 260 LEV = 1, MLVNP1-1 LSUN(LEV) = LSUNP1(LEV) - (LUNP1-LSN) 260 CONTINUE ENDIF C Ccc Set pointer to not updated base grid solution at Tn+1 LSSNP1(1) = LSUN(1) + LENUB Ccc Set pointer to first free element after grid structure of max. C refinement level for Tn LIWKB = LGN C Ccc Adapt time variables CALL MONITR (TN+DT, DT, DTNEW, XL, YL, DXB, DYB, + LSGN, IWK, LSUN, RWK) TN = TN + DT DTO = DT DT = DTNEW IF (FIRST) THEN FIRST = .FALSE. SECOND = .TRUE. ELSE IF (SECOND) THEN SECOND = .FALSE. ENDIF IF (TN .GE. TE) THEN IF (LUNPDS .NE. 0) THEN WRITE(LUNPDS,'(''# steps accepted:'',I5, + '', # steps rejected:'',I5)') NSTEPS, NREJS ENDIF RETURN ELSE GOTO 10 ENDIF ENDIF RETURN END SUBROUTINE INIGRD (MAXPTS, XL, YL, XR, YU, DX, DY, XY, + IWK, NPTS, LIWK, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, IWK(*), NPTS, LIWK, IERR REAL XL, YL, XR, YU, DX, DY, XY(*) C Ccc PURPOSE: C Stores datastructure and coordinate values of initial grid (rowwise). C A (virtual) rectangle is placed upon the irregular domain. The C lowerleft point of this rectangle is (XL,YL) in physical coordinates C and (0,0) in column, resp. row coordinates. The upperright point is C (XR,YU) resp. (Nx, Ny), where Nx = (XR-XL)/DX and Ny = (YU-YL)/DY. C Only real grid points are stored, rowwise. C In the default case the domain is a rectangle and the user C has to specify only the (XL,YL)- and the (XR,YU)-point, and C the gridwidth in each direction. Otherwise the user has to write C the domain specifying routine INIDOM in which also the coordinate C values and the cellwidths can be specified. C Ccc PARAMETER DESCRIPTION: C MAXPTS : IN. Max. # grid points allowed by the available workspace C XL : INOUT. X-coordinate of lowerleft point of (virtual) rectangle C YL : INOUT. Y-coordinate of lowerleft point of (virtual) rectangle C XR : INOUT. X-coordinate of upperright point of (virtual) C rectangle C YU : INOUT. Y-coordinate of upperright point of (virtual) C rectangle C DX : INOUT. Grid width in X-direction C DY : INOUT. Grid width in Y-direction C XY : OUT. Contains the X- and Y-coordinates for the base grid C IWK : OUT. Contains the following arrays: CcLROW : (0:LROW(0)+1) Cc LROW(0) = NROWS: Actual # rows in grid Cc LROW(1:NROWS): pointers to the start of a row in the grid Cc LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 CcIROW : (NROWS) Cc IROW(IR): row number of row IR in virtual rectangle CcICOL : (NPTS) Cc ICOL(IPT): column number of grid point IPT in virtual Cc rectangle CcLLBND : (0:LLBND(0)+2) Cc LLBND(0) = NBNDS: total # physical boundaries and corners in Cc actual domain. Cc NB. corners should be stored as an independent boundary Cc (cf. ILBND). The order in LLBND should be first the Cc boundaries and then the corners. Cc LLBND(1:NBNDS): pointers to a specific boundary or corner in Cc LBND Cc LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points Cc in LBND + 1 Cc LLBND(NBNDS+1): pointer to internal boundary in LBND Cc LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 CcILBND : (NBNDS) Cc ILBND(IB): type of boundary: Cc 1: Lower boundary -I Cc 2: Left boundary I Cc 3: Upper boundary I max. first order derivative Cc 4: Right boundary -I Cc 12: Lowerleft corner -I Cc 23: Leftupper corner I corners of 90 degrees Cc 34: Upperright corner I (external corners) Cc 41: Rightlower corner -I max. first order deriv. Cc 21: Leftlower corner -I Cc 32: Upperleft corner I corners of 270 degrees Cc 43: Rightupper corner I (internal corners) Cc 14: Lowerright corner -I max. first order deriv. CcLBND : (NBIPTS) Cc LBND(IBPT): pointer to boundary point in actual grid CcLBELOW : (NPTS) Cc LBELOW(IPT): pointer to node below in actual grid Cc 0, if index node is lower boundary point CcLABOVE : (NPTS) Cc LABOVE(IPT): pointer to node above in actual grid Cc 0, if index node is upper boundary point Cc (Even if LINSYS=2, because of restart:) Cc The next 2 arrays are used for the Jacobian structure and its Cc ILU CcLLDG : (NPTS,-4:-2) Cc LLDG(IPT,-4): pointer to node left of node below Cc or to node below the node below Cc LLDG(IPT,-3): pointer to node below Cc LLDG(IPT,-2): pointer to node right of node below Cc or to node left of the node left CcLUDG : (NPTS,2:4) Cc LUDG(IPT,2): pointer to node left of node above Cc or to node right of the node right Cc LUDG(IPT,3): pointer to node above Cc LUDG(IPT,4): pointer to node right of node above Cc or to node above the node above Cc the next 4 arrays are used to hold the data dependency lists Cc for the ILU factorization and the forward, resp. backward Cc sweep of the backsolve CcLSL : LSL(NPTS) Cc LSL(ISLPT): pointer to node in actual grid CcLLSL : LLSL(0:LLSL(0)) Cc LLSL(0) = # independent data dependency lists in ILU Cc factorization and forward sweep Cc LLSL(1:LLSL(0)): pointers to the start of a list in LSL CcLSU : LSU(NPTS) Cc LSU(ISLPT): pointer to node in actual grid CcLLSU : LLSU(0:LLSU(0)) Cc LLSU(0) = # independent data dependency lists in backward C sweep Cc LLSU(1:LLSU(0)): pointers to the start of a list in LSU C NPTS : OUT. # grid points in base grid C LIWK : OUT. Pointer to first free element in IWK C IERR : OUT. Error return flag C 0: OK. C 1: workspace too small for required # gridpoints C Ccc EXTERNALS USED: LOGICAL INIDOM EXTERNAL ICOPY, INIDOM, JACSDP, JACSLP, JACSUP, SETBA, SETXY C C----------------------------------------------------------------------- C INTEGER I1, I2, I3, I4, I5, I6, + LLROW, LIROW, LICOL, LLLBND, LILBND, LLBNDP, LLBLW, LLABV, + NROWS, NBNDS, NBDPTS, LLLDG, LLUDG, LLSLP, LLLSL, LLSUP, LLLSU LOGICAL OK C IERR = 0 C Ccc Get (user defined) initial domain I1 = 1 I2 = I1 + MAXPTS I3 = I2 + MAXPTS I4 = I3 + MAXPTS I5 = I4 + MAXPTS I6 = I5 + MAXPTS OK = INIDOM (MAXPTS, XL, YL, XR, YU, DX, DY, + IWK(I1), IWK(I2), IWK(I3), IWK(I4), IWK(I5), IWK(I6)) IF (.NOT. OK) THEN IERR = 1 NPTS = MAXPTS RETURN ENDIF C Ccc Copy integer arrays to their correct position in the IWK array NROWS = IWK(I1) NPTS = IWK(I1+NROWS+1)-1 NBNDS = IWK(I4) NBDPTS = IWK(I4+NBNDS+1)-1 C LROW at correct position LLROW = 1 C Copy IROW LIROW = LLROW+NROWS+2 CALL ICOPY (NROWS, IWK(I2), IWK(LIROW)) C Copy ICOL LICOL = LIROW+NROWS CALL ICOPY (NPTS, IWK(I3), IWK(LICOL)) C Copy LLBND LLLBND = LICOL+NPTS CALL ICOPY (NBNDS+2, IWK(I4), IWK(LLLBND)) C No internal boundaries IWK(LLLBND+NBNDS+2) = NBDPTS+1 C Copy ILBND LILBND = LLLBND+NBNDS+3 CALL ICOPY (NBNDS, IWK(I5), IWK(LILBND)) C Copy LBND LLBNDP = LILBND+NBNDS CALL ICOPY (NBDPTS, IWK(I6), IWK(LLBNDP)) C Ccc Store X- and Y-coordinates CALL SETXY (XL, YL, DX, DY, + IWK(LLROW), IWK(LIROW), IWK(LICOL), + XY(1), XY(1+NPTS)) C Ccc Set pointers to nodes below and above a grid point LLBLW = LLBNDP+NBDPTS LLABV = LLBLW+NPTS CALL SETBA (IWK(LLROW), IWK(LIROW), IWK(LICOL), + IWK(LLBLW), IWK(LLABV)) C Ccc Set pointers to lower and upper diagonals in Jacobian for base grid LLLDG = LLABV + NPTS LLUDG = LLLDG + NPTS*3 CALL JACSDP (NPTS, IWK(LLLBND), IWK(LILBND), IWK(LLBNDP), + IWK(LLBLW), IWK(LLABV), IWK(LLLDG), IWK(LLUDG)) C Ccc Make data-dependency lists for ILU on base-grid Jacobian LLSLP = LLUDG + NPTS*3 LLLSL = LLSLP + NPTS LIWK = LLLSL + NPTS CALL JACSLP (NPTS, IWK(LLLBND), IWK(LILBND), IWK(LLBNDP), + IWK(LLLDG), IWK(LIWK), IWK(LLLSL), IWK(LLSLP)) LLSUP = LLLSL + IWK(LLLSL)+1 LLLSU = LLSUP + NPTS LIWK = LLLSU + NPTS CALL JACSUP (NPTS, IWK(LLLBND), IWK(LILBND), IWK(LLBNDP), + IWK(LLUDG), IWK(LIWK), IWK(LLLSU), IWK(LLSUP)) LIWK = LLLSU + IWK(LLLSU)+1 RETURN END SUBROUTINE SETBA (LROW, IROW, ICOL, LBELOW, LABOVE) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LROW(0:*), IROW(*), ICOL(*), LBELOW(*), LABOVE(*) C Ccc PURPOSE: C Set pointers to nodes below and above a grid point, if such a node C exists, otherwise the pointer is set to zero. C Ccc PARAMETER DESCRIPTION: C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LBELOW : OUT. (NPTS) C LBELOW(IPT): pointer to node below in actual grid C 0, if indexed node is lower boundary point C LABOVE : OUT. (NPTS) C LABOVE(IPT): pointer to node above in actual grid C 0, if indexed node is upper boundary point C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IPTA, IR, NROWS, NPTS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 DO 10 IPT = 1, NPTS LBELOW(IPT) = 0 LABOVE(IPT) = 0 10 CONTINUE DO 20 IR = 1, NROWS-1 C Check if next row in datastructure is next row in virtual rectangle IF (IROW(IR) .EQ. IROW(IR+1)-1) THEN C Compare column indices in row with those in row above, until C the two match or one of both rows is finished IPTA = LROW(IR+1) DO 30 IPT = LROW(IR), LROW(IR+1)-1 40 IF (ICOL(IPT) .LT. ICOL(IPTA)) THEN GOTO 30 ELSE IF (ICOL(IPT) .EQ. ICOL(IPTA)) THEN C Set above pointer in current row and below pointer in next C row LBELOW(IPTA) = IPT LABOVE(IPT) = IPTA ELSE IPTA = IPTA + 1 IF (IPTA .GT. LROW(IR+2)-1) GOTO 20 GOTO 40 ENDIF 30 CONTINUE ENDIF 20 CONTINUE RETURN END LOGICAL FUNCTION CHKGRD (T, LEVEL, U, NPDE, X, Y, SPCTOL, TOLWGT, + ISTRUC, WORK, REFFLG, SPCMON) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LEVEL, NPDE, ISTRUC(0:*) LOGICAL REFFLG(0:*) REAL T, U(0:*), X(*), Y(*), SPCTOL(NPDE), TOLWGT, WORK(*), SPCMON C Ccc PURPOSE: C Check if grid needs to be refined. If so, CHKGRD = .FALSE. and C flags are set where the refinement is needed. C Ccc PARAMETER DESCRIPTION: C T : IN. Current time level C LEVEL : IN. Current grid level C U : IN. Solution on current grid C NPDE : IN. # PDE components C X, Y : IN. Physical coordinates of grid points C SPCTOL : IN. User defined space tolerance for each PDE component C TOLWGT : IN. Weight factor for tolerance. If new level at previous C time existed TOLWGT < 1, else 1 C ISTRUC : IN. Datastructure for current grid C WORK : WORK. (2*NPTS*NPDE) C REFFLG : OUT. If one of the corners of a cell is flagged the cell C needs to be refined C SPCMON : OUT. Value of space monitor C Ccc EXTERNALS USED: LOGICAL CHKREF EXTERNAL CHKREF C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C Ccc Compute space monitor and check if grid needs to be refined CHKGRD = CHKREF (T, LEVEL, U, NPTS, NPDE, X, Y, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), + SPCTOL, TOLWGT, WORK(1), WORK(1+NPTS*NPDE), REFFLG, SPCMON) RETURN END SUBROUTINE MKFGRD (REFFLG, IWK, LENIWK, LISTRC, LISTRF, LINSYS, + NPTSF, LIWK, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER IWK(LENIWK), LISTRC, LISTRF, LINSYS, NPTSF, LIWK, IERR LOGICAL REFFLG(0:*) C Ccc PURPOSE: C Make fine grid structure and store in IWK(LISTRF+...) C Ccc PARAMETER DESCRIPTION: C REFFLG : IN. If one of the corners of a cell is flagged the cell C needs to be refined C IWK : INOUTWORK. Integer workspace. C IN: Coarse grid structure C OUT: If coarse grid is base grid: coarse grid structure, C otherwise (LROW,...,LBND) of coarse grid structure and C fine grid structure (LROW,...,LLLSU) C WORK: (NPTS+NPTSF) at end of IWK for domain flags C LENIWK : IN. Length of IWK C LISTRC : IN. Pointer to coarse grid structure in IWK C LISTRF : IN. Pointer to place where fine grid structure should be C stored in IWK C LINSYS : IN. Linear system solver in use C 0: BiCGStab + ILU C 1: (Block-)diagonally scaled GCRO C 2: (Block-)diagonally scaled matrix-free GCRO C NPTSF : OUT. # grid points in fine grid C LIWK : OUT. Pointer to first free element in IWK after fine grid C structure C IERR : OUT. Error return flag C 0: OK C 1: workspace too small for required # fine gridpoints C Ccc EXTERNALS USED: EXTERNAL DOMFLG, ICOPY, JACSDP, JACSLP, JACSUP, MKBND, REFDOM, + SETBA C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, LLLDG, + LLROWF, NROWSF, LIROWF, LICOLF, LLLBDF, + NBIPTF, LILBDF, LLBNDF, LLBLWF, LLABVF, + LLLDGF, LLUDGF, LLSLF, LLLSLF, LLSUF, LLLSUF, + LIDOM, LIDOMF, MAXPTS C IERR = 0 C LLROW = LISTRC NROWS = IWK(LLROW) NPTS = IWK(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = IWK(LLLBND) NBIPTS = IWK(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS LLLDG = LLABV+NPTS LIDOM = LENIWK-NPTS C Ccc Make data structure fine grid MAXPTS = (LIDOM-MAX(LISTRF,LLLDG))/4 LIDOMF = LIDOM -MAXPTS-1 LICOLF = LIDOMF-MAXPTS LIROWF = LICOLF-MAXPTS+1 LLROWF = LIROWF-MAXPTS C Set domain flags for coarse grid CALL DOMFLG (NPTS, IWK(LLLBND), IWK(LLBNDP), IWK(LIDOM)) CALL REFDOM (MAXPTS, REFFLG, NBNDS, + IWK(LLROW), IWK(LIROW), IWK(LICOL), IWK(LLBLW), IWK(LLABV), + IWK(LIDOM), IWK(LLROWF), IWK(LIROWF), IWK(LICOLF), IWK(LIDOMF), + NPTSF, IERR) IF (IERR .EQ. 1) THEN LIWK = LENIWK+1 RETURN ENDIF C Ccc Move fine grid structure to their correct position NROWSF = IWK(LLROWF) CALL ICOPY (NROWSF+2, IWK(LLROWF), IWK(LISTRF)) LLROWF = LISTRF CALL ICOPY (NROWSF, IWK(LIROWF), IWK(LLROWF+NROWSF+2)) LIROWF = LLROWF+NROWSF+2 CALL ICOPY (NPTSF, IWK(LICOLF), IWK(LIROWF+NROWSF)) LICOLF = LIROWF+NROWSF C Ccc Copy # physical boundaries and boundary types from coarse grid LLLBDF = LICOLF+NPTSF LILBDF = LLLBDF+NBNDS+3 LLBNDF = LILBDF+NBNDS IWK(LLLBDF) = NBNDS CALL ICOPY (NBNDS, IWK(LILBND), IWK(LILBDF)) C Ccc Set pointers below and above and new boundary lists LLBLWF = LLBNDF+NPTSF LLABVF = LLBLWF+NPTSF LIWK = LLABVF+NPTSF IF (LIWK .GT. LENIWK) THEN IERR = 1 RETURN ENDIF CALL SETBA (IWK(LLROWF), IWK(LIROWF), IWK(LICOLF), + IWK(LLBLWF), IWK(LLABVF)) CALL MKBND (NPTSF, IWK(LLROWF), IWK(LIROWF), IWK(LICOLF), + IWK(LLBLWF), IWK(LLABVF), + IWK(LIDOMF), IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF)) C Ccc Move below/above pointers to their correct position NBIPTF = IWK(LLLBDF+NBNDS+2)-1 CALL ICOPY (NPTSF, IWK(LLBLWF), IWK(LLBNDF+NBIPTF)) LLBLWF = LLBNDF+NBIPTF CALL ICOPY (NPTSF, IWK(LLABVF), IWK(LLBLWF+NPTSF)) LLABVF = LLBLWF+NPTSF LIWK = LLABVF+NPTSF IF (LINSYS .EQ. 2) RETURN C Ccc Set pointers to lower and upper diagonals in Jacobian for fine grid LLLDGF = LIWK LLUDGF = LLLDGF+NPTSF*3 LIWK = LLUDGF+NPTSF*3 IF (LIWK .GT. LENIWK) THEN IERR = 1 RETURN ENDIF CALL JACSDP (NPTSF, IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF), + IWK(LLBLWF), IWK(LLABVF), IWK(LLLDGF), IWK(LLUDGF)) IF (LINSYS .EQ. 1) RETURN C Ccc Make data-dependency lists for ILU on fine grid Jacobian LLSLF = LIWK LLLSLF = LLSLF +NPTSF LIWK = LLLSLF+NPTSF IF (LIWK+NPTSF .GT. LENIWK) THEN IERR = 1 RETURN ENDIF CALL JACSLP (NPTSF, IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF), + IWK(LLLDGF), IWK(LIWK), IWK(LLLSLF), IWK(LLSLF)) LLSUF = LLLSLF+IWK(LLLSLF)+1 LLLSUF = LLSUF +NPTSF LIWK = LLLSUF+NPTSF IF (LIWK+NPTSF .GT. LENIWK) THEN LIWK = LIWK+NPTSF IERR = 1 RETURN ENDIF CALL JACSUP (NPTSF, IWK(LLLBDF), IWK(LILBDF), IWK(LLBNDF), + IWK(LLUDGF), IWK(LIWK), IWK(LLLSUF), IWK(LLSUF)) LIWK = LLLSUF+ IWK(LLLSUF)+1 C RETURN END LOGICAL FUNCTION CHKREF (T, LEVEL, U, NPTS, NPDE, X, Y, + LLBND, ILBND, LBND, LBELOW, LABOVE, + SPCTOL, TOLWGT, W1, W2, REFFLG, SPCMON) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LEVEL, NPTS, NPDE, + LLBND(0:*), ILBND(*), LBND(*), LBELOW(NPTS), LABOVE(NPTS) LOGICAL REFFLG(0:NPTS) REAL T, U(0:NPTS*NPDE), X(NPTS), Y(NPTS), + SPCTOL(NPDE), TOLWGT, W1(NPTS*NPDE), W2(NPTS*NPDE), SPCMON C Ccc PURPOSE: C Check if grid needs to be refined. If so, CHKREF = .FALSE. and C flags are set where the refinement is needed. C C Space monitor: C SPCMON(ipt) = max SPCTOL(ic).|(dx)^2.Uxx(ipt)| + |(dy)^2.Uyy(ipt)|, C (ic = 1, NPDE) C A user routine is called to eventually enforce refinement by setting C SPCMON. C If max SPCMON(ipt) < TOLWGT then no refinement is needed, C (ipt = 1, NPTS) C otherwise all gridpoints for which SPCMON(ipt) > 1/4 are flagged C plus their 8 neighbours. C On exit CHKREF = .TRUE. if no refinement is required C Ccc PARAMETER DESCRIPTION: C T : IN. Current time level C LEVEL : IN. Current grid level C U : IN. Array of solution values. C NPTS : IN. # grid points C NPDE : IN. # PDE components C X, Y : IN. Physical coordinates of grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C SPCTOL : IN. User defined space tolerance for the monitor values of C different components C TOLWGT : IN. Weight factor for tolerance. If new level at previous C time existed TOLWGT < 1, else 1 C W1, W2 : WORK. C REFFLG : OUT. If the solution in a grid point violates the space C monitor condition, the gridpoint and its 8 neighbours are C flagged C SPCMON : OUT. Max SPCMON(ipt) C Ccc EXTERNALS USED: EXTERNAL CHSPCM C C----------------------------------------------------------------------- C INTEGER I, IB, IC, IPT, IM1, IM2, IP1, IP2, LB, NBNDS, NBIPTS C NBNDS = LLBND(0) NBIPTS = LLBND(NBNDS+2)-1 C Ccc Store (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 C First interior points, boundary values will be rubbish DO 10 I = 2, NPTS*NPDE-1 W1(I) = U(I-1) - 2*U(I) + U(I+1) 10 CONTINUE DO 20 IC = 1, NPDE DO 20 IPT = 1, NPTS I = IPT + (IC-1)*NPTS IM1 = LBELOW(IPT) + (IC-1)*NPTS IP1 = LABOVE(IPT) + (IC-1)*NPTS W2(I) = U(IM1) - 2*U(I) + U(IP1) 20 CONTINUE C C Correct boundaries, first the physical boundaries then the internal C ones DO 30 IB = 1, NBNDS IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correct (dy)^2.Uyy in W2 DO 50 IC = 1, NPDE DO 50 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IP1) + U(IP2) 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correct (dx)^2.Uxx in W1 DO 60 IC = 1, NPDE DO 60 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I+1) + U(I+2) 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correct (dy)^2.Uyy in W2 DO 70 IC = 1, NPDE DO 70 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IM1) + U(IM2) 70 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correct (dx)^2.Uxx in W1 DO 80 IC = 1, NPDE DO 80 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I-1) + U(I-2) 80 CONTINUE ELSE IF (ILBND(IB) .EQ. 12) THEN CDIR$ NOVECTOR C Lowerleft corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 82 IC = 1, NPDE DO 82 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I+1) + U(I+2) IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IP1) + U(IP2) 82 CONTINUE ELSE IF (ILBND(IB) .EQ. 23) THEN C Leftupper corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 84 IC = 1, NPDE DO 84 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I+1) + U(I+2) IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IM1) + U(IM2) 84 CONTINUE ELSE IF (ILBND(IB) .EQ. 34) THEN C Upperright corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 86 IC = 1, NPDE DO 86 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I-1) + U(I-2) IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IM1) + U(IM2) 86 CONTINUE ELSE IF (ILBND(IB) .EQ. 41) THEN C Rightlower corner, correct (dx)^2.Uxx in W1 and (dy)^2.Uyy in W2 DO 88 IC = 1, NPDE DO 88 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = U(I) - 2*U(I-1) + U(I-2) IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS W2(I) = U(I) - 2*U(IP1) + U(IP2) 88 CONTINUE ENDIF 30 CONTINUE CDIR$ VECTOR IB = NBNDS + 1 C Internal boundary, Dirichlet condition, space error = 0 DO 90 IC = 1, NPDE DO 90 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS W1(I) = 0.0 W2(I) = 0.0 90 CONTINUE C Ccc Compute space monitor SPCMON, and its maximum IC = 1 DO 100 IPT = 1, NPTS W1(IPT) = SPCTOL(IC)*(ABS(W1(IPT)) + ABS(W2(IPT))) 100 CONTINUE DO 110 IC = 2, NPDE DO 110 IPT = 1, NPTS I = IPT + (IC-1)*NPTS W1(IPT) = MAX(W1(IPT),SPCTOL(IC)*(ABS(W1(I)) + ABS(W2(I)))) 110 CONTINUE C C Call user routine to possibly force refinement CALL CHSPCM (T, LEVEL, NPTS, X, Y, NPDE, U(1), W1, TOLWGT) C C Compute maximum SPCMON = W1(1) DO 120 IPT = 2, NPTS SPCMON = MAX(SPCMON,W1(IPT)) 120 CONTINUE C Ccc Check if grid refinement is needed IF (SPCMON .LT. TOLWGT) THEN C No refinement needed CHKREF = .TRUE. RETURN ENDIF C Ccc Flag each node where space monitor is too large + its 8 neighbors. C Cells will be refined if a flag is set on 1 corner CHKREF = .FALSE. DO 200 IPT = 0, NPTS REFFLG(IPT) = .FALSE. 200 CONTINUE C C If neighbors in the grid datastructure are not physical neighbors in C the grid the former are wrongly flagged but since those points C are boundary points the flags will be unset later on DO 210 IPT = 2, NPTS-1 IF (W1(IPT) .GE. 0.25) THEN REFFLG(LABOVE(IPT-1)) = .TRUE. REFFLG( IPT-1) = .TRUE. REFFLG(LBELOW(IPT-1)) = .TRUE. REFFLG(LABOVE(IPT)) = .TRUE. REFFLG( IPT) = .TRUE. REFFLG(LBELOW(IPT)) = .TRUE. REFFLG(LABOVE(IPT+1)) = .TRUE. REFFLG( IPT+1) = .TRUE. REFFLG(LBELOW(IPT+1)) = .TRUE. ENDIF 210 CONTINUE REFFLG(0) = .FALSE. C Unset errorflags at (physical and internal) boundary DO 230 LB = 1, NBIPTS IPT = LBND(LB) REFFLG(IPT) = .FALSE. 230 CONTINUE RETURN END SUBROUTINE DOMFLG (NPTS, LLBND, LBND, IDOM) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), LBND(*), IDOM(0:NPTS) C Ccc PURPOSE: C Set domain flags for determination of location of grid point in grid C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C IDOM : OUT. IDOM(IPT): location in domain of node IPT C 0: interior point C IB: on boundary IB, IB = 1, NBNDS+1 C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IB, LB, NBNDS C NBNDS = LLBND(0) C C Set domain flags DO 10 IPT = 0, NPTS IDOM(IPT) = 0 10 CONTINUE DO 20 IB = 1, NBNDS+1 DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IDOM(LBND(LB)) = IB 30 CONTINUE 20 CONTINUE RETURN END SUBROUTINE REFDOM (MAXPTS, REFFLG, NBNDS, + LROWC, IROWC, ICOLC, LBELOC, LABOVC, IDOMC, + LROW, IROW, ICOL, IDOM, NPTS, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER MAXPTS, NBNDS, LROWC(0:*), IROWC(*), ICOLC(*), + LABOVC(*), LBELOC(*), IDOMC(0:*), + LROW(0:*), IROW(*), ICOL(*), IDOM(0:*), NPTS, IERR LOGICAL REFFLG(0:*) C Ccc PURPOSE: C Create refined grid. If one of the corners of a cell is flagged, the C cell is divided in 4. The (LROW,IROW,ICOL) structure of the fine C grid will be stored and IDOM will contain domainflags (only for rows C corresponding with the coarse grid) to indicate the location of a C node in the fine grid. C Ccc PARAMETER DESCRIPTION: C MAXPTS : IN. Max. # grid points allowed on fine grid C REFFLG : IN. (0:NPTSC) C If the solution in a grid point violates the space monitor C condition, the gridpoint and its 8 neighbors are flagged. C Gridpoints at the boundaries are not flagged C LROWC : IN. (0:LROWC(0)+1) C LROWC(0) = NROWSC: Actual # rows in grid C LROWC(1:NROWSC): pointers to the start of a row in the grid C LROWC(NROWSC+1) = NPTSC+1: Actual # nodes in grid + 1 C IROWC : IN. (NROWSC) C IROWC(IR): row number of row IR in virtual rectangle C ICOLC : IN. (NPTSC) C ICOLC(IPT): column number of grid point IPT in virtual C rectangle C LBELOC : IN. (NPTSC) C LBELOC(IPT): pointer to node below in coarse grid C 0, if index node is lower boundary point C LABOVC : IN. (NPTSC) C LABOVC(IPT): pointer to node above in coarse grid C 0, if index node is upper boundary point C IDOMC : IN. (0:NPTSC) C IDOMC(IPT): location in coarse grid of node IPT C 0: interior point C IB: on boundary IB, IB = 1, NBNDS+1 C LROW : OUT. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : OUT. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : OUT. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C IDOM : OUT. (0:NPTS) C IDOM(IPT): location in coarse grid of node IPT (only set for C rows corresponding with coarse grid rows) C -1: grid point does not correspond with a coarse grid point C 0: interior point or new horizontal internal boundary C IB: on coarse grid boundary IB, IB = 1, NBNDS+1 C NPTS : OUT. # grid points on fine grid or MAXPTS if IERR=1 C IERR : OUT. Error return flag C 0: OK. C 1: workspace too small for required # fine gridpoints C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPC, IPT, IPTO, IPTOLD, IRC, IR, NROWSC, NROWS LOGICAL LEFT, MIDDLE, RIGHT C IERR = 0 IDOM(0) = 0 C NROWSC = LROWC(0) C Ccc Create new grid level, all cells with at least one flagged corner C will be refined IPT = 0 IR = 0 DO 10 IRC = 1, NROWSC C Ccc Make coarse grid row of fine grid IPTOLD = IPT IPTO = IPT LEFT = .FALSE. IPC = LROWC(IRC) MIDDLE = REFFLG(LBELOC(IPC)) .OR. REFFLG(IPC) .OR. + REFFLG(LABOVC(IPC)) DO 20 IPC = LROWC(IRC)+1, LROWC(IRC+1)-1 RIGHT = REFFLG(LBELOC(IPC)) .OR. REFFLG(IPC) .OR. + REFFLG(LABOVC(IPC)) IF (MIDDLE .OR. RIGHT) THEN C Refine cell IF (IPT+2 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)) + its right neighbor IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) IF (IDOMC(IPC-1) .NE. 0) THEN C Coarse grid point is at (physical) boundary, so is new IDOM(IPT) = IDOMC(IPC-1) ELSE IF (IPT .EQ. IPTO+1) THEN C First new point in this (sub)row: internal boundary IDOM(IPT) = NBNDS+1 ELSE C Internal point, or internal horizontal boundary IDOM(IPT) = 0 ENDIF IPT = IPT + 1 ICOL(IPT) = ICOL(IPT-1)+1 C If one of both (coarse) neighbors is an internal point, so C is IPT; otherwise it lies on a horizontal boundary and C only one of the neighbors can be a physical corner IF (IDOMC(IPC-1) .EQ. 0 .OR. + IDOMC(IPC) .EQ. 0) THEN IDOM(IPT) = 0 ELSE IF (IDOMC(IPC-1) .EQ. NBNDS+1 .OR. + IDOMC(IPC) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IDOM(IPT) = MIN(IDOMC(IPC-1),IDOMC(IPC)) ENDIF ELSE IF (LEFT) THEN C Previous cell is refined, current not IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)) IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) IF (IDOMC(IPC-1) .NE. 0) THEN C Coarse grid point is at (physical) boundary, so is new IDOM(IPT) = IDOMC(IPC-1) ELSE C Internal boundary IDOM(IPT) = NBNDS+1 ENDIF IPTO = IPT ENDIF LEFT = MIDDLE MIDDLE = RIGHT 20 CONTINUE IF (LEFT) THEN C Last cell in row has been refined IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add last coarse node IPC = LROWC(IRC+1)-1 IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC) C Coarse grid point is at physical or internal boundary, so is new IDOM(IPT) = IDOMC(IPC) ENDIF C IF (IPT .GT. IPTOLD) THEN C Current coarse grid row has been refined IR = IR + 1 LROW(IR) = IPTOLD + 1 IROW(IR) = 2*IROWC(IRC) ENDIF C IF (IRC .EQ. NROWSC) GOTO 10 C Ccc Make intermediate row of fine grid IPTOLD = IPT LEFT = .FALSE. IPC = LROWC(IRC) MIDDLE = REFFLG(IPC) .OR. REFFLG(LABOVC(IPC)) DO 30 IPC = LROWC(IRC)+1, LROWC(IRC+1)-1 RIGHT = REFFLG(IPC) .OR. REFFLG(LABOVC(IPC)) IF (MIDDLE .OR. RIGHT) THEN C Refine cell IF (IPT+2 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)+1/2) + its right neighbor IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) IPT = IPT + 1 ICOL(IPT) = ICOL(IPT-1)+1 ELSE IF (LEFT) THEN C Previous cell is refined, current not IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add node (ICOLC(IPC-1),IROWC(IRC)+1/2) IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC-1) ENDIF LEFT = MIDDLE MIDDLE = RIGHT 30 CONTINUE IF (LEFT) THEN C Last cell in row has been refined IF (IPT+1 .GT. MAXPTS) GOTO 900 C Add last coarse node IPC = LROWC(IRC+1)-1 IPT = IPT + 1 ICOL(IPT) = 2*ICOLC(IPC) ENDIF C IF (IPT .GT. IPTOLD) THEN C Current intermediate row has been refined IR = IR + 1 LROW(IR) = IPTOLD + 1 IROW(IR) = 2*IROWC(IRC)+1 ENDIF 10 CONTINUE C Ccc Store # find grid rows in LROW(0) and # fine grid points in NPTS C and LROW(NROWS+1) NROWS = IR NPTS = IPT LROW(0) = NROWS LROW(NROWS+1) = NPTS + 1 C RETURN C Ccc Error return 900 CONTINUE NPTS = MAXPTS IERR = 1 C RETURN END SUBROUTINE MKBND (NPTSF, LROW, IROW, ICOL, LBELOW, LABOVE, + IDOM, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTSF INTEGER LROW(0:*), IROW(*), ICOL(*), LBELOW(*), LABOVE(*), + IDOM(0:NPTSF), LLBND(0:*), ILBND(*), LBND(*) C Ccc PURPOSE: C Make boundary list for refined grid using domain flags set on grid C points corresponding to coarse grid points C Ccc PARAMETER DESCRIPTION: C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C LBELOW : IN. (NPTS) C LBELOW(IPT): pointer to node below in coarse grid C 0, if index node is lower boundary point C LABOVE : IN. (NPTS) C LABOVE(IPT): pointer to node above in coarse grid C 0, if index node is upper boundary point C IDOM : INWORK. (0:NPTS) C IDOM(IPT): location in coarse grid of node IPT (only set for C rows corresponding with coarse grid rows) C 0: interior point or horizontal internal boundary C IB: on coarse grid boundary IB, IB = 1, NBNDS+1 C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : OUT. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IB, IDA, IDB, IPT, IR, NROWS, NPTS, NBNDS LOGICAL LEFT, RIGHT, UP, DOWN C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NBNDS = LLBND(0) C Ccc Domain flags have been set at nodes corresponding with coarse grid C nodes, but horizontal internal boundaries are possibly still marked as C internal points. Correct, first all but corners. DO 1 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 1 DO 2 IPT = LROW(IR), LROW(IR+1)-1 IF ((LABOVE(IPT) .EQ. 0 .OR. LBELOW(IPT) .EQ.0) .AND. + IDOM(IPT) .EQ. 0) IDOM(IPT) = NBNDS+1 2 CONTINUE 1 CONTINUE C Now for the internal corners. External corners are already correct. DO 3 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 3 LEFT = .FALSE. CDIR$ IVDEP DO 4 IPT = LROW(IR)+1, LROW(IR+1)-2 RIGHT = ICOL(IPT+1) .NE. ICOL(IPT)+1 IF (IDOM(IPT) .NE. 0) GOTO 5 DOWN = LBELOW(IPT) .EQ. 0 UP = LABOVE(IPT) .EQ. 0 IF (.NOT.(LEFT .OR. DOWN .OR. RIGHT .OR. UP)) THEN IF (LABOVE(IPT-1) .EQ. 0 .OR. + LABOVE(IPT+1) .EQ. 0 .OR. + LBELOW(IPT-1) .EQ. 0 .OR. + LBELOW(IPT+1) .EQ. 0) C Internal corner + IDOM(IPT) = NBNDS+1 ENDIF 5 LEFT = RIGHT 4 CONTINUE 3 CONTINUE C Ccc Set domain flags in intermediate rows DO 10 IR = 1, NROWS IF (IROW(IR)/2*2 .EQ. IROW(IR)) GOTO 10 CDIR$ IVDEP DO 20 IPT = LROW(IR), LROW(IR+1)-1 IDA = IDOM(LABOVE(IPT)) IDB = IDOM(LBELOW(IPT)) C If one of both neighbors is an internal point, so C is IPT; otherwise it lies on a vertical boundary and C only one of the neighbors can be a physical corner IF (IDA .EQ. 0 .OR. IDB .EQ. 0) THEN IDOM(IPT) = 0 ELSE IF (IDA .EQ. NBNDS+1 .OR. IDB .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IDOM(IPT) = MIN(IDA,IDB) ENDIF 20 CONTINUE 10 CONTINUE C Ccc Corners of physical and internal boundaries should be marked as C internal boundary IPT = 1 IF (IDOM(IPT) .NE. 0 .AND. IDOM(IPT) .NE. NBNDS+1) THEN IB = ILBND(IDOM(IPT)) IF ((IB .EQ. 1 .OR. IB .EQ. 14 .OR. IB .EQ. 21) + .AND. IDOM(LABOVE(IPT)) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 2 .OR. IB .EQ. 32 .OR. IB .EQ. 21) + .AND. IDOM(IPT+1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ENDIF ENDIF DO 30 IPT = 2, NPTS-1 IF (IDOM(IPT) .EQ. 0 .OR. IDOM(IPT) .EQ. NBNDS+1) GOTO 30 IDA = IDOM(LABOVE(IPT)) IDB = IDOM(LBELOW(IPT)) IB = ILBND(IDOM(IPT)) IF ((IB .EQ. 1 .OR. IB .EQ. 14 .OR. IB .EQ. 21) + .AND. IDA .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 2 .OR. IB .EQ. 32 .OR. IB .EQ. 21) + .AND. IDOM(IPT+1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 3 .OR. IB .EQ. 32 .OR. IB .EQ. 43) + .AND. IDB .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 4 .OR. IB .EQ. 14 .OR. IB .EQ. 43) + .AND. IDOM(IPT-1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ENDIF 30 CONTINUE IPT = NPTS IF (IDOM(IPT) .NE. 0 .AND. IDOM(IPT) .NE. NBNDS+1) THEN IB = ILBND(IDOM(IPT)) IF ((IB .EQ. 3 .OR. IB .EQ. 32 .OR. IB .EQ. 43) + .AND. IDOM(LBELOW(IPT)) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ELSE IF ((IB .EQ. 4 .OR. IB .EQ. 14 .OR. IB .EQ. 43) + .AND. IDOM(IPT-1) .EQ. NBNDS+1) THEN IDOM(IPT) = NBNDS+1 ENDIF ENDIF C Ccc Make boundary lists DO 100 IB = 0, NBNDS+1 LLBND(IB) = 0 100 CONTINUE DO 110 IPT = 1, NPTS LLBND(IDOM(IPT)) = LLBND(IDOM(IPT)) + 1 110 CONTINUE LLBND(0) = 1 DO 120 IB = 1, NBNDS LLBND(IB) = LLBND(IB-1) + LLBND(IB) 120 CONTINUE DO 130 IB = NBNDS, 0, -1 LLBND(IB+2) = LLBND(IB) 130 CONTINUE DO 140 IPT = 1, NPTS IF (IDOM(IPT) .EQ. 0) GOTO 140 LBND(LLBND(IDOM(IPT)+1)) = IPT LLBND(IDOM(IPT)+1) = LLBND(IDOM(IPT)+1) + 1 140 CONTINUE LLBND(0) = NBNDS LLBND(1) = 1 RETURN END SUBROUTINE GETSOL (NPDE, UC, ISTRCN, LEVO, UO, ISTRFO, U, ISTRUC, + IWORK, RWORK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, ISTRCN(0:*), ISTRFO(0:*), ISTRUC(0:*), IWORK(*) LOGICAL LEVO REAL UC(0:*), UO(0:*), U(0:*), RWORK(*) C Ccc PURPOSE: C Store solution at a previous time level on a grid of the current time C level. C First copy the (embedded) coarser grid solution, then copy all C available values from the old time grid of the same grid level, and C finally calculate all non-initialized values by interpolation. C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UC : IN. Solution at embedded coarse grid C ISTRCN : IN. Datastructure of the embedded coarse grid C LEVO : IN. .TRUE. if new grid level existed at previous time level C UO : IN. If LEVO the solution at grid ISTRFO C ISTRFO : IN. If LEVO the datastructure of the grid with the same level C as the new grid level but on a previous time level C U : OUT. Solution of previous time level on new grid level C ISTRUC : IN. Data structure of new grid level at current time level C IWORK : WORK. (NPTS) C RWORK : WORK. (0) C Ccc EXTERNALS USED: EXTERNAL INJCF, INJON, INTPOL C C----------------------------------------------------------------------- C INTEGER LLROWC, NROWSC, NPTSC, LIROWC, LICOLC, + LLROWO, NROWSO, NPTSO, LIROWO, LICOLO, + LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV C LLROWC = 0 NROWSC = ISTRCN(LLROWC) NPTSC = ISTRCN(LLROWC+NROWSC+1)-1 LIROWC = LLROWC+NROWSC+2 LICOLC = LIROWC+NROWSC LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C U(0) = 0.0 C C Copy embedded coarse grid solution CALL INJCF (NPDE, UC, U, IWORK, + ISTRCN(LLROWC), ISTRCN(LIROWC), ISTRCN(LICOLC), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) C IF (LEVO) THEN C Copy solution of grid with same level but on previous time level LLROWO = 0 NROWSO = ISTRFO(LLROWO) NPTSO = ISTRFO(LLROWO+NROWSO+1)-1 LIROWO = LLROWO+NROWSO+2 LICOLO = LIROWO+NROWSO CALL INJON (NPDE, UO, U, IWORK, + ISTRFO(LLROWO), ISTRFO(LIROWO), ISTRFO(LICOLO), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) ENDIF C C Calculate all uninitialized values by interpolation CALL INTPOL (NPDE, U, IWORK, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLBLW), ISTRUC(LLABV), RWORK) C RETURN END SUBROUTINE GETINI (NPDE, UIC, UC, ISTRCC, LEVO, UO, ISTRFO, + U, ISTRUC, UIB, IWORK, RWORK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, ISTRCC(0:*), ISTRFO(0:*), ISTRUC(0:*), IWORK(*) LOGICAL LEVO REAL UIC(0:*), UC(0:*), UO(0:*), U(0:*), UIB(*), RWORK(*) C Ccc PURPOSE: C Initialize solution at current time level on the next finer grid C level. Store (Dirichlet) internal boundary values in UIB. C First get the internal bounday values from interpolation of the C solution at the (embedded) coarser grid. C The initial solution is obtained by first copying the (embedded) C coarser grid initial solution, and then all available values from the C solution at the previous time level on the grid of the required grid C level. Finally all as yet non-initialized values are calculated by C interpolation. C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UIC : IN. Initial solution at embedded coarse grid C UC : IN. Solution at embedded coarse grid C ISTRCC : IN. Datastructure of the embedded coarse grid C LEVO : IN. .TRUE. if new grid level existed at previous time level C UO : IN. If LEVO the solution at grid ISTRFO C ISTRFO : IN. If LEVO the datastructure of the grid with the same level C as the new grid level but on a previous time level C U : OUT. Solution of current time level on new grid level C ISTRUC : IN. Data structure of new grid level at current time level C UIB : OUT. List of internal boundary values C IWORK : WORK. (NPTS) C RWORK : WORK. (0) C Ccc EXTERNALS USED: EXTERNAL INJCF, INJCFB, INJON, INTPOL C C----------------------------------------------------------------------- C INTEGER LLROWC, NROWSC, NPTSC, LIROWC, LICOLC, + LLROWO, NROWSO, NPTSO, LIROWO, LICOLO, + LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, NBDPTS, + NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + NIBPTS, I, IB, IC, LB C LLROWC = 0 NROWSC = ISTRCC(LLROWC) NPTSC = ISTRCC(LLROWC+NROWSC+1)-1 LIROWC = LLROWC+NROWSC+2 LICOLC = LIROWC+NROWSC LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS NIBPTS = NBIPTS - NBDPTS C U(0) = 0.0 C Ccc Get internal boundary values C Copy embedded coarse grid solution CALL INJCFB (NPDE, UC, U, IWORK, + ISTRCC(LLROWC), ISTRCC(LIROWC), ISTRCC(LICOLC), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLLBND), ISTRUC(LLBNDP)) C C Calculate all uninitialized values at the internal boundary by C interpolation CALL INTPOL (NPDE, U, IWORK, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLBLW), ISTRUC(LLABV), RWORK) C C Store internal boundary values in list DO 10 IC = 1, NPDE DO 10 LB = 1, NIBPTS I = ISTRUC(LLBNDP+NBDPTS-1+LB) + (IC-1)*NPTS IB = LB + (IC-1)*NIBPTS UIB(IB) = U(I) 10 CONTINUE C Ccc Get initial solution C Copy embedded coarse grid initial solution CALL INJCF (NPDE, UIC, U, IWORK, + ISTRCC(LLROWC), ISTRCC(LIROWC), ISTRCC(LICOLC), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) C IF (LEVO) THEN C C Copy solution of grid with same level but on previous time level LLROWO = 0 NROWSO = ISTRFO(LLROWO) NPTSO = ISTRFO(LLROWO+NROWSO+1)-1 LIROWO = LLROWO+NROWSO+2 LICOLO = LIROWO+NROWSO CALL INJON (NPDE, UO, U, IWORK, + ISTRFO(LLROWO), ISTRFO(LIROWO), ISTRFO(LICOLO), + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL)) C ENDIF C C Calculate all uninitialized values by interpolation CALL INTPOL (NPDE, U, IWORK, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRUC(LLBLW), ISTRUC(LLABV), RWORK) C RETURN END SUBROUTINE INJCFB (NPDE, UC, U, IPDOM, + LROWC, IROWC, ICOLC, LROW, IROW, ICOL, LLBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROWC(0:*), IROWC(*), ICOLC(*), + LROW(0:*), IROW(*), ICOL(*), LLBND(0:*), LBND(*) REAL UC(0:*), U(0:*) C Ccc PURPOSE: C Inject solution from coarse grid into (embedded) fine grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UC : IN. Solution at coarse grid C U : OUT. Solution at coarse gridpoints at internal boundary of C refined grid C IPDOM : OUT. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROWC : IN. -I C IROWC : IN. I Data structure of the coarse grid C ICOLC : IN. -I see description for fine grid below C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C LBND : OUT. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IB, IC, IPC, IPT, IRC, IR, + NBNDS, NPTSC, NPTS, NROWSC, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NBNDS = LLBND(0) NROWSC = LROWC(0) NPTSC = LROWC(NROWSC+1)-1 C Ccc Initialize interpolation flags DO 10 IPT = 1, NPTS IPDOM(IPT) = 0 10 CONTINUE DO 15 IB = LLBND(NBNDS+1), LLBND(NBNDS+2)-1 IPT = LBND(IB) IPDOM(IPT) = -1 15 CONTINUE C Ccc Inject values from coarse level into fine grid solution CDIR$ NOVECTOR IRC = 0 DO 20 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 20 IRC = IRC + 1 30 IF (2*IROWC(IRC) .NE. IROW(IR)) THEN IRC = IRC + 1 GOTO 30 ENDIF IPC = LROWC(IRC)-1 DO 40 IPT = LROW(IR), LROW(IR+1)-1 IF (ICOL(IPT)/2*2 .NE. ICOL(IPT)) GOTO 40 IPC = IPC + 1 50 IF (2*ICOLC(IPC) .NE. ICOL(IPT)) THEN IPC = IPC + 1 GOTO 50 ENDIF DO 60 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = UC(IPC+(IC-1)*NPTSC) 60 CONTINUE IPDOM(IPT) = 0 40 CONTINUE 20 CONTINUE RETURN END SUBROUTINE INJCF (NPDE, UC, U, IPDOM, + LROWC, IROWC, ICOLC, LROW, IROW, ICOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROWC(0:*), IROWC(*), ICOLC(*), + LROW(0:*), IROW(*), ICOL(*) REAL UC(0:*), U(0:*) C Ccc PURPOSE: C Inject solution from coarse grid into (embedded) fine grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UC : IN. Solution at coarse grid C U : OUT. Solution at coarse gridpoints in refined grid C IPDOM : OUT. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROWC : IN. -I C IROWC : IN. I Data structure of the coarse grid C ICOLC : IN. -I see description for fine grid below C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPC, IPT, IRC, IR, NPTSC, NPTS, NROWSC, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NROWSC = LROWC(0) NPTSC = LROWC(NROWSC+1)-1 C Ccc Initialize interpolation flags DO 10 IPT = 1, NPTS IPDOM(IPT) = -1 10 CONTINUE C Ccc Inject values from coarse level into fine grid solution CDIR$ NOVECTOR IRC = 0 DO 20 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 20 IRC = IRC + 1 30 IF (2*IROWC(IRC) .NE. IROW(IR)) THEN IRC = IRC + 1 GOTO 30 ENDIF IPC = LROWC(IRC)-1 DO 40 IPT = LROW(IR), LROW(IR+1)-1 IF (ICOL(IPT)/2*2 .NE. ICOL(IPT)) GOTO 40 IPC = IPC + 1 50 IF (2*ICOLC(IPC) .NE. ICOL(IPT)) THEN IPC = IPC + 1 GOTO 50 ENDIF DO 60 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = UC(IPC+(IC-1)*NPTSC) 60 CONTINUE IPDOM(IPT) = 0 40 CONTINUE 20 CONTINUE RETURN END SUBROUTINE INJON (NPDE, UO, U, IPDOM, + LROWO, IROWO, ICOLO, LROW, IROW, ICOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROWO(0:*), IROWO(*), ICOLO(*), + LROW(0:*), IROW(*), ICOL(*) REAL UO(0:*), U(0:*) C Ccc PURPOSE: C Inject solution from previous time at grid from same level into C solution at current time grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C UO : IN. Solution at previous time C U : INOUT. Solution at corresponding gridpoints injected from UO C IPDOM : INOUT. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROWO : IN. -I C IROWO : IN. I Data structure of the old-time grid C ICOLO : IN. -I see description for current time grid below C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER IC, IPO, IPT, IRO, IR, NPTSO, NPTS, NROWSO, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NROWSO = LROWO(0) NPTSO = LROWO(NROWSO+1)-1 C Ccc Inject values from old time level into current-time solution IRO = 1 DO 10 IR = 1, NROWS 20 IF (IROWO(IRO) .LT. IROW(IR)) THEN IRO = IRO + 1 IF (IRO .LE. NROWSO) GOTO 20 RETURN ELSE IF (IROWO(IRO) .GT. IROW(IR)) THEN GOTO 10 ENDIF IPO = LROWO(IRO) DO 30 IPT = LROW(IR), LROW(IR+1)-1 40 IF (ICOLO(IPO) .LT. ICOL(IPT)) THEN IPO = IPO + 1 IF (IPO .LE. LROWO(IRO+1)-1) GOTO 40 GOTO 10 ELSE IF (ICOLO(IPO) .GT. ICOL(IPT)) THEN GOTO 30 ENDIF DO 50 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = UO(IPO+(IC-1)*NPTSO) 50 CONTINUE IPDOM(IPT) = 0 30 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PUTSOL (NPDE, U, ISTRUC, UC, ISTRCC, UI, LENUC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, ISTRUC(0:*), ISTRCC(0:*), LENUC REAL U(0:*), UC(0:*), UI(0:*) C Ccc PURPOSE: C Copy coarse grid solution UC to UI and inject fine grid solution U C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C U : IN. Solution at fine grid C ISTRUC : IN. Datastructure of the fine grid C UC : IN. Solution at coarse grid C ISTRCC : IN. Datastructure of the coarse grid C UI : OUT.Injected solution at coarse grid C LENUC : OUT.Dimension of coarse grid solution array C Ccc EXTERNALS USED: EXTERNAL INJFC, RCOPY C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, + LLROWC, NROWSC, NPTSC, LIROWC, LICOLC C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLROWC = 0 NROWSC = ISTRCC(LLROWC) NPTSC = ISTRCC(LLROWC+NROWSC+1)-1 LIROWC = LLROWC+NROWSC+2 LICOLC = LIROWC+NROWSC LENUC = NPTSC*NPDE + 1 C C Copy coarse grid solution to UI CALL RCOPY (LENUC, UC, UI) C C Inject fine grid solution into UI CALL INJFC (NPDE, U, UI, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + ISTRCC(LLROWC), ISTRCC(LIROWC), ISTRCC(LICOLC)) RETURN END SUBROUTINE INJFC (NPDE, U, UC, + LROW, IROW, ICOL, LROWC, IROWC, ICOLC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, LROW(0:*), IROW(*), ICOL(*), + LROWC(0:*), IROWC(*), ICOLC(*) REAL U(0:*), UC(0:*) C Ccc PURPOSE: C Inject solution from (embedded) fine grid into coarser grid C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C U : IN. Fine grid solution C UC : INOUT. C IN: Coarse grid solution C OUT: Injected solution at coarse grid C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LROWC : IN. -I C IROWC : IN. I Data structure of the coarse grid C ICOLC : IN. -I for description see fine grid above C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER IC, IPC, IPT, IRC, IR, NPTSC, NPTS, NROWSC, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NROWSC = LROWC(0) NPTSC = LROWC(NROWSC+1)-1 C Ccc Inject values from fine level into coarse grid solution IRC = 0 DO 10 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 10 IRC = IRC + 1 20 IF (2*IROWC(IRC) .NE. IROW(IR)) THEN IRC = IRC + 1 GOTO 20 ENDIF IPC = LROWC(IRC)-1 DO 30 IPT = LROW(IR), LROW(IR+1)-1 IF (ICOL(IPT)/2*2 .NE. ICOL(IPT)) GOTO 30 IPC = IPC + 1 40 IF (2*ICOLC(IPC) .NE. ICOL(IPT)) THEN IPC = IPC + 1 GOTO 40 ENDIF DO 50 IC = 1, NPDE UC(IPC+(IC-1)*NPTSC) = U(IPT+(IC-1)*NPTS) 50 CONTINUE 30 CONTINUE 10 CONTINUE C RETURN END SUBROUTINE INTPOL (NPDE, U, IPDOM, + LROW, IROW, ICOL, LBELOW, LABOVE, WORK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPDE, IPDOM(*), + LROW(0:*), IROW(*), ICOL(*), LBELOW(*), LABOVE(*) REAL U(0:*), WORK(*) C Ccc PURPOSE: C Interpolate where necessary solution C Ccc PARAMETER DESCRIPTION: C NPDE : IN. # PDE components C U : INOUT. C IN: Solution values at injected points C OUT: Interpolated solution values at other points C IPDOM : IN. Domain flags wrt to interpolation C 0: Injected point C -1: Otherwise C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LBELOW : IN. (NPTS) C LBELOW(IPT): pointer to node below in actual grid C 0, if indexed node is lower boundary point C LABOVE : IN. (NPTS) C LABOVE(IPT): pointer to node above in actual grid C 0, if indexed node is upper boundary point C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C CDIR$ NOVECTOR C INTEGER IC, IPT, IR, NPTS, NROWS C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 C Ccc Interpolation in X-direction DO 10 IR = 1, NROWS IF (IROW(IR)/2*2 .NE. IROW(IR)) GOTO 10 DO 20 IPT = LROW(IR)+1, LROW(IR+1)-2 IF (IPDOM(IPT) .NE. 0) THEN DO 30 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = + (U(IPT-1+(IC-1)*NPTS) + U(IPT+1+(IC-1)*NPTS))/2 30 CONTINUE ENDIF 20 CONTINUE 10 CONTINUE C Ccc Interpolation in Y-direction DO 50 IR = 2, NROWS-1 IF (IROW(IR)/2*2 .EQ. IROW(IR)) GOTO 50 DO 60 IPT = LROW(IR), LROW(IR+1)-1 IF (IPDOM(IPT) .NE. 0) THEN DO 70 IC = 1, NPDE U(IPT+(IC-1)*NPTS) = + (U(LBELOW(IPT)+(IC-1)*NPTS) + + U(LABOVE(IPT)+(IC-1)*NPTS))/2 70 CONTINUE ENDIF 60 CONTINUE 50 CONTINUE RETURN END SUBROUTINE RESID (T, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, LLBND, ILBND, LBND, LBELOW, LABOVE, DX, DY, + UT, UX, UY, UXX, UXY, UYY, F) C C----------------------------------------------------------------------- C C PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*), + LBELOW(*), LABOVE(*) REAL T, X(*), Y(*), UNP1(0:*), UN(0:*), UNM1(0:*), DT, DTRAT, + UIB(*), DX, DY, UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + F(*) C C PURPOSE: C Compute time and space derivatives of U and residual F(t,Un+1,Udot) C C PARAMETER DESCRIPTION: C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C UNP1 : IN. Solution at Tn+1 on current grid C UN : IN. Solution at Tn on current grid C UNM1 : IN. Solution at Tn-1 on current grid C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C UIB : IN. Solution at T on internal boundaries C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C UT : OUT. Time derivative of U on current grid C UX : OUT. -I C UY : OUT. I C UXX : OUT. I Space derivatives of U on current grid C UXY : OUT. I C UYY : OUT. -I C F : OUT. Residual C Ccc EXTERNALS USED: EXTERNAL DERIVS, DERIVT, RES C C----------------------------------------------------------------------- C Ccc Compute derivatives CALL DERIVT (NPTS, NPDE, UNP1(1), UN(1), UNM1(1), DT, DTRAT, UT) CALL DERIVS (NPTS, NPDE, UNP1, LLBND, ILBND, LBND, LBELOW, LABOVE, + DX, DY, UX, UY, UXX, UXY, UYY) C Ccc Compute residual CALL RES (T, X, Y, NPTS, NPDE, UNP1(1), LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, F) C RETURN END SUBROUTINE DERIVT (NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, UT) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL UNP1(NPTS,NPDE), UN(NPTS,NPDE), UNM1(NPTS,NPDE), DT, DTRAT, + UT(NPTS,NPDE) C Ccc PURPOSE: C Compute time derivative. If DTRAT = 0 first order results, C if DTRAT = DT/DT_old second order. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points of current grid C NPDE : IN. # PDE components C UNP1 : IN. Solution at Tn+1 on current grid C UN : IN. Solution at Tn on current grid C UNM1 : IN. Solution at Tn-1 on current grid C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C UT : OUT. Time derivative of U on current grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER I, IC REAL A0, A1, A2 A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) A1 = -(1+DTRAT)**2 / ((1+DTRAT)*DT) A2 = DTRAT**2 / ((1+DTRAT)*DT) DO 10 IC = 1, NPDE DO 10 I = 1, NPTS UT(I,IC) = A0*UNP1(I,IC) + A1*UN(I,IC) + A2*UNM1(I,IC) 10 CONTINUE RETURN END SUBROUTINE DERIVS (NPTS, NPDE, U, + LLBND, ILBND, LBND, LBELOW, LABOVE, + DX, DY, UX, UY, UXX, UXY, UYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*), + LBELOW(NPTS), LABOVE(NPTS) REAL U(0:NPTS*NPDE), DX, DY, UX(NPTS*NPDE), UY(NPTS*NPDE), + UXX(NPTS*NPDE), UXY(NPTS*NPDE), UYY(NPTS*NPDE) C Ccc PURPOSE: C Compute space derivatives with second order approximation. Second C order derivatives are required only in the interior of the domain. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points of current grid C NPDE : IN. # PDE components C U : IN. Solution on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C UX : OUT. -I C UY : OUT. I C UXX : OUT. I Space derivatives of U on current grid C UXY : OUT. I C UYY : OUT. -I C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER I, IB, IC, IPT, LB, IM1, IM2, IP1, IP2, I1, I2, I3, I4 REAL FACX, FACY, FACXX, FACXY, FACYY C Ccc Zero derivative arrays in first and last point C (will possibly not be initialized) CDIR$ NEXTSCALAR DO 10 IC = 1, NPDE IPT = 1 I = IPT + (IC-1)*NPTS UX (I) = 0.0 UY (I) = 0.0 UXX(I) = 0.0 UXY(I) = 0.0 UYY(I) = 0.0 IPT = NPTS I = IPT + (IC-1)*NPTS UX (I) = 0.0 UY (I) = 0.0 UXX(I) = 0.0 UXY(I) = 0.0 UYY(I) = 0.0 10 CONTINUE C Ccc Compute derivatives in interior points, boundary values will be C rubbish FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACXY = 1/(2*DX*2*DY) FACYY = 1/DY**2 C DO 20 I = 2, NPTS*NPDE-1 UX (I) = (U(I+1)-U(I-1))*FACX UXX(I) = (U(I+1)-2*U(I)+U(I-1))*FACXX 20 CONTINUE C DO 30 IC = 1, NPDE DO 30 IPT = 2, NPTS-1 IM1 = LBELOW(IPT) + (IC-1)*NPTS I = IPT + (IC-1)*NPTS IP1 = LABOVE(IPT) + (IC-1)*NPTS UY (I) = (U(IP1)-U(IM1))*FACY UYY(I) = (U(IP1)-2*U(I)+U(IM1))*FACYY C I1 = LABOVE(IPT-1) + (IC-1)*NPTS I2 = LABOVE(IPT+1) + (IC-1)*NPTS I3 = LBELOW(IPT-1) + (IC-1)*NPTS I4 = LBELOW(IPT+1) + (IC-1)*NPTS UXY(I) = (U(I2)-U(I1)-U(I4)+U(I3))*FACXY 30 CONTINUE C Ccc Correct physical boundaries DO 40 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correct Uy DO 50 IC = 1, NPDE DO 50 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS UY(I) = (-3*U(I)+4*U(IP1)-U(IP2))*FACY 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correct Ux DO 60 IC = 1, NPDE DO 60 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (-3*U(I)+4*U(I+1)-U(I+2))*FACX 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correct Uy DO 70 IC = 1, NPDE DO 70 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS UY(I) = (+3*U(I)-4*U(IM1)+U(IM2))*FACY 70 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correct Ux DO 80 IC = 1, NPDE DO 80 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (+3*U(I)-4*U(I-1)+U(I-2))*FACX 80 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft or leftlower corner, correct Ux and Uy DO 100 IC = 1, NPDE DO 100 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (-3*U(I)+4*U(I+1)-U(I+2))*FACX IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS UY(I) = (-3*U(I)+4*U(IP1)-U(IP2))*FACY 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper or upperleft corner, correct Ux and Uy DO 110 IC = 1, NPDE DO 110 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (-3*U(I)+4*U(I+1)-U(I+2))*FACX IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS UY(I) = (3*U(I)-4*U(IM1)+U(IM2))*FACY 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright or rightupper corner, correct Ux and Uy DO 120 IC = 1, NPDE DO 120 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (+3*U(I)-4*U(I-1)+U(I-2))*FACX IM1 = LBELOW(IPT) IM2 = LBELOW(IM1) + (IC-1)*NPTS IM1 = IM1 + (IC-1)*NPTS UY(I) = (+3*U(I)-4*U(IM1)+U(IM2))*FACY 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower or lowerright corner, correct Ux and Uy DO 130 IC = 1, NPDE DO 130 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) I = IPT + (IC-1)*NPTS UX(I) = (+3*U(I)-4*U(I-1)+U(I-2))*FACX IP1 = LABOVE(IPT) IP2 = LABOVE(IP1) + (IC-1)*NPTS IP1 = IP1 + (IC-1)*NPTS UY(I) = (-3*U(I)+4*U(IP1)-U(IP2))*FACY 130 CONTINUE ENDIF 40 CONTINUE C RETURN END SUBROUTINE RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, F) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL T, X(*), Y(*), U(NPTS*NPDE), UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), F(NPTS*NPDE) C Ccc PURPOSE: C Compute residual F(t,U,Ut) C C PARAMETER DESCRIPTION: C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C F : OUT. Residual C Ccc EXTERNALS USED: EXTERNAL PDEBC, PDEF C C----------------------------------------------------------------------- C INTEGER I, IB, IC, LB, NBNDS, NIBPTS, IBS, IBE C Ccc Get residual on internal domain CALL PDEF (T, X, Y, U, UT, UX, UY, UXX, UXY, UYY, F, NPTS, NPDE) C Ccc Correct residual on physical boundaries CALL PDEBC (T, X, Y, U, UT, UX, UY, F, NPTS, NPDE, + LLBND, ILBND, LBND) C Ccc Correct residual on internal boundaries NBNDS = LLBND(0) IBS = LLBND(NBNDS+1) IBE = LLBND(NBNDS+2)-1 NIBPTS = IBE-IBS+1 DO 10 IC = 1, NPDE DO 10 LB = IBS, IBE I = LBND(LB) + (IC-1)*NPTS IB = LB-IBS+1 + (IC-1)*NIBPTS F(I) = U(I) - UIB(IB) 10 CONTINUE RETURN END LOGICAL FUNCTION CHKTIM (RWK, LU, LUO, NPDE, IWK, LSG, + TIMWGT, RELTOL, ABSTOL, WORK, DT, DTNEW, TIMON) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LU, LUO, NPDE, IWK(*), LSG(0:*) REAL RWK(*), TIMWGT(NPDE), RELTOL(NPDE), ABSTOL(NPDE), + WORK(*), DT, DTNEW, TIMON C Ccc PURPOSE: C Check if time step was OK. If so, CHKTIM = .TRUE. and DTNEW is set C to the stepsize for the next time step. If not CHKTIM = .FALSE. and C DTNEW is the stepsize for the next try. C Ccc PARAMETER DESCRIPTION: C RWK : IN. Work array containing both U and U_old on all grids of C this time level C LU : IN. Pointer after last element of U on base grid C LUO : IN. Pointer to first element of U_old on base grid C NPDE : IN. Number of PDE components C IWK : IN. Work array containing the datastructures for the C different grids on this level C LSG : IN. (0:LSG(0)) C LSG(0): # grid levels for this time step C LSG(I): pointer in IWK to datastructure for grid of level I C TIMWGT : IN. User defined time weight for each PDE component C used in check if time stepsize can be accepted C RELTOL : IN. (NPDE) C Relative time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C ABSTOL : IN. (NPDE) C Absolute time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C WORK : WORK. (max. # grid points on a level) C DT : IN. Current time stepsize C DTNEW : OUT. Stepsize for, new or retry of, timestep C Ccc EXTERNALS USED: REAL TIMMON EXTERNAL TIMMON C C----------------------------------------------------------------------- C INTEGER LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LENU REAL TIMONL C TIMON = 0.0 DO 10 LEVEL = 1, LSG(0) LLROW = LSG(LEVEL) NROWS = IWK(LLROW) NPTS = IWK(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = IWK(LLLBND) NBDPTS = IWK(LLLBND+NBNDS+1)-1 NBIPTS = IWK(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LENU = NPTS*NPDE+1 LU = LU - LENU C Compute time monitor for this grid level TIMONL = TIMMON (RWK(LU+1), RWK(LUO+1), NPTS, NPDE, + IWK(LLBNDP), NBIPTS, TIMWGT, RELTOL, ABSTOL, WORK) LUO = LUO + LENU*2 C Compute maximum of monitor values for all levels TIMON = MAX(TIMON,TIMONL) 10 CONTINUE C Ccc Compute new stepsize and check if current step can be accepted C Compute new stepsize such that prediction of next time monitor is 0.5 IF (TIMON .GT. 1.0) THEN C Reject step CHKTIM = .FALSE. DTNEW = 0.5 / TIMON * DT C restrict time step variance DTNEW = MAX(DTNEW, DT/4) ELSE C Accept step CHKTIM = .TRUE. C restrict time step variance DTNEW = 2*DT IF (TIMON .GT. 0.25) DTNEW = 0.5 / TIMON * DT ENDIF RETURN END REAL FUNCTION TIMMON (U, UO, NPTS, NPDE, LBND, NBIPTS, TIMWGT, + RELTOL, ABSTOL, DTUT) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NBIPTS INTEGER NPTS, NPDE, LBND(NBIPTS) REAL U(NPTS,NPDE), UO(NPTS,NPDE), TIMWGT(NPDE), + RELTOL(NPDE), ABSTOL(NPDE), DTUT(NPTS) C Ccc PURPOSE: C Compute time monitor for a specific grid level. C C Time monitor: C TIMMON = C sqrt{ sum TIMWGT(ic)/N sum [dt.Ut(ipt,ic) / w(ipt,ic)] ** 2 } C (ic=1,NPDE) (ipt=1,NPTS) C with N = NPTS*NPDE and w(ipt,ic) = ABSTOL(ic) + RELTOL(ic).|U(ipt,ic)| C On the boundaries Ut is set to zero. C Ccc PARAMETER DESCRIPTION: C U : IN. Array of solution values at Tn+1 on current grid C UO : IN. Array of solution values at Tn on current grid C NPTS : IN. # grid points C NPDE : IN. # PDE components C LBND : IN. Array containing pointers to boundary points in the grid C NBIPTS : IN. Total # boundary points C TIMWGT : IN. User defined time weight for each PDE component C used in check if time stepsize can be accepted C RELTOL : IN. (NPDE) C Relative time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C ABSTOL : IN. (NPDE) C Absolute time tolerance used to determine if time stepsize C can be accepted and to determine the new step size C DTUT : WORK. (NPTS) C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPT, LB, N REAL TMIC, W2 C N = NPTS*NPDE C TIMMON = 0.0 DO 10 IC = 1, NPDE IF (TIMWGT(IC) .EQ. 0.0) GOTO 10 DO 20 IPT = 1, NPTS DTUT(IPT) = U(IPT,IC)-UO(IPT,IC) 20 CONTINUE DO 30 LB = 1, NBIPTS IPT = LBND(LB) DTUT(IPT) = 0.0 30 CONTINUE TMIC = 0.0 DO 40 IPT = 1, NPTS W2 = ABSTOL(IC) + RELTOL(IC)*ABS(U(IPT,IC)) TMIC = TMIC + (DTUT(IPT) / W2) ** 2 40 CONTINUE TIMMON = TIMMON + TIMWGT(IC)*TMIC/N 10 CONTINUE TIMMON = SQRT(TIMMON) RETURN END SUBROUTINE INTGRB (ISTRUC, X, Y, NPDE, UIB, UNP1, UN, UNM1, + RELTOL, ABSTOL, TN, DT, DTRAT, DX, DY, WT, F, CORR, RWORK, + IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ISTRUC(0:*), NPDE, IERR REAL X(*), Y(*), UIB(*), UNP1(0:*), UN(0:*), UNM1(0:*), + RELTOL(NPDE), ABSTOL(NPDE), + TN, DT, DTRAT, DX, DY, + WT(*), F(*), CORR(*), RWORK(*) C Ccc PURPOSE: C Integration in time with BDF2 (first timestep BE). C Solve nonlinear system F(Tn+1, Un+1, Udot) = 0 with modified Newton. C Solve linear systems with ILU-preconditioned BiCGStab. C Ccc PARAMETER DESCRIPTION: C ISTRUC : IN. Data structure Un+1 grid. C X,Y : IN. Physical coordinates grid. C NPDE : IN. # PDE components C UIB : IN. Dirichlet boundary values on internal boundary. C UNP1 : INOUT. On entry: Initial solution, on exit final solution C Newton converged C UN : IN. Solution at Tn on Un+1 grid C UNM1 : IN. Solution at Tn-1 on Un+1 grid C RELTOL : IN. Relative tolerance for Newton process C ABSTOL : IN. Absolute tolerance for Newton process C TN : IN. Previous time C DT : IN. Current time step C DX : IN. Current grid spacing in X-direction C DY : IN. Current grid spacing in Y-direction C DTRAT : IN. If BE: 0, if BDF2: DT/DT_old C WT : WORK. (NPTS*NPDE) C Weight function for norm computation C F : WORK. (NPTS*NPDE) C Residual C CORR : WORK. (NPTS*NPDE) C Correction in Newton iteration C RWORK : WORK. (JACILU+max(RESWRK,LSSWRK)) C JACILU: 2.9.NPDE.LENU C RESWRK: LENU.6 C LSSWRK: LENU.5 C LENU : NPTS*NPDE C IERR : OUT. C 0: OK. C 10: Newton process did not converge C C Ccc EXTERNALS USED: REAL MAXNRM, WSNRM2 EXTERNAL ERRWGT, BICGST, JAC, JACPB, MAXNRM, RESID, WSNRM2 C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARBICGSTAB' C C PARBICGSTAB C C Parameters for linear system solver BiCGStab C MAXLIT : Max. number of BiCGStab iterations C TOLLSB : Tolerance for linear system solver INTEGER MAXLIT REAL TOLLSB PARAMETER (MAXLIT = 100, TOLLSB = TOLNEW/10) C C end INCLUDE 'PARBICGSTAB' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + LLLDG, LLUDG, LLSLP, LLLSL, LLSUP, LLLSU, + LENU, LENGLU, LUT, LUX, LUY, LUXX, LUXY, LUYY, + LBCG1, LBCG2, LBCG3, LBCG4, LBCG5, LG, LGLU, LJACWK, + NJAC, NRES, I, NIT, ITER LOGICAL NEWJAC REAL ERR, CORNRM, OLDNRM, RATE, TOL, UNRM C IERR = 0 C IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Nonlinear system solver at T ='',E16.7)') + TN+DT ENDIF C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C LLLDG = LLABV+NPTS LLUDG = LLLDG+NPTS*3 LLSLP = LLUDG+NPTS*3 LLLSL = LLSLP+NPTS LLSUP = LLLSL+ISTRUC(LLLSL)+1 LLLSU = LLSUP+NPTS C LENU = NPTS*NPDE LENGLU = LENU*NPDE*9 C LUT = 1 LUX = LUT + LENU LUY = LUX + LENU LUXX = LUY + LENU LUXY = LUXX + LENU LUYY = LUXY + LENU C LBCG1 = LUX LBCG2 = LBCG1 + LENU LBCG3 = LBCG2 + LENU LBCG4 = LBCG3 + LENU LBCG5 = LBCG4 + LENU C LG = MAX (LUYY+LENU, LBCG5+LENU) LGLU = LG+LENGLU LJACWK = LGLU C Ccc Set error weights for use in Newton process CALL ERRWGT (NPTS, NPDE, UNP1(1), RELTOL, ABSTOL, WT) C Ccc Compute weighted norm of initial solution for convergence check UNRM = WSNRM2 (LENU, UNP1(1), WT) C Ccc Compute derivatives and residual CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = 1 IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WSNRM2 (LENU, F, WT) ENDIF C Ccc Compute Jacobian G = dF/dU and its incomplete factorization GLU CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, DX, DY, + UNP1(1), ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LJACWK), RWORK(LG)) C Copy Jacobian for factorization CALL RCOPY (LENGLU, RWORK(LG), RWORK(LGLU)) C Compute ILU CALL JACPB (NPTS, NPDE, RWORK(LGLU), ISTRUC(LLLDG), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLSLP), ISTRUC(LLLSL)) NEWJAC = .TRUE. NJAC = 1 C Ccc Newton iteration loop 9 CONTINUE DO 10 NIT = 1, MAXNIT C Cccccc Solve G.corr = F. Store the residual in F. TOL = TOLLSB / (2**NIT) CALL BICGST (NPTS, NPDE, RWORK(LG), CORR, F, WT, TOL, + MAXLIT, RWORK(LGLU), ISTRUC(LLLDG), ISTRUC(LLUDG), + ISTRUC(LLSLP), ISTRUC(LLLSL), ISTRUC(LLSUP), ISTRUC(LLLSU), + LUNLSS, RWORK(LBCG1), RWORK(LBCG2), RWORK(LBCG3), + RWORK(LBCG4), RWORK(LBCG5), ITER, ERR, IERR) NLSIT(LEVEL,NIT) = NLSIT(LEVEL,NIT)+ ITER IF (IERR .NE. 0) GOTO 100 C Cccccc Test for convergence CORNRM = WSNRM2 (LENU, CORR, WT) IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' NI:'',I3,'', NLI:'',I4,'', ERLI'':,E16.7, + '', ERNI:'',E16.7)') NIT, ITER, ERR, CORNRM ENDIF IF (CORNRM .LE. 100*UROUND*UNRM) GOTO 900 IF (.NOT. NEWJAC) THEN RATE = SQRT(CORNRM/OLDNRM) IF (RATE .GT. 0.9) THEN C Divergence GOTO 100 ELSE IF (RATE/(1-RATE)*CORNRM .LE. TOLNEW) THEN C Convergence GOTO 900 ENDIF ENDIF OLDNRM = CORNRM C Ccccc Update solution DO 20 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 20 CONTINUE C Ccc Compute derivatives and residual and start next iteration CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = NRES+1 NEWJAC = .FALSE. IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WSNRM2 (LENU, F, WT) ENDIF 10 CONTINUE Ccc End Newton iteration loop C Ccc No convergence in max. # iterations C Ccccc Check if Jacobian is recent 100 CONTINUE IF (.NOT. NEWJAC .AND. NJAC .LT. MAXJAC) THEN IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' New Jacobian, NIT='',I4)') NIT ENDIF C Compute new Jacobian and retry CALL DERIVS (NPTS, NPDE, UNP1, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, + DX, DY, UNP1(1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LJACWK), RWORK(LG)) C Copy Jacobian for factorization CALL RCOPY (LENGLU, RWORK(LG), RWORK(LGLU)) C Compute ILU CALL JACPB (NPTS, NPDE, RWORK(LGLU), ISTRUC(LLLDG), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLSLP), ISTRUC(LLLSL)) C NEWJAC = .TRUE. NJAC = NJAC + 1 GOTO 9 ELSE C Newton failure IERR = 10 NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Newton failure, NIT='',I4)') NIT ENDIF RETURN ENDIF C Ccc Nonlinear proces has been solved 900 CONTINUE C Update solution DO 30 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 30 CONTINUE C NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC C RETURN END SUBROUTINE JAC (NPTS, NPDE, F, T, X, Y, DT, DTRAT, + DX, DY, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, ABSTOL, WORK, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL F(*), T, X(*), Y(*), DT, DTRAT, DX, DY, U(*), UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), WORK(*), G(*) C Ccc PURPOSE: C Compute Jacobian G = dF/dU and store in block 9-diagonal mode. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C U : IN. Solution at T on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C WORK : WORK. (6*LENFU+2*LENU+NPTS) C G : OUT. Jacobian stored in block 9-diagonal mode C Ccc EXTERNALS USED: EXTERNAL DERIVF, JACG C C----------------------------------------------------------------------- C INTEGER LENU, LENFU, LFU, LFUX, LFUY, LFUXX, LFUXY, LFUYY, + LDEL, LRWK REAL A0 C LENU = NPTS*NPDE LENFU = LENU*NPDE C LFU = 1 LFUX = LFU + LENFU LFUY = LFUX + LENFU LFUXX = LFUY + LENFU LFUXY = LFUXX + LENFU LFUYY = LFUXY + LENFU LDEL = LFUYY + LENFU LRWK = LDEL + NPTS C Ccc Compute dF/dU, dF/dUt, dF/dUx, dF/dUy, dF/dUxx, dF/dUxy, dF/dUyy A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) CALL DERIVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, WORK(LDEL), WORK(LRWK), + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUXY), WORK(LFUYY)) C Ccc Compute G = dF/dU + dF/dUx.dUx/dU + ... CALL JACG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUXY), WORK(LFUYY), G) C RETURN END SUBROUTINE PRTRBU (ICPTB, NPTS, NPDE, U, A0, DT, UT, TOL, DEL, + UBAR, UTBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ICPTB, NPTS, NPDE REAL U(NPTS,NPDE), A0, DT, UT(NPTS,NPDE), TOL, DEL(NPTS), + UBAR(NPTS,NPDE), UTBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb the ICPTB-th component of U. Return perturbance in DEL and C perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C ICPTB : IN. Component of U to be perturbed C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C TOL : IN. Threshold for perturbation C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IPT REAL DELI, EPS CALL RCOPY (NPTS*NPDE, U, UBAR) CALL RCOPY (NPTS*NPDE, UT, UTBAR) EPS = SQRT(UROUND) DO 10 IPT = 1, NPTS C Compute perturbance, if U=0, U(T+dt)=dtUt, if both are zero take C threshold DELI = EPS*MAX(ABS(U(IPT,ICPTB)),ABS(DT*UT(IPT,ICPTB)),TOL) DELI = SIGN(DELI,DT*UT(IPT,ICPTB)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT) = (U(IPT,ICPTB)+DELI)-U(IPT,ICPTB) UBAR(IPT,ICPTB) = U(IPT,ICPTB) + DEL(IPT) UTBAR(IPT,ICPTB) = UT(IPT,ICPTB) + A0*DEL(IPT) 10 CONTINUE RETURN END SUBROUTINE PERTRB (ICPTB, NPTS, NPDE, U, TOL, DEL, UBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ICPTB, NPTS, NPDE REAL U(NPTS,NPDE), TOL, DEL(NPTS), UBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb the ICPTB-th component of U. Return perturbance in DEL and C perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C ICPTB : IN. Component of U to be perturbed C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C TOL : IN. Threshold for perturbation C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IPT REAL DELI, EPS CALL RCOPY (NPTS*NPDE, U, UBAR) EPS = SQRT(UROUND) DO 10 IPT = 1, NPTS C Compute perturbance DELI = EPS*MAX(ABS(U(IPT,ICPTB)),TOL) C To ensure that UBAR has the same sign as U DELI = SIGN(DELI,U(IPT,ICPTB)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT) = (U(IPT,ICPTB)+DELI)-U(IPT,ICPTB) UBAR(IPT,ICPTB) = U(IPT,ICPTB) + DEL(IPT) 10 CONTINUE RETURN END SUBROUTINE JACG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + FU, FUX, FUY, FUXX, FUXY, FUYY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL DX, DY, + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE),FUXY(NPTS*NPDE,NPDE),FUYY(NPTS*NPDE,NPDE), + G(NPTS*NPDE,NPDE,-4:4) C Ccc PURPOSE: C Compute Jacobian G = dF/dU using derivatives of residual wrt C (derivatives of) U C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FU : IN. Derivative residual F(.,U,Ut,.) wrt U C FUX : IN. Derivative residual F(.,Ux,.) wrt Ux C FUY : IN. Derivative residual F(.,Uy,.) wrt Uy C FUXX : IN. Derivative residual F(.,Uxx,.) wrt Uxx C FUXY : IN. Derivative residual F(.,Uxy,.) wrt Uxy C FUYY : IN. Derivative residual F(.,Uyy,.) wrt Uyy C G : OUT. Jacobian stored in block 9-diagonal mode C Ccc EXTERNALS USED: EXTERNAL JACGBD C C----------------------------------------------------------------------- C INTEGER I, JC, LENU REAL FACX, FACY, FACXX, FACXY, FACYY C LENU = NPTS*NPDE C FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACXY = 1/(2*DX*2*DY) FACYY = 1/DY**2 C Ccc First internal domain DO 10 JC = 1, NPDE DO 10 I = 1, LENU C dF(ipt,ic)/dU(below(ipt)-1,jc) G(I,JC,-4) = FUXY(I,JC)*(+FACXY) C dF(ipt,ic)/dU(below(ipt),jc) G(I,JC,-3) = + FUY(I,JC)*(-FACY) + FUYY(I,JC)*(+FACYY) C dF(ipt,ic)/dU(below(ipt)+1,jc) G(I,JC,-2) = FUXY(I,JC)*(-FACXY) C dF(ipt,ic)/dU(ipt-1,jc) G(I,JC,-1) = + FUX(I,JC)*(-FACX) + FUXX(I,JC)*(+FACXX) C dF(ipt,ic)/dU(ipt,jc) G(I,JC, 0) = + FU(I,JC) + + FUXX(I,JC)*(-2*FACXX) + FUYY(I,JC)*(-2*FACYY) C dF(ipt,ic)/dU(ipt+1,jc) G(I,JC,+1) = + FUX(I,JC)*(+FACX) + FUXX(I,JC)*(+FACXX) C dF(ipt,ic)/dU(above(ipt)-1,jc) G(I,JC,+2) = FUXY(I,JC)*(-FACXY) C dF(ipt,ic)/dU(above(ipt),jc) G(I,JC,+3) = + FUY(I,JC)*(+FACY) + FUYY(I,JC)*(+FACYY) C dF(ipt,ic)/dU(above(ipt)+1,jc) G(I,JC,+4) = FUXY(I,JC)*(+FACXY) 10 CONTINUE C C Correct boundaries CALL JACGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C RETURN END SUBROUTINE JACGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL FACX, FACY, + FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), + G(NPTS,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Correct Jacobian G = dF/dU for second order approximation of C first order derivatives at boundaries C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C FACX : IN. 1/(2*DX) C FACY : IN. 1/(2*DY) C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FUX : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Ux C FUY : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Uy C G : INOUT. C IN: Jacobian stored in block 9-diagonal mode C OUT: Jacobian corrected for first order derivatives at C boundaries C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, JC, IB, LB C Ccc Boundary corrections, no corrections needed for internal boundaries DO 20 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dUy DO 30 JC = 1, NPDE DO 30 IC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-3) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(-3*FACY) G(IPT,IC,JC,+3) = FUY(IPT,IC,JC)*(+4*FACY) C dF(ipt,ic)/dU(above(above(ipt)),jc) G(IPT,IC,JC,+4) = FUY(IPT,IC,JC)*(-FACY) 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dUx DO 40 JC = 1, NPDE DO 40 IC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-1) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(-3*FACX) G(IPT,IC,JC,+1) = FUX(IPT,IC,JC)*(+4*FACX) C dF(ipt,ic)/dU(ipt+2),jc) G(IPT,IC,JC,+2) = FUX(IPT,IC,JC)*(-FACX) 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dUy DO 50 JC = 1, NPDE DO 50 IC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(below(below(ipt)),jc) G(IPT,IC,JC,-4) = FUY(IPT,IC,JC)*(+FACY) G(IPT,IC,JC,-3) = FUY(IPT,IC,JC)*(-4*FACY) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(+3*FACY) G(IPT,IC,JC,+3) = 0.0 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dUx DO 60 JC = 1, NPDE DO 60 IC = 1, NPDE CDIR$ IVDEP DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(ipt-2),jc) G(IPT,IC,JC,-2) = FUX(IPT,IC,JC)*(+FACX) G(IPT,IC,JC,-1) = FUX(IPT,IC,JC)*(-4*FACX) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(+3*FACX) G(IPT,IC,JC,+1) = 0.0 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dUx and dF/dUy DO 100 JC = 1, NPDE DO 100 IC = 1, NPDE DO 105 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-3) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(-3*FACY) G(IPT,IC,JC,+3) = FUY(IPT,IC,JC)*(+4*FACY) C dF(ipt,ic)/dU(above(above(ipt)),jc) G(IPT,IC,JC,+4) = FUY(IPT,IC,JC)*(-FACY) G(IPT,IC,JC,-1) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(-3*FACX) G(IPT,IC,JC,+1) = FUX(IPT,IC,JC)*(+4*FACX) C dF(ipt,ic)/dU(ipt+2),jc) G(IPT,IC,JC,+2) = FUX(IPT,IC,JC)*(-FACX) 105 CONTINUE 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dUx and dF/dUy DO 110 JC = 1, NPDE DO 110 IC = 1, NPDE DO 115 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC,-1) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(-3*FACX) G(IPT,IC,JC,+1) = FUX(IPT,IC,JC)*(+4*FACX) C dF(ipt,ic)/dU(ipt+2),jc) G(IPT,IC,JC,+2) = FUX(IPT,IC,JC)*(-FACX) C dF(ipt,ic)/dU(below(below(ipt)),jc) G(IPT,IC,JC,-4) = FUY(IPT,IC,JC)*(+FACY) G(IPT,IC,JC,-3) = FUY(IPT,IC,JC)*(-4*FACY) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(+3*FACY) G(IPT,IC,JC,+3) = 0.0 115 CONTINUE 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dUx and dF/dUy DO 120 JC = 1, NPDE DO 120 IC = 1, NPDE DO 125 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(below(below(ipt)),jc) G(IPT,IC,JC,-4) = FUY(IPT,IC,JC)*(+FACY) G(IPT,IC,JC,-3) = FUY(IPT,IC,JC)*(-4*FACY) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(+3*FACY) G(IPT,IC,JC,+3) = 0.0 C dF(ipt,ic)/dU(ipt-2),jc) G(IPT,IC,JC,-2) = FUX(IPT,IC,JC)*(+FACX) G(IPT,IC,JC,-1) = FUX(IPT,IC,JC)*(-4*FACX) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(+3*FACX) G(IPT,IC,JC,+1) = 0.0 125 CONTINUE 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dUx and dF/dUy DO 130 JC = 1, NPDE DO 130 IC = 1, NPDE DO 135 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) C dF(ipt,ic)/dU(ipt-2),jc) G(IPT,IC,JC,-2) = FUX(IPT,IC,JC)*(+FACX) G(IPT,IC,JC,-1) = FUX(IPT,IC,JC)*(-4*FACX) G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUX(IPT,IC,JC)*(+3*FACX) G(IPT,IC,JC,+1) = 0.0 G(IPT,IC,JC,-3) = 0.0 G(IPT,IC,JC, 0) = G(IPT,IC,JC,0) + + FUY(IPT,IC,JC)*(-3*FACY) G(IPT,IC,JC,+3) = FUY(IPT,IC,JC)*(+4*FACY) C dF(ipt,ic)/dU(above(above(ipt)),jc) G(IPT,IC,JC,+4) = FUY(IPT,IC,JC)*(-FACY) 135 CONTINUE 130 CONTINUE ENDIF 20 CONTINUE C RETURN END SUBROUTINE JACSDP (NPTS, LLBND, ILBND, LBND, + LBELOW, LABOVE, LLDG, LUDG) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), ILBND(*), LBND(*), + LBELOW(NPTS), LABOVE(NPTS), LLDG(NPTS,-4:-2), LUDG(NPTS,2:4) C Ccc PURPOSE: C Set pointers to nodes of lower 3 subdiagonals of Jacobian in LLDG and C to nodes of upper 3 superdiagonals in LUDG. All nonexisting diagonals C should point to the main diagonal nodes. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LBELOW : IN. C LBELOW(IPT): pointer to node below in actual grid C 0, if index node is lower boundary point C LABOVE : IN. C LABOVE(IPT): pointer to node above in actual grid C 0, if index node is upper boundary point C LLDG : OUT. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LUDG : OUT. (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LUDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, NBNDS, IB, LB C Ccc First internal domain IPT = 1 LUDG(IPT,+3) = LABOVE(IPT) DO 10 IPT = 2, NPTS-1 LLDG(IPT,-4) = LBELOW(IPT-1) LLDG(IPT,-3) = LBELOW(IPT) LLDG(IPT,-2) = LBELOW(IPT+1) LUDG(IPT,+2) = LABOVE(IPT-1) LUDG(IPT,+3) = LABOVE(IPT) LUDG(IPT,+4) = LABOVE(IPT+1) 10 CONTINUE IPT = NPTS LLDG(IPT,-3) = LBELOW(IPT) C Ccc Correct boundaries NBNDS = LLBND(0) DO 20 IB = 1, NBNDS IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, no subdiagonals, adjust supers C X C . X . C X O X DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT LUDG(IPT,+4) = LABOVE(LABOVE(IPT)) 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, adjust sub and super C X . C O X X C X . DO 40 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LUDG(IPT,+2) = IPT+2 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, no super diagonals, adjust subs C X O X C . X . C X DO 50 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = LBELOW(LBELOW(IPT)) LUDG(IPT,+2) = IPT LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, adjust sub and super C . X C X X O C . X DO 60 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-2) = IPT-2 LUDG(IPT,+4) = IPT 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner C X C X C O X X DO 100 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT LUDG(IPT,+2) = IPT+2 LUDG(IPT,+4) = LABOVE(LABOVE(IPT)) 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner C O X X C X . C X DO 110 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = LBELOW(LBELOW(IPT)) LUDG(IPT,+2) = IPT+2 LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner C X X 0 C X C X DO 120 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = LBELOW(LBELOW(IPT)) LLDG(IPT,-2) = IPT-2 LUDG(IPT,+2) = IPT LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner C X C . X C X X 0 DO 130 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT-2 LUDG(IPT,+4) = LABOVE(LABOVE(IPT)) 130 CONTINUE ENDIF 20 CONTINUE C IB = NBNDS+1 CDIR$ VECTOR C Internal boundary, Dirichlet condition, no off diagonals C . . . C . O . C . . . DO 200 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLDG(IPT,-4) = IPT LLDG(IPT,-3) = IPT LLDG(IPT,-2) = IPT LUDG(IPT,+2) = IPT LUDG(IPT,+3) = IPT LUDG(IPT,+4) = IPT 200 CONTINUE C RETURN END SUBROUTINE JACPB (NPTS, NPDE, GLU, LLDG, + LLBND, ILBND, LBND, LSL, LLSL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(*), + LLBND(0:*), ILBND(*), LBND(*), LSL(*), LLSL(0:*) REAL GLU(*) C Ccc PURPOSE: C Compute ILU factorization of the Jacobian in block 9-diagonal mode. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C GLU : INOUT. C IN: Jacobian stored in block 9-diagonal mode C OUT: ILU factorization of Jacobian stored in block C 9-diagonal mode C LLDG : IN. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LSL : IN. (NPTS) C LSL(ISLPT): pointer to node in actual grid C LLSL : IN. (0:LLSL(0)) C LLSL(0) = # independent data dependency lists in ILU C factorization and forward sweep C LLSL(1:LLSL(0)): pointers to the start of a list in LSL C Ccc EXTERNALS USED: EXTERNAL ILU, JAC9 C C----------------------------------------------------------------------- C Ccc Adapt Jacobian to real block 9-diagonal structure by replacing C second-order boundary discretization by first-order CALL JAC9 (NPTS, NPDE, GLU, LLBND, ILBND, LBND) C Ccc Incomplete LU factorization CALL ILU (NPTS, NPDE, GLU, LLDG, LSL, LLSL) C RETURN END SUBROUTINE JAC9 (NPTS, NPDE, A, LLBND, ILBND, LBND) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL A(NPTS,NPDE,NPDE,-4:4) C Ccc PURPOSE: C Replace second-order boundary discretization by first-order in C Jacobian to get real block 9-diagonal structure C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C A : INOUT. C IN: Jacobian C OUT: Jacobian with second-order boundary discretization C replaced by first-order C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, JC, IB, LB C DO 10 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dy DO 20 IC = 1, NPDE DO 20 JC = 1, NPDE CDIR$ IVDEP DO 25 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,4) A(IPT,IC,JC,4) = 0.0 25 CONTINUE 20 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dx DO 30 IC = 1, NPDE DO 30 JC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,2) A(IPT,IC,JC,2) = 0.0 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dy DO 40 IC = 1, NPDE DO 40 JC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-4) A(IPT,IC,JC,-4) = 0.0 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dx DO 50 IC = 1, NPDE DO 50 JC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-2) A(IPT,IC,JC,-2) = 0.0 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dx and dF/dy DO 60 IC = 1, NPDE DO 60 JC = 1, NPDE DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,4) A(IPT,IC,JC,4) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,2) A(IPT,IC,JC,2) = 0.0 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dx and dF/dy DO 70 IC = 1, NPDE DO 70 JC = 1, NPDE DO 75 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,2) A(IPT,IC,JC,2) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-4) A(IPT,IC,JC,-4) = 0.0 75 CONTINUE 70 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dx and dF/dy DO 80 IC = 1, NPDE DO 80 JC = 1, NPDE DO 85 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-2) A(IPT,IC,JC,-2) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-4) A(IPT,IC,JC,-4) = 0.0 85 CONTINUE 80 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dx and dF/dy DO 90 IC = 1, NPDE DO 90 JC = 1, NPDE DO 95 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,-2) A(IPT,IC,JC,-2) = 0.0 A(IPT,IC,JC,0) = A(IPT,IC,JC,0) + A(IPT,IC,JC,4) A(IPT,IC,JC,4) = 0.0 95 CONTINUE 90 CONTINUE ENDIF 10 CONTINUE C RETURN END SUBROUTINE JACSLP (NPTS, LLBND, ILBND, LBND, LLDG, M, LLS, LS) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), ILBND(*), LBND(*), LLDG(NPTS,-4:-2), + M(NPTS), LLS(0:*), LS(NPTS) C Ccc PURPOSE: C Make data-dependency list for ILU factorization and forward sweep of C backsolve. C C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LLDG : IN. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C M : WORK. (NPTS) C M(IPT) contains list # of node IPT C LLS : OUT. (0:LLS(0)) C LLS(0) = # independent data dependency lists in ILU C factorization and forward sweep C LLS(1:LLS(0)): pointers to the start of a list in LS C LS : OUT. (NPTS) C LS(ISPT): pointer to node in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, NBNDS, IB, LB, IW, ISW, IS, ISE, MAXM, MI C Ccc Determine for each grid point the # of its data dependency list. C LLS(MI) contains # nodes in list MI C M(IPT) contains list # of node IPT C C Initialize LLS and M DO 1 IPT = 1, NPTS LLS(IPT-1) = 0 M(IPT) = 0 1 CONTINUE C C First list contains independent points, i.e., lowerleft corners and C internal boundary points. C For first list the pointers to the nodes in the grid can already be C stored in LS NBNDS = LLBND(0) DO 10 IB = 1, NBNDS IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, node in starting list DO 20 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 20 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, mark node DO 25 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 25 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN CDIR$ VECTOR C Left boundary, mark node DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 30 CONTINUE ENDIF 10 CONTINUE IB = NBNDS+1 C Internal boundary, Dirichlet condition, node in starting list DO 40 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 40 CONTINUE C C C Compute for rest of nodes their list #; a node is dependent from C its neighbors at compass points W, SW, S and SE MAXM = 0 DO 50 IPT = 1, NPTS IF (M(IPT) .GT. 0) THEN C Node already in list GOTO 50 ELSE IF (M(IPT) .LT. 0) THEN C Left boundary IW = IPT M(IPT) = 0 ELSE IW = IPT-1 ENDIF ISW = LLDG(IPT,-4) IS = LLDG(IPT,-3) ISE = LLDG(IPT,-2) MI = MAX(M(IW),M(ISW),M(IS),M(ISE)) + 1 M(IPT) = MI LLS(MI) = LLS(MI) + 1 MAXM = MAX(MAXM,MI) 50 CONTINUE C Ccc Store list pointers in LLS and grid pointers in LS C C LLS(i):=SUM (# nodes in list_j) C j=1,i DO 60 IS = 2, MAXM LLS(IS) = LLS(IS) + LLS(IS-1) 60 CONTINUE C C Store grid pointers C LLS(i-1) is pointer to next free place in list i-1 in LS LLS(0) = LLS(1) DO 70 IPT = 2, NPTS IF (M(IPT) .NE. 1) THEN MI = M(IPT) LLS(MI-1) = LLS(MI-1) + 1 LS(LLS(MI-1)) = IPT ENDIF 70 CONTINUE C LLS(i-1) points to list i in LS, should be i-1 DO 80 IS = MAXM, 1, -1 LLS(IS) = LLS(IS-1) 80 CONTINUE C Ccc Store # lists in LLS(0) LLS(0) = MAXM RETURN END SUBROUTINE JACSUP (NPTS, LLBND, ILBND, LBND, LUDG, M, LLS, LS) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, LLBND(0:*), ILBND(*), LBND(*), LUDG(NPTS,2:4), + M(NPTS), LLS(0:*), LS(NPTS) C Ccc PURPOSE: C Make data-dependency list for backward sweep of backsolve. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C LUDG : IN. (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LLDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C M : WORK. (NPTS) C M(IPT) contains list # of node IPT C LLS : OUT. (0:LLS(0)) C LLS(0) = # independent data dependency lists in C backward sweep C LLS(1:LLS(0)): pointers to the start of a list in LS C LS : OUT. (NPTS) C LS(ISPT): pointer to node in actual grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, NBNDS, IB, LB, IE, INW, IN, INE, IS, MAXM, MI C Ccc Determine for each grid point the # of its data dependency list. C LLS(MI) contains # nodes in list MI C M(IPT) contains list # of node IPT C C Initialize LLS and M DO 1 IPT = 1, NPTS LLS(IPT-1) = 0 M(IPT) = 0 1 CONTINUE C C First list contains independent points, i.e., upperright corners and C internal boundary points. C For first list the pointers to the nodes in the grid can already be C stored in LS NBNDS = LLBND(0) DO 10 IB = 1, NBNDS IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN CDIR$ NOVECTOR C Upperright corner, node in starting list DO 20 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 20 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, mark node DO 25 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 25 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN CDIR$ VECTOR C Right boundary, mark node DO 30 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) M(IPT) = -1 30 CONTINUE ENDIF 10 CONTINUE IB = NBNDS+1 C Internal boundary, Dirichlet condition, node in starting list DO 40 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) LLS(1) = LLS(1)+1 LS(LLS(1)) = IPT M(IPT) = 1 40 CONTINUE C C C Compute for rest of nodes their list #; a node is dependent from C its neighbors at compass points E, NW, N and NE MAXM = 0 DO 50 IPT = NPTS, 1, -1 IF (M(IPT) .GT. 0) THEN C Node already in list GOTO 50 ELSE IF (M(IPT) .LT. 0) THEN C Right boundary IE = IPT M(IPT) = 0 ELSE IE = IPT+1 ENDIF INW = LUDG(IPT,2) IN = LUDG(IPT,3) INE = LUDG(IPT,4) MI = MAX(M(IE),M(INW),M(IN),M(INE)) + 1 M(IPT) = MI LLS(MI) = LLS(MI) + 1 MAXM = MAX(MAXM,MI) 50 CONTINUE C Ccc Store list pointers in LLS and grid pointers in LS C C LLS(i):=SUM (# nodes in list_j) C j=1,i DO 60 IS = 2, MAXM LLS(IS) = LLS(IS) + LLS(IS-1) 60 CONTINUE C C Store grid pointers C LLS(i-1) is pointer to next free place in list i-1 in LS LLS(0) = LLS(1) DO 70 IPT = NPTS-1, 1, -1 IF (M(IPT) .NE. 1) THEN MI = M(IPT) LLS(MI-1) = LLS(MI-1) + 1 LS(LLS(MI-1)) = IPT ENDIF 70 CONTINUE C LLS(i-1) points to list i in LS, should be i-1 DO 80 IS = MAXM, 1, -1 LLS(IS) = LLS(IS-1) 80 CONTINUE C Ccc Store # lists in LLS(0) LLS(0) = MAXM RETURN END SUBROUTINE BICGST (NPTS, NPDE, A, X, B, WT, TOL, ITMAX, + ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + LUN, R, R0, P, T, V, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, ITMAX, + LLDG(*), LUDG(*), LSL(*), LLSL(*), LSU(*), LLSU(*), + LUN, ITER, IERR REAL A(*), X(NPTS*NPDE), B(NPTS*NPDE), WT(NPTS*NPDE), TOL, ALU(*), + R(NPTS*NPDE), R0(NPTS*NPDE), P(NPTS*NPDE), + T(NPTS*NPDE), V(NPTS*NPDE), ERR C Ccc PURPOSE: C Solve a Non-Symmetric linear system Ax = b using the Preconditioned C BiConjugate Gradient STAB method. Preconditioning is done with an C Incomplete LU factorization of A. C Actually solved is the system [P^(-1).G].x = [P^(-1).F] C until ||residual||_WRMS < TOL. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C A : IN. -I C LLDG : IN I These arrays hold the matrix A in block diagonal C LUDG : IN -I storage mode (see description in MVDIAG) C X : OUT. Final approximate solution. C B : IN. Right-hand side vector. C WT : IN. Contains weight factors to compute weighted norm. C TOL : IN. System is considered to be solved if C weighted max. norm < TOL C ITMAX : IN. Maximum number of iterations. C ALU : IN. -I C LSL : IN I These arrays should hold the ILU factorization of A in C LLSL : IN I diagonal storage mode and the data dependency lists C LSU : IN I for the forward and the backward solve C LLSU : IN. -I (see description in BCKSLV) C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C R : WORK. (NPTS*NPDE) C R0 : WORK. (NPTS*NPDE) C P : WORK. (NPTS*NPDE) C T : WORK. (NPTS*NPDE) C V : WORK. (NPTS*NPDE) C ITER : OUT. Number of iterations required to reach convergence, or C ITMAX+1 if convergence criterion could not be achieved in C ITMAX iterations. C ERR : OUT. Weighted max. norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in ITMAX steps C 2: Breakdown of the method detected ( ~ 0.0) C Ccc EXTERNALS USED: REAL WSNRM2, SDOT EXTERNAL MVDIAG, BCKSLV, RCOPY, WSNRM2, SDOT, SAXPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, N REAL ALPHA, BETA, OMEGA, RHOIM1, RHOI, SXMIN, TNRM2 C N = NPTS*NPDE ITER = 0 IERR = 0 SXMIN = SQRT(XMIN) C Ccc Initialize X and set initial residual to B CALL ZERO (N, X) DO 10 I = 1, N R0(I) = B(I) 10 CONTINUE CALL BCKSLV (NPTS, NPDE, ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + R0) C Ccc Check stopping criterion ERR = WSNRM2 (N, R0, WT) IF (LUN .NE. 0) THEN WRITE(LUN,'(''ILU preconditioned BiCGStab for N ='',I6)') N WRITE(LUN,'('' ITER Error Estimate Alpha'', + '' Beta Omega'')') WRITE(LUN,'(I5,E16.7)') ITER, ERR ENDIF IF (ERR .LT. TOL) RETURN C Ccc BiCGStab loop CALL RCOPY (N, R0, R) DO 100 ITER = 1, ITMAX C Compute innerproduct original residual with previous residual RHOI = SDOT(N, R0, 1, R, 1) C Calculate coefficient Beta and direction vector Pi IF( ITER.EQ.1 ) THEN DO 110 I = 1, N BETA = 0.0 P(I) = R(I) 110 CONTINUE ELSE BETA = RHOI/RHOIM1*ALPHA/OMEGA DO 120 I = 1, N P(I) = R(I) + BETA*(P(I)-OMEGA*V(I)) 120 CONTINUE ENDIF C Calculate Vi and coefficient Alfa CALL MVDIAG (NPTS, NPDE, A, P, LLDG, LUDG, V) CALL BCKSLV (NPTS, NPDE, ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + V) ALPHA = RHOI / SDOT(N, R0, 1, V, 1) C Calculate polynomial coefficient Omega_i C store intermediate vector S in R DO 130 I = 1, N R(I) = R(I) - ALPHA*V(I) 130 CONTINUE CALL MVDIAG (NPTS, NPDE, A, R, LLDG, LUDG, T) CALL BCKSLV (NPTS, NPDE, ALU, LLDG, LUDG, LSL, LLSL, LSU, LLSU, + T) TNRM2 = SDOT(N,T,1,T,1) IF (TNRM2 .LT. SXMIN) THEN C Lucky breakdown OMEGA = 0.0 ELSE OMEGA = SDOT(N,T,1,R,1) / TNRM2 ENDIF C Adapt Xi = Xi-1 + Alfa*Pi + Omega_i*S. CALL SAXPY (N, ALPHA, P, 1, X, 1) CALL SAXPY (N, OMEGA, R, 1, X, 1) C Compute residual R = S - Omega_i*T DO 140 I = 1, N R(I) = R(I) - OMEGA*T(I) 140 CONTINUE C C Check stopping criterion. ERR = WSNRM2 (N, R, WT) IF(LUN .NE. 0) + WRITE(LUN,'(I5,4E16.7)') ITER, ERR, ALPHA, BETA, OMEGA IF (ERR .LT. TOL) RETURN C C Check if last residual is not parallel to original residual IF (ABS(RHOI) .LT. SXMIN) GOTO 990 RHOIM1 = RHOI 100 CONTINUE C Ccc end of BiCGStab loop C Ccc Stopping criterion not satisfied ITER = ITMAX + 1 IERR = 1 RETURN C Ccc Breakdown of method detected. 990 IERR = 2 RETURN C END SUBROUTINE MVDIAG (NPTS, NPDE, AD, X, LLDG, LUDG, Y) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(NPTS,-4:-2), LUDG(NPTS,2:4) REAL AD(NPTS,NPDE,NPDE,-4:4), X(NPTS,NPDE), Y(NPTS,NPDE) C Ccc PURPOSE: C Compute y = Ax where A is stored in block 9-diagonal mode. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C AD : IN. A(.,1:NPDE,1:NPDE,-4:-1) : lower block diagonals C A(.,1:NPDE,1:NPDE,0) : main block diagonal C A(.,1:NPDE,1:NPDE, 1: 4) : upper block diagonals C X : IN. Multiplying vector C LLDG : IN. (NPTS,-4:-2) C LLDG(IPT,-4): pointer to node left of node below C or to node below the node below C LLDG(IPT,-3): pointer to node below C LLDG(IPT,-2): pointer to node right of node below C or to node left of the node left C LUDG : IN. (NPTS,2:4) C LUDG(IPT,2): pointer to node left of node above C or to node right of the node right C LUDG(IPT,3): pointer to node above C LUDG(IPT,4): pointer to node right of node above C or to node above the node above C If one of the above nodes does not exist, the pointer is C to the node itself. C Y : OUT. Result vector C Ccc EXTERNALS USED: EXTERNAL ZERO C C ---------------------------------------------------------------------- C INTEGER IC, JC, IPT, JD C CALL ZERO (NPTS*NPDE, Y) C DO 10 JC = 1, NPDE DO 10 IC = 1, NPDE DO 20 IPT = 1, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC, 0)*X(IPT,JC) 20 CONTINUE DO 30 IPT = 1, NPTS-1 Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,+1)*X(IPT+1,JC) 30 CONTINUE DO 40 IPT = 2, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,-1)*X(IPT-1,JC) 40 CONTINUE C C The next loops can be done for all points, because if an entry C in the Jacobian does not exist in reality the value in AD is zero C and the pointer in LUDG or LLDG points to the node itself. DO 60 JD = 2, 4 DO 60 IPT = 1, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,JD)*X(LUDG(IPT,JD),JC) 60 CONTINUE DO 70 JD = -2, -4, -1 DO 70 IPT = 1, NPTS Y(IPT,IC) = Y(IPT,IC) + AD(IPT,IC,JC,JD)*X(LLDG(IPT,JD),JC) 70 CONTINUE 10 CONTINUE RETURN END SUBROUTINE INTGRG (ISTRUC, X, Y, NPDE, UIB, UNP1, UN, UNM1, + RELTOL, ABSTOL, TN, DT, DTRAT, DX, DY, WT, F, CORR, RWORK, + IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ISTRUC(0:*), NPDE, IERR REAL X(*), Y(*), UIB(*), UNP1(0:*), UN(0:*), UNM1(0:*), + RELTOL(NPDE), ABSTOL(NPDE), + TN, DT, DTRAT, DX, DY, + WT(*), F(*), CORR(*), RWORK(*) C Ccc PURPOSE: C Integration in time with BDF2 (first timestep BE). C Solve nonlinear system F(Tn+1, Un+1, Udot) = 0 with modified Newton. C Solve linear systems with (block-)diagonally scaled GCRO. C Ccc PARAMETER DESCRIPTION: C ISTRUC : IN. Data structure Un+1 grid. C X,Y : IN. Physical coordinates grid. C NPDE : IN. # PDE components C UIB : IN. Dirichlet boundary values on internal boundary. C UNP1 : INOUT. On entry: Initial solution, on exit final solution C Newton converged C UN : IN. Solution at Tn on Un+1 grid C UNM1 : IN. Solution at Tn-1 on Un+1 grid C RELTOL : IN. Relative tolerance for Newton process C ABSTOL : IN. Absolute tolerance for Newton process C TN : IN. Previous time C DT : IN. Current time step C DX : IN. Current grid spacing in X-direction C DY : IN. Current grid spacing in Y-direction C DTRAT : IN. If BE: 0, if BDF2: DT/DT_old C WT : WORK. (NPTS*NPDE) C Weight function for norm computation C F : WORK. (NPTS*NPDE) C Residual C CORR : WORK. (NPTS*NPDE) C Correction in Newton iteration C RWORK : WORK. (JAC+RESWRK+LSSWRK) C JAC: 9.NPDE.LENU C RESWRK: LENU.6 C LSSWRK: LENU.(2.MAXLR+MAXL+6)+LENJAC+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C LENJAC: ( IDIAGP <= 1 ! LENU.NPDE ! LENU ) C LENU : NPTS.NPDE C IERR : OUT. C 0: OK. C 10: Newton process did not converge C Ccc EXTERNALS USED: REAL MAXNRM, WSNRM2 EXTERNAL ERRWGT, GGCRO, JAC, JACBD, MAXNRM, RESID, WSNRM2 C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL REAL TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + LLLDG, LLUDG, LENGLU, LG, + LIWK, LENU, LUT, LUX, LUY, LUXX, LUXY, LUYY, + LPREC, LR, LU, LC, LZW, LRWK, + NJAC, NRES, I, NIT, ITER LOGICAL BDPREC, NEWJAC REAL ERR, CORNRM, OLDNRM, RATE, TOL, UNRM C IERR = 0 C BDPREC = IDIAGP .LE. 1 C IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Nonlinear system solver at T ='',E16.7)') + TN+DT ENDIF C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS LIWK = LLABV+NPTS C LLLDG = LIWK LLUDG = LLLDG+NPTS*3 LIWK = LLUDG+NPTS*3 C LENU = NPTS*NPDE LENGLU = LENU*NPDE*9 C LUT = 1 LUX = LUT + LENU LUY = LUX + LENU LUXX = LUY + LENU LUXY = LUXX + LENU LUYY = LUXY + LENU C LG = LUYY+LENU LPREC = LG+LENGLU IF (BDPREC) THEN C Block-diagonal preconditioner LRWK = LPREC + LENU*NPDE ELSE C Diagonal preconditioner LRWK = LPREC + LENU ENDIF C LR = LRWK LU = LR + LENU LC = LU + (LENU*MAXLR) LZW = LC + (LENU*MAXLR) LRWK = LZW+ (MAXLR*MAXLR) C Ccc Set error weights for use in Newton process CALL ERRWGT (NPTS, NPDE, UNP1(1), RELTOL, ABSTOL, WT) C Ccc Compute weighted norm of initial solution for convergence check UNRM = WSNRM2 (LENU, UNP1(1), WT) C Ccc Compute derivatives and residual CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = 1 IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WSNRM2 (LENU, F, WT) ENDIF C Ccc Compute Jacobian G = dF/dU CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, DX, DY, + UNP1(1), ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LPREC), RWORK(LG)) C Ccc Compute preconditioner: (block-)diagonal of Jacobian G = dF/dU. C Store LU-decomposition in PREC, main diagonal inverted. CALL JACBD (NPTS, NPDE, RWORK(LG), IDIAGP, RWORK(LPREC)) NEWJAC = .TRUE. NJAC = 1 C Ccc Newton iteration loop 9 CONTINUE DO 10 NIT = 1, MAXNIT C Cccccc Solve G.corr = F. Store the residual in F. TOL = TOLLSC / (2**NIT) CALL GGCRO (NPTS, NPDE, RWORK(LG), CORR, F, WT, TOL, + BDPREC, RWORK(LPREC), ISTRUC(LLLDG), ISTRUC(LLUDG), + NRRMAX, MAXLR, MAXL, LUNLSS, + RWORK(LR), RWORK(LU), RWORK(LC), RWORK(LZW), RWORK(LRWK), + ITER, ERR, IERR) NLSIT(LEVEL,NIT) = NLSIT(LEVEL,NIT)+ ITER IF (IERR .NE. 0) GOTO 100 C Cccccc Test for convergence CORNRM = WSNRM2 (LENU, CORR, WT) IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' NI:'',I3,'', NLI:'',I4,'', ERLI'':,E16.7, + '', ERNI:'',E16.7)') NIT, ITER, ERR, CORNRM ENDIF IF (CORNRM .LE. 100*UROUND*UNRM) GOTO 900 IF (.NOT. NEWJAC) THEN RATE = SQRT(CORNRM/OLDNRM) IF (RATE .GT. 0.9) THEN C Divergence GOTO 100 ELSE IF (RATE/(1-RATE)*CORNRM .LE. TOLNEW) THEN C Convergence GOTO 900 ENDIF ENDIF OLDNRM = CORNRM C Ccccc Update solution DO 20 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 20 CONTINUE C Ccc Compute derivatives and residual and start next iteration CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = NRES+1 NEWJAC = .FALSE. IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WSNRM2 (LENU, F, WT) ENDIF 10 CONTINUE Ccc End Newton iteration loop C Ccc No convergence in max. # iterations C Ccccc Check if Jacobian is recent 100 CONTINUE IF (.NOT. NEWJAC .AND. NJAC .LT. MAXJAC) THEN IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' New Jacobian, NIT='',I4)') NIT ENDIF C Compute new Jacobian and retry CALL DERIVS (NPTS, NPDE, UNP1, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL JAC (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, + DX, DY, UNP1(1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LPREC), RWORK(LG)) C Ccc Compute preconditioner: (block-)diagonal of Jacobian G = dF/dU. C Store LU-decomposition in PREC, main diagonal inverted. CALL JACBD (NPTS, NPDE, RWORK(LG), IDIAGP, RWORK(LPREC)) NEWJAC = .TRUE. NJAC = NJAC + 1 GOTO 9 ELSE C Newton failure IERR = 10 NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Newton failure, NIT='',I4)') NIT ENDIF RETURN ENDIF C Ccc Nonlinear proces has been solved 900 CONTINUE C Update solution DO 30 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 30 CONTINUE C NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NJAC C RETURN END SUBROUTINE JACBD (NPTS, NPDE, G, IDIAGP, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, IDIAGP REAL G(NPTS*NPDE,NPDE,-4:4), PREC(NPTS*NPDE,*) C Ccc PURPOSE: C Store the LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C G : IN. Jacobian stored in block 9-diagonal mode C IDIAGP : IN. Type of preconditioner C 0: block-diagonal C 1: block-diagonal C 2: diagonal C 3: diagonal C PREC : OUT. LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C Ccc EXTERNALS USED: EXTERNAL BLU, PREJD C C----------------------------------------------------------------------- C INTEGER IC, I, LENU C LENU = NPTS*NPDE C IF (IDIAGP .LE. 1) THEN DO 10 IC = 1, NPDE DO 10 I = 1, LENU PREC(I,IC) = G(I,IC,0) 10 CONTINUE Ccc Store LU of G in PREC, invert main diagonal CALL BLU (NPTS, NPDE, PREC) ELSE CALL PREJD (NPTS, NPDE, G, PREC) ENDIF RETURN END SUBROUTINE BLU (NPTS, NPDE, A) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL A(NPTS,NPDE,NPDE) C Ccc PURPOSE: C LU decomposition of block-diagonal A C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # components of the PDE C A : INOUT. C IN: main block diagonal C OUT: A(.,ic,jc): jc < ic: block diagonal of L C diagonal L == I C jc >=ic: block diagonal of U C diagonal U inverted C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, LC, N REAL D C DO 550 IC = 1, NPDE DO 554 LC = 1, IC-1 DO 555 JC = IC, NPDE CDIR$ IVDEP DO 551 N = 1, NPTS A(N,IC,JC) = A(N,IC,JC) + - A(N,IC,LC)*A(N,LC,JC) 551 CONTINUE 555 CONTINUE DO 556 JC = IC+1, NPDE CDIR$ IVDEP DO 552 N = 1, NPTS A(N,JC,IC) = A(N,JC,IC) + - A(N,JC,LC)*A(N,LC,IC) 552 CONTINUE 556 CONTINUE 554 CONTINUE CDIR$ IVDEP DO 553 N = 1, NPTS D = A(N,IC,IC) IF (ABS(D) .LT. 1E-7) THEN A(N,IC,IC) = 1.0 ELSE A(N,IC,IC) = 1.0 / D ENDIF 553 CONTINUE DO 557 JC = IC+1, NPDE CDIR$ IVDEP DO 559 N = 1, NPTS A(N,JC,IC) = A(N,JC,IC) * A(N,IC,IC) 559 CONTINUE 557 CONTINUE 550 CONTINUE C RETURN END SUBROUTINE BCKBDI (NPTS, NPDE, A, B, X) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL A(NPTS,NPDE,NPDE), X(NPTS,NPDE), B(NPTS,NPDE) C Ccc PURPOSE: C Solve LUx = b C A is a block-diagonal matrix C A((i,j,k),1:NPDE,1:NPDE) contains a block of NPDE.NPDE elements C corresponding with node (i,j,k) C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # components of the PDE C A : IN. A(.,ic,jc): jc < ic: block diagonal of L C diagonal L == I C jc >=ic: block diagonal of U C diagonal U inverted C X : OUT: solution vector x C B : IN: right-hand side vector b C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, JC, N C CALL RCOPY (NPTS*NPDE, B, X) C CCC Ly = b C DO 100 IC = 2, NPDE DO 101 JC = 1, IC-1 CDIR$ IVDEP DO 1 N = 1, NPTS X(N,IC) = X(N,IC) - A(N,IC,JC)*X(N,JC) 1 CONTINUE 101 CONTINUE 100 CONTINUE C CCC Ux = y C DO 130 IC = NPDE, 1, -1 DO 131 JC = NPDE, IC+1, -1 CDIR$ IVDEP DO 132 N = 1, NPTS X(N,IC) = X(N,IC) - A(N,IC,JC)*X(N,JC) 132 CONTINUE 131 CONTINUE CDIR$ IVDEP DO 133 N = 1, NPTS X(N,IC) = X(N,IC) * A(N,IC,IC) 133 CONTINUE 130 CONTINUE C RETURN END SUBROUTINE PREJD (NPTS,NPDE, G, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL G(NPTS,NPDE,NPDE,-4:4), PREC(NPTS,NPDE) C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IC, IPT REAL DG, EPS C EPS = SQRT(UROUND) DO 10 IC = 1, NPDE DO 20 IPT = 1, NPTS DG = G(IPT,IC,IC,0) IF (ABS(DG) .LT. EPS) THEN PREC(IPT,IC) = 1.0 ELSE PREC(IPT,IC) = 1.0/DG ENDIF 20 CONTINUE 10 CONTINUE C RETURN END SUBROUTINE GGCRO (NPTS, NPDE, G, XV, F, WT, TOL, BDPREC, PREC, + LLDG, LUDG, + NRRMAX, MAXLR, MAXL, LUN, + R, U, C, ZW, WORK, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(*), LUDG(*), NRRMAX, MAXLR, MAXL, LUN, + ITER, IERR LOGICAL BDPREC REAL G(*), XV(NPTS*NPDE), F(NPTS*NPDE), WT(NPTS*NPDE), TOL, + PREC(NPTS*NPDE), + R(NPTS*NPDE), U(NPTS*NPDE,0:MAXLR-1), C(NPTS*NPDE,0:MAXLR-1), + ZW(0:MAXLR-1,0:MAXLR-1), WORK(*), ERR C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C Ccc PURPOSE: C Solve a Non-Symmetric linear system Gx = F using the C (block)-diagonally scaled GCRO(NRRMAX+1,MAXLR,(MAXL)) method. C Actually solved is the system [W.D^(-1).G.W^(-1)].[W.x] = [W.D^(-1).F] C where W = diag(WT(i)) and D is the (block) diagonal of G C until max(||residual||_2,||GM^(-1).residual||_2) < TOL, C with GM the projection of the matrix unto the Krylov base obtained C with the GMRES inner iteration. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C G : IN. -I C LLDG : IN I These arrays hold the matrix G in block diagonal C LUDG : IN -I storage mode (see description in MVDIAG) C XV : OUT. Final approximate solution. C F : IN. Right-hand side vector. C WT : IN. Contains weight factors to compute weighted norm. C TOL : IN. System is considered to be solved if C weighted 2-norm < TOL C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C NRRMAX : IN. # restarts outer loop C MAXLR : IN. max. iterations outer loop C MAXL : IN. max. iterations GMRES (no restarts) C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C R : WORK. C U : WORK. C C : WORK. C ZW : WORK. C WORK : WORK. (N.(MAXL+1)+(MAXL+3).MAXL+4.N+1) C with N=NPTS.NPDE is the dimension of the system. C ITER : OUT. Number of iterations required to reach convergence, or C until (NRRMAX+1).MAXLR. outer loop iterations have been C performed. ITER is the sum of the number of outerloop C iterations + number of GMRES (preconditioner) iterations. C ERR : OUT. Weighted 2-norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in (NRRMAX+1).MAXLR. outer loop C iterations C 2: Break down in outer loop C Ccc EXTERNALS USED: REAL SDOT, SNRM2 EXTERNAL BCKBDI, GGMRSO, MVDIAG, RCOPY, SAXPY, SDOT, SNRM2, ZERO C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, IR, J, K, N, GRITER, PRITER, GMITER, + LV, LHES, LQ, LRWRK REAL RNRM, UNRM C N = NPTS*NPDE C Ccc Distribute workspace for GMRES LV = 1 LHES = LV + N*(MAXL+1) LQ = LHES + (MAXL+1)*MAXL LRWRK= LQ + 2*MAXL C ITER = 0 IERR = 0 GRITER = 0 PRITER = 0 C Ccc Initialize X and set initial residual to r_0 = W.D^(-1).F CALL ZERO (N, XV) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, F, R) DO 10 I = 1, N R(I) = WT(I)*R(I) 10 CONTINUE ELSE DO 11 I = 1, N R(I) = WT(I)*PREC(I)*F(I) 11 CONTINUE ENDIF C C Ccc Check stopping criterion ERR = SNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,*) + 'Diag. scaled GCRO(NRRMAX,MAXLR))' WRITE(LUN,'(''NRRMAX, MAXLR, N:'',3I10)') + NRRMAX, MAXLR, N WRITE(LUN,*) '# it. GCRO # it.GMRES Error Estimate' WRITE(LUN,'(2I10,E20.7)') GRITER, PRITER, ERR ENDIF IF (ERR .LT. SQRT(UROUND)*TOL) RETURN C Ccc Restart loop DO 150 IR = 0, NRRMAX IERR = 0 C Ccc Outer loop DO 200 K = 0, MAXLR-1 C C Perform the diagonally scaled GMRES algorithm to solve C (I-C_k-1C_k-1^T).[W.D^(-1).G.W^(-1)].u_k = A_k-1.u_k = r_k-1, C r_k = r_k-1 - A_k-1.u_k C c_k = (r_k-1 - r_k)/ C to compute the initial preconditioner for the E-N process C If u_k is solved accurately enough ||u_k = H_k.r_k||_2 is a good C measure for the error when solving DAE systems. CALL GGMRSO (NPTS, NPDE, G, LLDG, LUDG, + U(1,K), R, WT, BDPREC, PREC, C, K, TOL, MAXL, + WORK(LV), WORK(LHES), WORK(LQ), WORK(LRWRK), + LUN, GMITER, ERR, IERR) PRITER = PRITER + GMITER IF (LUN .GT. 0) THEN WRITE(LUN,*) 'Result GMRES:', GMITER, TOL, ERR, IERR ENDIF IF (IERR .GT. 1) THEN PRINT *, 'wat nu?' STOP ENDIF IERR = 0 C Ccc Check stopping criterion UNRM = SNRM2 (N, U(1,K), 1) C C Compute v = [W.D^(-1).G.W^(-1)].u_k DO 210 I = 1, N WORK(LV+N-1+I) = U(I,K)/WT(I)/UNRM 210 CONTINUE CALL MVDIAG (NPTS, NPDE, G, WORK(LV+N), LLDG, LUDG, WORK(LV)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, WORK(LV), WORK(LV+N)) DO 220 I = 1, N WORK(LV-1+I) = WT(I)*WORK(LV+N-1+I)*UNRM 220 CONTINUE ELSE DO 221 I = 1, N WORK(LV-1+I) = WT(I)*PREC(I)*WORK(LV-1+I)*UNRM 221 CONTINUE ENDIF C C C Compute ZW[0:k-1,k] = C_k^T.v DO 300 I = 0, K-1 ZW(I,K) = SDOT(N, C(1,I),1, WORK(LV),1) 300 CONTINUE C GRITER = GRITER + 1 C Ccc Check stopping criterion RNRM = SNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,'(2I10,2E20.7)') GRITER, PRITER, RNRM, UNRM ENDIF IF (MAX(RNRM,UNRM) .LT. TOL) THEN C Compute x = x + U_k.Z_k^(-1).1 DO 310 I = K, 0, -1 WORK(LV+I) = 1 DO 320 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 320 CONTINUE CALL SAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 310 CONTINUE ITER = GRITER + PRITER GOTO 900 ENDIF 200 CONTINUE Ccc End outer loop C Compute x = x + U_k.Z_k^(-1).1 K = MAXLR-1 DO 330 I = K, 0, -1 WORK(LV+I) = 1 DO 340 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 340 CONTINUE CALL SAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 330 CONTINUE C 150 CONTINUE Ccc End Restart loop C IERR = 1 ITER = GRITER + PRITER C 900 CONTINUE C Unscale x DO 910 I = 1, N XV(I) = XV(I) / WT(I) 910 CONTINUE RETURN END SUBROUTINE GGMRSO (NPTS, NPDE, G, LLDG, LUDG, + XV, BV, WT, BDPREC, PREC, CO, M, TOL, MAXL, + V, HES, Q, WORK, LUN, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLDG(*), LUDG(*), M, MAXL, LUN, + ITER, IERR LOGICAL BDPREC REAL G(*), XV(NPTS*NPDE), BV(NPTS*NPDE), WT(NPTS*NPDE), + PREC(NPTS*NPDE), CO(NPTS*NPDE,0:M), TOL, + V(NPTS*NPDE,MAXL+1), HES(MAXL+1,MAXL), + Q(2*MAXL), WORK(*), ERR C Ccc PURPOSE: C Solve a Non-Symmetric linear system C [W.D^(-1).G.W^(-1)].[Wx] = [W.D^(-1).b] C using the (block)-diagonally scaled GMRES(MAXL) method, orthogonalize C new V_k not only against previous ones but also against C's from C outer iteration. C W = diag(WT(i)) and D is the (block) diagonal of G. C The right hand-side W.D^(-1).b is stored in B, C the matrix G and the preconditioner are stored in RWORK and IWORK. C (Dx) is returned in X. C The routine MVDIAG should perform y = Gx C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C G : IN. -I C LLDG : IN I These arrays hold the matrix G in block diagonal C LUDG : IN -I storage mode (see description in MVDIAG) C XV : OUT. Final approximate solution. C BV : IN. Preconditioned right-hand side vector. C OUT. Residual vector. C WT : IN. Contains weight factors to compute weighted norm. C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C CO : IN. (.,0:M-1): vectors from outer iteration against which C V's should be orthogonalized. C OUT. (.,M) = Residual_outer_old - Residual C M : IN. Outer loop iteration count C TOL : IN. System is considered to be solved if C 2-norm < TOL C MAXL : IN. max. iterations GMRES (no restarts) C V : WORK. C HES : WORK. C Q : WORK. C WORK : WORK. 4.N+1 C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C ITER : OUT. Number of iterations required to reach convergence, or C MAXL+1 if convergence criterion could not be achieved in C MAXL iterations. C ERR : OUT. Weighted max. norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in MAXL iterations C Ccc EXTERNALS USED: REAL SDOT, SNRM2 EXTERNAL BCKBDI, MVDIAG, RCOPY, SAXPY, SDOT, SNRM2, ZERO C C----------------------------------------------------------------------- C INTEGER I, J, K, N REAL C, CNM2, R0NRM, PROD, RHO, S, TEM, T1, T2, T, VNRM C N = NPTS*NPDE IERR = 0 ITER = 0 C Ccc Initialize solution on zero, the initial residual R0 is the C left preconditioned vector B CALL ZERO (N, XV) CALL RCOPY (N, BV, V(1,1)) R0NRM = SNRM2(N, V(1,1),1) C Ccc Check stopping criterion ERR = R0NRM IF (LUN .NE. 0) THEN WRITE(LUN,'(''Diagonally scaled GMRESO(MAXL)'',I5)') + MAXL WRITE(LUN, + '('' ITER Error Estimate'')') WRITE(LUN,'(I5,E20.7)') ITER, ERR ENDIF C Ccc Rescale so that the norm of V(1,1) is one DO 80 I = 1, N V(I,1) = V(I,1)/R0NRM 80 CONTINUE C Ccc Initialize HES array. CALL ZERO (MAXL*(MAXL+1), HES) C Ccc Main loop to compute the vectors V(*,2) to V(*,MAXL). C The running product PROD is needed for the convergence test. PROD = 1.0 DO 10 K = 1, MAXL ITER = K C C V(*,K+1) = [W.D^(-1).G.W^(-1)] . V(*,K) DO 11 I = 1, N WORK(I) = V(I,K)/WT(I) 11 CONTINUE CALL MVDIAG (NPTS, NPDE, G, WORK, LLDG, LUDG, V(1,K+1)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, V(1,K+1), WORK) DO 12 I = 1, N V(I,K+1) = WT(I)*WORK(I) 12 CONTINUE ELSE DO 13 I = 1, N V(I,K+1) = WT(I)*PREC(I)*V(I,K+1) 13 CONTINUE ENDIF C C Orthogonalize V(*,K+1) first against the previous C using C modified Gram-Schmidt DO 801 I = 0, M-1 TEM = SDOT (N, CO(1,I), 1, V(1,K+1), 1) / + SDOT (N, CO(1,I), 1, CO(1,I), 1) CALL SAXPY (N, -TEM, CO(1,I), 1, V(1,K+1), 1) 801 CONTINUE C C Orthogonalize V(*,K+1) against the previous V using C modified Gram-Schmidt DO 81 I = 1, K HES(I,K) = SDOT (N, V(1,I), 1, V(1,K+1), 1) CALL SAXPY (N, -HES(I,K), V(1,I), 1, V(1,K+1), 1) 81 CONTINUE VNRM = SNRM2(N, V(1,K+1), 1) HES(K+1,K) = VNRM C C Update the QR factors of HES (Q.HES = R) using Givens rotations C First, multiply new column by previous Givens rotations DO 82 I = 1, K-1 T1 = HES(I,K) T2 = HES(I+1,K) C = Q(2*I-1) S = Q(2*I) HES(I ,K) = C*T1 - S*T2 HES(I+1,K) = S*T1 + C*T2 82 CONTINUE C Form last Givens rotation and multiply it with last 2 elements of HES T1 = HES(K,K) T2 = HES(K+1,K) IF (T2 .EQ. 0.0) THEN C = 1.0 S = 0.0 ELSE IF (ABS(T2) .GE. ABS(T1)) THEN T = T1/T2 S = -1.0/SQRT(1.0+T*T) C = -S*T ELSE T = T2/T1 C = 1.0/SQRT(1.0+T*T) S = -C*T ENDIF Q(2*K-1) = C Q(2*K ) = S HES(K,K) = C*T1 - S*T2 IF (HES(K,K) .EQ. 0.0) THEN IERR = 2 RETURN ENDIF C C Update RHO, the estimate of the norm of the residual R0-A*XL. PROD = PROD*Q(2*K) RHO = ABS(PROD*R0NRM) C Ccc Check stopping criterion ERR = RHO IF (LUN .NE. 0) THEN WRITE(LUN,'(I5,2E20.7)') ITER, ERR, ERR/R0NRM ENDIF IF (ERR/R0NRM .LT. 0.001 .AND. ERR .LT. TOL) GOTO 100 IF (K .EQ. MAXL) GOTO 20 C C Rescale so that the norm of V(1,K+1) is one. DO 83 I = 1, N V(I,K+1) = V(I,K+1)/VNRM 83 CONTINUE 10 CONTINUE C 20 CONTINUE IF (RHO .GT. R0NRM) THEN IERR = 2 RETURN ELSE IERR = 1 ENDIF C Ccc Compute the approximation XL to the solution. C Min. ||beta.e1 - Hk+1k.y||_2 C X = X + Vk.y 100 CONTINUE K = ITER WORK(1) = R0NRM DO 110 I = 2, K+1 WORK(I) = 0.0 110 CONTINUE C Q.beta.e1 DO 84 I = 1, K C = Q(2*I-1) S = Q(2*I) T1 = WORK(I) T2 = WORK(I+1) WORK(I ) = C*T1 - S*T2 WORK(I+1) = S*T1 + C*T2 84 CONTINUE C Solve R.y = Q.beta.e1 DO 85 I = 1, K J = K+1-I WORK(J) = WORK(J) / HES(J,J) CALL SAXPY (J-1, -WORK(J), HES(1,J),1, WORK,1) 85 CONTINUE C C X = X + Vk.y DO 120 I = 1,K CALL SAXPY(N, WORK(I), V(1,I), 1, XV, 1) 120 CONTINUE C C Calculate the residual vector CALL RCOPY (N, V(1,1), WORK(K+1)) DO 86 I = 1, K-1 S = Q(2*I) C = Q(2*I-1) DO 87 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 87 CONTINUE 86 CONTINUE I = K S = Q(2*I) C = Q(2*I-1)/VNRM DO 88 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 88 CONTINUE DO 89 J = 1, N WORK(K+J) = WORK(K+J)*R0NRM*PROD 89 CONTINUE C C Compute c_m = (b - r) / DO 130 J = 1, N CO(J,M) = BV(J) - WORK(K+J) 130 CONTINUE CNM2 = 1 / SDOT (N, CO(1,M), 1, CO(1,M), 1) DO 140 J = 1, N CO(J,M) = CO(J,M) * CNM2 140 CONTINUE C C Inner residual = outer residual CALL RCOPY (N, WORK(K+1), BV) C RETURN END SUBROUTINE INTGRC (ISTRUC, X, Y, NPDE, UIB, UNP1, UN, UNM1, + RELTOL, ABSTOL, TN, DT, DTRAT, DX, DY, WT, F, CORR, RWORK, + IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER ISTRUC(0:*), NPDE, IERR REAL X(*), Y(*), UIB(*), UNP1(0:*), UN(0:*), UNM1(0:*), + RELTOL(NPDE), ABSTOL(NPDE), + TN, DT, DTRAT, DX, DY, + WT(*), F(*), CORR(*), RWORK(*) C Ccc PURPOSE: C Integration in time with BDF2 (first timestep BE). C Solve nonlinear system F(Tn+1,Un+1,Udot) = 0 with matrix-free Newton. C Solve linear systems with (block-)diagonally scaled GCRO. C Ccc PARAMETER DESCRIPTION: C ISTRUC : IN. Data structure Un+1 grid. C X,Y : IN. Physical coordinates grid. C NPDE : IN. # PDE components C UIB : IN. Dirichlet boundary values on internal boundary. C UNP1 : INOUT. On entry: Initial solution, on exit final solution C Newton converged C UN : IN. Solution at Tn on Un+1 grid C UNM1 : IN. Solution at Tn-1 on Un+1 grid C RELTOL : IN. Relative tolerance for Newton process C ABSTOL : IN. Absolute tolerance for Newton process C TN : IN. Previous time C DT : IN. Current time step C DX : IN. Current grid spacing in X-direction C DY : IN. Current grid spacing in Y-direction C DTRAT : IN. If BE: 0, if BDF2: DT/DT_old C WT : WORK. (NPTS*NPDE) C Weight function for norm computation C F : WORK. (NPTS*NPDE) C Residual C CORR : WORK. (NPTS*NPDE) C Correction in Newton iteration C RWORK : WORK. (RESWRK+LSSWRK) C RESWRK: LENU.6 C LSSWRK: MAX(LENPWK,LENU.(2.MAXLR+MAXL+6))+LENPRE+ C MAXLR*MAXLR+(MAXL+3).MAXL+1 C LENPRE: ( IDIAGP <= 1 ! LENU.NPDE ! LENU ) C LENPWK: ( IDIAGP = 0 ! LENU.(NPDE.5+2)+NPTS C |:IDIAGP = 1 ! LENU.(NPDE.3+2)+NPTS C |:IDIAGP = 2 ! LENU.8 C |:IDIAGP = 3 ! LENU.7 ) C LENU : NPTS.NPDE C IERR : OUT. C 0: OK. C 10: Newton process did not converge C Ccc EXTERNALS USED: REAL MAXNRM, WSNRM2 EXTERNAL ERRWGT, GCRO, PINIT, MAXNRM, RESID, WSNRM2 C C Ccc INCLUDE 'PARNEWTON' C C PARNEWTON C C Parameters for Newton process C MAXNIT : Max. number of Newton iterations C MAXJAC : Max. number of Jacobian / preconditioner evaluations during C a Newton process C TOLNEW : Tolerance for Newton process: C rho/(1-rho)*|| corr.||_w < TOLNEW INTEGER MAXNIT, MAXJAC REAL TOLNEW PARAMETER (MAXNIT = 10, MAXJAC = 2, TOLNEW = 1.0) C C end INCLUDE 'PARNEWTON' C C Ccc INCLUDE 'PARGCRO' C C PARGCRO C C Parameters for linear system solver GCRO + (block-)diagonal C preconditioner C IDIAGP : 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C NRRMAX : Max. number of restarts of outer loop C MAXLR : Max. number of iterations in outer loop C MAXL : Max. number of iterations in GMRES inner loop C TOLLSC : Tolerance for linear system solver INTEGER IDIAGP, NRRMAX, MAXLR, MAXL REAL TOLLSC PARAMETER (NRRMAX = 1, MAXLR = 5, MAXL = 20) C PARAMETER (NRRMAX = 1, MAXLR = 3, MAXL = 10) PARAMETER (TOLLSC = TOLNEW/10) COMMON /IGCRO/ IDIAGP SAVE /IGCRO/ C C end INCLUDE 'PARGCRO' C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, LLLBND, NBNDS, + NBDPTS, NBIPTS, LILBND, LLBNDP, LLBLW, LLABV, + LIWK, LENU, LUT, LUX, LUY, LUXX, LUXY, LUYY, + LPREC, LR, LU, LC, LZW, LRWK, + NPRE, NRES, I, NIT, ITER LOGICAL BDPREC, NEWPRE REAL A0, ERR, CORNRM, OLDNRM, RATE, TOL, UNRM C IERR = 0 C A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) BDPREC = IDIAGP .LE. 1 C IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Nonlinear system solver at T ='',E16.7)') + TN+DT ENDIF C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW+NPTS C LIWK = LLABV+NPTS C LENU = NPTS*NPDE C LUT = 1 LUX = LUT + LENU LUY = LUX + LENU LUXX = LUY + LENU LUXY = LUXX + LENU LUYY = LUXY + LENU C LPREC = LUYY+LENU IF (BDPREC) THEN C Block-diagonal preconditioner LR = LPREC + LENU*NPDE ELSE C Diagonal preconditioner LR = LPREC + LENU ENDIF LU = LR + LENU LC = LU + (LENU*MAXLR) LZW = LC + (LENU*MAXLR) LRWK = LZW+ (MAXLR*MAXLR) C Ccc Set error weights for use in Newton process CALL ERRWGT (NPTS, NPDE, UNP1(1), RELTOL, ABSTOL, WT) C Ccc Compute weighted norm of initial solution for convergence check UNRM = WSNRM2 (LENU, UNP1(1), WT) C Ccc Compute derivatives and residual CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = 1 IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WSNRM2 (LENU, F, WT) ENDIF C Ccc Compute preconditioner: (block-)diagonal of Jacobian G = dF/dU. C Store LU-decomposition in PREC, main diagonal inverted. CALL PINIT (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, DX, DY, + UNP1(1), ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LR), IDIAGP, RWORK(LPREC)) NEWPRE = .TRUE. NPRE = 1 C Ccc Newton iteration loop 9 CONTINUE DO 10 NIT = 1, MAXNIT C Cccccc Solve G.corr = F. Store the residual in F. TOL = TOLLSC / (2**NIT) CALL GCRO (LENU, CORR, F, WT, TOL, BDPREC, RWORK(LPREC), + ISTRUC, X, Y, NPDE, UIB, UNP1, + TN+DT, A0, DX, DY, RWORK, + NRRMAX, MAXLR, MAXL, LUNLSS, + RWORK(LR), RWORK(LU), RWORK(LC), RWORK(LZW), RWORK(LRWK), + ITER, ERR, IERR) NLSIT(LEVEL,NIT) = NLSIT(LEVEL,NIT)+ ITER IF (IERR .NE. 0) GOTO 100 C Cccccc Test for convergence CORNRM = WSNRM2 (LENU, CORR, WT) IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' NI:'',I3,'', NLI:'',I4,'', ERLI'':,E16.7, + '', ERNI:'',E16.7)') NIT, ITER, ERR, CORNRM ENDIF IF (CORNRM .LE. 100*UROUND*UNRM) GOTO 900 IF (.NOT. NEWPRE) THEN RATE = SQRT(CORNRM/OLDNRM) IF (RATE .GT. 0.9) THEN C Divergence GOTO 100 ELSE IF (RATE/(1-RATE)*CORNRM .LE. TOLNEW) THEN C Convergence GOTO 900 ENDIF ENDIF OLDNRM = CORNRM C Ccccc Update solution DO 20 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 20 CONTINUE C Ccc Compute derivatives and residual and start next iteration CALL RESID (TN+DT, X, Y, NPTS, NPDE, UNP1, UN, UNM1, DT, DTRAT, + UIB, ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), F) NRES = NRES+1 NEWPRE = .FALSE. IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' Max. and WRMS norm residual='',2E16.7)') + MAXNRM(LENU, F), WSNRM2 (LENU, F, WT) ENDIF 10 CONTINUE Ccc End Newton iteration loop C Ccc No convergence in max. # iterations C Ccccc Check if Jacobian is recent 100 CONTINUE IF (.NOT. NEWPRE .AND. NPRE .LT. MAXJAC) THEN IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'('' New preconditioner, NIT='',I4)') NIT ENDIF C Compute new preconditioner and retry C Compute space derivatives anew since they are disturbed by C MVDIFF CALL DERIVS (NPTS, NPDE, UNP1, + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL PINIT (NPTS, NPDE, F, TN+DT, X, Y, DT, DTRAT, + DX, DY, UNP1(1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + RWORK(LUT), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), + ABSTOL, RWORK(LR), IDIAGP, RWORK(LPREC)) NEWPRE = .TRUE. NPRE = NPRE + 1 GOTO 9 ELSE C Newton failure IERR = 10 NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NPRE IF (LUNNLS .NE. 0) THEN WRITE(LUNNLS,'(''Newton failure, NIT='',I4)') NIT ENDIF RETURN ENDIF C Ccc Nonlinear proces has been solved 900 CONTINUE C Update solution DO 30 I = 1, LENU UNP1(I) = UNP1(I) - CORR(I) 30 CONTINUE C NNIT(LEVEL) = NNIT(LEVEL)+NIT NRESID(LEVEL) = NRESID(LEVEL)+NRES NJACS(LEVEL) = NJACS(LEVEL)+NPRE C RETURN END SUBROUTINE PINIT (NPTS, NPDE, F, T, X, Y, DT, DTRAT, + DX, DY, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, UYY, ABSTOL, WORK, IDIAGP, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*), IDIAGP REAL F(*), T, X(*), Y(*), DT, DTRAT, DX, DY, U(*), UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), WORK(*), PREC(NPTS,NPDE,*) C Ccc PURPOSE: C Store the LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C DT : IN. Current time stepsize C DTRAT : IN. 0 or DT/DT_old C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C U : IN. Solution at T on current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C WORK : WORK. ( ( IDIAGP = 0 ! LENU.(NPDE.5+2)+NPTS C |:IDIAGP = 1 ! LENU.(NPDE.3+2)+NPTS C |:IDIAGP = 2 ! LENU.8 C |:IDIAGP = 3 ! LENU.6 ) ) C IDIAGP : IN. Type of preconditioner C 0: block-diagonal + first order derivatives C 1: block-diagonal neglecting first order derivatives C 2: diagonal + first order derivatives C 3: diagonal neglecting first order derivatives C PREC : OUT. LU-decomposition of the (block-)diagonal of the Jacobian C G = dF/dU in PREC, main diagonal inverted. C Ccc EXTERNALS USED: EXTERNAL BLU, DERVF, DERVFB, PREG, PREGB C C----------------------------------------------------------------------- C INTEGER LENDEL, LENU, LENFU, LENFU1, + LFU, LFUX, LFUY, LFUXX, LFUYY, LDEL, LRWK LOGICAL PRECFO REAL A0 C PRECFO = IDIAGP .EQ. 0 .OR. IDIAGP .EQ. 2 LENU = NPTS*NPDE IF (IDIAGP .LE. 1) THEN LENDEL = NPTS LENFU = LENU*NPDE ELSE LENDEL = LENU LENFU = LENU ENDIF IF (PRECFO) THEN LENFU1 = LENFU ELSE LENFU1 = 0 ENDIF C LFU = 1 LFUX = LFU + LENFU LFUY = LFUX + LENFU1 LFUXX = LFUY + LENFU1 LFUYY = LFUXX + LENFU LDEL = LFUYY + LENFU LRWK = LDEL + LENDEL A0 = (1+2*DTRAT) / ((1+DTRAT)*DT) IF (IDIAGP .LE. 1) THEN C Ccc Compute dF/dU, (dF/dUx, dF/dUy,) dF/dUxx, dF/dUyy CALL DERVFB (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, WORK(LDEL), WORK(LRWK), + PRECFO, WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY)) C Ccc Compute block-diagonal C G = dF/dU + (dF/dUx.dUx/dU + ...) + dF/dUxx.dUxx/dU + ... CALL PREGB (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY), PRECFO, PREC) C Ccc Store LU of G in PREC, invert main diagonal CALL BLU (NPTS, NPDE, PREC) ELSE C Ccc Compute dF/dU, (dF/dUx, dF/dUy,) dF/dUxx, dF/dUxy, dF/dUyy CALL DERVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, WORK(LDEL), WORK(LRWK), + PRECFO, WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY)) C Ccc Compute diagonal G = dF/dU + (dF/dUx.dUx/dU + ...) + dF/dUxx.dUxx/dU C + ... C Store inverted in PREC CALL PREG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + WORK(LFU), WORK(LFUX), WORK(LFUY), + WORK(LFUXX), WORK(LFUYY), PRECFO, PREC) ENDIF C RETURN END SUBROUTINE DERVFB (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + PRECFO, FU, FUX, FUY, FUXX, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO REAL F(NPTS*NPDE), T, X(*), Y(*), U(*), A0, DT, DX, DY, UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), DEL(NPTS), WORK(2*NPTS*NPDE), + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE), FUYY(NPTS*NPDE,NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U by numerical C differencing C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (NPTS) C WORK : WORK. (2.LENU) C PRECFO : IN. If FALSE first order derivatives may be neglected C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUYY : OUT. dF(Uyy)dUyy C Ccc EXTERNALS USED: EXTERNAL PERTRB, PRTRBU, RES C C----------------------------------------------------------------------- C INTEGER I, IC, ICPTB, IPT, LUTBAR REAL FACX, FACY, FACXX, FACYY, TOL LUTBAR = 1 + NPTS*NPDE C Ccc How to decide if derivatives are `zero'? C Take `zero'-value of U divided by the grid width FACX = 1/(2*DX) FACY = 1/(2*DY) FACXX = 1/DX**2 FACYY = 1/DY**2 C Ccc Loop over the components of the (derivatives of) U DO 10 ICPTB = 1, NPDE C C dF(U,Ut)/dU TOL = ABSTOL(ICPTB) CALL PRTRBU (ICPTB, NPTS, NPDE, U, A0, DT, UT, TOL, DEL, + WORK, WORK(LUTBAR)) CALL RES (T, X, Y, NPTS, NPDE, WORK, LLBND, ILBND, LBND, UIB, + WORK(LUTBAR), UX, UY, UXX, UXY, UYY, FU(1,ICPTB)) DO 20 IC = 1, NPDE DO 20 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FU(I,ICPTB) = (FU(I,ICPTB) - F(I)) / DEL(IPT) 20 CONTINUE IF (PRECFO) THEN C C dF(Ux)/dUx TOL = ABSTOL(ICPTB)*FACX CALL PERTRB (ICPTB, NPTS, NPDE, UX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, WORK, UY, UXX, UXY, UYY, FUX(1,ICPTB)) DO 40 IC = 1, NPDE DO 40 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUX(I,ICPTB) = (FUX(I,ICPTB) - F(I)) / DEL(IPT) 40 CONTINUE C C dF(Uy)/dUy TOL = ABSTOL(ICPTB)*FACY CALL PERTRB (ICPTB, NPTS, NPDE, UY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, WORK, UXX, UXY, UYY, FUY(1,ICPTB)) DO 50 IC = 1, NPDE DO 50 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUY(I,ICPTB) = (FUY(I,ICPTB) - F(I)) / DEL(IPT) 50 CONTINUE ENDIF C C dF(Uxx)/dUxx TOL = ABSTOL(ICPTB)*FACXX CALL PERTRB (ICPTB, NPTS, NPDE, UXX, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, WORK, UXY, UYY, FUXX(1,ICPTB)) DO 60 IC = 1, NPDE DO 60 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUXX(I,ICPTB) = (FUXX(I,ICPTB) - F(I)) / DEL(IPT) 60 CONTINUE C C dF(Uyy)/dUyy TOL = ABSTOL(ICPTB)*FACYY CALL PERTRB (ICPTB, NPTS, NPDE, UYY, TOL, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, WORK, FUYY(1,ICPTB)) DO 80 IC = 1, NPDE DO 80 IPT = 1, NPTS I = IPT + (IC-1)*NPTS FUYY(I,ICPTB) = (FUYY(I,ICPTB) - F(I)) / DEL(IPT) 80 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PREGB (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + FU, FUX, FUY, FUXX, FUYY, PRECFO, PREC) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO REAL DX, DY, + FU(NPTS*NPDE,NPDE), FUX(NPTS*NPDE,NPDE), FUY(NPTS*NPDE,NPDE), + FUXX(NPTS*NPDE,NPDE),FUYY(NPTS*NPDE,NPDE), + PREC(NPTS*NPDE,NPDE) C Ccc PURPOSE: C Compute block-diagonal of Jacobian G = dF/dU using derivatives of C residual wrt (derivatives of) U C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FU : IN. Derivative residual F(.,U,Ut,.) wrt U C FUX : IN. Derivative residual F(.,Ux,.) wrt Ux C FUY : IN. Derivative residual F(.,Uy,.) wrt Uy C FUXX : IN. Derivative residual F(.,Uxx,.) wrt Uxx C FUYY : IN. Derivative residual F(.,Uyy,.) wrt Uyy C PRECFO : IN. If FALSE first order derivatives may be neglected C PREC : OUT. Block-diagonal of Jacobian. C Ccc EXTERNALS USED: EXTERNAL PRGBBD C C----------------------------------------------------------------------- C INTEGER I, JC, LENU REAL FACX, FACY, FACXX, FACYY C LENU = NPTS*NPDE C FACXX = 1/DX**2 FACYY = 1/DY**2 C DO 10 JC = 1, NPDE DO 10 I = 1, LENU C dF(ipt,ic)/dU(ipt,jc) PREC(I,JC) = FU(I,JC) + + FUXX(I,JC)*(-2*FACXX) + FUYY(I,JC)*(-2*FACYY) 10 CONTINUE C IF (PRECFO) THEN FACX = 1/(2*DX) FACY = 1/(2*DY) CALL PRGBBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, PREC) ENDIF C RETURN END SUBROUTINE PRGBBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL FACX, FACY, + FUX(NPTS,NPDE,NPDE), FUY(NPTS,NPDE,NPDE), + G(NPTS,NPDE,NPDE) C Ccc PURPOSE: C Correct Jacobian G = dF/dU for second order approximation of C first order derivatives at boundaries C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C FACX : IN. 1/(2*DX) C FACY : IN. 1/(2*DY) C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FUX : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Ux C FUY : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Uy C G : INOUT. C IN: block-diagonal of Jacobian C OUT: corrected for first order derivatives at C boundaries C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, JC, IB, LB C Ccc Boundary corrections, no corrections needed for internal boundaries DO 20 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dUy DO 30 JC = 1, NPDE DO 30 IC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(-3*FACY) 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dUx DO 40 JC = 1, NPDE DO 40 IC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(-3*FACX) 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dUy DO 50 JC = 1, NPDE DO 50 IC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(+3*FACY) 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dUx DO 60 JC = 1, NPDE DO 60 IC = 1, NPDE CDIR$ IVDEP DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(+3*FACX) 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dUx and dF/dUy DO 100 JC = 1, NPDE DO 100 IC = 1, NPDE DO 105 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(-3*FACY) + + FUX(IPT,IC,JC)*(-3*FACX) 105 CONTINUE 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dUx and dF/dUy DO 110 JC = 1, NPDE DO 110 IC = 1, NPDE DO 115 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(-3*FACX) + + FUY(IPT,IC,JC)*(+3*FACY) 115 CONTINUE 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dUx and dF/dUy DO 120 JC = 1, NPDE DO 120 IC = 1, NPDE DO 125 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUY(IPT,IC,JC)*(+3*FACY) + + FUX(IPT,IC,JC)*(+3*FACX) 125 CONTINUE 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dUx and dF/dUy DO 130 JC = 1, NPDE DO 130 IC = 1, NPDE DO 135 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC,JC) = G(IPT,IC,JC) + + FUX(IPT,IC,JC)*(+3*FACX) + + FUY(IPT,IC,JC)*(-3*FACY) 135 CONTINUE 130 CONTINUE ENDIF 20 CONTINUE C RETURN END SUBROUTINE DERVF (F, T, X, Y, NPTS, NPDE, U, A0, DT, DX, DY, + LLBND, ILBND, LBND, UIB, UT, UX, UY, UXX, UXY, UYY, + ABSTOL, DEL, WORK, + PRECFO, FU, FUX, FUY, FUXX, FUYY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO REAL F(NPTS*NPDE), T, X(*), Y(*), U(*), A0, DT, DX, DY, UIB(*), + UT(*), UX(*), UY(*), UXX(*), UXY(*), UYY(*), + ABSTOL(*), DEL(NPTS*NPDE), WORK(2*NPTS*NPDE), + FU(NPTS*NPDE), FUX(NPTS*NPDE), FUY(NPTS*NPDE), + FUXX(NPTS*NPDE), FUYY(NPTS*NPDE) C Ccc PURPOSE: C Compute derivatives of residual wrt (derivatives of) U by numerical C differencing C C PARAMETER DESCRIPTION: C F : IN. Residual F(t,U,Ut) C T : IN. Current time C X,Y : IN. Physical coordinates of gridpoints C NPTS : IN. # grid points C NPDE : IN. # PDE components C U : IN. Solution at T on current grid C A0 : IN. Coefficient of U_n+1 in time derivative C DT : IN. Current time step size C DX : IN. Cell width in X-direction for current grid C DY : IN. Cell width in Y-direction for current grid C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C UIB : IN. Solution at T on internal boundaries C UT : IN. Time derivative of U on current grid C UX : IN. -I C UY : IN. I C UXX : IN. I Space derivatives of U on current grid C UXY : IN. I C UYY : IN. -I C ABSTOL : IN. Absolute tolerance for Newton process C DEL : WORK. (LENU) C WORK : WORK. (2.LENU) C FU : OUT. dF(U,Ut)dU C FUX : OUT. dF(Ux)dUx C FUY : OUT. dF(Uy)dUy C FUXX : OUT. dF(Uxx)dUxx C FUYY : OUT. dF(Uyy)dUyy C Ccc EXTERNALS USED: EXTERNAL PERTRG, PRTRGU, RES C C----------------------------------------------------------------------- C INTEGER I, LENU, LUTBAR REAL FACX, FACY, FACXX, FACYY LENU = NPTS*NPDE LUTBAR = 1 + LENU C Ccc How to decide if derivatives are `zero'? C Take `zero'-value of U divided by the grid width FACXX = 1/DX**2 FACYY = 1/DY**2 C C dF(U,Ut)/dU CALL PRTRGU (NPTS, NPDE, U, A0, DT, UT, ABSTOL, DEL, + WORK, WORK(LUTBAR)) CALL RES (T, X, Y, NPTS, NPDE, WORK, LLBND, ILBND, LBND, UIB, + WORK(LUTBAR), UX, UY, UXX, UXY, UYY, FU) DO 10 I = 1, LENU FU(I) = (FU(I) - F(I)) / DEL(I) 10 CONTINUE IF (PRECFO) THEN C FACX = 1/(2*DX) FACY = 1/(2*DY) C C dF(Ux)/dUx CALL PERTRG (NPTS, NPDE, UX, ABSTOL, FACX, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, WORK, UY, UXX, UXY, UYY, FUX) DO 11 I = 1, LENU FUX(I) = (FUX(I) - F(I)) / DEL(I) 11 CONTINUE C C dF(Uy)/dUy CALL PERTRG (NPTS, NPDE, UY, ABSTOL, FACY, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, WORK, UXX, UXY, UYY, FUY) DO 12 I = 1, LENU FUY(I) = (FUY(I) - F(I)) / DEL(I) 12 CONTINUE ENDIF C C dF(Uxx)/dUxx CALL PERTRG (NPTS, NPDE, UXX, ABSTOL, FACXX, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, WORK, UXY, UYY, FUXX) DO 20 I = 1, LENU FUXX(I) = (FUXX(I) - F(I)) / DEL(I) 20 CONTINUE C C dF(Uyy)/dUyy CALL PERTRG (NPTS, NPDE, UYY, ABSTOL, FACYY, DEL, WORK) CALL RES (T, X, Y, NPTS, NPDE, U, LLBND, ILBND, LBND, UIB, + UT, UX, UY, UXX, UXY, WORK, FUYY) DO 30 I = 1, LENU FUYY(I) = (FUYY(I) - F(I)) / DEL(I) 30 CONTINUE RETURN END SUBROUTINE PRTRGU (NPTS, NPDE, U, A0, DT, UT, ABSTOL, DEL, + UBAR, UTBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL U(NPTS,NPDE), A0, DT, UT(NPTS,NPDE), ABSTOL(NPDE), + DEL(NPTS,NPDE), UBAR(NPTS,NPDE), UTBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb U. Return perturbance in DEL and perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C DT : IN. Current time step size C UT : IN. Time derivative of U on current grid C ABSTOL : IN. Absolute tolerance for Newton process C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C UTBAR : OUT. Perturbed values of UT C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IC, IPT REAL DELI, EPS, TOL CALL RCOPY (NPTS*NPDE, U, UBAR) CALL RCOPY (NPTS*NPDE, UT, UTBAR) EPS = SQRT(UROUND) DO 10 IC = 1, NPDE TOL = ABSTOL(IC) DO 20 IPT = 1, NPTS C Compute perturbance, if U=0, U(T+dt)=dtUt, if both are zero take C threshold DELI = EPS*MAX(ABS(U(IPT,IC)),ABS(DT*UT(IPT,IC)),TOL) DELI = SIGN(DELI,DT*UT(IPT,IC)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT,IC) = (U(IPT,IC)+DELI)-U(IPT,IC) UBAR(IPT,IC) = U(IPT,IC) + DEL(IPT,IC) UTBAR(IPT,IC) = UT(IPT,IC) + A0*DEL(IPT,IC) 20 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PERTRG (NPTS, NPDE, U, ABSTOL, FAC, DEL, UBAR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE REAL U(NPTS,NPDE), ABSTOL(NPDE), FAC, DEL(NPTS,NPDE), + UBAR(NPTS,NPDE) C Ccc PURPOSE: C Perturb U. Return perturbance in DEL and perturbed U in UBAR. C Ccc PARAMETER DESCRIPTION: C NPTS : IN. # gridpoints C NPDE : IN. # PDE components C U : IN. Solution or derivative of solution to be perturbed C ABSTOL : IN. Absolute tolerance for Newton process C FAC : IN. Grid factor for tolerance to get threshold C DEL : OUT. Perturbation values C UBAR : OUT. Perturbed values of U C Ccc EXTERNALS USED: EXTERNAL RCOPY C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER IC, IPT REAL DELI, EPS, TOL CALL RCOPY (NPTS*NPDE, U, UBAR) EPS = SQRT(UROUND) DO 10 IC = 1, NPDE TOL = ABSTOL(IC)*FAC DO 20 IPT = 1, NPTS C Compute perturbance DELI = EPS*MAX(ABS(U(IPT,IC)),TOL) C To ensure that UBAR has the same sign as U DELI = SIGN(DELI,U(IPT,IC)) C To ensure that the perturbance is the same machine number as the C denominator DEL(IPT,IC) = (U(IPT,IC)+DELI)-U(IPT,IC) UBAR(IPT,IC) = U(IPT,IC) + DEL(IPT,IC) 20 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PREG (NPTS, NPDE, DX, DY, LLBND, ILBND, LBND, + FU, FUX, FUY, FUXX, FUYY, PRECFO, DGINV) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) LOGICAL PRECFO REAL DX, DY, + FU(NPTS*NPDE), FUX(NPTS*NPDE), FUY(NPTS*NPDE), + FUXX(NPTS*NPDE), FUYY(NPTS*NPDE), + DGINV(NPTS*NPDE) C Ccc PURPOSE: C Compute inverse of diagonal of Jacobian G = dF/dU using derivatives C of residual wrt (derivatives of) U. C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C DX : IN. Current grid width in X-direction C DY : IN. Current grid width in Y-direction C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FU : IN. Derivative residual F(.,U,Ut,.) wrt U C FUX : IN. Derivative residual F(.,Ux,.) wrt Ux C FUY : IN. Derivative residual F(.,Uy,.) wrt Uy C FUXX : IN. Derivative residual F(.,Uxx,.) wrt Uxx C FUYY : IN. Derivative residual F(.,Uyy,.) wrt Uyy C PRECFO : IN. If FALSE first order derivatives may be neglected C DGINV : OUT. Inverse of diagonal of Jacobian. C Ccc EXTERNALS USED: EXTERNAL PREGBD C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, LENU REAL DG, EPS, FACX, FACY, FACXX, FACYY C EPS = SQRT(UROUND) C LENU = NPTS*NPDE C FACXX = 1/DX**2 FACYY = 1/DY**2 C DO 10 I = 1, LENU C dF(ipt,ic)/dU(ipt,ic) DGINV(I) = FU(I) + + FUXX(I)*(-2*FACXX) + FUYY(I)*(-2*FACYY) 10 CONTINUE C C Correct boundaries IF (PRECFO) THEN FACX = 1/(2*DX) FACY = 1/(2*DY) CALL PREGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, DGINV) ENDIF DO 20 I = 1, LENU DG = DGINV(I) IF (ABS(DG) .LT. EPS) THEN DGINV(I) = 1.0 ELSE DGINV(I) = 1.0/DG ENDIF 20 CONTINUE C RETURN END SUBROUTINE PREGBD (NPTS, NPDE, FACX, FACY, + LLBND, ILBND, LBND, FUX, FUY, G) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER NPTS, NPDE, LLBND(0:*), ILBND(*), LBND(*) REAL FACX, FACY, + FUX(NPTS,NPDE), FUY(NPTS,NPDE), G(NPTS,NPDE) C Ccc PURPOSE: C Correct Jacobian G = dF/dU for second order approximation of C first order derivatives at boundaries C C PARAMETER DESCRIPTION: C NPTS : IN. # grid points C NPDE : IN. # PDE components C FACX : IN. 1/(2*DX) C FACY : IN. 1/(2*DY) C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : IN. (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C FUX : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Ux C FUY : IN. Derivative residual F(t,U,Ut,Ux,Uy,Uxx,Uxy,Uyy) wrt Uy C G : INOUT. C IN: Main diagonal of Jacobian C OUT: G corrected for first order derivatives at C boundaries C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IC, IB, LB C Ccc Boundary corrections, no corrections needed for internal boundaries DO 20 IB = 1, LLBND(0) IF (ILBND(IB) .EQ. 1) THEN C Lower boundary, correction needed for dF/dUy DO 30 IC = 1, NPDE CDIR$ IVDEP DO 35 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUY(IPT,IC)*(-3*FACY) 35 CONTINUE 30 CONTINUE ELSE IF (ILBND(IB) .EQ. 2) THEN C Left boundary, correction needed for dF/dUx DO 40 IC = 1, NPDE CDIR$ IVDEP DO 45 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUX(IPT,IC)*(-3*FACX) 45 CONTINUE 40 CONTINUE ELSE IF (ILBND(IB) .EQ. 3) THEN C Upper boundary, correction needed for dF/dUy DO 50 IC = 1, NPDE CDIR$ IVDEP DO 55 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUY(IPT,IC)*(+3*FACY) 55 CONTINUE 50 CONTINUE ELSE IF (ILBND(IB) .EQ. 4) THEN C Right boundary, correction needed for dF/dUx DO 60 IC = 1, NPDE CDIR$ IVDEP DO 65 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + FUX(IPT,IC)*(+3*FACX) 65 CONTINUE 60 CONTINUE ELSE IF (ILBND(IB) .EQ. 12 .OR. + ILBND(IB) .EQ. 21) THEN CDIR$ NOVECTOR C Lowerleft corner, correction needed for dF/dUx and dF/dUy DO 100 IC = 1, NPDE DO 105 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUY(IPT,IC)*(-3*FACY) + + FUX(IPT,IC)*(-3*FACX) 105 CONTINUE 100 CONTINUE ELSE IF (ILBND(IB) .EQ. 23 .OR. + ILBND(IB) .EQ. 32) THEN C Leftupper corner, correction needed for dF/dUx and dF/dUy DO 110 IC = 1, NPDE DO 115 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUX(IPT,IC)*(-3*FACX) + + FUY(IPT,IC)*(+3*FACY) 115 CONTINUE 110 CONTINUE ELSE IF (ILBND(IB) .EQ. 34 .OR. + ILBND(IB) .EQ. 43) THEN C Upperright corner, correction needed for dF/dUx and dF/dUy DO 120 IC = 1, NPDE DO 125 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUY(IPT,IC)*(+3*FACY) + + FUX(IPT,IC)*(+3*FACX) 125 CONTINUE 120 CONTINUE ELSE IF (ILBND(IB) .EQ. 41 .OR. + ILBND(IB) .EQ. 14) THEN C Rightlower corner, correction needed for dF/dUx and dF/dUy DO 130 IC = 1, NPDE DO 135 LB = LLBND(IB), LLBND(IB+1)-1 IPT = LBND(LB) G(IPT,IC) = G(IPT,IC) + + FUX(IPT,IC)*(+3*FACX) + + FUY(IPT,IC)*(-3*FACY) 135 CONTINUE 130 CONTINUE ENDIF 20 CONTINUE C RETURN END SUBROUTINE GCRO (N, XV, F, WT, TOL, BDPREC, PREC, + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + NRRMAX, MAXLR, MAXL, LUN, + R, U, C, ZW, WORK, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, ISTRUC(0:*), NPDE, NRRMAX, MAXLR, MAXL, LUN, + ITER, IERR LOGICAL BDPREC REAL XV(N), F(N), WT(N), TOL, PREC(N), + X(*), Y(*), UIB(*), UNP1(0:*), + TNP1, A0, DX, DY, RWORK(*), + R(N), U(N,0:MAXLR-1), C(N,0:MAXLR-1), ZW(0:MAXLR-1,0:MAXLR-1), + WORK(*), ERR C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: C Ccc PURPOSE: C Solve a Non-Symmetric linear system Gx = F using the matrix-free C (block)-diagonally scaled GCRO(NRRMAX+1,MAXLR,(MAXL)) method. C Actually solved is the system [W.D^(-1).G.W^(-1)].[W.x] = [W.D^(-1).F] C where W = diag(WT(i)) and D is the (block) diagonal of G C until max(||residual||_2,||GM^(-1).residual||_2) < TOL, C with GM the projection of the matrix unto the Krylov base obtained C with the GMRES inner iteration. C Ccc PARAMETER DESCRIPTION: C N : IN. Dimension of the system C XV : OUT. Final approximate solution. C F : IN. Right-hand side vector. C WT : IN. Contains weight factors to compute weighted norm. C TOL : IN. System is considered to be solved if C weighted 2-norm < TOL C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C ISTRUC : IN. -I Parameters C ... I for C RWORK : IN. -I residual evaluation C NRRMAX : IN. # restarts outer loop C MAXLR : IN. max. iterations outer loop C MAXL : IN. max. iterations GMRES (no restarts) C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C R : WORK. C U : WORK. C C : WORK. C ZW : WORK. C WORK : WORK. (N.(MAXL+1)+(MAXL+3).MAXL+4.N+1) C ITER : OUT. Number of iterations required to reach convergence, or C until (NRRMAX+1).MAXLR. outer loop iterations have been C performed. ITER is the sum of the number of outerloop C iterations + number of GMRES (preconditioner) iterations. C ERR : OUT. Weighted 2-norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in (NRRMAX+1).MAXLR. outer loop C iterations C 2: Break down in outer loop C Ccc EXTERNALS USED: REAL SDOT, SNRM2 EXTERNAL BCKBDI, GMRESO, MVDIFF, RCOPY, SAXPY, SDOT, SNRM2, ZERO C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C C----------------------------------------------------------------------- C INTEGER I, IR, J, K, GRITER, PRITER, GMITER, + LV, LHES, LQ, LRWRK REAL RNRM, UNRM C Ccc Distribute workspace for GMRES LV = 1 LHES = LV + N*(MAXL+1) LQ = LHES + (MAXL+1)*MAXL LRWRK= LQ + 2*MAXL C ITER = 0 IERR = 0 GRITER = 0 PRITER = 0 C Ccc Initialize X and set initial residual to r_0 = W.D^(-1).F CALL ZERO (N, XV) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, F, R) DO 10 I = 1, N R(I) = WT(I)*R(I) 10 CONTINUE ELSE DO 11 I = 1, N R(I) = WT(I)*PREC(I)*F(I) 11 CONTINUE ENDIF C C Ccc Check stopping criterion ERR = SNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,*) + 'Diag. scaled GCRO(NRRMAX,MAXLR))' WRITE(LUN,'(''NRRMAX, MAXLR, N:'',3I10)') + NRRMAX, MAXLR, N WRITE(LUN,*) '# it. GCRO # it.GMRES Error Estimate' WRITE(LUN,'(2I10,E20.7)') GRITER, PRITER, ERR ENDIF IF (ERR .LT. SQRT(UROUND)*TOL) RETURN C Ccc Restart loop DO 150 IR = 0, NRRMAX IERR = 0 C Ccc Outer loop DO 200 K = 0, MAXLR-1 C C Perform the diagonally scaled GMRES algorithm to solve C (I-C_k-1C_k-1^T).[W.D^(-1).G.W^(-1)].u_k = A_k-1.u_k = r_k-1, C r_k = r_k-1 - A_k-1.u_k C c_k = (r_k-1 - r_k)/ C to compute the initial preconditioner for the E-N process C If u_k is solved accurately enough ||u_k = H_k.r_k||_2 is a good C measure for the error when solving DAE systems. CALL GMRESO (N, U(1,K), R, WT, BDPREC, PREC, C, K, TOL, MAXL, + F, ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK(LV), WORK(LHES), WORK(LQ), WORK(LRWRK), + LUN, GMITER, ERR, IERR) PRITER = PRITER + GMITER IF (LUN .GT. 0) THEN WRITE(LUN,*) 'Result GMRES:', GMITER, TOL, ERR, IERR ENDIF IF (IERR .GT. 1) THEN PRINT *, 'wat nu?' STOP ENDIF IERR = 0 C Ccc Check stopping criterion UNRM = SNRM2 (N, U(1,K), 1) C C Compute v = [W.D^(-1).G.W^(-1)].u_k DO 210 I = 1, N WORK(LV+N-1+I) = U(I,K)/WT(I)/UNRM 210 CONTINUE CALL MVDIFF (N, F, WORK(LV+N), + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK(LHES), WORK(LV)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, WORK(LV), WORK(LV+N)) DO 220 I = 1, N WORK(LV-1+I) = WT(I)*WORK(LV+N-1+I)*UNRM 220 CONTINUE ELSE DO 221 I = 1, N WORK(LV-1+I) = WT(I)*PREC(I)*WORK(LV-1+I)*UNRM 221 CONTINUE ENDIF C C C Compute ZW[0:k-1,k] = C_k^T.v DO 300 I = 0, K-1 ZW(I,K) = SDOT(N, C(1,I),1, WORK(LV),1) 300 CONTINUE C GRITER = GRITER + 1 C Ccc Check stopping criterion RNRM = SNRM2 (N, R, 1) IF (LUN .NE. 0) THEN WRITE(LUN,'(2I10,2E20.7)') GRITER, PRITER, RNRM, UNRM ENDIF IF (MAX(RNRM,UNRM) .LT. TOL) THEN C Compute x = x + U_k.Z_k^(-1).1 DO 310 I = K, 0, -1 WORK(LV+I) = 1 DO 320 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 320 CONTINUE CALL SAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 310 CONTINUE ITER = GRITER + PRITER GOTO 900 ENDIF 200 CONTINUE Ccc End outer loop C Compute x = x + U_k.Z_k^(-1).1 K = MAXLR-1 DO 330 I = K, 0, -1 WORK(LV+I) = 1 DO 340 J = I+1, K WORK(LV+I) = WORK(LV+I) - ZW(I,J)*WORK(LV+J) 340 CONTINUE CALL SAXPY (N, WORK(LV+I), U(1,I), 1, XV, 1) 330 CONTINUE C 150 CONTINUE Ccc End Restart loop C IERR = 1 ITER = GRITER + PRITER C 900 CONTINUE C Unscale x DO 910 I = 1, N XV(I) = XV(I) / WT(I) 910 CONTINUE RETURN END SUBROUTINE GMRESO (N, XV, BV, WT, BDPREC, PREC, CO, M, TOL, MAXL, + F, ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + V, HES, Q, WORK, + LUN, ITER, ERR, IERR) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, M, ISTRUC(0:*), NPDE, MAXL, LUN, + ITER, IERR LOGICAL BDPREC REAL XV(N), BV(N), WT(N), PREC(N), CO(N,0:M), TOL, + F(*), X(*), Y(*), UIB(*), UNP1(0:*), + TNP1, A0, DX, DY, RWORK(*), + V(N,MAXL+1), HES(MAXL+1,MAXL), + Q(2*MAXL), WORK(*), ERR C Ccc PURPOSE: C Solve a Non-Symmetric linear system C [W.D^(-1).G.W^(-1)].[Wx] = [W.D^(-1).b] C using the (block)-diagonally scaled GMRES(MAXL) method, orthogonalize C new V_k not only against previous ones but also against C's from C outer iteration. C W = diag(WT(i)) and D is the (block) diagonal of G. C The right hand-side W.D^(-1).b is stored in B, C the matrix G and the preconditioner are stored in RWORK and IWORK. C (Dx) is returned in X. C The routine MVDIFF (N, RWORK, IWORK, X, Y) should perform y = Gx C Ccc PARAMETER DESCRIPTION: C N : IN. # grid points C XV : OUT. Final approximate solution. C BV : IN. Preconditioned right-hand side vector. C OUT. Residual vector. C WT : IN. Contains weight factors to compute weighted norm. C BDPREC : IN. if true a block-diagonal preconditioner is used C PREC : IN. LU decomposition of (block-)diagonal of G. main diagonal C inverted C CO : IN. (.,0:M-1): vectors from outer iteration against which C V's should be orthogonalized. C OUT. (.,M) = Residual_outer_old - Residual C M : IN. Outer loop iteration count C TOL : IN. System is considered to be solved if C 2-norm < TOL C F : IN. -I Parameters C ... I for C RWORK : IN. -I residual evaluation C MAXL : IN. max. iterations GMRES (no restarts) C V : WORK. C HES : WORK. C Q : WORK. C WORK : WORK. 4.N+1 C LUN : IN. Logical unit # of file on which to write the error at C each iteration, if this is desired for monitoring convergence C If LUN = 0, no writing will occur. C ITER : OUT. Number of iterations required to reach convergence, or C MAXL+1 if convergence criterion could not be achieved in C MAXL iterations. C ERR : OUT. Weighted max. norm of error estimate in final C approximate solution C IERR : OUT. Error return flag C 0: OK C 1: Method failed to converge in MAXL iterations C Ccc EXTERNALS USED: REAL SDOT, SNRM2 EXTERNAL BCKBDI, MVDIFF, RCOPY, SAXPY, SDOT, SNRM2, ZERO C C----------------------------------------------------------------------- C INTEGER I, J, K REAL C, CNM2, R0NRM, PROD, RHO, S, TEM, T1, T2, T, VNRM C IERR = 0 ITER = 0 C Ccc Initialize solution on zero, the initial residual R0 is the C left preconditioned vector B CALL ZERO (N, XV) CALL RCOPY (N, BV, V(1,1)) R0NRM = SNRM2(N, V(1,1),1) C Ccc Check stopping criterion ERR = R0NRM IF (LUN .NE. 0) THEN WRITE(LUN,'(''Diagonally scaled GMRESO(MAXL)'',I5)') + MAXL WRITE(LUN, + '('' ITER Error Estimate'')') WRITE(LUN,'(I5,E20.7)') ITER, ERR ENDIF C Ccc Rescale so that the norm of V(1,1) is one DO 80 I = 1, N V(I,1) = V(I,1)/R0NRM 80 CONTINUE C Ccc Initialize HES array. CALL ZERO (MAXL*(MAXL+1), HES) C Ccc Main loop to compute the vectors V(*,2) to V(*,MAXL). C The running product PROD is needed for the convergence test. PROD = 1.0 DO 10 K = 1, MAXL ITER = K C C V(*,K+1) = [W.D^(-1).G.W^(-1)] . V(*,K) DO 11 I = 1, N WORK(I) = V(I,K)/WT(I) 11 CONTINUE CALL MVDIFF (N, F, WORK, + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK(1+N), V(1,K+1)) IF (BDPREC) THEN CALL BCKBDI (N/NPDE, NPDE, PREC, V(1,K+1), WORK) DO 12 I = 1, N V(I,K+1) = WT(I)*WORK(I) 12 CONTINUE ELSE DO 13 I = 1, N V(I,K+1) = WT(I)*PREC(I)*V(I,K+1) 13 CONTINUE ENDIF C C Orthogonalize V(*,K+1) first against the previous C using C modified Gram-Schmidt DO 801 I = 0, M-1 TEM = SDOT (N, CO(1,I), 1, V(1,K+1), 1) / + SDOT (N, CO(1,I), 1, CO(1,I), 1) CALL SAXPY (N, -TEM, CO(1,I), 1, V(1,K+1), 1) 801 CONTINUE C C Orthogonalize V(*,K+1) against the previous V using C modified Gram-Schmidt DO 81 I = 1, K HES(I,K) = SDOT (N, V(1,I), 1, V(1,K+1), 1) CALL SAXPY (N, -HES(I,K), V(1,I), 1, V(1,K+1), 1) 81 CONTINUE VNRM = SNRM2(N, V(1,K+1), 1) HES(K+1,K) = VNRM C C Update the QR factors of HES (Q.HES = R) using Givens rotations C First, multiply new column by previous Givens rotations DO 82 I = 1, K-1 T1 = HES(I,K) T2 = HES(I+1,K) C = Q(2*I-1) S = Q(2*I) HES(I ,K) = C*T1 - S*T2 HES(I+1,K) = S*T1 + C*T2 82 CONTINUE C Form last Givens rotation and multiply it with last 2 elements of HES T1 = HES(K,K) T2 = HES(K+1,K) IF (T2 .EQ. 0.0) THEN C = 1.0 S = 0.0 ELSE IF (ABS(T2) .GE. ABS(T1)) THEN T = T1/T2 S = -1.0/SQRT(1.0+T*T) C = -S*T ELSE T = T2/T1 C = 1.0/SQRT(1.0+T*T) S = -C*T ENDIF Q(2*K-1) = C Q(2*K ) = S HES(K,K) = C*T1 - S*T2 IF (HES(K,K) .EQ. 0.0) THEN IERR = 2 RETURN ENDIF C C Update RHO, the estimate of the norm of the residual R0-A*XL. PROD = PROD*Q(2*K) RHO = ABS(PROD*R0NRM) C Ccc Check stopping criterion ERR = RHO IF (LUN .NE. 0) THEN WRITE(LUN,'(I5,2E20.7)') ITER, ERR, ERR/R0NRM ENDIF IF (ERR/R0NRM .LT. 0.001 .AND. ERR .LT. TOL) GOTO 100 IF (K .EQ. MAXL) GOTO 20 C C Rescale so that the norm of V(1,K+1) is one. DO 83 I = 1, N V(I,K+1) = V(I,K+1)/VNRM 83 CONTINUE 10 CONTINUE C 20 CONTINUE IF (RHO .GT. R0NRM) THEN IERR = 2 RETURN ELSE IERR = 1 ENDIF C Ccc Compute the approximation XL to the solution. C Min. ||beta.e1 - Hk+1k.y||_2 C X = X + Vk.y 100 CONTINUE K = ITER WORK(1) = R0NRM DO 110 I = 2, K+1 WORK(I) = 0.0 110 CONTINUE C Q.beta.e1 DO 84 I = 1, K C = Q(2*I-1) S = Q(2*I) T1 = WORK(I) T2 = WORK(I+1) WORK(I ) = C*T1 - S*T2 WORK(I+1) = S*T1 + C*T2 84 CONTINUE C Solve R.y = Q.beta.e1 DO 85 I = 1, K J = K+1-I WORK(J) = WORK(J) / HES(J,J) CALL SAXPY (J-1, -WORK(J), HES(1,J),1, WORK,1) 85 CONTINUE C C X = X + Vk.y DO 120 I = 1,K CALL SAXPY(N, WORK(I), V(1,I), 1, XV, 1) 120 CONTINUE C C Calculate the residual vector CALL RCOPY (N, V(1,1), WORK(K+1)) DO 86 I = 1, K-1 S = Q(2*I) C = Q(2*I-1) DO 87 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 87 CONTINUE 86 CONTINUE I = K S = Q(2*I) C = Q(2*I-1)/VNRM DO 88 J = 1, N WORK(K+J) = S*WORK(K+J) + C*V(J,I+1) 88 CONTINUE DO 89 J = 1, N WORK(K+J) = WORK(K+J)*R0NRM*PROD 89 CONTINUE C C Compute c_m = (b - r) / DO 130 J = 1, N CO(J,M) = BV(J) - WORK(K+J) 130 CONTINUE CNM2 = 1 / SDOT (N, CO(1,M), 1, CO(1,M), 1) DO 140 J = 1, N CO(J,M) = CO(J,M) * CNM2 140 CONTINUE C C Inner residual = outer residual CALL RCOPY (N, WORK(K+1), BV) C RETURN END SUBROUTINE MVDIFF (N, F, XV, + ISTRUC, X, Y, NPDE, UIB, UNP1, + TNP1, A0, DX, DY, RWORK, + WORK, YV) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER N, ISTRUC(0:*), NPDE REAL F(N), XV(N), + X(*), Y(*), UIB(*), UNP1(0:*), + TNP1, A0, DX, DY, RWORK(*), + WORK(*), YV(N) C Ccc PURPOSE: C Compute y = Gx where Gx ~ F(t,U+x,(U+x)_t)-F(t,U,(U+x)_t) C Ccc PARAMETER DESCRIPTION: C N : IN. Dimension of x C F : IN. Residual F(t,U,Udot), U=UNP1, Udot = A0.U+UH C XV : IN. Multiplying vector C ISTRUC : IN. -I Parameters C ... I for C RWORK : IN. -I residual evaluation C WORK : WORK. (N+1 + 2N) C YV : OUT. Result vector C Ccc EXTERNALS USED: EXTERNAL RESID C C----------------------------------------------------------------------- C INTEGER LLROW, NROWS, NPTS, LIROW, LICOL, + LLLBND, NBNDS, NBDPTS, NBIPTS, LILBND, LLBNDP, + LLBLW, LLABV, + LUT, LUX, LUY, LUXX, LUXY, LUYY, + LUBAR, LUTBAR, LFBAR, I C LLROW = 0 NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS LLLBND = LICOL+NPTS NBNDS = ISTRUC(LLLBND) NBDPTS = ISTRUC(LLLBND+NBNDS+1)-1 NBIPTS = ISTRUC(LLLBND+NBNDS+2)-1 LILBND = LLLBND+NBNDS+3 LLBNDP = LILBND+NBNDS LLBLW = LLBNDP+NBIPTS LLABV = LLBLW +NPTS C LUT = 1 LUX = LUT + N LUY = LUX + N LUXX = LUY + N LUXY = LUXX + N LUYY = LUXY + N C LUBAR = 1 LUTBAR = LUBAR + 1+N LFBAR = LUTBAR + N C Ccc Store U+x in WORK(LUBAR), and d(U+x)/dt in WORK(LUTBAR) WORK(LUBAR) = 0.0 DO 10 I = 1, N WORK(LUBAR+I) = UNP1(I) + XV(I) WORK(LUTBAR-1+I) = RWORK(LUT-1+I) + A0*XV(I) 10 CONTINUE C Ccc Compute space derivatives and residual CALL DERIVS (NPTS, NPDE, WORK(LUBAR), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), + ISTRUC(LLBLW), ISTRUC(LLABV), + DX, DY, + RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY)) CALL RES (TNP1, X, Y, NPTS, NPDE, WORK(LUBAR+1), + ISTRUC(LLLBND), ISTRUC(LILBND), ISTRUC(LLBNDP), UIB, + WORK(LUTBAR), RWORK(LUX), RWORK(LUY), + RWORK(LUXX), RWORK(LUXY), RWORK(LUYY), WORK(LFBAR)) C DO 20 I = 1, N YV(I) = WORK(LFBAR-1+I) - F(I) 20 CONTINUE RETURN END SUBROUTINE PRDOM (LROW, IROW, ICOL, LLBND, ILBND, LBND, + IDOM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LROW(0:*), IROW(*), ICOL(*), + LLBND(0:*), ILBND(*), LBND(*), IDOM(0:*), NX, NY C Ccc PURPOSE: C Print domain. Internal points are .., external points XX, C physical boundary points their ILBND value and internal boundary C values II. C Ccc PARAMETER DESCRIPTION: C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LLBND : (0:LLBND(0)+2) C LLBND(0) = NBNDS: total # physical boundaries and corners in C actual domain. C NB. corners should be stored as an independent boundary C (cf. ILBND). The order in LLBND should be first the C boundaries and then the corners. C LLBND(1:NBNDS): pointers to a specific boundary or corner in C LBND C LLBND(NBNDS+1) = NBDPTS+1: total # physical boundary points C in LBND + 1 C LLBND(NBNDS+1): pointer to internal boundary in LBND C LLBND(NBNDS+2) = NBIPTS+1: total # points in LBND + 1 C ILBND : (NBNDS) C ILBND(IB): type of boundary: C 1: Lower boundary -I C 2: Left boundary I C 3: Upper boundary I max. first order derivative C 4: Right boundary -I C 12: Lowerleft corner -I C 23: Leftupper corner I corners of 90 degrees C 34: Upperright corner I (external corners) C 41: Rightlower corner -I max. first order deriv. C 21: Leftlower corner -I C 32: Upperleft corner I corners of 270 degrees C 43: Rightupper corner I (internal corners) C 14: Lowerright corner -I max. first order deriv. C LBND : (NBIPTS) C LBND(IBPT): pointer to boundary point in actual grid C IDOM : WORK. IDOM(0:NPTS): location in domain C 0: interior point C IB: on boundary IB, IB = 1, NBNDS+1 C Ccc EXTERNALS USED: EXTERNAL DOMFLG C C----------------------------------------------------------------------- C CHARACTER*78 LINE(0:25) INTEGER I, J, IR, IPT, NROWS, NPTS, NBNDS C IF (NX .GE. 26 .OR. NY .GE. 26) THEN PRINT *, 'Sorry, Nx, Ny < 26; adapt PRDOM' RETURN ENDIF C NROWS = LROW(0) NPTS = LROW(NROWS+1)-1 NBNDS = LLBND(0) C C Set domain values CALL DOMFLG (NPTS, LLBND, LBND, IDOM) LINE(0) = ' ' DO 10 I = 1, NX+1 WRITE(LINE(0)(3*I-2:3*I),'('' XX'')') 10 CONTINUE DO 15 J = 1, NY LINE(J) = LINE(0) 15 CONTINUE DO 20 IR = 1, NROWS J = IROW(IR) DO 30 IPT = LROW(IR), LROW(IR+1)-1 I = ICOL(IPT)+1 IF (IDOM(IPT) .EQ. 0) THEN WRITE(LINE(J)(3*I-2:3*I),'('' ..'')') ELSE IF (IDOM(IPT) .EQ. NBNDS+1) THEN WRITE(LINE(J)(3*I-2:3*I),'('' II'')') ELSE WRITE(LINE(J)(3*I-2:3*I),'(I3)') ILBND(IDOM(IPT)) ENDIF 30 CONTINUE 20 CONTINUE DO 40 J = NY, 0, -1 PRINT '(A)', LINE(J) PRINT * 40 CONTINUE RETURN END SUBROUTINE SETXY (XL, YL, DX, DY, LROW, IROW, ICOL, X, Y) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LROW(0:*), IROW(*), ICOL(*) REAL XL, YL, DX, DY, X(*), Y(*) C Ccc PURPOSE: C Store X- and Y-coordinates of the grid points, rowwise. C Ccc PARAMETER DESCRIPTION: C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C X : OUT. Contains the X-coordinates for the grid C Y : OUT. Contains the Y-coordinates for the grid C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IPT, IR, NROWS REAL YIR C NROWS = LROW(0) DO 10 IR = 1, NROWS YIR = YL + IROW(IR)*DY DO 20 IPT = LROW(IR), LROW(IR+1)-1 X(IPT) = XL + ICOL(IPT)*DX Y(IPT) = YIR 20 CONTINUE 10 CONTINUE RETURN END SUBROUTINE PRSOL (LUN, T, NPDE, XL, YL, DXB, DYB, LGRID, ISTRUC, + LSOL, SOL) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, NPDE, LGRID(0:*), ISTRUC(*), LSOL(*) REAL T, XL, YL, DXB, DYB, SOL(*) C Ccc PURPOSE: C Print solution and coordinate values at all grid levels. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C T : IN. Current value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lowerleft corner of (virtual) domain C YL : IN. Y-coordinate of lowerleft corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C Ccc EXTERNALS USED: EXTERNAL PRSOLL C C----------------------------------------------------------------------- C INTEGER MAXLEV, LEVEL, LLROW, NROWS, NPTS, LIROW, LICOL REAL DX, DY MAXLEV = LGRID(0) DX = DXB DY = DYB DO 10 LEVEL = 1, MAXLEV LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS CALL PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + ISTRUC(LLROW), ISTRUC(LIROW), ISTRUC(LICOL), + SOL(LSOL(LEVEL)+1)) DX = DX/2 DY = DY/2 10 CONTINUE RETURN END SUBROUTINE PRSOLL (LUN, LEVEL, T, NPTS, NPDE, XL, YL, DX, DY, + LROW, IROW, ICOL, U) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUN, LEVEL, NPTS, NPDE, LROW(0:*), IROW(*), ICOL(*) REAL T, XL, YL, DX, DY, U(NPTS,NPDE) C Ccc PURPOSE: C Print solution and X- and Y-coordinates of gridlevel LEVEL. C Ccc PARAMETER DESCRIPTION: C LUN : IN. Logical unit number of print file C LEVEL : IN. Grid level corresponding with solution U. C T : IN. Current value of time variable C NPTS : IN. # grid points at this level C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower-left point of virtual rectangle C YL : IN. Y-coordinate of lower-left point of virtual rectangle C DX : IN. Grid width in X-direction C DY : IN. Grid width in Y-direction C LROW : IN. (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : IN. (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : IN. (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C U : IN. Solution on this grid level C Ccc EXTERNALS USED: NONE C C----------------------------------------------------------------------- C INTEGER IC, IPT, IR, NROWS REAL X, Y C NROWS = LROW(0) WRITE(LUN,'(//// T10,A,T30,A,T46,A,T62,A,T71,A //)') + 'Level', 't', 'Y', 'X', 'Solution' IR = 1 Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T13,I2,T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + LEVEL, T, Y, X, U(IPT,1) DO 10 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 10 CONTINUE DO 20 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 30 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 30 CONTINUE 20 CONTINUE DO 40 IR = 2, NROWS Y = YL + IROW(IR)*DY IPT = LROW(IR) X = XL + ICOL(IPT)*DX WRITE(LUN, + '(T21,E12.5,T37,E12.5,T53,E12.5,T69,E12.5)') + T, Y, X, U(IPT,1) DO 50 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 50 CONTINUE DO 60 IPT = LROW(IR)+1, LROW(IR+1)-1 X = XL + ICOL(IPT)*DX WRITE(LUN,'(T53,E12.5,T69,E12.5)') X, U(IPT,1) DO 70 IC = 2, NPDE WRITE(LUN,'(T69,E12.5)') U(IPT,IC) 70 CONTINUE 60 CONTINUE 40 CONTINUE RETURN END SUBROUTINE WRUNI (LUNS, LUNG, UNILEV, + T, NPDE, XL, YL, DXB, DYB, NXB, NYB, + LGRID, ISTRUC, LSOL, SOL, UNIFRM, NX, NY) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUNS, LUNG, UNILEV, + NPDE, NXB, NYB, LGRID(0:*), ISTRUC(*), LSOL(*), NX, NY REAL T, XL, YL, DXB, DYB, SOL(*), UNIFRM(0:NX,0:NY,NPDE) C Ccc PURPOSE: C Write (interpolated) solution values at grid level UNILEV to file C LUNS. C Write maximum gridlevel used in each point to file LUNG. C NB. The data will not be correct for a domain with holes in it with C a size of the width of the base grid, e.g. it will ignore some holes C in the domain of the example problem. C Ccc PARAMETER DESCRIPTION: C LUNS : IN. Logical unit number of solution file C LUNG : IN. Logical unit number of grid level file C UNILEV : IN. Maximum grid level to be used to generate the data C T : IN. Value of time variable C NPDE : IN. # PDE components C XL : IN. X-coordinate of lower left corner of (virtual) domain C YL : IN. Y-coordinate of lower left corner of (virtual) domain C DXB : IN. Cell width in X-direction of base grid C DYB : IN. Cell width in Y-direction of base grid C NXB,NYB: IN. # gridcells in X- and Y-direction, resp., on base grid C LGRID : IN. (0:*) C LGRID(0) = max. grid level used at T C LGRID(1): pointer to base grid structure ISTRUC C LGRID(LEVEL): pointer to grid structure (LROW, IROW, ICOL) C of refinement level LEVEL for time T C ISTRUC : IN. (*) C ISTRUC(LGRID(LEVEL):.) contains (LROW,IROW,ICOL) of grid C level LEVEL, C LROW : (0:LROW(0)+1) C LROW(0) = NROWS: Actual # rows in grid C LROW(1:NROWS): pointers to the start of a row in the grid C LROW(NROWS+1) = NPTS+1: Actual # nodes in grid + 1 C IROW : (NROWS) C IROW(IR): row number of row IR in virtual rectangle C ICOL : (NPTS) C ICOL(IPT): column number of grid point IPT in virtual C rectangle C LSOL : IN. (*) C LSOL(LEVEL): pointer to (injected) solution at grid C of refinement level LEVEL for time T C SOL : IN. (*) C SOL(LSOL(LEVEL)+1:LSOL(LEVEL)+NPTS(LEVEL)*NPDE) contains C U_LEVEL(NPTS,NPDE) C UNIFRM : WORK. (Interpolated) solution on level UNILEV / max. grid C level used. C NX, NY : IN. # gridcells in X- and Y-direction, resp., on grid of C of level UNILEV C C----------------------------------------------------------------------- C C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C !!! !!! C !!! In subroutine WRUNI the constant NONVAL should be adjusted to !!! C !!! the data (NONVAL = impossible value for the first componenent) !!! C !!! !!! REAL NONVAL PARAMETER (NONVAL = -999.999) C !!! !!! C !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! C C----------------------------------------------------------------------- C INTEGER I, IC, ICOL, IMUL, IPT, IR, IROW, J, + LEVEL, LLROW, LIROW, LICOL, MAXLEV, NROWS, NPTS DO 1 IC = 1, NPDE DO 1 IROW = 0, NY DO 1 ICOL = 0, NX UNIFRM(ICOL,IROW,IC) = NONVAL 1 CONTINUE MAXLEV = LGRID(0) DO 10 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 20 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 30 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL DO 40 IC = 1, NPDE UNIFRM(ICOL,IROW,IC) = + SOL(LSOL(LEVEL)+(IC-1)*NPTS+IPT) 40 CONTINUE 30 CONTINUE 20 CONTINUE 10 CONTINUE DO 100 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 110 J = IMUL, NY, IMUL*2 DO 110 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 120 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I,J-IMUL,IC)+UNIFRM(I,J+IMUL,IC))/2 120 CONTINUE ENDIF 110 CONTINUE DO 130 J = 0, NY, IMUL DO 130 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .EQ. NONVAL) THEN DO 140 IC = 1, NPDE UNIFRM(I,J,IC) = + (UNIFRM(I-IMUL,J,IC)+UNIFRM(I+IMUL,J,IC))/2 140 CONTINUE ENDIF 130 CONTINUE 100 CONTINUE DO 150 J = 0, NY DO 150 I = 0, NX WRITE(LUNS,'(100E13.3)') (UNIFRM(I,J,IC), IC = 1, NPDE) 150 CONTINUE C C Grids DO 201 IROW = 0, NY DO 201 ICOL = 0, NX UNIFRM(ICOL,IROW,1) = 0 201 CONTINUE DO 210 LEVEL = 1, UNILEV IMUL = 2**(UNILEV-LEVEL) LLROW = LGRID(LEVEL) NROWS = ISTRUC(LLROW) NPTS = ISTRUC(LLROW+NROWS+1)-1 LIROW = LLROW+NROWS+2 LICOL = LIROW+NROWS DO 220 IR= 1, NROWS IROW = ISTRUC(LIROW-1+IR)*IMUL DO 230 IPT = ISTRUC(LLROW+IR), ISTRUC(LLROW+IR+1)-1 ICOL = ISTRUC(LICOL-1+IPT)*IMUL UNIFRM(ICOL,IROW,1) = LEVEL 230 CONTINUE 220 CONTINUE 210 CONTINUE DO 300 LEVEL = 2, UNILEV IMUL = 2**(UNILEV-LEVEL) DO 310 J = IMUL, NY, IMUL*2 DO 310 I = 0, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I,J-IMUL,1),UNIFRM(I,J+IMUL,1)) ENDIF 310 CONTINUE DO 330 J = 0, NY, IMUL DO 330 I = IMUL, NX, IMUL*2 IF (UNIFRM(I,J,1) .LT. LEVEL) THEN UNIFRM(I,J,1) = + MIN(UNIFRM(I-IMUL,J,1),UNIFRM(I+IMUL,J,1)) ENDIF 330 CONTINUE 300 CONTINUE DO 350 J = 0, NY DO 350 I = 0, NX WRITE(LUNG,'(I2)') NINT(UNIFRM(I,J,1)) 350 CONTINUE RETURN END SUBROUTINE DUMP (LUNDMP, RWK, IWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LUNDMP, IWK(*) REAL RWK(*) C Ccc PURPOSE: C Dump all information necessary for a restart of VLUGR2 on file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : IN. Real workstorage as returned from VLUGR2 C IWK : IN. Integer workstorage as returned from VLUGR2 C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J WRITE(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO WRITE(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) WRITE(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) WRITE(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) RETURN END SUBROUTINE RDDUMP (LUNDMP, RWK, LENRWK, IWK, LENIWK) C C----------------------------------------------------------------------- C Ccc PARAMETER SPECIFICATION: INTEGER LENIWK INTEGER LUNDMP, LENRWK, IWK(LENIWK) REAL RWK(LENRWK) C Ccc PURPOSE: C Read all information necessary for a restart of VLUGR2 from file C Ccc PARAMETER DESCRIPTION: C LUNDMP : IN. Logical unit number of dumpfile. Should be opened as an C unformatted file. C RWK : OUT. Real workstorage intended to pass to VLUGR2 C LENRWK : IN. Dimension of RWK. C IWK : OUT. Integer workstorage intended to pass to VLUGR2 C LENIWK : IN. Dimension of IWK. C Ccc EXTERNALS USED: NONE C C Ccc INCLUDE 'CMNSTATS' C C CMNSTATS C C COMMON with integration statistics INTEGER MXCLEV, MXCNIT PARAMETER (MXCLEV = 10, MXCNIT = 20) INTEGER LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS(MXCLEV), NRESID(MXCLEV), NNIT(MXCLEV), + NLSIT(MXCLEV,MXCNIT) COMMON /STATS/ LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + NJACS, NRESID, NNIT, NLSIT SAVE /STATS/ C C end INCLUDE 'CMNSTATS' C C Ccc INCLUDE 'CMNWRITEF' C C CMNWRITEF C C COMMON needed for continuation calls INTEGER MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB LOGICAL FIRST, SECOND REAL T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO COMMON /WRITIF/ MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB COMMON /WRITLF/ FIRST, SECOND COMMON /WRITRF/ T0, TW, TEW, DTW, XLW,YLW, XRW,YUW, DXB, DYB, DTO SAVE /WRITIF/, /WRITLF/, /WRITRF/ C C end INCLUDE 'CMNWRITEF' C C C----------------------------------------------------------------------- C INTEGER I, J READ(LUNDMP) MAXLVW, NPDEW, LRWKPS, LIWKPS, LRWKB, LIWKB, + FIRST, SECOND, + T0, TW, TEW, DTW, XLW, YLW, XRW, YUW, DXB, DYB, DTO IF (LENRWK .LT. LRWKPS+LRWKB .OR. LENIWK .LT. LIWKPS+LIWKB) THEN PRINT *, LENRWK, LRWKPS+LRWKB, LENIWK, LIWKPS+LIWKB STOP 'work space too small' ENDIF READ(LUNDMP) LUNPDS, LUNNLS, LUNLSS, LEVEL, NSTEPS, NREJS, + (NJACS(I), I=1,MXCLEV), (NRESID(I), I=1,MXCLEV), + (NNIT(I), I=1,MXCLEV), ((NLSIT(I,J), I=1,MXCLEV), J=1,MXCNIT) READ(LUNDMP) (RWK(I), I=1,LRWKPS+LRWKB) READ(LUNDMP) (IWK(I), I=1,LIWKPS+LIWKB) C RETURN END LOGICAL FUNCTION CHKWRK (LRWKN, LENRWK, LIWKN, LENIWK, + LLWKN, LENLWK) C----------------------------------------------------------------------- INTEGER LRWKN, LENRWK, LIWKN, LENIWK, LLWKN, LENLWK C C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C C----------------------------------------------------------------------- CHKWRK = .TRUE. IF (LRWKN .GT. LENRWK) THEN WRITE(LUNERR, + '(''Real workspace too small, required at least:'',I10)') + LRWKN CHKWRK = .FALSE. ENDIF IF (LIWKN .GT. LENIWK) THEN WRITE(LUNERR, + '(''Integer workspace too small, required at least:'',I10)') + LIWKN CHKWRK = .FALSE. ENDIF IF (LLWKN .GT. LENLWK) THEN WRITE(LUNERR, + '(''Logical workspace too small, required at least:'',I10)') + LLWKN CHKWRK = .FALSE. ENDIF RETURN END SUBROUTINE ERRWGT (NPTS, NPDE, U, RELTOL, ABSTOL, WT) C----------------------------------------------------------------------- INTEGER NPTS, NPDE REAL U(NPTS,NPDE), RELTOL(NPDE), ABSTOL(NPDE), WT(NPTS,NPDE) C----------------------------------------------------------------------- INTEGER IC, IPT REAL SN SN = 1.0/SQRT(REAL(NPTS*NPDE)) DO 10 IC = 1, NPDE DO 20 IPT = 1, NPTS WT(IPT,IC) = SN/(RELTOL(IC)*ABS(U(IPT,IC)) + ABSTOL(IC)) 20 CONTINUE 10 CONTINUE RETURN END REAL FUNCTION MAXNRM (N, V) C----------------------------------------------------------------------- INTEGER N REAL V(N) C----------------------------------------------------------------------- INTEGER I MAXNRM = 0.0 DO 10 I = 1, N MAXNRM = MAX(MAXNRM, ABS(V(I))) 10 CONTINUE RETURN END REAL FUNCTION WMXNRM (N, V, W) C----------------------------------------------------------------------- INTEGER N REAL V(N), W(N) C----------------------------------------------------------------------- INTEGER I WMXNRM = 0.0 DO 10 I = 1, N WMXNRM = MAX(WMXNRM, ABS(V(I)*W(I))) 10 CONTINUE WMXNRM = WMXNRM*SQRT(REAL(N)) RETURN END REAL FUNCTION WSNRM2 (N, V, W) C----------------------------------------------------------------------- INTEGER N REAL V(N), W(N) C----------------------------------------------------------------------- INTEGER I WSNRM2 = 0.0 DO 10 I = 1, N WSNRM2 = WSNRM2 + (V(I)*W(I))**2 10 CONTINUE WSNRM2 = SQRT(WSNRM2) RETURN END SUBROUTINE ICOPY (LEN, A, B) C----------------------------------------------------------------------- INTEGER LEN INTEGER A(LEN), B(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = 1, LEN B(I) = A(I) 10 CONTINUE RETURN END SUBROUTINE IYPOC (LEN, A, B) C----------------------------------------------------------------------- INTEGER LEN INTEGER A(LEN), B(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = LEN, 1, -1 B(I) = A(I) 10 CONTINUE RETURN END SUBROUTINE RCOPY (LEN, A, B) C----------------------------------------------------------------------- INTEGER LEN REAL A(LEN), B(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = 1, LEN B(I) = A(I) 10 CONTINUE RETURN END SUBROUTINE ZERO (LEN, A) C----------------------------------------------------------------------- INTEGER LEN REAL A(LEN) C----------------------------------------------------------------------- INTEGER I DO 10 I = 1, LEN A(I) = 0.0 10 CONTINUE RETURN END SUBROUTINE MACNUM C----------------------------------------------------------------------- C Ccc INCLUDE 'CMNCMMACH' C C CMNCMMACH C C COMMON with `machine numbers' C LUNOUT : Logical unit # standard output -I C LUNERR : Logical unit # standard error I Set in the routine C UROUND : Smallest machine number such that I MACNUM C 1.0+UROUND > 1.0 and 1.0-UROUND < 1.0 I C XMIN : Smallest floating-point number -I INTEGER LUNOUT, LUNERR REAL UROUND, XMIN COMMON /IMACH/ LUNOUT, LUNERR COMMON /RMACH/ UROUND, XMIN SAVE /IMACH/, /RMACH/ C C end INCLUDE 'CMNCMMACH' C Ccc EXTERNALS USED: INTEGER I1MACH REAL R1MACH EXTERNAL R1MACH, I1MACH C----------------------------------------------------------------------- C LUNOUT = I1MACH(2) LUNERR = I1MACH(4) UROUND = R1MACH(4) XMIN = R1MACH(1) RETURN END SHAR_EOF fi # end of overwriting check cd .. cd .. # End of shell archive exit 0