Back to home page

MITgcm

 
 

    


File indexing completed on 2023-09-21 05:10:52 UTC

view on githubraw file Latest commit 96b00645 on 2023-09-20 15:15:14 UTC
95afe7199b Dani*0001 #include "STREAMICE_OPTIONS.h"
                0002 #ifdef ALLOW_AUTODIFF
                0003 # include "AUTODIFF_OPTIONS.h"
                0004 #endif
                0005 
                0006 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0007 
                0008 CBOP
                0009 #ifndef ALLOW_OPENAD
4e4ad91a39 Jean*0010       SUBROUTINE STREAMICE_VEL_PHISTAGE (
                0011      I                   myThid,
                0012      I                   maxNLIter,
                0013      I                   maxCGiter,
                0014      O                   cgtol,
95afe7199b Dani*0015      O                   nL_iter,
                0016      O                   CONVERGED,
                0017      O                   err_last_change,
2be4afbb6e Dani*0018      O                   err_init,
95afe7199b Dani*0019      I                   isinloop)
                0020 #else
4e4ad91a39 Jean*0021       SUBROUTINE STREAMICE_VEL_PHISTAGE (
                0022      I                   myThid,
                0023      I                   maxNLIter,
                0024      I                   maxCGiter,
                0025      O                   cgtol,
95afe7199b Dani*0026      O                   nL_iter,
                0027      O                   adj_iter,
                0028      O                   CONVERGED,
                0029      O                   ADJ_CONVERGED,
                0030      O                   err_last_change,
2be4afbb6e Dani*0031      O                   err_init,
95afe7199b Dani*0032      I                   isinloop)
                0033 #endif
                0034 
                0035 C     /============================================================\
                0036 C     | SUBROUTINE                                                 |
                0037 C     | o                                                          |
                0038 C     |============================================================|
                0039 C     |                                                            |
                0040 C     \============================================================/
                0041       IMPLICIT NONE
                0042 
                0043 C     === Global variables ===
                0044 #include "SIZE.h"
                0045 #include "EEPARAMS.h"
                0046 #include "PARAMS.h"
                0047 #include "STREAMICE.h"
                0048 #include "STREAMICE_CG.h"
                0049 
                0050 C     !INPUT/OUTPUT ARGUMENTS
                0051       INTEGER myThid
                0052       INTEGER maxNLIter
                0053       INTEGER maxCGiter
                0054       _RL     cgtol
                0055       _RL     err_last_change
2be4afbb6e Dani*0056       _RL     err_init
95afe7199b Dani*0057       INTEGER nL_iter
                0058       LOGICAL CONVERGED
                0059       INTEGER isinloop
                0060 #ifdef ALLOW_OPENAD
                0061       INTEGER adj_iter
                0062       LOGICAL adj_CONVERGED
                0063 #endif
                0064 
4e4ad91a39 Jean*0065 #ifdef ALLOW_STREAMICE_OAD_FP
95afe7199b Dani*0066 
                0067 C     LOCAL VARIABLES
                0068 
                0069       INTEGER i, j, bi, bj, cg_iters, m
96b006450c dngo*0070       _RL     err_max, err_max_fp
95afe7199b Dani*0071       CHARACTER*(MAX_LEN_MBUF) msgBuf
4e4ad91a39 Jean*0072 
95afe7199b Dani*0073 #ifdef ALLOW_OPENAD
                0074       adj_iter=0
                0075       adj_CONVERGED=.false.
                0076 #endif
                0077 
96b006450c dngo*0078       IF (ISINLOOP .ne. 0) THEN
                0079         IF (.NOT. CONVERGED) THEN
95ea1bba23 Dani*0080           NL_ITER = (NL_ITER + 1)
                0081           CALL streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
                0082      +,CG_ITERS,err_max)
95afe7199b Dani*0083 
96b006450c dngo*0084           WRITE(msgBuf,'(A,I5,A,I4,A)') 'streamice linear solve number',
95ea1bba23 Dani*0085      +NL_ITER,' ',CG_ITERS,' iterations '
96b006450c dngo*0086           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0087      +         SQUEEZE_RIGHT, 1)
95afe7199b Dani*0088 
95ea1bba23 Dani*0089 C!!!!!!!!!!! conv check
95afe7199b Dani*0090 
96b006450c dngo*0091           IF (STREAMICE_chkresidconvergence) THEN
95afe7199b Dani*0092 
95ea1bba23 Dani*0093            WRITE(msgBuf,'(A,E15.7)') 'err/err_init', err_max/err_init
96b006450c dngo*0094            CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0095      +         SQUEEZE_RIGHT, 1)
95afe7199b Dani*0096 
95ea1bba23 Dani*0097            IF (err_max .LE. streamice_nonlin_tol * err_init) THEN
96b006450c dngo*0098             CONVERGED = .TRUE.
95ea1bba23 Dani*0099            ENDIF
95afe7199b Dani*0100 
95ea1bba23 Dani*0101            IF (err_max<err_last_change*1.e-2 .and. STREAMICE_lower_cg_to
                0102      +l) THEN
                0103             cgtol = cgtol * 5.e-2
                0104             err_last_change = err_max
                0105             WRITE(msgBuf,'(A,E15.7)') 'new cg tol: ', cgtol
96b006450c dngo*0106             CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0107      +           SQUEEZE_RIGHT, 1)
95ea1bba23 Dani*0108            ENDIF
351fd6b6a4 Dani*0109 
96b006450c dngo*0110           ENDIF
351fd6b6a4 Dani*0111 
96b006450c dngo*0112           IF (STREAMICE_chkfixedptconvergence) THEN
351fd6b6a4 Dani*0113 
95ea1bba23 Dani*0114            CALL STREAMICE_GET_FP_ERR_OAD ( err_max_fp, myThid )
351fd6b6a4 Dani*0115 
95ea1bba23 Dani*0116            WRITE(msgBuf,'(A,1PE22.14)') 'STREAMICE_FP_ERROR =', err_max_
                0117      +fp
96b006450c dngo*0118            CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0119      +          SQUEEZE_RIGHT, 1)
351fd6b6a4 Dani*0120 
95ea1bba23 Dani*0121            IF (err_max_fp .LE. streamice_nonlin_tol_fp) THEN
96b006450c dngo*0122             CONVERGED = .TRUE.
351fd6b6a4 Dani*0123            ENDIF
                0124 
96b006450c dngo*0125           ENDIF
95ea1bba23 Dani*0126 
                0127           DO bj = myByLo(myThid), myByHi(myThid)
                0128            DO bi = myBxLo(myThid), myBxHi(myThid)
                0129             DO j=1-OLy,sNy+OLy
                0130              DO i=1-OLx,sNx+OLx
                0131               U_streamice (i,j,bi,bj)=u_new_SI (i,j,bi,bj)
                0132               V_streamice (i,j,bi,bj)=v_new_SI (i,j,bi,bj)
6b6b38f093 Dani*0133 #ifdef STREAMICE_HYBRID_STRESS
95ea1bba23 Dani*0134               streamice_taubx(i,j,bi,bj)=taubx_new_si(i,j,bi,bj)
                0135               streamice_tauby(i,j,bi,bj)=tauby_new_si(i,j,bi,bj)
                0136               DO m=Nr,1,-1
                0137                visc_streamice_full(i,j,m,bi,bj)= visc_full_new_si(i,j,m,
                0138      +bi,bj)
                0139               ENDDO
6b6b38f093 Dani*0140 #endif
95ea1bba23 Dani*0141              ENDDO
                0142             ENDDO
                0143            ENDDO
95afe7199b Dani*0144           ENDDO
                0145 
95ea1bba23 Dani*0146 C!!!!!!!!!!! end conv check
                0147 
96b006450c dngo*0148         ENDIF
                0149       ENDIF
95ea1bba23 Dani*0150 
4e4ad91a39 Jean*0151 #endif /* ALLOW_STREAMICE_OAD_FP */
95afe7199b Dani*0152       RETURN
                0153       END