** 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
File indexing completed on 2023-09-21 05:10:52 UTC
view on github raw 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
0007
0008
0009 SUBROUTINE STREAMICE_TIMESTEP ( myThid , myIter ,
0010 & iLoop , myTime )
0011
0012
4f9d447bf7 Jean* 0013
e1d2a9ffbf Dani* 0014
0015
0016
0017
0018 IMPLICIT NONE
0019
0020
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
0046
0047
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
0057 #include "streamice_ad_check_lev1_dir.h "
0058
0059 #endif
0060
0fbff46b46 dngo* 0061
0062
0063
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
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
0103
0104
0105
0106
0107
0108
0109
0110
0111
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
e1d2a9ffbf Dani* 0199 CALL STREAMICE_UPD_FFRAC_UNCOUPLED ( myThid )
0fbff46b46 dngo* 0200
0201
0202
0203
e1d2a9ffbf Dani* 0204
0205 CALL TIMER_STOP ('STREAMICE_TIMESTEP [FORWARD_STEP]' ,
0206 & myThid )
0207
0208 #endif
0209 RETURN
0210 END