Back to home page

MITgcm

 
 

    


File indexing completed on 2025-11-22 06:08:49 UTC

view on githubraw file Latest commit feb7fa5d on 2025-11-21 15:45:20 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"
feb7fa5d1e dngo*0048 #include "STREAMICE_FP.h"
95afe7199b Dani*0049 #include "STREAMICE_CG.h"
                0050 
                0051 C     !INPUT/OUTPUT ARGUMENTS
                0052       INTEGER myThid
                0053       INTEGER maxNLIter
                0054       INTEGER maxCGiter
                0055       _RL     cgtol
                0056       _RL     err_last_change
2be4afbb6e Dani*0057       _RL     err_init
95afe7199b Dani*0058       INTEGER nL_iter
                0059       LOGICAL CONVERGED
                0060       INTEGER isinloop
                0061 #ifdef ALLOW_OPENAD
                0062       INTEGER adj_iter
                0063       LOGICAL adj_CONVERGED
                0064 #endif
                0065 
feb7fa5d1e dngo*0066 #ifdef ALLOW_STREAMICE_FP_ADJ
95afe7199b Dani*0067 
                0068 C     LOCAL VARIABLES
                0069 
                0070       INTEGER i, j, bi, bj, cg_iters, m
96b006450c dngo*0071       _RL     err_max, err_max_fp
95afe7199b Dani*0072       CHARACTER*(MAX_LEN_MBUF) msgBuf
4e4ad91a39 Jean*0073 
95afe7199b Dani*0074 #ifdef ALLOW_OPENAD
                0075       adj_iter=0
                0076       adj_CONVERGED=.false.
                0077 #endif
                0078 
96b006450c dngo*0079       IF (ISINLOOP .ne. 0) THEN
feb7fa5d1e dngo*0080 #ifdef ALLOW_OPENAD
96b006450c dngo*0081         IF (.NOT. CONVERGED) THEN
feb7fa5d1e dngo*0082 #endif
95ea1bba23 Dani*0083           NL_ITER = (NL_ITER + 1)
                0084           CALL streamice_vel_phi(MYTHID,MAXNLITER,MAXCGITER,CGTOL
                0085      +,CG_ITERS,err_max)
95afe7199b Dani*0086 
96b006450c dngo*0087           WRITE(msgBuf,'(A,I5,A,I4,A)') 'streamice linear solve number',
95ea1bba23 Dani*0088      +NL_ITER,' ',CG_ITERS,' iterations '
96b006450c dngo*0089           CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0090      +         SQUEEZE_RIGHT, 1)
95afe7199b Dani*0091 
95ea1bba23 Dani*0092 C!!!!!!!!!!! conv check
95afe7199b Dani*0093 
96b006450c dngo*0094           IF (STREAMICE_chkresidconvergence) THEN
95afe7199b Dani*0095 
95ea1bba23 Dani*0096            WRITE(msgBuf,'(A,E15.7)') 'err/err_init', err_max/err_init
96b006450c dngo*0097            CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0098      +         SQUEEZE_RIGHT, 1)
95afe7199b Dani*0099 
95ea1bba23 Dani*0100            IF (err_max .LE. streamice_nonlin_tol * err_init) THEN
96b006450c dngo*0101             CONVERGED = .TRUE.
95ea1bba23 Dani*0102            ENDIF
95afe7199b Dani*0103 
95ea1bba23 Dani*0104            IF (err_max<err_last_change*1.e-2 .and. STREAMICE_lower_cg_to
                0105      +l) THEN
                0106             cgtol = cgtol * 5.e-2
                0107             err_last_change = err_max
                0108             WRITE(msgBuf,'(A,E15.7)') 'new cg tol: ', cgtol
96b006450c dngo*0109             CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0110      +           SQUEEZE_RIGHT, 1)
95ea1bba23 Dani*0111            ENDIF
351fd6b6a4 Dani*0112 
96b006450c dngo*0113           ENDIF
351fd6b6a4 Dani*0114 
96b006450c dngo*0115           IF (STREAMICE_chkfixedptconvergence) THEN
351fd6b6a4 Dani*0116 
95ea1bba23 Dani*0117            CALL STREAMICE_GET_FP_ERR_OAD ( err_max_fp, myThid )
351fd6b6a4 Dani*0118 
95ea1bba23 Dani*0119            WRITE(msgBuf,'(A,1PE22.14)') 'STREAMICE_FP_ERROR =', err_max_
                0120      +fp
96b006450c dngo*0121            CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0122      +          SQUEEZE_RIGHT, 1)
351fd6b6a4 Dani*0123 
95ea1bba23 Dani*0124            IF (err_max_fp .LE. streamice_nonlin_tol_fp) THEN
96b006450c dngo*0125             CONVERGED = .TRUE.
351fd6b6a4 Dani*0126            ENDIF
                0127 
96b006450c dngo*0128           ENDIF
95ea1bba23 Dani*0129 
                0130           DO bj = myByLo(myThid), myByHi(myThid)
                0131            DO bi = myBxLo(myThid), myBxHi(myThid)
                0132             DO j=1-OLy,sNy+OLy
                0133              DO i=1-OLx,sNx+OLx
                0134               U_streamice (i,j,bi,bj)=u_new_SI (i,j,bi,bj)
                0135               V_streamice (i,j,bi,bj)=v_new_SI (i,j,bi,bj)
6b6b38f093 Dani*0136 #ifdef STREAMICE_HYBRID_STRESS
95ea1bba23 Dani*0137               streamice_taubx(i,j,bi,bj)=taubx_new_si(i,j,bi,bj)
                0138               streamice_tauby(i,j,bi,bj)=tauby_new_si(i,j,bi,bj)
                0139               DO m=Nr,1,-1
                0140                visc_streamice_full(i,j,m,bi,bj)= visc_full_new_si(i,j,m,
                0141      +bi,bj)
                0142               ENDDO
6b6b38f093 Dani*0143 #endif
95ea1bba23 Dani*0144              ENDDO
                0145             ENDDO
                0146            ENDDO
95afe7199b Dani*0147           ENDDO
                0148 
95ea1bba23 Dani*0149 C!!!!!!!!!!! end conv check
feb7fa5d1e dngo*0150 #ifdef ALLOW_OPENAD
96b006450c dngo*0151         ENDIF
feb7fa5d1e dngo*0152 #endif
96b006450c dngo*0153       ENDIF
95ea1bba23 Dani*0154 
feb7fa5d1e dngo*0155 #endif /* ALLOW_STREAMICE_FP_ADJ */
95afe7199b Dani*0156       RETURN
                0157       END