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
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