** Warning **

Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.

Last-Modified: Fri, 16 May 2024 05:11:24 GMT Content-Type: text/html; charset=utf-8 MITgcm/MITgcm/pkg/streamice/streamice_timestep.F
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
e1d2a9ffbf Dani*0001 #include "STREAMICE_OPTIONS.h"
4f9d447bf7 Jean*0002 #ifdef ALLOW_AUTODIFF
                0003 # include "AUTODIFF_OPTIONS.h"
                0004 #endif
e1d2a9ffbf Dani*0005 
                0006 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0007 
                0008 CBOP
                0009       SUBROUTINE STREAMICE_TIMESTEP ( myThid, myIter,
                0010      &                                        iLoop, myTime )
                0011 
                0012 C     /============================================================\
4f9d447bf7 Jean*0013 C     | SUBROUTINE                                                 |
e1d2a9ffbf Dani*0014 C     | o                                                          |
                0015 C     |============================================================|
                0016 C     |                                                            |
                0017 C     \============================================================/
                0018       IMPLICIT NONE
                0019 
                0020 C     === Global variables ===
                0021 #include "SIZE.h"
                0022 #include "GRID.h"
                0023 #include "EEPARAMS.h"
                0024 #include "PARAMS.h"
                0025 #include "STREAMICE.h"
4f9d447bf7 Jean*0026 #ifdef ALLOW_AUTODIFF
e1d2a9ffbf Dani*0027 # include "STREAMICE_ADV.h"
                0028 # include "STREAMICE_BDRY.h"
                0029 # include "STREAMICE_CG.h"
                0030 #endif
4f9d447bf7 Jean*0031 #ifdef ALLOW_AUTODIFF_TAMC
                0032 # include "tamc.h"
                0033 #endif
e1d2a9ffbf Dani*0034 
                0035       INTEGER myThid, myIter, iLoop
                0036       _RL myTime
                0037       LOGICAL  DIFFERENT_MULTIPLE
                0038       EXTERNAL DIFFERENT_MULTIPLE
                0039 
                0040 #ifdef ALLOW_STREAMICE
                0041 
96b006450c dngo*0042 # if (defined ALLOW_AUTODIFF || defined STREAMICE_ECSECRYO_DOSUM)
                0043       INTEGER i, j, bi, bj
                0044 # endif
0fbff46b46 dngo*0045 c       _RL Iratio, Imin_ratio, time_step_remain, local_u_max
                0046 c       _RL ratio, min_ratio
                0047 c       _RL local_v_max, time_step_int, min_time_step
e1d2a9ffbf Dani*0048       CHARACTER*(MAX_LEN_MBUF) msgBuf
96b006450c dngo*0049       LOGICAL do_vel
                0050 # ifdef STREAMICE_ECSECRYO_DOSUM
                0051       _RL sum_square_vel_tile (nSx,nSy)
                0052       _RL sum_square_vel
                0053 # endif
e1d2a9ffbf Dani*0054 
                0055 #ifdef ALLOW_AUTODIFF_TAMC
                0056 c**************************************
                0057 #include "streamice_ad_check_lev1_dir.h"
                0058 c**************************************
                0059 #endif
                0060 
0fbff46b46 dngo*0061 c       time_step_remain = deltaT
                0062 c       min_time_step = 1000.0
                0063 c       n_interm = 0
e1d2a9ffbf Dani*0064 
                0065       do_vel = .false.
                0066 
4f9d447bf7 Jean*0067 #ifdef ALLOW_AUTODIFF
e1d2a9ffbf Dani*0068 
                0069       DO bj=myByLo(myThid),myByHi(myThid)
                0070        DO bi=myBxLo(myThid),myBxHi(myThid)
                0071         DO j=1-OLy,sNy+OLy
                0072          DO i=1-OLx,sNx+OLx
                0073           STREAMICE_ufacemask(i,j,bi,bj) = 0. _d 0
                0074           STREAMICE_vfacemask(i,j,bi,bj) = 0. _d 0
                0075           ru_old_si(i,j,bi,bj) = 0. _d 0
                0076           rv_old_si(i,j,bi,bj) = 0. _d 0
                0077           zu_old_si(i,j,bi,bj) = 0. _d 0
                0078           zv_old_si(i,j,bi,bj) = 0. _d 0
0fbff46b46 dngo*0079 c          h_after_uflux_si(i,j,bi,bj) = 0. _d 0
e1d2a9ffbf Dani*0080 #ifdef STREAMICE_HYBRID_STRESS
                0081           streamice_taubx (i,j,bi,bj) = 0. _d 0
                0082           streamice_tauby (i,j,bi,bj) = 0. _d 0
                0083 #endif
                0084          ENDDO
                0085         ENDDO
                0086        ENDDO
                0087       ENDDO
                0088 
4f9d447bf7 Jean*0089 #endif /* ALLOW_AUTODIFF */
e1d2a9ffbf Dani*0090 
                0091       CALL TIMER_START('STREAMICE_TIMESTEP [FORWARD_STEP]',
4f9d447bf7 Jean*0092      &       myThid)
e1d2a9ffbf Dani*0093 
4f9d447bf7 Jean*0094       WRITE(msgBuf,'(A,I10.10,E9.2,A)')
e1d2a9ffbf Dani*0095      &  'streamice solo_time_step: nIter',
                0096      &  myIter, myTime/86400.0/365.0, 'seconds'
                0097       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0098      &                   SQUEEZE_RIGHT , 1)
                0099 
0fbff46b46 dngo*0100       CALL STREAMICE_DUMP( myTime, myIter, myThid )
95afe7199b Dani*0101 
0fbff46b46 dngo*0102 c NEW DIRECTIVES - DNG
                0103 c#ifdef ALLOW_AUTODIFF_TAMC
                0104 cCADJ STORE float_frac_streamice  = comlev1, key = ikey_dynamics,
                0105 cCADJ &     kind = isbyte
                0106 cCADJ STORE surf_el_streamice  = comlev1, key = ikey_dynamics,
                0107 cCADJ &     kind = isbyte
                0108 cCADJ STORE base_el_streamice  = comlev1, key = ikey_dynamics,
                0109 cCADJ &     kind = isbyte
                0110 c#endif
                0111 c NEW DIRECTIVES - DNG
e1d2a9ffbf Dani*0112 
4f9d447bf7 Jean*0113       do_vel = DIFFERENT_MULTIPLE( streamice_vel_update,
                0114      &                             myTime, deltaT )
e1d2a9ffbf Dani*0115 
0fbff46b46 dngo*0116       IF (myIter.eq.0) THEN
e1d2a9ffbf Dani*0117       CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid )
                0118       CALL WRITE_FLD_XY_RL
                0119      & ("surf_el_init","",surf_el_streamice,0,myThid)
0fbff46b46 dngo*0120       ENDIF
e1d2a9ffbf Dani*0121 
                0122       CALL STREAMICE_VELMASK_UPD (myThid)
                0123 
                0124 #ifdef ALLOW_STREAMICE_TIMEDEP_FORCING
                0125       CALL STREAMICE_FIELDS_LOAD( myTime, myIter, myThid )
                0126 #endif
                0127 
0fbff46b46 dngo*0128       IF (.not.(STREAMICE_vel_ext.OR.STREAMICE_vel_ext_cgrid)) THEN
4f9d447bf7 Jean*0129 
351fd6b6a4 Dani*0130 #if (defined (ALLOW_STREAMICE_OAD_FP))
95afe7199b Dani*0131 
                0132        CALL STREAMICE_VEL_SOLVE_OPENAD ( myThid,
                0133      &                           streamice_max_nl_iter,
                0134      &                           streamice_max_cg_iter,
0fbff46b46 dngo*0135      &                           myIter )
95afe7199b Dani*0136 
                0137 #else
                0138 
0fbff46b46 dngo*0139        IF (streamice_maxnliter_cpl.eq.0 .OR. myIter.eq.0) THEN
e1d2a9ffbf Dani*0140 
0fbff46b46 dngo*0141         CALL STREAMICE_VEL_SOLVE( myThid,
4f9d447bf7 Jean*0142      &                           streamice_max_nl_iter,
e1d2a9ffbf Dani*0143      &                           streamice_max_cg_iter,
0fbff46b46 dngo*0144      &                           myIter )
e1d2a9ffbf Dani*0145 
cf04250e6e Dani*0146 #ifdef STREAMICE_ECSECRYO_DOSUM
                0147 
0fbff46b46 dngo*0148         DO bj = myByLo(myThid), myByHi(myThid)
                0149          DO bi = myBxLo(myThid), myBxHi(myThid)
                0150           sum_square_vel_tile (bi,bj) = 0. _d 0
                0151           DO j=1-OLy,sNy+OLy
                0152            DO i=1-OLx,sNx+OLx
                0153             IF (streamice_hmask(i,j,bi,bj).eq.1) THEN
                0154              sum_square_vel_tile (bi,bj) =
                0155      &        sum_square_vel_tile (bi,bj) +
                0156      &        U_streamice(i,j,bi,bj)**2 +
                0157      &        V_streamice(i,j,bi,bj)**2
                0158             ENDIF
                0159            ENDDO
cf04250e6e Dani*0160           ENDDO
                0161          ENDDO
                0162         ENDDO
                0163 
0fbff46b46 dngo*0164         CALL GLOBAL_SUM_TILE_RL(
                0165      &                sum_square_vel_tile, sum_square_vel, myThid )
                0166         WRITE(msgBuf,'(A,I3,A,1PE22.14)') 'ECSE_CRYO_SUM ', myIter, ', '
                0167      &                       ,sum_square_vel
                0168         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
cf04250e6e Dani*0169      &                    SQUEEZE_RIGHT , 1)
                0170 
                0171 #endif
                0172 
0fbff46b46 dngo*0173        ELSEIF (do_vel) THEN
4f9d447bf7 Jean*0174 
0fbff46b46 dngo*0175         CALL STREAMICE_VEL_SOLVE( myThid,
4f9d447bf7 Jean*0176      &                           streamice_maxnliter_cpl,
e1d2a9ffbf Dani*0177      &                           streamice_maxcgiter_cpl,
0fbff46b46 dngo*0178      &                           myIter )
                0179        ENDIF
4f9d447bf7 Jean*0180 
0fbff46b46 dngo*0181 #endif /* OAD_FP */
cf04250e6e Dani*0182 
0fbff46b46 dngo*0183       ELSE
                0184 
                0185         WRITE(msgBuf,'(A)')
                0186      &   'STREAMICE_TIMESTEP: bypassing velocity solve'
                0187         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0188      &                    SQUEEZE_RIGHT , 1)
                0189 
                0190       ENDIF
95afe7199b Dani*0191 
0fbff46b46 dngo*0192       IF (.not.STREAMICE_diagnostic_only) THEN
e1d2a9ffbf Dani*0193 
4f9d447bf7 Jean*0194        CALL STREAMICE_ADVECT_THICKNESS ( myThid, myIter, deltaT )
e1d2a9ffbf Dani*0195 
0fbff46b46 dngo*0196       ENDIF
e1d2a9ffbf Dani*0197 
0fbff46b46 dngo*0198 c CALL AT END INSTEAD OF BEGINNING - DNG
e1d2a9ffbf Dani*0199       CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid )
0fbff46b46 dngo*0200 c      print *, "GOT HERE TIMESTEP ", H_streamice(1,50,1,1)
                0201 c      call write_fld_xy_rl("h_got_here","",H_streamice,0,myThid)
                0202 c      call write_fld_xy_rl("u_got_here","",U_streamice,0,myThid)
                0203 c      call write_fld_xy_rl("v_got_here","",V_streamice,0,myThid)
e1d2a9ffbf Dani*0204 
                0205       CALL TIMER_STOP('STREAMICE_TIMESTEP [FORWARD_STEP]',
                0206      &       myThid)
                0207 
                0208 #endif
                0209       RETURN
                0210       END