Changeset 11053
- Timestamp:
- 2019-05-24T12:53:06+02:00 (6 years ago)
- Location:
- NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src
- Files:
-
- 49 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/ICE/icedyn.F90
r10564 r11053 60 60 CONTAINS 61 61 62 SUBROUTINE ice_dyn( kt )62 SUBROUTINE ice_dyn( kt, Kmm ) 63 63 !!------------------------------------------------------------------- 64 64 !! *** ROUTINE ice_dyn *** … … 73 73 !!-------------------------------------------------------------------- 74 74 INTEGER, INTENT(in) :: kt ! ice time step 75 INTEGER, INTENT(in) :: Kmm ! ocean time level index 75 76 !! 76 77 INTEGER :: ji, jj, jl ! dummy loop indices … … 92 93 tau_icebfr(:,:) = 0._wp 93 94 DO jl = 1, jpl 94 WHERE( h_i_b(:,:,jl) > ht _n(:,:) * rn_depfra ) tau_icebfr(:,:) = tau_icebfr(:,:) + a_i(:,:,jl) * rn_icebfr95 WHERE( h_i_b(:,:,jl) > ht(:,:) * rn_depfra ) tau_icebfr(:,:) = tau_icebfr(:,:) + a_i(:,:,jl) * rn_icebfr 95 96 END DO 96 97 ENDIF … … 121 122 122 123 CASE ( np_dynALL ) !== all dynamical processes ==! 123 CALL ice_dyn_rhg ( kt )! -- rheology124 CALL ice_dyn_rhg ( kt, Kmm ) ! -- rheology 124 125 CALL ice_dyn_adv ( kt ) ; CALL Hbig( zhi_max, zhs_max, zhip_max ) ! -- advection of ice + correction on ice thickness 125 126 CALL ice_dyn_rdgrft( kt ) ! -- ridging/rafting … … 127 128 128 129 CASE ( np_dynRHGADV ) !== no ridge/raft & no corrections ==! 129 CALL ice_dyn_rhg ( kt )! -- rheology130 CALL ice_dyn_rhg ( kt, Kmm ) ! -- rheology 130 131 CALL ice_dyn_adv ( kt ) ; CALL Hbig( zhi_max, zhs_max, zhip_max ) ! -- advection of ice + correction on ice thickness 131 132 CALL Hpiling ! -- simple pile-up (replaces ridging/rafting) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/ICE/icedyn_rhg.F90
r10413 r11053 47 47 CONTAINS 48 48 49 SUBROUTINE ice_dyn_rhg( kt )49 SUBROUTINE ice_dyn_rhg( kt, Kmm ) 50 50 !!------------------------------------------------------------------- 51 51 !! *** ROUTINE ice_dyn_rhg *** … … 58 58 !!-------------------------------------------------------------------- 59 59 INTEGER, INTENT(in) :: kt ! ice time step 60 INTEGER, INTENT(in) :: Kmm ! ocean time level index 60 61 !!-------------------------------------------------------------------- 61 62 ! controls … … 76 77 CASE( np_rhgEVP ) ! Elasto-Viscous-Plastic ! 77 78 ! !------------------------! 78 CALL ice_dyn_rhg_evp( kt, stress1_i, stress2_i, stress12_i, shear_i, divu_i, delta_i )79 CALL ice_dyn_rhg_evp( kt, Kmm, stress1_i, stress2_i, stress12_i, shear_i, divu_i, delta_i ) 79 80 ! 80 81 END SELECT -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/ICE/icedyn_rhg_evp.F90
r10555 r11053 56 56 CONTAINS 57 57 58 SUBROUTINE ice_dyn_rhg_evp( kt, pstress1_i, pstress2_i, pstress12_i, pshear_i, pdivu_i, pdelta_i )58 SUBROUTINE ice_dyn_rhg_evp( kt, Kmm, pstress1_i, pstress2_i, pstress12_i, pshear_i, pdivu_i, pdelta_i ) 59 59 !!------------------------------------------------------------------- 60 60 !! *** SUBROUTINE ice_dyn_rhg_evp *** … … 109 109 !!------------------------------------------------------------------- 110 110 INTEGER , INTENT(in ) :: kt ! time step 111 INTEGER , INTENT(in ) :: Kmm ! ocean time level index 111 112 REAL(wp), DIMENSION(:,:), INTENT(inout) :: pstress1_i, pstress2_i, pstress12_i ! 112 113 REAL(wp), DIMENSION(:,:), INTENT( out) :: pshear_i , pdivu_i , pdelta_i ! … … 335 336 zvV = 0.5_wp * ( vt_i(ji,jj) * e1e2t(ji,jj) + vt_i(ji,jj+1) * e1e2t(ji,jj+1) ) * r1_e1e2v(ji,jj) * vmask(ji,jj,1) 336 337 ! ice-bottom stress at U points 337 zvCr = zaU(ji,jj) * rn_depfra * hu _n(ji,jj)338 zvCr = zaU(ji,jj) * rn_depfra * hu(ji,jj,Kmm) 338 339 zTauU_ib(ji,jj) = rn_icebfr * MAX( 0._wp, zvU - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaU(ji,jj) ) ) 339 340 ! ice-bottom stress at V points 340 zvCr = zaV(ji,jj) * rn_depfra * hv _n(ji,jj)341 zvCr = zaV(ji,jj) * rn_depfra * hv(ji,jj,Kmm) 341 342 zTauV_ib(ji,jj) = rn_icebfr * MAX( 0._wp, zvV - zvCr ) * EXP( -rn_crhg * ( 1._wp - zaV(ji,jj) ) ) 342 343 ! ice_bottom stress at T points 343 zvCr = at_i(ji,jj) * rn_depfra * ht _n(ji,jj)344 zvCr = at_i(ji,jj) * rn_depfra * ht(ji,jj) 344 345 tau_icebfr(ji,jj) = rn_icebfr * MAX( 0._wp, vt_i(ji,jj) - zvCr ) * EXP( -rn_crhg * ( 1._wp - at_i(ji,jj) ) ) 345 346 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/ICE/icestp.F90
r10998 r11053 95 95 CONTAINS 96 96 97 SUBROUTINE ice_stp( kt, Kbb, ksbc )97 SUBROUTINE ice_stp( kt, Kbb, Kmm, ksbc ) 98 98 !!--------------------------------------------------------------------- 99 99 !! *** ROUTINE ice_stp *** … … 115 115 !! utau, vtau, taum, wndm, qns , qsr, emp , sfx 116 116 !!--------------------------------------------------------------------- 117 INTEGER, INTENT(in) :: kt ! ocean time step118 INTEGER, INTENT(in) :: Kbb ! ocean time level index119 INTEGER, INTENT(in) :: ksbc ! flux formulation (user defined, bulk, or Pure Coupled)117 INTEGER, INTENT(in) :: kt ! ocean time step 118 INTEGER, INTENT(in) :: Kbb, Kmm ! ocean time level indices 119 INTEGER, INTENT(in) :: ksbc ! flux formulation (user defined, bulk, or Pure Coupled) 120 120 ! 121 121 INTEGER :: jl ! dummy loop index … … 161 161 ! 162 162 IF( ln_icedyn .AND. .NOT.lk_c1d ) & 163 & CALL ice_dyn( kt )! -- Ice dynamics163 & CALL ice_dyn( kt, Kmm ) ! -- Ice dynamics 164 164 ! 165 165 ! !== lateral boundary conditions ==! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/NST/agrif_oce.F90
r10425 r11053 50 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubdy_n, vbdy_n, hbdy_n 51 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubdy_s, vbdy_s, hbdy_s 52 INTEGER , PUBLIC, SAVE :: Kbb_a, Kmm_a, Krhs_a !: AGRIF module-specific copies of time-level indices 52 53 53 54 -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/NST/agrif_oce_interp.F90
r10989 r11053 107 107 ! 108 108 IF( .NOT.ln_dynspg_ts ) THEN ! Store transport 109 uu_b(ibdy1:ibdy2,:,Krhs ) = 0._wp109 uu_b(ibdy1:ibdy2,:,Krhs_a) = 0._wp 110 110 DO jk = 1, jpkm1 111 111 DO jj = 1, jpj 112 uu_b(ibdy1:ibdy2,jj,Krhs ) = uu_b(ibdy1:ibdy2,jj,Krhs) &113 & + e3u(ibdy1:ibdy2,jj,jk,Krhs ) * uu(ibdy1:ibdy2,jj,jk,Krhs) * umask(ibdy1:ibdy2,jj,jk)112 uu_b(ibdy1:ibdy2,jj,Krhs_a) = uu_b(ibdy1:ibdy2,jj,Krhs_a) & 113 & + e3u(ibdy1:ibdy2,jj,jk,Krhs_a) * uu(ibdy1:ibdy2,jj,jk,Krhs_a) * umask(ibdy1:ibdy2,jj,jk) 114 114 END DO 115 115 END DO 116 116 DO jj = 1, jpj 117 uu_b(ibdy1:ibdy2,jj,Krhs ) = uu_b(ibdy1:ibdy2,jj,Krhs) * r1_hu_a(ibdy1:ibdy2,jj)117 uu_b(ibdy1:ibdy2,jj,Krhs_a) = uu_b(ibdy1:ibdy2,jj,Krhs_a) * r1_hu_a(ibdy1:ibdy2,jj) 118 118 END DO 119 119 ENDIF … … 122 122 DO jk=1,jpkm1 ! Smooth 123 123 DO jj=j1,j2 124 uu(ibdy2,jj,jk,Krhs ) = 0.25_wp*(uu(ibdy2-1,jj,jk,Krhs)+2._wp*uu(ibdy2,jj,jk,Krhs)+uu(ibdy2+1,jj,jk,Krhs))124 uu(ibdy2,jj,jk,Krhs_a) = 0.25_wp*(uu(ibdy2-1,jj,jk,Krhs_a)+2._wp*uu(ibdy2,jj,jk,Krhs_a)+uu(ibdy2+1,jj,jk,Krhs_a)) 125 125 END DO 126 126 END DO … … 131 131 DO jj = 1, jpj 132 132 zub(ibdy1:ibdy2,jj) = zub(ibdy1:ibdy2,jj) & 133 & + e3u(ibdy1:ibdy2,jj,jk,Krhs ) * uu(ibdy1:ibdy2,jj,jk,Krhs)*umask(ibdy1:ibdy2,jj,jk)133 & + e3u(ibdy1:ibdy2,jj,jk,Krhs_a) * uu(ibdy1:ibdy2,jj,jk,Krhs_a)*umask(ibdy1:ibdy2,jj,jk) 134 134 END DO 135 135 END DO … … 140 140 DO jk = 1, jpkm1 141 141 DO jj = 1, jpj 142 uu(ibdy1:ibdy2,jj,jk,Krhs ) = ( uu(ibdy1:ibdy2,jj,jk,Krhs) &143 & + uu_b(ibdy1:ibdy2,jj,Krhs )-zub(ibdy1:ibdy2,jj)) * umask(ibdy1:ibdy2,jj,jk)142 uu(ibdy1:ibdy2,jj,jk,Krhs_a) = ( uu(ibdy1:ibdy2,jj,jk,Krhs_a) & 143 & + uu_b(ibdy1:ibdy2,jj,Krhs_a)-zub(ibdy1:ibdy2,jj)) * umask(ibdy1:ibdy2,jj,jk) 144 144 END DO 145 145 END DO … … 150 150 DO jj = 1, jpj 151 151 zvb(ibdy1:ibdy2,jj) = zvb(ibdy1:ibdy2,jj) & 152 & + e3v(ibdy1:ibdy2,jj,jk,Krhs ) * vv(ibdy1:ibdy2,jj,jk,Krhs) * vmask(ibdy1:ibdy2,jj,jk)152 & + e3v(ibdy1:ibdy2,jj,jk,Krhs_a) * vv(ibdy1:ibdy2,jj,jk,Krhs_a) * vmask(ibdy1:ibdy2,jj,jk) 153 153 END DO 154 154 END DO … … 158 158 DO jk = 1, jpkm1 159 159 DO jj = 1, jpj 160 vv(ibdy1:ibdy2,jj,jk,Krhs ) = ( vv(ibdy1:ibdy2,jj,jk,Krhs) &161 & + vv_b(ibdy1:ibdy2,jj,Krhs )-zvb(ibdy1:ibdy2,jj))*vmask(ibdy1:ibdy2,jj,jk)160 vv(ibdy1:ibdy2,jj,jk,Krhs_a) = ( vv(ibdy1:ibdy2,jj,jk,Krhs_a) & 161 & + vv_b(ibdy1:ibdy2,jj,Krhs_a)-zvb(ibdy1:ibdy2,jj))*vmask(ibdy1:ibdy2,jj,jk) 162 162 END DO 163 163 END DO … … 166 166 DO jk = 1, jpkm1 ! Mask domain edges 167 167 DO jj = 1, jpj 168 uu(1,jj,jk,Krhs ) = 0._wp169 vv(1,jj,jk,Krhs ) = 0._wp168 uu(1,jj,jk,Krhs_a) = 0._wp 169 vv(1,jj,jk,Krhs_a) = 0._wp 170 170 END DO 171 171 END DO … … 178 178 ! 179 179 IF( .NOT.ln_dynspg_ts ) THEN ! Store transport 180 uu_b(ibdy1:ibdy2,:,Krhs ) = 0._wp180 uu_b(ibdy1:ibdy2,:,Krhs_a) = 0._wp 181 181 DO jk = 1, jpkm1 182 182 DO jj = 1, jpj 183 uu_b(ibdy1:ibdy2,jj,Krhs ) = uu_b(ibdy1:ibdy2,jj,Krhs) &184 & + e3u(ibdy1:ibdy2,jj,jk,Krhs ) * uu(ibdy1:ibdy2,jj,jk,Krhs) * umask(ibdy1:ibdy2,jj,jk)183 uu_b(ibdy1:ibdy2,jj,Krhs_a) = uu_b(ibdy1:ibdy2,jj,Krhs_a) & 184 & + e3u(ibdy1:ibdy2,jj,jk,Krhs_a) * uu(ibdy1:ibdy2,jj,jk,Krhs_a) * umask(ibdy1:ibdy2,jj,jk) 185 185 END DO 186 186 END DO 187 187 DO jj = 1, jpj 188 uu_b(ibdy1:ibdy2,jj,Krhs ) = uu_b(ibdy1:ibdy2,jj,Krhs) * r1_hu_a(ibdy1:ibdy2,jj)188 uu_b(ibdy1:ibdy2,jj,Krhs_a) = uu_b(ibdy1:ibdy2,jj,Krhs_a) * r1_hu_a(ibdy1:ibdy2,jj) 189 189 END DO 190 190 ENDIF … … 193 193 DO jk=1,jpkm1 ! Smooth 194 194 DO jj=j1,j2 195 uu(ibdy1,jj,jk,Krhs ) = 0.25_wp*(uu(ibdy1-1,jj,jk,Krhs)+2._wp*uu(ibdy1,jj,jk,Krhs)+uu(ibdy1+1,jj,jk,Krhs))195 uu(ibdy1,jj,jk,Krhs_a) = 0.25_wp*(uu(ibdy1-1,jj,jk,Krhs_a)+2._wp*uu(ibdy1,jj,jk,Krhs_a)+uu(ibdy1+1,jj,jk,Krhs_a)) 196 196 END DO 197 197 END DO … … 202 202 DO jj = 1, jpj 203 203 zub(ibdy1:ibdy2,jj) = zub(ibdy1:ibdy2,jj) & 204 & + e3u(ibdy1:ibdy2,jj,jk,Krhs ) * uu(ibdy1:ibdy2,jj,jk,Krhs) * umask(ibdy1:ibdy2,jj,jk)204 & + e3u(ibdy1:ibdy2,jj,jk,Krhs_a) * uu(ibdy1:ibdy2,jj,jk,Krhs_a) * umask(ibdy1:ibdy2,jj,jk) 205 205 END DO 206 206 END DO … … 211 211 DO jk = 1, jpkm1 212 212 DO jj = 1, jpj 213 uu(ibdy1:ibdy2,jj,jk,Krhs ) = ( uu(ibdy1:ibdy2,jj,jk,Krhs) &214 & + uu_b(ibdy1:ibdy2,jj,Krhs )-zub(ibdy1:ibdy2,jj))*umask(ibdy1:ibdy2,jj,jk)213 uu(ibdy1:ibdy2,jj,jk,Krhs_a) = ( uu(ibdy1:ibdy2,jj,jk,Krhs_a) & 214 & + uu_b(ibdy1:ibdy2,jj,Krhs_a)-zub(ibdy1:ibdy2,jj))*umask(ibdy1:ibdy2,jj,jk) 215 215 END DO 216 216 END DO … … 223 223 DO jj = 1, jpj 224 224 zvb(ibdy1:ibdy2,jj) = zvb(ibdy1:ibdy2,jj) & 225 & + e3v(ibdy1:ibdy2,jj,jk,Krhs ) * vv(ibdy1:ibdy2,jj,jk,Krhs) * vmask(ibdy1:ibdy2,jj,jk)225 & + e3v(ibdy1:ibdy2,jj,jk,Krhs_a) * vv(ibdy1:ibdy2,jj,jk,Krhs_a) * vmask(ibdy1:ibdy2,jj,jk) 226 226 END DO 227 227 END DO … … 231 231 DO jk = 1, jpkm1 232 232 DO jj = 1, jpj 233 vv(ibdy1:ibdy2,jj,jk,Krhs ) = ( vv(ibdy1:ibdy2,jj,jk,Krhs) &234 & + vv_b(ibdy1:ibdy2,jj,Krhs )-zvb(ibdy1:ibdy2,jj)) * vmask(ibdy1:ibdy2,jj,jk)233 vv(ibdy1:ibdy2,jj,jk,Krhs_a) = ( vv(ibdy1:ibdy2,jj,jk,Krhs_a) & 234 & + vv_b(ibdy1:ibdy2,jj,Krhs_a)-zvb(ibdy1:ibdy2,jj)) * vmask(ibdy1:ibdy2,jj,jk) 235 235 END DO 236 236 END DO … … 239 239 DO jk = 1, jpkm1 ! Mask domain edges 240 240 DO jj = 1, jpj 241 uu(nlci-1,jj,jk,Krhs ) = 0._wp242 vv(nlci ,jj,jk,Krhs ) = 0._wp241 uu(nlci-1,jj,jk,Krhs_a) = 0._wp 242 vv(nlci ,jj,jk,Krhs_a) = 0._wp 243 243 END DO 244 244 END DO … … 251 251 ! 252 252 IF( .NOT.ln_dynspg_ts ) THEN ! Store transport 253 vv_b(:,jbdy1:jbdy2,Krhs ) = 0._wp253 vv_b(:,jbdy1:jbdy2,Krhs_a) = 0._wp 254 254 DO jk = 1, jpkm1 255 255 DO ji = 1, jpi 256 vv_b(ji,jbdy1:jbdy2,Krhs ) = vv_b(ji,jbdy1:jbdy2,Krhs) &257 & + e3v(ji,jbdy1:jbdy2,jk,Krhs ) * vv(ji,jbdy1:jbdy2,jk,Krhs) * vmask(ji,jbdy1:jbdy2,jk)256 vv_b(ji,jbdy1:jbdy2,Krhs_a) = vv_b(ji,jbdy1:jbdy2,Krhs_a) & 257 & + e3v(ji,jbdy1:jbdy2,jk,Krhs_a) * vv(ji,jbdy1:jbdy2,jk,Krhs_a) * vmask(ji,jbdy1:jbdy2,jk) 258 258 END DO 259 259 END DO 260 260 DO ji=1,jpi 261 vv_b(ji,jbdy1:jbdy2,Krhs ) = vv_b(ji,jbdy1:jbdy2,Krhs) * r1_hv_a(ji,jbdy1:jbdy2)261 vv_b(ji,jbdy1:jbdy2,Krhs_a) = vv_b(ji,jbdy1:jbdy2,Krhs_a) * r1_hv_a(ji,jbdy1:jbdy2) 262 262 END DO 263 263 ENDIF … … 266 266 DO jk = 1, jpkm1 ! Smooth 267 267 DO ji = i1, i2 268 vv(ji,jbdy2,jk,Krhs ) = 0.25_wp*(vv(ji,jbdy2-1,jk,Krhs)+2._wp*vv(ji,jbdy2,jk,Krhs)+vv(ji,jbdy2+1,jk,Krhs))268 vv(ji,jbdy2,jk,Krhs_a) = 0.25_wp*(vv(ji,jbdy2-1,jk,Krhs_a)+2._wp*vv(ji,jbdy2,jk,Krhs_a)+vv(ji,jbdy2+1,jk,Krhs_a)) 269 269 END DO 270 270 END DO … … 275 275 DO ji=1,jpi 276 276 zvb(ji,jbdy1:jbdy2) = zvb(ji,jbdy1:jbdy2) & 277 & + e3v(ji,jbdy1:jbdy2,jk,Krhs ) * vv(ji,jbdy1:jbdy2,jk,Krhs) * vmask(ji,jbdy1:jbdy2,jk)277 & + e3v(ji,jbdy1:jbdy2,jk,Krhs_a) * vv(ji,jbdy1:jbdy2,jk,Krhs_a) * vmask(ji,jbdy1:jbdy2,jk) 278 278 END DO 279 279 END DO … … 284 284 DO jk = 1, jpkm1 285 285 DO ji = 1, jpi 286 vv(ji,jbdy1:jbdy2,jk,Krhs ) = ( vv(ji,jbdy1:jbdy2,jk,Krhs) &287 & + vv_b(ji,jbdy1:jbdy2,Krhs ) - zvb(ji,jbdy1:jbdy2) ) * vmask(ji,jbdy1:jbdy2,jk)286 vv(ji,jbdy1:jbdy2,jk,Krhs_a) = ( vv(ji,jbdy1:jbdy2,jk,Krhs_a) & 287 & + vv_b(ji,jbdy1:jbdy2,Krhs_a) - zvb(ji,jbdy1:jbdy2) ) * vmask(ji,jbdy1:jbdy2,jk) 288 288 END DO 289 289 END DO … … 294 294 DO ji = 1, jpi 295 295 zub(ji,jbdy1:jbdy2) = zub(ji,jbdy1:jbdy2) & 296 & + e3u(ji,jbdy1:jbdy2,jk,Krhs ) * uu(ji,jbdy1:jbdy2,jk,Krhs) * umask(ji,jbdy1:jbdy2,jk)296 & + e3u(ji,jbdy1:jbdy2,jk,Krhs_a) * uu(ji,jbdy1:jbdy2,jk,Krhs_a) * umask(ji,jbdy1:jbdy2,jk) 297 297 END DO 298 298 END DO … … 303 303 DO jk = 1, jpkm1 304 304 DO ji = 1, jpi 305 uu(ji,jbdy1:jbdy2,jk,Krhs ) = ( uu(ji,jbdy1:jbdy2,jk,Krhs) &306 & + uu_b(ji,jbdy1:jbdy2,Krhs ) - zub(ji,jbdy1:jbdy2) ) * umask(ji,jbdy1:jbdy2,jk)305 uu(ji,jbdy1:jbdy2,jk,Krhs_a) = ( uu(ji,jbdy1:jbdy2,jk,Krhs_a) & 306 & + uu_b(ji,jbdy1:jbdy2,Krhs_a) - zub(ji,jbdy1:jbdy2) ) * umask(ji,jbdy1:jbdy2,jk) 307 307 END DO 308 308 END DO … … 311 311 DO jk = 1, jpkm1 ! Mask domain edges 312 312 DO ji = 1, jpi 313 uu(ji,1,jk,Krhs ) = 0._wp314 vv(ji,1,jk,Krhs ) = 0._wp313 uu(ji,1,jk,Krhs_a) = 0._wp 314 vv(ji,1,jk,Krhs_a) = 0._wp 315 315 END DO 316 316 END DO … … 323 323 ! 324 324 IF( .NOT.ln_dynspg_ts ) THEN ! Store transport 325 vv_b(:,jbdy1:jbdy2,Krhs ) = 0._wp325 vv_b(:,jbdy1:jbdy2,Krhs_a) = 0._wp 326 326 DO jk = 1, jpkm1 327 327 DO ji = 1, jpi 328 vv_b(ji,jbdy1:jbdy2,Krhs ) = vv_b(ji,jbdy1:jbdy2,Krhs) &329 & + e3v(ji,jbdy1:jbdy2,jk,Krhs ) * vv(ji,jbdy1:jbdy2,jk,Krhs) * vmask(ji,jbdy1:jbdy2,jk)328 vv_b(ji,jbdy1:jbdy2,Krhs_a) = vv_b(ji,jbdy1:jbdy2,Krhs_a) & 329 & + e3v(ji,jbdy1:jbdy2,jk,Krhs_a) * vv(ji,jbdy1:jbdy2,jk,Krhs_a) * vmask(ji,jbdy1:jbdy2,jk) 330 330 END DO 331 331 END DO 332 332 DO ji=1,jpi 333 vv_b(ji,jbdy1:jbdy2,Krhs ) = vv_b(ji,jbdy1:jbdy2,Krhs) * r1_hv_a(ji,jbdy1:jbdy2)333 vv_b(ji,jbdy1:jbdy2,Krhs_a) = vv_b(ji,jbdy1:jbdy2,Krhs_a) * r1_hv_a(ji,jbdy1:jbdy2) 334 334 END DO 335 335 ENDIF … … 338 338 DO jk = 1, jpkm1 ! Smooth 339 339 DO ji = i1, i2 340 vv(ji,jbdy1,jk,Krhs ) = 0.25_wp*(vv(ji,jbdy1-1,jk,Krhs)+2._wp*vv(ji,jbdy1,jk,Krhs)+vv(ji,jbdy1+1,jk,Krhs))340 vv(ji,jbdy1,jk,Krhs_a) = 0.25_wp*(vv(ji,jbdy1-1,jk,Krhs_a)+2._wp*vv(ji,jbdy1,jk,Krhs_a)+vv(ji,jbdy1+1,jk,Krhs_a)) 341 341 END DO 342 342 END DO … … 347 347 DO ji=1,jpi 348 348 zvb(ji,jbdy1:jbdy2) = zvb(ji,jbdy1:jbdy2) & 349 & + e3v(ji,jbdy1:jbdy2,jk,Krhs ) * vv(ji,jbdy1:jbdy2,jk,Krhs) * vmask(ji,jbdy1:jbdy2,jk)349 & + e3v(ji,jbdy1:jbdy2,jk,Krhs_a) * vv(ji,jbdy1:jbdy2,jk,Krhs_a) * vmask(ji,jbdy1:jbdy2,jk) 350 350 END DO 351 351 END DO … … 356 356 DO jk = 1, jpkm1 357 357 DO ji = 1, jpi 358 vv(ji,jbdy1:jbdy2,jk,Krhs ) = ( vv(ji,jbdy1:jbdy2,jk,Krhs) &359 & + vv_b(ji,jbdy1:jbdy2,Krhs ) - zvb(ji,jbdy1:jbdy2) ) * vmask(ji,jbdy1:jbdy2,jk)358 vv(ji,jbdy1:jbdy2,jk,Krhs_a) = ( vv(ji,jbdy1:jbdy2,jk,Krhs_a) & 359 & + vv_b(ji,jbdy1:jbdy2,Krhs_a) - zvb(ji,jbdy1:jbdy2) ) * vmask(ji,jbdy1:jbdy2,jk) 360 360 END DO 361 361 END DO … … 368 368 DO ji = 1, jpi 369 369 zub(ji,jbdy1:jbdy2) = zub(ji,jbdy1:jbdy2) & 370 & + e3u(ji,jbdy1:jbdy2,jk,Krhs ) * uu(ji,jbdy1:jbdy2,jk,Krhs) * umask(ji,jbdy1:jbdy2,jk)370 & + e3u(ji,jbdy1:jbdy2,jk,Krhs_a) * uu(ji,jbdy1:jbdy2,jk,Krhs_a) * umask(ji,jbdy1:jbdy2,jk) 371 371 END DO 372 372 END DO … … 377 377 DO jk = 1, jpkm1 378 378 DO ji = 1, jpi 379 uu(ji,jbdy1:jbdy2,jk,Krhs ) = ( uu(ji,jbdy1:jbdy2,jk,Krhs) &380 & + uu_b(ji,jbdy1:jbdy2,Krhs ) - zub(ji,jbdy1:jbdy2) ) * umask(ji,jbdy1:jbdy2,jk)379 uu(ji,jbdy1:jbdy2,jk,Krhs_a) = ( uu(ji,jbdy1:jbdy2,jk,Krhs_a) & 380 & + uu_b(ji,jbdy1:jbdy2,Krhs_a) - zub(ji,jbdy1:jbdy2) ) * umask(ji,jbdy1:jbdy2,jk) 381 381 END DO 382 382 END DO … … 385 385 DO jk = 1, jpkm1 ! Mask domain edges 386 386 DO ji = 1, jpi 387 uu(ji,nlcj ,jk,Krhs ) = 0._wp388 vv(ji,nlcj-1,jk,Krhs ) = 0._wp387 uu(ji,nlcj ,jk,Krhs_a) = 0._wp 388 vv(ji,nlcj-1,jk,Krhs_a) = 0._wp 389 389 END DO 390 390 END DO … … 520 520 DO jj = 1, jpj 521 521 DO ji = 2, indx 522 ssh(ji,jj,Krhs ) = hbdy_w(ji-1,jj)522 ssh(ji,jj,Krhs_a) = hbdy_w(ji-1,jj) 523 523 ENDDO 524 524 ENDDO … … 530 530 DO jj = 1, jpj 531 531 DO ji = indx, nlci-1 532 ssh(ji,jj,Krhs ) = hbdy_e(ji-indx+1,jj)532 ssh(ji,jj,Krhs_a) = hbdy_e(ji-indx+1,jj) 533 533 ENDDO 534 534 ENDDO … … 540 540 DO jj = 2, indy 541 541 DO ji = 1, jpi 542 ssh(ji,jj,Krhs ) = hbdy_s(ji,jj-1)542 ssh(ji,jj,Krhs_a) = hbdy_s(ji,jj-1) 543 543 ENDDO 544 544 ENDDO … … 550 550 DO jj = indy, nlcj-1 551 551 DO ji = 1, jpi 552 ssh(ji,jj,Krhs ) = hbdy_n(ji,jj-indy+1)552 ssh(ji,jj,Krhs_a) = hbdy_n(ji,jj-indy+1) 553 553 ENDDO 554 554 ENDDO … … 659 659 DO jj=j1,j2 660 660 DO ji=i1,i2 661 ptab(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm )661 ptab(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm_a) 662 662 END DO 663 663 END DO … … 669 669 DO jj=j1,j2 670 670 DO ji=i1,i2 671 ptab(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm )671 ptab(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) 672 672 END DO 673 673 END DO … … 699 699 IF (tmask(iref,jref,jk) == 0) EXIT 700 700 N_out = N_out + 1 701 h_out(jk) = e3t(iref,jref,jk,Kmm )701 h_out(jk) = e3t(iref,jref,jk,Kmm_a) 702 702 ENDDO 703 703 IF (N_in > 0) THEN … … 713 713 ! 714 714 DO jn=1, jpts 715 ts(i1:i2,j1:j2,1:jpk,jn,Krhs )=ptab_child(i1:i2,j1:j2,1:jpk,jn)*tmask(i1:i2,j1:j2,1:jpk)715 ts(i1:i2,j1:j2,1:jpk,jn,Krhs_a)=ptab_child(i1:i2,j1:j2,1:jpk,jn)*tmask(i1:i2,j1:j2,1:jpk) 716 716 END DO 717 717 … … 737 737 ibdy = nlci-nbghostcells 738 738 DO jn = 1, jpts 739 ts(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs ) = z1 * ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn)739 ts(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 740 740 DO jk = 1, jpkm1 741 741 DO jj = jmin,jmax 742 742 IF( umask(ibdy-1,jj,jk) == 0._wp ) THEN 743 ts(ibdy,jj,jk,jn,Krhs ) = ts(ibdy+1,jj,jk,jn,Krhs) * tmask(ibdy,jj,jk)743 ts(ibdy,jj,jk,jn,Krhs_a) = ts(ibdy+1,jj,jk,jn,Krhs_a) * tmask(ibdy,jj,jk) 744 744 ELSE 745 ts(ibdy,jj,jk,jn,Krhs )=(z4*ts(ibdy+1,jj,jk,jn,Krhs)+z3*ts(ibdy-1,jj,jk,jn,Krhs))*tmask(ibdy,jj,jk)746 IF( uu(ibdy-1,jj,jk,Kmm ) > 0._wp ) THEN747 ts(ibdy,jj,jk,jn,Krhs )=( z6*ts(ibdy-1,jj,jk,jn,Krhs)+z5*ts(ibdy+1,jj,jk,jn,Krhs) &748 + z7*ts(ibdy-2,jj,jk,jn,Krhs ) ) * tmask(ibdy,jj,jk)745 ts(ibdy,jj,jk,jn,Krhs_a)=(z4*ts(ibdy+1,jj,jk,jn,Krhs_a)+z3*ts(ibdy-1,jj,jk,jn,Krhs_a))*tmask(ibdy,jj,jk) 746 IF( uu(ibdy-1,jj,jk,Kmm_a) > 0._wp ) THEN 747 ts(ibdy,jj,jk,jn,Krhs_a)=( z6*ts(ibdy-1,jj,jk,jn,Krhs_a)+z5*ts(ibdy+1,jj,jk,jn,Krhs_a) & 748 + z7*ts(ibdy-2,jj,jk,jn,Krhs_a) ) * tmask(ibdy,jj,jk) 749 749 ENDIF 750 750 ENDIF … … 752 752 END DO 753 753 ! Restore ghost points: 754 ts(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs ) = ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy+1,jmin:jmax,1:jpkm1)754 ts(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs_a) = ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy+1,jmin:jmax,1:jpkm1) 755 755 END DO 756 756 ENDIF … … 766 766 jbdy = nlcj-nbghostcells 767 767 DO jn = 1, jpts 768 ts(imin:imax,jbdy+1,1:jpkm1,jn,Krhs ) = z1 * ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn)768 ts(imin:imax,jbdy+1,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 769 769 DO jk = 1, jpkm1 770 770 DO ji = imin,imax 771 771 IF( vmask(ji,jbdy-1,jk) == 0._wp ) THEN 772 ts(ji,jbdy,jk,jn,Krhs ) = ts(ji,jbdy+1,jk,jn,Krhs) * tmask(ji,jbdy,jk)772 ts(ji,jbdy,jk,jn,Krhs_a) = ts(ji,jbdy+1,jk,jn,Krhs_a) * tmask(ji,jbdy,jk) 773 773 ELSE 774 ts(ji,jbdy,jk,jn,Krhs )=(z4*ts(ji,jbdy+1,jk,jn,Krhs)+z3*ts(ji,jbdy-1,jk,jn,Krhs))*tmask(ji,jbdy,jk)775 IF (vv(ji,jbdy-1,jk,Kmm ) > 0._wp ) THEN776 ts(ji,jbdy,jk,jn,Krhs )=( z6*ts(ji,jbdy-1,jk,jn,Krhs)+z5*ts(ji,jbdy+1,jk,jn,Krhs) &777 + z7*ts(ji,jbdy-2,jk,jn,Krhs ) ) * tmask(ji,jbdy,jk)774 ts(ji,jbdy,jk,jn,Krhs_a)=(z4*ts(ji,jbdy+1,jk,jn,Krhs_a)+z3*ts(ji,jbdy-1,jk,jn,Krhs_a))*tmask(ji,jbdy,jk) 775 IF (vv(ji,jbdy-1,jk,Kmm_a) > 0._wp ) THEN 776 ts(ji,jbdy,jk,jn,Krhs_a)=( z6*ts(ji,jbdy-1,jk,jn,Krhs_a)+z5*ts(ji,jbdy+1,jk,jn,Krhs_a) & 777 + z7*ts(ji,jbdy-2,jk,jn,Krhs_a) ) * tmask(ji,jbdy,jk) 778 778 ENDIF 779 779 ENDIF … … 781 781 END DO 782 782 ! Restore ghost points: 783 ts(imin:imax,jbdy+1,1:jpkm1,jn,Krhs ) = ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) * tmask(imin:imax,jbdy+1,1:jpkm1)783 ts(imin:imax,jbdy+1,1:jpkm1,jn,Krhs_a) = ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) * tmask(imin:imax,jbdy+1,1:jpkm1) 784 784 END DO 785 785 ENDIF … … 795 795 ibdy = 1+nbghostcells 796 796 DO jn = 1, jpts 797 ts(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs ) = z1 * ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn)797 ts(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 798 798 DO jk = 1, jpkm1 799 799 DO jj = jmin,jmax 800 800 IF( umask(ibdy,jj,jk) == 0._wp ) THEN 801 ts(ibdy,jj,jk,jn,Krhs ) = ts(ibdy-1,jj,jk,jn,Krhs) * tmask(ibdy,jj,jk)801 ts(ibdy,jj,jk,jn,Krhs_a) = ts(ibdy-1,jj,jk,jn,Krhs_a) * tmask(ibdy,jj,jk) 802 802 ELSE 803 ts(ibdy,jj,jk,jn,Krhs )=(z4*ts(ibdy-1,jj,jk,jn,Krhs)+z3*ts(ibdy+1,jj,jk,jn,Krhs))*tmask(ibdy,jj,jk)804 IF( uu(ibdy,jj,jk,Kmm ) < 0._wp ) THEN805 ts(ibdy,jj,jk,jn,Krhs )=( z6*ts(ibdy+1,jj,jk,jn,Krhs)+z5*ts(ibdy-1,jj,jk,jn,Krhs) &806 + z7*ts(ibdy+2,jj,jk,jn,Krhs ) ) * tmask(ibdy,jj,jk)803 ts(ibdy,jj,jk,jn,Krhs_a)=(z4*ts(ibdy-1,jj,jk,jn,Krhs_a)+z3*ts(ibdy+1,jj,jk,jn,Krhs_a))*tmask(ibdy,jj,jk) 804 IF( uu(ibdy,jj,jk,Kmm_a) < 0._wp ) THEN 805 ts(ibdy,jj,jk,jn,Krhs_a)=( z6*ts(ibdy+1,jj,jk,jn,Krhs_a)+z5*ts(ibdy-1,jj,jk,jn,Krhs_a) & 806 + z7*ts(ibdy+2,jj,jk,jn,Krhs_a) ) * tmask(ibdy,jj,jk) 807 807 ENDIF 808 808 ENDIF … … 810 810 END DO 811 811 ! Restore ghost points: 812 ts(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs ) = ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy-1,jmin:jmax,1:jpkm1)812 ts(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs_a) = ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy-1,jmin:jmax,1:jpkm1) 813 813 END DO 814 814 ENDIF … … 824 824 jbdy=1+nbghostcells 825 825 DO jn = 1, jpts 826 ts(imin:imax,jbdy-1,1:jpkm1,jn,Krhs ) = z1 * ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn)826 ts(imin:imax,jbdy-1,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 827 827 DO jk = 1, jpkm1 828 828 DO ji = imin,imax 829 829 IF( vmask(ji,jbdy,jk) == 0._wp ) THEN 830 ts(ji,jbdy,jk,jn,Krhs )=ts(ji,jbdy-1,jk,jn,Krhs) * tmask(ji,jbdy,jk)830 ts(ji,jbdy,jk,jn,Krhs_a)=ts(ji,jbdy-1,jk,jn,Krhs_a) * tmask(ji,jbdy,jk) 831 831 ELSE 832 ts(ji,jbdy,jk,jn,Krhs )=(z4*ts(ji,jbdy-1,jk,jn,Krhs)+z3*ts(ji,jbdy+1,jk,jn,Krhs))*tmask(ji,jbdy,jk)833 IF( vv(ji,jbdy,jk,Kmm ) < 0._wp ) THEN834 ts(ji,jbdy,jk,jn,Krhs )=( z6*ts(ji,jbdy+1,jk,jn,Krhs)+z5*ts(ji,jbdy-1,jk,jn,Krhs) &835 + z7*ts(ji,jbdy+2,jk,jn,Krhs ) ) * tmask(ji,jbdy,jk)832 ts(ji,jbdy,jk,jn,Krhs_a)=(z4*ts(ji,jbdy-1,jk,jn,Krhs_a)+z3*ts(ji,jbdy+1,jk,jn,Krhs_a))*tmask(ji,jbdy,jk) 833 IF( vv(ji,jbdy,jk,Kmm_a) < 0._wp ) THEN 834 ts(ji,jbdy,jk,jn,Krhs_a)=( z6*ts(ji,jbdy+1,jk,jn,Krhs_a)+z5*ts(ji,jbdy-1,jk,jn,Krhs_a) & 835 + z7*ts(ji,jbdy+2,jk,jn,Krhs_a) ) * tmask(ji,jbdy,jk) 836 836 ENDIF 837 837 ENDIF … … 839 839 END DO 840 840 ! Restore ghost points: 841 ts(imin:imax,jbdy-1,1:jpkm1,jn,Krhs ) = ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) * tmask(imin:imax,jbdy-1,1:jpkm1)841 ts(imin:imax,jbdy-1,1:jpkm1,jn,Krhs_a) = ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) * tmask(imin:imax,jbdy-1,1:jpkm1) 842 842 END DO 843 843 ENDIF … … 861 861 ! 862 862 IF( before) THEN 863 ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kmm )863 ptab(i1:i2,j1:j2) = ssh(i1:i2,j1:j2,Kmm_a) 864 864 ELSE 865 865 western_side = (nb == 1).AND.(ndir == 1) … … 900 900 DO jj=j1,j2 901 901 DO ji=i1,i2 902 ptab(ji,jj,jk,1) = (e2u(ji,jj) * e3u(ji,jj,jk,Kmm ) * uu(ji,jj,jk,Kmm)*umask(ji,jj,jk))902 ptab(ji,jj,jk,1) = (e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) * uu(ji,jj,jk,Kmm_a)*umask(ji,jj,jk)) 903 903 # if defined key_vertical 904 ptab(ji,jj,jk,2) = (umask(ji,jj,jk) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm ))904 ptab(ji,jj,jk,2) = (umask(ji,jj,jk) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a)) 905 905 # endif 906 906 END DO … … 928 928 929 929 IF (N_in == 0) THEN 930 uu(ji,jj,:,Krhs ) = 0._wp930 uu(ji,jj,:,Krhs_a) = 0._wp 931 931 CYCLE 932 932 ENDIF … … 936 936 if (umask(iref,jj,jk) == 0) EXIT 937 937 N_out = N_out + 1 938 h_out(N_out) = e3u(iref,jj,jk,Krhs )938 h_out(N_out) = e3u(iref,jj,jk,Krhs_a) 939 939 ENDDO 940 940 941 941 IF (N_out == 0) THEN 942 uu(ji,jj,:,Krhs ) = 0._wp942 uu(ji,jj,:,Krhs_a) = 0._wp 943 943 CYCLE 944 944 ENDIF … … 952 952 endif 953 953 ENDIF 954 call reconstructandremap(tabin(1:N_in),h_in(1:N_in),uu(ji,jj,1:N_out,Krhs ),h_out(1:N_out),N_in,N_out)954 call reconstructandremap(tabin(1:N_in),h_in(1:N_in),uu(ji,jj,1:N_out,Krhs_a),h_out(1:N_out),N_in,N_out) 955 955 ENDDO 956 956 ENDDO … … 959 959 DO jk = 1, jpkm1 960 960 DO jj=j1,j2 961 uu(i1:i2,jj,jk,Krhs ) = ptab(i1:i2,jj,jk,1) / ( zrhoy * e2u(i1:i2,jj) * e3u(i1:i2,jj,jk,Krhs) )961 uu(i1:i2,jj,jk,Krhs_a) = ptab(i1:i2,jj,jk,1) / ( zrhoy * e2u(i1:i2,jj) * e3u(i1:i2,jj,jk,Krhs_a) ) 962 962 END DO 963 963 END DO … … 992 992 DO jj=j1,j2 993 993 DO ji=i1,i2 994 ptab(ji,jj,jk,1) = (e1v(ji,jj) * e3v(ji,jj,jk,Kmm ) * vv(ji,jj,jk,Kmm)*vmask(ji,jj,jk))994 ptab(ji,jj,jk,1) = (e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vv(ji,jj,jk,Kmm_a)*vmask(ji,jj,jk)) 995 995 # if defined key_vertical 996 ptab(ji,jj,jk,2) = vmask(ji,jj,jk) * e1v(ji,jj) * e3v(ji,jj,jk,Kmm )996 ptab(ji,jj,jk,2) = vmask(ji,jj,jk) * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) 997 997 # endif 998 998 END DO … … 1019 1019 END DO 1020 1020 IF (N_in == 0) THEN 1021 vv(ji,jj,:,Krhs ) = 0._wp1021 vv(ji,jj,:,Krhs_a) = 0._wp 1022 1022 CYCLE 1023 1023 ENDIF … … 1027 1027 if (vmask(ji,jref,jk) == 0) EXIT 1028 1028 N_out = N_out + 1 1029 h_out(N_out) = e3v(ji,jref,jk,Krhs )1029 h_out(N_out) = e3v(ji,jref,jk,Krhs_a) 1030 1030 END DO 1031 1031 IF (N_out == 0) THEN 1032 vv(ji,jj,:,Krhs ) = 0._wp1032 vv(ji,jj,:,Krhs_a) = 0._wp 1033 1033 CYCLE 1034 1034 ENDIF 1035 call reconstructandremap(tabin(1:N_in),h_in(1:N_in),vv(ji,jj,1:N_out,Krhs ),h_out(1:N_out),N_in,N_out)1035 call reconstructandremap(tabin(1:N_in),h_in(1:N_in),vv(ji,jj,1:N_out,Krhs_a),h_out(1:N_out),N_in,N_out) 1036 1036 END DO 1037 1037 END DO 1038 1038 # else 1039 1039 DO jk = 1, jpkm1 1040 vv(i1:i2,j1:j2,jk,Krhs ) = ptab(i1:i2,j1:j2,jk,1) / ( zrhox * e1v(i1:i2,j1:j2) * e3v(i1:i2,j1:j2,jk,Krhs) )1040 vv(i1:i2,j1:j2,jk,Krhs_a) = ptab(i1:i2,j1:j2,jk,1) / ( zrhox * e1v(i1:i2,j1:j2) * e3v(i1:i2,j1:j2,jk,Krhs_a) ) 1041 1041 END DO 1042 1042 # endif … … 1060 1060 ! 1061 1061 IF( before ) THEN 1062 ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * hu_n(i1:i2,j1:j2) * uu_b(i1:i2,j1:j2,Kmm )1062 ptab(i1:i2,j1:j2) = e2u(i1:i2,j1:j2) * hu_n(i1:i2,j1:j2) * uu_b(i1:i2,j1:j2,Kmm_a) 1063 1063 ELSE 1064 1064 western_side = (nb == 1).AND.(ndir == 1) … … 1113 1113 ! 1114 1114 IF( before ) THEN 1115 ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * hv_n(i1:i2,j1:j2) * vv_b(i1:i2,j1:j2,Kmm )1115 ptab(i1:i2,j1:j2) = e1v(i1:i2,j1:j2) * hv_n(i1:i2,j1:j2) * vv_b(i1:i2,j1:j2,Kmm_a) 1116 1116 ELSE 1117 1117 western_side = (nb == 1).AND.(ndir == 1) … … 1394 1394 DO jj=j1,j2 1395 1395 DO ji=i1,i2 1396 ptab(ji,jj,jk,2) = wmask(ji,jj,jk) * e3w(ji,jj,jk,Kmm )1396 ptab(ji,jj,jk,2) = wmask(ji,jj,jk) * e3w(ji,jj,jk,Kmm_a) 1397 1397 END DO 1398 1398 END DO … … 1415 1415 IF (wmask(ji,jj,jk) == 0) EXIT 1416 1416 N_out = N_out + 1 1417 h_out(jk) = e3t(ji,jj,jk,Kmm )1417 h_out(jk) = e3t(ji,jj,jk,Kmm_a) 1418 1418 ENDDO 1419 1419 IF (N_in > 0) THEN -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/NST/agrif_oce_sponge.F90
r10989 r11053 191 191 END SUBROUTINE Agrif_Sponge 192 192 193 SUBROUTINE interptsn_sponge( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before 193 SUBROUTINE interptsn_sponge( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before) 194 194 !!---------------------------------------------------------------------- 195 195 !! *** ROUTINE interptsn_sponge *** … … 218 218 DO jj=j1,j2 219 219 DO ji=i1,i2 220 tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kbb )220 tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kbb_a) 221 221 END DO 222 222 END DO … … 228 228 DO jj=j1,j2 229 229 DO ji=i1,i2 230 tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm )230 tabres(ji,jj,jk,jpts+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) 231 231 END DO 232 232 END DO … … 251 251 IF (tmask(ji,jj,jk) == 0) EXIT 252 252 N_out = N_out + 1 253 h_out(jk) = e3t(ji,jj,jk,Kmm ) !Child grid scale factors. Could multiply by e1e2t here instead of division above253 h_out(jk) = e3t(ji,jj,jk,Kmm_a) !Child grid scale factors. Could multiply by e1e2t here instead of division above 254 254 ENDDO 255 255 IF (N_in > 0) THEN … … 268 268 DO jk=1,jpkm1 269 269 # if defined key_vertical 270 tsbdiff(ji,jj,jk,1:jpts) = ts(ji,jj,jk,1:jpts,Kbb ) - tabres_child(ji,jj,jk,1:jpts)270 tsbdiff(ji,jj,jk,1:jpts) = ts(ji,jj,jk,1:jpts,Kbb_a) - tabres_child(ji,jj,jk,1:jpts) 271 271 # else 272 tsbdiff(ji,jj,jk,1:jpts) = ts(ji,jj,jk,1:jpts,Kbb ) - tabres(ji,jj,jk,1:jpts)272 tsbdiff(ji,jj,jk,1:jpts) = ts(ji,jj,jk,1:jpts,Kbb_a) - tabres(ji,jj,jk,1:jpts) 273 273 # endif 274 274 ENDDO … … 281 281 DO jj = j1,j2 282 282 DO ji = i1,i2-1 283 zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm )283 zabe1 = fsaht_spu(ji,jj) * umask(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm_a) 284 284 ztu(ji,jj,jk) = zabe1 * ( tsbdiff(ji+1,jj ,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 285 285 END DO … … 288 288 DO ji = i1,i2 289 289 DO jj = j1,j2-1 290 zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm )290 zabe2 = fsaht_spv(ji,jj) * vmask(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm_a) 291 291 ztv(ji,jj,jk) = zabe2 * ( tsbdiff(ji ,jj+1,jk,jn) - tsbdiff(ji,jj,jk,jn) ) 292 292 END DO … … 310 310 DO ji = i1+1,i2-1 311 311 IF (.NOT. tabspongedone_tsn(ji,jj)) THEN 312 zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm )312 zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a) 313 313 ! horizontal diffusive trends 314 314 ztsa = zbtr * ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) 315 315 ! add it to the general tracer trends 316 ts(ji,jj,jk,jn,Krhs ) = ts(ji,jj,jk,jn,Krhs) + ztsa316 ts(ji,jj,jk,jn,Krhs_a) = ts(ji,jj,jk,jn,Krhs_a) + ztsa 317 317 ENDIF 318 318 END DO … … 353 353 DO jj=j1,j2 354 354 DO ji=i1,i2 355 tabres(ji,jj,jk,m1) = uu(ji,jj,jk,Kbb )355 tabres(ji,jj,jk,m1) = uu(ji,jj,jk,Kbb_a) 356 356 # if defined key_vertical 357 tabres(ji,jj,jk,m2) = e3u(ji,jj,jk,Kmm )*umask(ji,jj,jk)357 tabres(ji,jj,jk,m2) = e3u(ji,jj,jk,Kmm_a)*umask(ji,jj,jk) 358 358 # endif 359 359 END DO … … 384 384 if (umask(ji,jj,jk) == 0) EXIT 385 385 N_out = N_out + 1 386 h_out(N_out) = e3u(ji,jj,jk,Kmm )386 h_out(N_out) = e3u(ji,jj,jk,Kmm_a) 387 387 ENDDO 388 388 … … 403 403 ENDDO 404 404 405 ubdiff(i1:i2,j1:j2,:) = (uu(i1:i2,j1:j2,:,Kbb ) - tabres_child(i1:i2,j1:j2,:))*umask(i1:i2,j1:j2,:)405 ubdiff(i1:i2,j1:j2,:) = (uu(i1:i2,j1:j2,:,Kbb_a) - tabres_child(i1:i2,j1:j2,:))*umask(i1:i2,j1:j2,:) 406 406 #else 407 ubdiff(i1:i2,j1:j2,:) = (uu(i1:i2,j1:j2,:,Kbb ) - tabres(i1:i2,j1:j2,:,1))*umask(i1:i2,j1:j2,:)407 ubdiff(i1:i2,j1:j2,:) = (uu(i1:i2,j1:j2,:,Kbb_a) - tabres(i1:i2,j1:j2,:,1))*umask(i1:i2,j1:j2,:) 408 408 #endif 409 409 ! … … 416 416 DO jj = j1,j2 417 417 DO ji = i1+1,i2 ! vector opt. 418 zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm ) * fsahm_spt(ji,jj)419 hdivdiff(ji,jj,jk) = ( e2u(ji ,jj)*e3u(ji ,jj,jk,Kmm ) * ubdiff(ji ,jj,jk) &420 & -e2u(ji-1,jj)*e3u(ji-1,jj,jk,Kmm ) * ubdiff(ji-1,jj,jk) ) * zbtr418 zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a) * fsahm_spt(ji,jj) 419 hdivdiff(ji,jj,jk) = ( e2u(ji ,jj)*e3u(ji ,jj,jk,Kmm_a) * ubdiff(ji ,jj,jk) & 420 & -e2u(ji-1,jj)*e3u(ji-1,jj,jk,Kmm_a) * ubdiff(ji-1,jj,jk) ) * zbtr 421 421 END DO 422 422 END DO … … 439 439 ze1v = hdivdiff(ji,jj,jk) 440 440 ! horizontal diffusive trends 441 zua = - ( ze2u - rotdiff (ji,jj-1,jk) ) / ( e2u(ji,jj) * e3u(ji,jj,jk,Kmm ) ) &441 zua = - ( ze2u - rotdiff (ji,jj-1,jk) ) / ( e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) ) & 442 442 + ( hdivdiff(ji+1,jj,jk) - ze1v ) * r1_e1u(ji,jj) 443 443 444 444 ! add it to the general momentum trends 445 uu(ji,jj,jk,Krhs ) = uu(ji,jj,jk,Krhs) + zua445 uu(ji,jj,jk,Krhs_a) = uu(ji,jj,jk,Krhs_a) + zua 446 446 447 447 END DO … … 465 465 466 466 ! horizontal diffusive trends 467 zva = + ( ze2u - rotdiff (ji-1,jj,jk) ) / ( e1v(ji,jj) * e3v(ji,jj,jk,Kmm ) ) &467 zva = + ( ze2u - rotdiff (ji-1,jj,jk) ) / ( e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) ) & 468 468 + ( hdivdiff(ji,jj+1,jk) - ze1v ) * r1_e2v(ji,jj) 469 469 470 470 ! add it to the general momentum trends 471 vv(ji,jj,jk,Krhs ) = vv(ji,jj,jk,Krhs) + zva471 vv(ji,jj,jk,Krhs_a) = vv(ji,jj,jk,Krhs_a) + zva 472 472 END DO 473 473 ENDIF … … 506 506 DO jj=j1,j2 507 507 DO ji=i1,i2 508 tabres(ji,jj,jk,m1) = vv(ji,jj,jk,Kbb )508 tabres(ji,jj,jk,m1) = vv(ji,jj,jk,Kbb_a) 509 509 # if defined key_vertical 510 tabres(ji,jj,jk,m2) = vmask(ji,jj,jk) * e3v(ji,jj,jk,Kmm )510 tabres(ji,jj,jk,m2) = vmask(ji,jj,jk) * e3v(ji,jj,jk,Kmm_a) 511 511 # endif 512 512 END DO … … 536 536 if (vmask(ji,jj,jk) == 0) EXIT 537 537 N_out = N_out + 1 538 h_out(N_out) = e3v(ji,jj,jk,Kmm )538 h_out(N_out) = e3v(ji,jj,jk,Kmm_a) 539 539 ENDDO 540 540 … … 549 549 ENDDO 550 550 551 vbdiff(i1:i2,j1:j2,:) = (vv(i1:i2,j1:j2,:,Kbb ) - tabres_child(i1:i2,j1:j2,:))*vmask(i1:i2,j1:j2,:)551 vbdiff(i1:i2,j1:j2,:) = (vv(i1:i2,j1:j2,:,Kbb_a) - tabres_child(i1:i2,j1:j2,:))*vmask(i1:i2,j1:j2,:) 552 552 # else 553 vbdiff(i1:i2,j1:j2,:) = (vv(i1:i2,j1:j2,:,Kbb ) - tabres(i1:i2,j1:j2,:,1))*vmask(i1:i2,j1:j2,:)553 vbdiff(i1:i2,j1:j2,:) = (vv(i1:i2,j1:j2,:,Kbb_a) - tabres(i1:i2,j1:j2,:,1))*vmask(i1:i2,j1:j2,:) 554 554 # endif 555 555 ! … … 562 562 DO jj = j1+1,j2 563 563 DO ji = i1,i2 ! vector opt. 564 zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm ) * fsahm_spt(ji,jj)565 hdivdiff(ji,jj,jk) = ( e1v(ji,jj ) * e3v(ji,jj ,jk,Kmm ) * vbdiff(ji,jj ,jk) &566 & -e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm ) * vbdiff(ji,jj-1,jk) ) * zbtr564 zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm_a) * fsahm_spt(ji,jj) 565 hdivdiff(ji,jj,jk) = ( e1v(ji,jj ) * e3v(ji,jj ,jk,Kmm_a) * vbdiff(ji,jj ,jk) & 566 & -e1v(ji,jj-1) * e3v(ji,jj-1,jk,Kmm_a) * vbdiff(ji,jj-1,jk) ) * zbtr 567 567 END DO 568 568 END DO … … 586 586 IF( .NOT. tabspongedone_u(ji,jj) ) THEN 587 587 DO jk = 1, jpkm1 588 uu(ji,jj,jk,Krhs ) = uu(ji,jj,jk,Krhs) &589 & - ( rotdiff (ji ,jj,jk) - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * e3u(ji,jj,jk,Kmm ) ) &588 uu(ji,jj,jk,Krhs_a) = uu(ji,jj,jk,Krhs_a) & 589 & - ( rotdiff (ji ,jj,jk) - rotdiff (ji,jj-1,jk)) / ( e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) ) & 590 590 & + ( hdivdiff(ji+1,jj,jk) - hdivdiff(ji,jj ,jk)) * r1_e1u(ji,jj) 591 591 END DO … … 600 600 IF( .NOT. tabspongedone_v(ji,jj) ) THEN 601 601 DO jk = 1, jpkm1 602 vv(ji,jj,jk,Krhs ) = vv(ji,jj,jk,Krhs) &603 & + ( rotdiff (ji,jj ,jk) - rotdiff (ji-1,jj,jk) ) / ( e1v(ji,jj) * e3v(ji,jj,jk,Kmm ) ) &602 vv(ji,jj,jk,Krhs_a) = vv(ji,jj,jk,Krhs_a) & 603 & + ( rotdiff (ji,jj ,jk) - rotdiff (ji-1,jj,jk) ) / ( e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) ) & 604 604 & + ( hdivdiff(ji,jj+1,jk) - hdivdiff(ji ,jj,jk) ) * r1_e2v(ji,jj) 605 605 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/NST/agrif_oce_update.F90
r10989 r11053 230 230 ! ----------------------- 231 231 ! 232 e3u(:,:,:,Krhs ) = e3u(:,:,:,Kmm)233 e3v(:,:,:,Krhs ) = e3v(:,:,:,Kmm)234 ! uu(:,:,:,Krhs ) = e3u(:,:,:,Kbb)235 ! vv(:,:,:,Krhs ) = e3v(:,:,:,Kbb)232 e3u(:,:,:,Krhs_a) = e3u(:,:,:,Kmm_a) 233 e3v(:,:,:,Krhs_a) = e3v(:,:,:,Kmm_a) 234 ! uu(:,:,:,Krhs_a) = e3u(:,:,:,Kbb_a) 235 ! vv(:,:,:,Krhs_a) = e3v(:,:,:,Kbb_a) 236 236 hu_a(:,:) = hu_n(:,:) 237 237 hv_a(:,:) = hv_n(:,:) … … 242 242 ! Vertical scale factor interpolations 243 243 ! ------------------------------------ 244 CALL dom_vvl_interpol( e3t(:,:,:,Kmm ), e3u(:,:,:,Kmm) , 'U' )245 CALL dom_vvl_interpol( e3t(:,:,:,Kmm ), e3v(:,:,:,Kmm) , 'V' )246 CALL dom_vvl_interpol( e3u(:,:,:,Kmm ), e3f(:,:,:) , 'F' )247 248 CALL dom_vvl_interpol( e3u(:,:,:,Kmm ), e3uw(:,:,:,Kmm), 'UW' )249 CALL dom_vvl_interpol( e3v(:,:,:,Kmm ), e3vw(:,:,:,Kmm), 'VW' )244 CALL dom_vvl_interpol( e3t(:,:,:,Kmm_a), e3u(:,:,:,Kmm_a) , 'U' ) 245 CALL dom_vvl_interpol( e3t(:,:,:,Kmm_a), e3v(:,:,:,Kmm_a) , 'V' ) 246 CALL dom_vvl_interpol( e3u(:,:,:,Kmm_a), e3f(:,:,:) , 'F' ) 247 248 CALL dom_vvl_interpol( e3u(:,:,:,Kmm_a), e3uw(:,:,:,Kmm_a), 'UW' ) 249 CALL dom_vvl_interpol( e3v(:,:,:,Kmm_a), e3vw(:,:,:,Kmm_a), 'VW' ) 250 250 251 251 ! Update total depths: … … 254 254 hv_n(:,:) = 0._wp ! Ocean depth at V-points 255 255 DO jk = 1, jpkm1 256 hu_n(:,:) = hu_n(:,:) + e3u(:,:,jk,Kmm ) * umask(:,:,jk)257 hv_n(:,:) = hv_n(:,:) + e3v(:,:,jk,Kmm ) * vmask(:,:,jk)256 hu_n(:,:) = hu_n(:,:) + e3u(:,:,jk,Kmm_a) * umask(:,:,jk) 257 hv_n(:,:) = hv_n(:,:) + e3v(:,:,jk,Kmm_a) * vmask(:,:,jk) 258 258 END DO 259 259 ! ! Inverse of the local depth … … 268 268 ! Vertical scale factor interpolations 269 269 ! ------------------------------------ 270 CALL dom_vvl_interpol( e3t(:,:,:,Kbb ), e3u(:,:,:,Kbb), 'U' )271 CALL dom_vvl_interpol( e3t(:,:,:,Kbb ), e3v(:,:,:,Kbb), 'V' )272 273 CALL dom_vvl_interpol( e3u(:,:,:,Kbb ), e3uw(:,:,:,Kbb), 'UW' )274 CALL dom_vvl_interpol( e3v(:,:,:,Kbb ), e3vw(:,:,:,Kbb), 'VW' )270 CALL dom_vvl_interpol( e3t(:,:,:,Kbb_a), e3u(:,:,:,Kbb_a), 'U' ) 271 CALL dom_vvl_interpol( e3t(:,:,:,Kbb_a), e3v(:,:,:,Kbb_a), 'V' ) 272 273 CALL dom_vvl_interpol( e3u(:,:,:,Kbb_a), e3uw(:,:,:,Kbb_a), 'UW' ) 274 CALL dom_vvl_interpol( e3v(:,:,:,Kbb_a), e3vw(:,:,:,Kbb_a), 'VW' ) 275 275 276 276 ! Update total depths: … … 279 279 hv_b(:,:) = 0._wp ! Ocean depth at V-points 280 280 DO jk = 1, jpkm1 281 hu_b(:,:) = hu_b(:,:) + e3u(:,:,jk,Kbb ) * umask(:,:,jk)282 hv_b(:,:) = hv_b(:,:) + e3v(:,:,jk,Kbb ) * vmask(:,:,jk)281 hu_b(:,:) = hu_b(:,:) + e3u(:,:,jk,Kbb_a) * umask(:,:,jk) 282 hv_b(:,:) = hv_b(:,:) + e3v(:,:,jk,Kbb_a) * vmask(:,:,jk) 283 283 END DO 284 284 ! ! Inverse of the local depth … … 315 315 DO jj=j1,j2 316 316 DO ji=i1,i2 317 tabres(ji,jj,jk,jn) = (ts(ji,jj,jk,jn,Kmm ) * e3t(ji,jj,jk,Kmm) ) &317 tabres(ji,jj,jk,jn) = (ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Kmm_a) ) & 318 318 * tmask(ji,jj,jk) + (tmask(ji,jj,jk)-1)*999._wp 319 319 END DO … … 324 324 DO jj=j1,j2 325 325 DO ji=i1,i2 326 tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm ) &326 tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) & 327 327 + (tmask(ji,jj,jk)-1)*999._wp 328 328 END DO … … 345 345 IF (tmask(ji,jj,jk) < -900) EXIT ! TODO: Will not work with ISF 346 346 N_out = N_out + 1 347 h_out(N_out) = e3t(ji,jj,jk,Kmm )347 h_out(N_out) = e3t(ji,jj,jk,Kmm_a) 348 348 ENDDO 349 349 IF (N_in > 0) THEN !Remove this? … … 369 369 DO ji=i1,i2 370 370 IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN 371 ts(ji,jj,jk,jn,Kbb ) = ts(ji,jj,jk,jn,Kbb) &371 ts(ji,jj,jk,jn,Kbb_a) = ts(ji,jj,jk,jn,Kbb_a) & 372 372 & + atfp * ( tabres_child(ji,jj,jk,jn) & 373 & - ts(ji,jj,jk,jn,Kmm ) ) * tmask(ji,jj,jk)373 & - ts(ji,jj,jk,jn,Kmm_a) ) * tmask(ji,jj,jk) 374 374 ENDIF 375 375 ENDDO … … 383 383 DO ji=i1,i2 384 384 IF( tabres_child(ji,jj,jk,jn) .NE. 0. ) THEN 385 ts(ji,jj,jk,jn,Kmm ) = tabres_child(ji,jj,jk,jn) * tmask(ji,jj,jk)385 ts(ji,jj,jk,jn,Kmm_a) = tabres_child(ji,jj,jk,jn) * tmask(ji,jj,jk) 386 386 END IF 387 387 END DO … … 413 413 DO ji=i1,i2 414 414 !> jc tmp 415 tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm ) * e3t(ji,jj,jk,Kmm) / e3t_0(ji,jj,jk)416 ! tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm ) * e3t(ji,jj,jk,Kmm)415 tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Kmm_a) / e3t_0(ji,jj,jk) 416 ! tabres(ji,jj,jk,jn) = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Kmm_a) 417 417 !< jc tmp 418 418 END DO … … 434 434 DO ji = i1, i2 435 435 IF( tabres(ji,jj,jk,jn) /= 0._wp ) THEN 436 ztb = ts(ji,jj,jk,jn,Kbb ) * e3t(ji,jj,jk,Kbb) ! fse3t_b prior update should be used436 ztb = ts(ji,jj,jk,jn,Kbb_a) * e3t(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 437 437 ztnu = tabres(ji,jj,jk,jn) 438 ztno = ts(ji,jj,jk,jn,Kmm ) * e3t(ji,jj,jk,Krhs)439 ts(ji,jj,jk,jn,Kbb ) = ( ztb + atfp * ( ztnu - ztno) ) &440 & * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb )438 ztno = ts(ji,jj,jk,jn,Kmm_a) * e3t(ji,jj,jk,Krhs_a) 439 ts(ji,jj,jk,jn,Kbb_a) = ( ztb + atfp * ( ztnu - ztno) ) & 440 & * tmask(ji,jj,jk) / e3t(ji,jj,jk,Kbb_a) 441 441 ENDIF 442 442 END DO … … 450 450 DO ji=i1,i2 451 451 IF( tabres(ji,jj,jk,jn) /= 0._wp ) THEN 452 ts(ji,jj,jk,jn,Kmm ) = tabres(ji,jj,jk,jn) / e3t(ji,jj,jk,Kmm)452 ts(ji,jj,jk,jn,Kmm_a) = tabres(ji,jj,jk,jn) / e3t(ji,jj,jk,Kmm_a) 453 453 END IF 454 454 END DO … … 458 458 ! 459 459 IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 460 ts(i1:i2,j1:j2,k1:k2,1:jpts,Kbb ) = ts(i1:i2,j1:j2,k1:k2,1:jpts,Kmm)460 ts(i1:i2,j1:j2,k1:k2,1:jpts,Kbb_a) = ts(i1:i2,j1:j2,k1:k2,1:jpts,Kmm_a) 461 461 ENDIF 462 462 ! … … 495 495 DO jj=j1,j2 496 496 DO ji=i1,i2 497 tabres(ji,jj,jk,1) = zrhoy * e2u(ji,jj) * e3u(ji,jj,jk,Kmm ) * umask(ji,jj,jk) * uu(ji,jj,jk,Kmm) &497 tabres(ji,jj,jk,1) = zrhoy * e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) * umask(ji,jj,jk) * uu(ji,jj,jk,Kmm_a) & 498 498 + (umask(ji,jj,jk)-1)*999._wp 499 tabres(ji,jj,jk,2) = zrhoy * umask(ji,jj,jk) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm ) &499 tabres(ji,jj,jk,2) = zrhoy * umask(ji,jj,jk) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm_a) & 500 500 + (umask(ji,jj,jk)-1)*999._wp 501 501 END DO … … 520 520 IF (umask(ji,jj,jk) == 0) EXIT 521 521 N_out = N_out + 1 522 h_out(N_out) = e3u(ji,jj,jk,Kmm )522 h_out(N_out) = e3u(ji,jj,jk,Kmm_a) 523 523 ENDDO 524 524 IF (N_in * N_out > 0) THEN … … 550 550 DO ji=i1,i2 551 551 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 552 uu(ji,jj,jk,Kbb ) = uu(ji,jj,jk,Kbb) &553 & + atfp * ( tabres_child(ji,jj,jk) - uu(ji,jj,jk,Kmm ) ) * umask(ji,jj,jk)552 uu(ji,jj,jk,Kbb_a) = uu(ji,jj,jk,Kbb_a) & 553 & + atfp * ( tabres_child(ji,jj,jk) - uu(ji,jj,jk,Kmm_a) ) * umask(ji,jj,jk) 554 554 ENDIF 555 555 ! 556 uu(ji,jj,jk,Kmm ) = tabres_child(ji,jj,jk) * umask(ji,jj,jk)556 uu(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * umask(ji,jj,jk) 557 557 END DO 558 558 END DO … … 579 579 zrhoy = Agrif_Rhoy() 580 580 DO jk = k1, k2 581 tabres(i1:i2,j1:j2,jk,1) = zrhoy * e2u(i1:i2,j1:j2) * e3u(i1:i2,j1:j2,jk,Kmm ) * uu(i1:i2,j1:j2,jk,Kmm)581 tabres(i1:i2,j1:j2,jk,1) = zrhoy * e2u(i1:i2,j1:j2) * e3u(i1:i2,j1:j2,jk,Kmm_a) * uu(i1:i2,j1:j2,jk,Kmm_a) 582 582 END DO 583 583 ELSE … … 588 588 ! 589 589 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 590 zub = uu(ji,jj,jk,Kbb ) * e3u(ji,jj,jk,Kbb) ! fse3t_b prior update should be used591 zuno = uu(ji,jj,jk,Kmm ) * e3u(ji,jj,jk,Krhs)590 zub = uu(ji,jj,jk,Kbb_a) * e3u(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 591 zuno = uu(ji,jj,jk,Kmm_a) * e3u(ji,jj,jk,Krhs_a) 592 592 zunu = tabres(ji,jj,jk,1) 593 uu(ji,jj,jk,Kbb ) = ( zub + atfp * ( zunu - zuno) ) &594 & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb )593 uu(ji,jj,jk,Kbb_a) = ( zub + atfp * ( zunu - zuno) ) & 594 & * umask(ji,jj,jk) / e3u(ji,jj,jk,Kbb_a) 595 595 ENDIF 596 596 ! 597 uu(ji,jj,jk,Kmm ) = tabres(ji,jj,jk,1) * umask(ji,jj,jk) / e3u(ji,jj,jk,Kmm)597 uu(ji,jj,jk,Kmm_a) = tabres(ji,jj,jk,1) * umask(ji,jj,jk) / e3u(ji,jj,jk,Kmm_a) 598 598 END DO 599 599 END DO … … 601 601 ! 602 602 IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 603 uu(i1:i2,j1:j2,k1:k2,Kbb ) = uu(i1:i2,j1:j2,k1:k2,Kmm)603 uu(i1:i2,j1:j2,k1:k2,Kbb_a) = uu(i1:i2,j1:j2,k1:k2,Kmm_a) 604 604 ENDIF 605 605 ! … … 632 632 IF (western_side) THEN 633 633 DO jj=j1,j2 634 zcor = uu_b(i1-1,jj,Kmm ) * hu_a(i1-1,jj) * r1_hu_n(i1-1,jj) - uu_b(i1-1,jj,Kmm)635 uu_b(i1-1,jj,Kmm ) = uu_b(i1-1,jj,Kmm) + zcor634 zcor = uu_b(i1-1,jj,Kmm_a) * hu_a(i1-1,jj) * r1_hu_n(i1-1,jj) - uu_b(i1-1,jj,Kmm_a) 635 uu_b(i1-1,jj,Kmm_a) = uu_b(i1-1,jj,Kmm_a) + zcor 636 636 DO jk=1,jpkm1 637 uu(i1-1,jj,jk,Kmm ) = uu(i1-1,jj,jk,Kmm) + zcor * umask(i1-1,jj,jk)637 uu(i1-1,jj,jk,Kmm_a) = uu(i1-1,jj,jk,Kmm_a) + zcor * umask(i1-1,jj,jk) 638 638 END DO 639 639 END DO … … 642 642 IF (eastern_side) THEN 643 643 DO jj=j1,j2 644 zcor = uu_b(i2+1,jj,Kmm ) * hu_a(i2+1,jj) * r1_hu_n(i2+1,jj) - uu_b(i2+1,jj,Kmm)645 uu_b(i2+1,jj,Kmm ) = uu_b(i2+1,jj,Kmm) + zcor644 zcor = uu_b(i2+1,jj,Kmm_a) * hu_a(i2+1,jj) * r1_hu_n(i2+1,jj) - uu_b(i2+1,jj,Kmm_a) 645 uu_b(i2+1,jj,Kmm_a) = uu_b(i2+1,jj,Kmm_a) + zcor 646 646 DO jk=1,jpkm1 647 uu(i2+1,jj,jk,Kmm ) = uu(i2+1,jj,jk,Kmm) + zcor * umask(i2+1,jj,jk)647 uu(i2+1,jj,jk,Kmm_a) = uu(i2+1,jj,jk,Kmm_a) + zcor * umask(i2+1,jj,jk) 648 648 END DO 649 649 END DO … … 682 682 DO jj=j1,j2 683 683 DO ji=i1,i2 684 tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm ) * vmask(ji,jj,jk) * vv(ji,jj,jk,Kmm) &684 tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vmask(ji,jj,jk) * vv(ji,jj,jk,Kmm_a) & 685 685 + (vmask(ji,jj,jk)-1)*999._wp 686 tabres(ji,jj,jk,2) = vmask(ji,jj,jk) * zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm ) &686 tabres(ji,jj,jk,2) = vmask(ji,jj,jk) * zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) & 687 687 + (vmask(ji,jj,jk)-1)*999._wp 688 688 END DO … … 705 705 IF (vmask(ji,jj,jk) == 0) EXIT 706 706 N_out = N_out + 1 707 h_out(N_out) = e3v(ji,jj,jk,Kmm )707 h_out(N_out) = e3v(ji,jj,jk,Kmm_a) 708 708 ENDDO 709 709 IF (N_in * N_out > 0) THEN … … 736 736 ! 737 737 IF( .NOT.(lk_agrif_fstep.AND.(neuler==0)) ) THEN ! Add asselin part 738 vv(ji,jj,jk,Kbb ) = vv(ji,jj,jk,Kbb) &739 & + atfp * ( tabres_child(ji,jj,jk) - vv(ji,jj,jk,Kmm ) ) * vmask(ji,jj,jk)738 vv(ji,jj,jk,Kbb_a) = vv(ji,jj,jk,Kbb_a) & 739 & + atfp * ( tabres_child(ji,jj,jk) - vv(ji,jj,jk,Kmm_a) ) * vmask(ji,jj,jk) 740 740 ENDIF 741 741 ! 742 vv(ji,jj,jk,Kmm ) = tabres_child(ji,jj,jk) * vmask(ji,jj,jk)742 vv(ji,jj,jk,Kmm_a) = tabres_child(ji,jj,jk) * vmask(ji,jj,jk) 743 743 END DO 744 744 END DO … … 767 767 DO jj=j1,j2 768 768 DO ji=i1,i2 769 tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm ) * vv(ji,jj,jk,Kmm)769 tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v(ji,jj,jk,Kmm_a) * vv(ji,jj,jk,Kmm_a) 770 770 END DO 771 771 END DO … … 778 778 ! 779 779 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 780 zvb = vv(ji,jj,jk,Kbb ) * e3v(ji,jj,jk,Kbb) ! fse3t_b prior update should be used781 zvno = vv(ji,jj,jk,Kmm ) * e3v(ji,jj,jk,Krhs)780 zvb = vv(ji,jj,jk,Kbb_a) * e3v(ji,jj,jk,Kbb_a) ! fse3t_b prior update should be used 781 zvno = vv(ji,jj,jk,Kmm_a) * e3v(ji,jj,jk,Krhs_a) 782 782 zvnu = tabres(ji,jj,jk,1) 783 vv(ji,jj,jk,Kbb ) = ( zvb + atfp * ( zvnu - zvno) ) &784 & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb )783 vv(ji,jj,jk,Kbb_a) = ( zvb + atfp * ( zvnu - zvno) ) & 784 & * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kbb_a) 785 785 ENDIF 786 786 ! 787 vv(ji,jj,jk,Kmm ) = tabres(ji,jj,jk,1) * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kmm)787 vv(ji,jj,jk,Kmm_a) = tabres(ji,jj,jk,1) * vmask(ji,jj,jk) / e3v(ji,jj,jk,Kmm_a) 788 788 END DO 789 789 END DO … … 791 791 ! 792 792 IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 793 vv(i1:i2,j1:j2,k1:k2,Kbb ) = vv(i1:i2,j1:j2,k1:k2,Kmm)793 vv(i1:i2,j1:j2,k1:k2,Kbb_a) = vv(i1:i2,j1:j2,k1:k2,Kmm_a) 794 794 ENDIF 795 795 ! … … 822 822 IF (southern_side) THEN 823 823 DO ji=i1,i2 824 zcor = vv_b(ji,j1-1,Kmm ) * hv_a(ji,j1-1) * r1_hv_n(ji,j1-1) - vv_b(ji,j1-1,Kmm)825 vv_b(ji,j1-1,Kmm ) = vv_b(ji,j1-1,Kmm) + zcor824 zcor = vv_b(ji,j1-1,Kmm_a) * hv_a(ji,j1-1) * r1_hv_n(ji,j1-1) - vv_b(ji,j1-1,Kmm_a) 825 vv_b(ji,j1-1,Kmm_a) = vv_b(ji,j1-1,Kmm_a) + zcor 826 826 DO jk=1,jpkm1 827 vv(ji,j1-1,jk,Kmm ) = vv(ji,j1-1,jk,Kmm) + zcor * vmask(ji,j1-1,jk)827 vv(ji,j1-1,jk,Kmm_a) = vv(ji,j1-1,jk,Kmm_a) + zcor * vmask(ji,j1-1,jk) 828 828 END DO 829 829 END DO … … 832 832 IF (northern_side) THEN 833 833 DO ji=i1,i2 834 zcor = vv_b(ji,j2+1,Kmm ) * hv_a(ji,j2+1) * r1_hv_n(ji,j2+1) - vv_b(ji,j2+1,Kmm)835 vv_b(ji,j2+1,Kmm ) = vv_b(ji,j2+1,Kmm) + zcor834 zcor = vv_b(ji,j2+1,Kmm_a) * hv_a(ji,j2+1) * r1_hv_n(ji,j2+1) - vv_b(ji,j2+1,Kmm_a) 835 vv_b(ji,j2+1,Kmm_a) = vv_b(ji,j2+1,Kmm_a) + zcor 836 836 DO jk=1,jpkm1 837 vv(ji,j2+1,jk,Kmm ) = vv(ji,j2+1,jk,Kmm) + zcor * vmask(ji,j2+1,jk)837 vv(ji,j2+1,jk,Kmm_a) = vv(ji,j2+1,jk,Kmm_a) + zcor * vmask(ji,j2+1,jk) 838 838 END DO 839 839 END DO … … 862 862 DO jj=j1,j2 863 863 DO ji=i1,i2 864 tabres(ji,jj) = zrhoy * uu_b(ji,jj,Kmm ) * hu_n(ji,jj) * e2u(ji,jj)864 tabres(ji,jj) = zrhoy * uu_b(ji,jj,Kmm_a) * hu_n(ji,jj) * e2u(ji,jj) 865 865 END DO 866 866 END DO … … 873 873 spgu(ji,jj) = 0._wp 874 874 DO jk=1,jpkm1 875 spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kmm ) * uu(ji,jj,jk,Kmm)875 spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kmm_a) * uu(ji,jj,jk,Kmm_a) 876 876 END DO 877 877 ! 878 878 zcorr = (tabres(ji,jj) - spgu(ji,jj)) * r1_hu_n(ji,jj) 879 879 DO jk=1,jpkm1 880 uu(ji,jj,jk,Kmm ) = uu(ji,jj,jk,Kmm) + zcorr * umask(ji,jj,jk)880 uu(ji,jj,jk,Kmm_a) = uu(ji,jj,jk,Kmm_a) + zcorr * umask(ji,jj,jk) 881 881 END DO 882 882 ! … … 884 884 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 885 885 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 886 zcorr = (tabres(ji,jj) - uu_b(ji,jj,Kmm ) * hu_a(ji,jj)) * r1_hu_b(ji,jj)887 uu_b(ji,jj,Kbb ) = uu_b(ji,jj,Kbb) + atfp * zcorr * umask(ji,jj,1)886 zcorr = (tabres(ji,jj) - uu_b(ji,jj,Kmm_a) * hu_a(ji,jj)) * r1_hu_b(ji,jj) 887 uu_b(ji,jj,Kbb_a) = uu_b(ji,jj,Kbb_a) + atfp * zcorr * umask(ji,jj,1) 888 888 END IF 889 889 ENDIF 890 uu_b(ji,jj,Kmm ) = tabres(ji,jj) * r1_hu_n(ji,jj) * umask(ji,jj,1)890 uu_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hu_n(ji,jj) * umask(ji,jj,1) 891 891 ! 892 892 ! Correct "before" velocities to hold correct bt component: 893 893 spgu(ji,jj) = 0.e0 894 894 DO jk=1,jpkm1 895 spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kbb ) * uu(ji,jj,jk,Kbb)895 spgu(ji,jj) = spgu(ji,jj) + e3u(ji,jj,jk,Kbb_a) * uu(ji,jj,jk,Kbb_a) 896 896 END DO 897 897 ! 898 zcorr = uu_b(ji,jj,Kbb ) - spgu(ji,jj) * r1_hu_b(ji,jj)898 zcorr = uu_b(ji,jj,Kbb_a) - spgu(ji,jj) * r1_hu_b(ji,jj) 899 899 DO jk=1,jpkm1 900 uu(ji,jj,jk,Kbb ) = uu(ji,jj,jk,Kbb) + zcorr * umask(ji,jj,jk)900 uu(ji,jj,jk,Kbb_a) = uu(ji,jj,jk,Kbb_a) + zcorr * umask(ji,jj,jk) 901 901 END DO 902 902 ! … … 905 905 ! 906 906 IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 907 uu_b(i1:i2,j1:j2,Kbb ) = uu_b(i1:i2,j1:j2,Kmm)907 uu_b(i1:i2,j1:j2,Kbb_a) = uu_b(i1:i2,j1:j2,Kmm_a) 908 908 ENDIF 909 909 ENDIF … … 928 928 DO jj=j1,j2 929 929 DO ji=i1,i2 930 tabres(ji,jj) = zrhox * vv_b(ji,jj,Kmm ) * hv_n(ji,jj) * e1v(ji,jj)930 tabres(ji,jj) = zrhox * vv_b(ji,jj,Kmm_a) * hv_n(ji,jj) * e1v(ji,jj) 931 931 END DO 932 932 END DO … … 939 939 spgv(ji,jj) = 0.e0 940 940 DO jk=1,jpkm1 941 spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kmm ) * vv(ji,jj,jk,Kmm)941 spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kmm_a) * vv(ji,jj,jk,Kmm_a) 942 942 END DO 943 943 ! 944 944 zcorr = (tabres(ji,jj) - spgv(ji,jj)) * r1_hv_n(ji,jj) 945 945 DO jk=1,jpkm1 946 vv(ji,jj,jk,Kmm ) = vv(ji,jj,jk,Kmm) + zcorr * vmask(ji,jj,jk)946 vv(ji,jj,jk,Kmm_a) = vv(ji,jj,jk,Kmm_a) + zcorr * vmask(ji,jj,jk) 947 947 END DO 948 948 ! … … 950 950 IF ( .NOT.ln_dynspg_ts .OR. (ln_dynspg_ts.AND.(.NOT.ln_bt_fw)) ) THEN 951 951 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 952 zcorr = (tabres(ji,jj) - vv_b(ji,jj,Kmm ) * hv_a(ji,jj)) * r1_hv_b(ji,jj)953 vv_b(ji,jj,Kbb ) = vv_b(ji,jj,Kbb) + atfp * zcorr * vmask(ji,jj,1)952 zcorr = (tabres(ji,jj) - vv_b(ji,jj,Kmm_a) * hv_a(ji,jj)) * r1_hv_b(ji,jj) 953 vv_b(ji,jj,Kbb_a) = vv_b(ji,jj,Kbb_a) + atfp * zcorr * vmask(ji,jj,1) 954 954 END IF 955 955 ENDIF 956 vv_b(ji,jj,Kmm ) = tabres(ji,jj) * r1_hv_n(ji,jj) * vmask(ji,jj,1)956 vv_b(ji,jj,Kmm_a) = tabres(ji,jj) * r1_hv_n(ji,jj) * vmask(ji,jj,1) 957 957 ! 958 958 ! Correct "before" velocities to hold correct bt component: 959 959 spgv(ji,jj) = 0.e0 960 960 DO jk=1,jpkm1 961 spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kbb ) * vv(ji,jj,jk,Kbb)961 spgv(ji,jj) = spgv(ji,jj) + e3v(ji,jj,jk,Kbb_a) * vv(ji,jj,jk,Kbb_a) 962 962 END DO 963 963 ! 964 zcorr = vv_b(ji,jj,Kbb ) - spgv(ji,jj) * r1_hv_b(ji,jj)964 zcorr = vv_b(ji,jj,Kbb_a) - spgv(ji,jj) * r1_hv_b(ji,jj) 965 965 DO jk=1,jpkm1 966 vv(ji,jj,jk,Kbb ) = vv(ji,jj,jk,Kbb) + zcorr * vmask(ji,jj,jk)966 vv(ji,jj,jk,Kbb_a) = vv(ji,jj,jk,Kbb_a) + zcorr * vmask(ji,jj,jk) 967 967 END DO 968 968 ! … … 971 971 ! 972 972 IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 973 vv_b(i1:i2,j1:j2,Kbb ) = vv_b(i1:i2,j1:j2,Kmm)973 vv_b(i1:i2,j1:j2,Kbb_a) = vv_b(i1:i2,j1:j2,Kmm_a) 974 974 ENDIF 975 975 ! … … 993 993 DO jj=j1,j2 994 994 DO ji=i1,i2 995 tabres(ji,jj) = ssh(ji,jj,Kmm )995 tabres(ji,jj) = ssh(ji,jj,Kmm_a) 996 996 END DO 997 997 END DO … … 1000 1000 DO jj=j1,j2 1001 1001 DO ji=i1,i2 1002 ssh(ji,jj,Kbb ) = ssh(ji,jj,Kbb) &1003 & + atfp * ( tabres(ji,jj) - ssh(ji,jj,Kmm ) ) * tmask(ji,jj,1)1002 ssh(ji,jj,Kbb_a) = ssh(ji,jj,Kbb_a) & 1003 & + atfp * ( tabres(ji,jj) - ssh(ji,jj,Kmm_a) ) * tmask(ji,jj,1) 1004 1004 END DO 1005 1005 END DO … … 1008 1008 DO jj=j1,j2 1009 1009 DO ji=i1,i2 1010 ssh(ji,jj,Kmm ) = tabres(ji,jj) * tmask(ji,jj,1)1010 ssh(ji,jj,Kmm_a) = tabres(ji,jj) * tmask(ji,jj,1) 1011 1011 END DO 1012 1012 END DO 1013 1013 ! 1014 1014 IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 1015 ssh(i1:i2,j1:j2,Kbb ) = ssh(i1:i2,j1:j2,Kmm)1015 ssh(i1:i2,j1:j2,Kbb_a) = ssh(i1:i2,j1:j2,Kmm_a) 1016 1016 ENDIF 1017 1017 ! … … 1094 1094 DO jj=j1,j2 1095 1095 zcor = rdt * r1_e1e2t(i1 ,jj) * e2u(i1,jj) * (ub2_b(i1,jj)-tabres(i1,jj)) 1096 ssh(i1 ,jj,Kmm ) = ssh(i1 ,jj,Kmm) + zcor1097 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(i1 ,jj,Kbb ) = ssh(i1 ,jj,Kbb) + atfp * zcor1096 ssh(i1 ,jj,Kmm_a) = ssh(i1 ,jj,Kmm_a) + zcor 1097 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(i1 ,jj,Kbb_a) = ssh(i1 ,jj,Kbb_a) + atfp * zcor 1098 1098 END DO 1099 1099 ENDIF … … 1101 1101 DO jj=j1,j2 1102 1102 zcor = - rdt * r1_e1e2t(i2+1,jj) * e2u(i2,jj) * (ub2_b(i2,jj)-tabres(i2,jj)) 1103 ssh(i2+1,jj,Kmm ) = ssh(i2+1,jj,Kmm) + zcor1104 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(i2+1,jj,Kbb ) = ssh(i2+1,jj,Kbb) + atfp * zcor1103 ssh(i2+1,jj,Kmm_a) = ssh(i2+1,jj,Kmm_a) + zcor 1104 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(i2+1,jj,Kbb_a) = ssh(i2+1,jj,Kbb_a) + atfp * zcor 1105 1105 END DO 1106 1106 ENDIF … … 1182 1182 DO ji=i1,i2 1183 1183 zcor = rdt * r1_e1e2t(ji,j1 ) * e1v(ji,j1 ) * (vb2_b(ji,j1)-tabres(ji,j1)) 1184 ssh(ji,j1 ,Kmm ) = ssh(ji,j1 ,Kmm) + zcor1185 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(ji,j1 ,Kbb ) = ssh(ji,j1,Kbb) + atfp * zcor1184 ssh(ji,j1 ,Kmm_a) = ssh(ji,j1 ,Kmm_a) + zcor 1185 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(ji,j1 ,Kbb_a) = ssh(ji,j1,Kbb_a) + atfp * zcor 1186 1186 END DO 1187 1187 ENDIF … … 1189 1189 DO ji=i1,i2 1190 1190 zcor = - rdt * r1_e1e2t(ji,j2+1) * e1v(ji,j2 ) * (vb2_b(ji,j2)-tabres(ji,j2)) 1191 ssh(ji,j2+1,Kmm ) = ssh(ji,j2+1,Kmm) + zcor1192 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(ji,j2+1,Kbb ) = ssh(ji,j2+1,Kbb) + atfp * zcor1191 ssh(ji,j2+1,Kmm_a) = ssh(ji,j2+1,Kmm_a) + zcor 1192 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) ssh(ji,j2+1,Kbb_a) = ssh(ji,j2+1,Kbb_a) + atfp * zcor 1193 1193 END DO 1194 1194 ENDIF … … 1319 1319 DO jj=j1,j2 1320 1320 DO ji=i1,i2 1321 ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + ssh(ji,jj,Kmm ) &1321 ptab(ji,jj,jk) = e3t_0(ji,jj,jk) * (1._wp + ssh(ji,jj,Kmm_a) & 1322 1322 & *ssmask(ji,jj)/(ht_0(ji,jj)-1._wp + ssmask(ji,jj))) 1323 1323 END DO … … 1330 1330 ! Save "old" scale factor (prior update) for subsequent asselin correction 1331 1331 ! of prognostic variables 1332 e3t(i1:i2,j1:j2,1:jpkm1,Krhs ) = e3t(i1:i2,j1:j2,1:jpkm1,Kmm)1333 1334 ! One should also save e3t(:,:,:,Kbb ), but lacking of workspace...1335 ! hdiv(i1:i2,j1:j2,1:jpkm1) = e3t(i1:i2,j1:j2,1:jpkm1,Kbb )1332 e3t(i1:i2,j1:j2,1:jpkm1,Krhs_a) = e3t(i1:i2,j1:j2,1:jpkm1,Kmm_a) 1333 1334 ! One should also save e3t(:,:,:,Kbb_a), but lacking of workspace... 1335 ! hdiv(i1:i2,j1:j2,1:jpkm1) = e3t(i1:i2,j1:j2,1:jpkm1,Kbb_a) 1336 1336 1337 1337 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0) )) THEN … … 1339 1339 DO jj=j1,j2 1340 1340 DO ji=i1,i2 1341 e3t(ji,jj,jk,Kbb ) = e3t(ji,jj,jk,Kbb) &1342 & + atfp * ( ptab(ji,jj,jk) - e3t(ji,jj,jk,Kmm ) )1341 e3t(ji,jj,jk,Kbb_a) = e3t(ji,jj,jk,Kbb_a) & 1342 & + atfp * ( ptab(ji,jj,jk) - e3t(ji,jj,jk,Kmm_a) ) 1343 1343 END DO 1344 1344 END DO 1345 1345 END DO 1346 1346 ! 1347 e3w (i1:i2,j1:j2,1,Kbb ) = e3w_0(i1:i2,j1:j2,1) + e3t(i1:i2,j1:j2,1,Kbb) - e3t_0(i1:i2,j1:j2,1)1348 gdepw(i1:i2,j1:j2,1,Kbb ) = 0.0_wp1349 gdept(i1:i2,j1:j2,1,Kbb ) = 0.5_wp * e3w(i1:i2,j1:j2,1,Kbb)1347 e3w (i1:i2,j1:j2,1,Kbb_a) = e3w_0(i1:i2,j1:j2,1) + e3t(i1:i2,j1:j2,1,Kbb_a) - e3t_0(i1:i2,j1:j2,1) 1348 gdepw(i1:i2,j1:j2,1,Kbb_a) = 0.0_wp 1349 gdept(i1:i2,j1:j2,1,Kbb_a) = 0.5_wp * e3w(i1:i2,j1:j2,1,Kbb_a) 1350 1350 ! 1351 1351 DO jk = 2, jpk … … 1353 1353 DO ji = i1,i2 1354 1354 zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 1355 e3w(ji,jj,jk,Kbb ) = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) * &1356 & ( e3t(ji,jj,jk-1,Kbb ) - e3t_0(ji,jj,jk-1) ) &1355 e3w(ji,jj,jk,Kbb_a) = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) * & 1356 & ( e3t(ji,jj,jk-1,Kbb_a) - e3t_0(ji,jj,jk-1) ) & 1357 1357 & + 0.5_wp * tmask(ji,jj,jk) * & 1358 & ( e3t(ji,jj,jk ,Kbb ) - e3t_0(ji,jj,jk ) )1359 gdepw(ji,jj,jk,Kbb ) = gdepw(ji,jj,jk-1,Kbb) + e3t(ji,jj,jk-1,Kbb)1360 gdept(ji,jj,jk,Kbb ) = zcoef * ( gdepw(ji,jj,jk ,Kbb) + 0.5 * e3w(ji,jj,jk,Kbb)) &1361 & + (1-zcoef) * ( gdept(ji,jj,jk-1,Kbb ) + e3w(ji,jj,jk,Kbb))1358 & ( e3t(ji,jj,jk ,Kbb_a) - e3t_0(ji,jj,jk ) ) 1359 gdepw(ji,jj,jk,Kbb_a) = gdepw(ji,jj,jk-1,Kbb_a) + e3t(ji,jj,jk-1,Kbb_a) 1360 gdept(ji,jj,jk,Kbb_a) = zcoef * ( gdepw(ji,jj,jk ,Kbb_a) + 0.5 * e3w(ji,jj,jk,Kbb_a)) & 1361 & + (1-zcoef) * ( gdept(ji,jj,jk-1,Kbb_a) + e3w(ji,jj,jk,Kbb_a)) 1362 1362 END DO 1363 1363 END DO … … 1370 1370 ! 1371 1371 ! Update vertical scale factor at T-points: 1372 e3t(i1:i2,j1:j2,1:jpkm1,Kmm ) = ptab(i1:i2,j1:j2,1:jpkm1)1372 e3t(i1:i2,j1:j2,1:jpkm1,Kmm_a) = ptab(i1:i2,j1:j2,1:jpkm1) 1373 1373 ! 1374 1374 ! Update total depth: 1375 1375 ht_n(i1:i2,j1:j2) = 0._wp 1376 1376 DO jk = 1, jpkm1 1377 ht_n(i1:i2,j1:j2) = ht_n(i1:i2,j1:j2) + e3t(i1:i2,j1:j2,jk,Kmm ) * tmask(i1:i2,j1:j2,jk)1377 ht_n(i1:i2,j1:j2) = ht_n(i1:i2,j1:j2) + e3t(i1:i2,j1:j2,jk,Kmm_a) * tmask(i1:i2,j1:j2,jk) 1378 1378 END DO 1379 1379 ! 1380 1380 ! Update vertical scale factor at W-points and depths: 1381 e3w (i1:i2,j1:j2,1,Kmm ) = e3w_0(i1:i2,j1:j2,1) + e3t(i1:i2,j1:j2,1,Kmm) - e3t_0(i1:i2,j1:j2,1)1382 gdept(i1:i2,j1:j2,1,Kmm ) = 0.5_wp * e3w(i1:i2,j1:j2,1,Kmm)1383 gdepw(i1:i2,j1:j2,1,Kmm ) = 0.0_wp1384 gde3w(i1:i2,j1:j2,1) = gdept(i1:i2,j1:j2,1,Kmm ) - (ht_n(i1:i2,j1:j2)-ht_0(i1:i2,j1:j2)) ! Last term in the rhs is ssh1381 e3w (i1:i2,j1:j2,1,Kmm_a) = e3w_0(i1:i2,j1:j2,1) + e3t(i1:i2,j1:j2,1,Kmm_a) - e3t_0(i1:i2,j1:j2,1) 1382 gdept(i1:i2,j1:j2,1,Kmm_a) = 0.5_wp * e3w(i1:i2,j1:j2,1,Kmm_a) 1383 gdepw(i1:i2,j1:j2,1,Kmm_a) = 0.0_wp 1384 gde3w(i1:i2,j1:j2,1) = gdept(i1:i2,j1:j2,1,Kmm_a) - (ht_n(i1:i2,j1:j2)-ht_0(i1:i2,j1:j2)) ! Last term in the rhs is ssh 1385 1385 ! 1386 1386 DO jk = 2, jpk … … 1388 1388 DO ji = i1,i2 1389 1389 zcoef = (tmask(ji,jj,jk) - wmask(ji,jj,jk)) 1390 e3w(ji,jj,jk,Kmm ) = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) * ( e3t(ji,jj,jk-1,Kmm) - e3t_0(ji,jj,jk-1) ) &1391 & + 0.5_wp * tmask(ji,jj,jk) * ( e3t(ji,jj,jk ,Kmm ) - e3t_0(ji,jj,jk ) )1392 gdepw(ji,jj,jk,Kmm ) = gdepw(ji,jj,jk-1,Kmm) + e3t(ji,jj,jk-1,Kmm)1393 gdept(ji,jj,jk,Kmm ) = zcoef * ( gdepw(ji,jj,jk ,Kmm) + 0.5 * e3w(ji,jj,jk,Kmm)) &1394 & + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm ) + e3w(ji,jj,jk,Kmm))1395 gde3w(ji,jj,jk) = gdept(ji,jj,jk,Kmm ) - (ht_n(ji,jj)-ht_0(ji,jj)) ! Last term in the rhs is ssh1390 e3w(ji,jj,jk,Kmm_a) = e3w_0(ji,jj,jk) + ( 1.0_wp - 0.5_wp * tmask(ji,jj,jk) ) * ( e3t(ji,jj,jk-1,Kmm_a) - e3t_0(ji,jj,jk-1) ) & 1391 & + 0.5_wp * tmask(ji,jj,jk) * ( e3t(ji,jj,jk ,Kmm_a) - e3t_0(ji,jj,jk ) ) 1392 gdepw(ji,jj,jk,Kmm_a) = gdepw(ji,jj,jk-1,Kmm_a) + e3t(ji,jj,jk-1,Kmm_a) 1393 gdept(ji,jj,jk,Kmm_a) = zcoef * ( gdepw(ji,jj,jk ,Kmm_a) + 0.5 * e3w(ji,jj,jk,Kmm_a)) & 1394 & + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm_a) + e3w(ji,jj,jk,Kmm_a)) 1395 gde3w(ji,jj,jk) = gdept(ji,jj,jk,Kmm_a) - (ht_n(ji,jj)-ht_0(ji,jj)) ! Last term in the rhs is ssh 1396 1396 END DO 1397 1397 END DO … … 1399 1399 ! 1400 1400 IF ((neuler==0).AND.(Agrif_Nb_Step()==0) ) THEN 1401 e3t (i1:i2,j1:j2,1:jpk,Kbb ) = e3t (i1:i2,j1:j2,1:jpk,Kmm)1402 e3w (i1:i2,j1:j2,1:jpk,Kbb ) = e3w (i1:i2,j1:j2,1:jpk,Kmm)1403 gdepw(i1:i2,j1:j2,1:jpk,Kbb ) = gdepw(i1:i2,j1:j2,1:jpk,Kmm)1404 gdept(i1:i2,j1:j2,1:jpk,Kbb ) = gdept(i1:i2,j1:j2,1:jpk,Kmm)1401 e3t (i1:i2,j1:j2,1:jpk,Kbb_a) = e3t (i1:i2,j1:j2,1:jpk,Kmm_a) 1402 e3w (i1:i2,j1:j2,1:jpk,Kbb_a) = e3w (i1:i2,j1:j2,1:jpk,Kmm_a) 1403 gdepw(i1:i2,j1:j2,1:jpk,Kbb_a) = gdepw(i1:i2,j1:j2,1:jpk,Kmm_a) 1404 gdept(i1:i2,j1:j2,1:jpk,Kbb_a) = gdept(i1:i2,j1:j2,1:jpk,Kmm_a) 1405 1405 ENDIF 1406 1406 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/NST/agrif_top_interp.F90
r10989 r11053 73 73 DO jj=j1,j2 74 74 DO ji=i1,i2 75 ptab(ji,jj,jk,jn) = tr(ji,jj,jk,jn,Kmm )75 ptab(ji,jj,jk,jn) = tr(ji,jj,jk,jn,Kmm_a) 76 76 END DO 77 77 END DO … … 83 83 DO jj=j1,j2 84 84 DO ji=i1,i2 85 ptab(ji,jj,jk,jptra+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm )85 ptab(ji,jj,jk,jptra+1) = tmask(ji,jj,jk) * e3t(ji,jj,jk,Kmm_a) 86 86 END DO 87 87 END DO … … 113 113 IF (tmask(iref,jref,jk) == 0) EXIT 114 114 N_out = N_out + 1 115 h_out(jk) = e3t(iref,jref,jk,Kmm )115 h_out(jk) = e3t(iref,jref,jk,Kmm_a) 116 116 ENDDO 117 117 IF (N_in > 0) THEN … … 127 127 ! 128 128 DO jn=1, jptra 129 tr(i1:i2,j1:j2,1:jpk,jn,Krhs )=ptab_child(i1:i2,j1:j2,1:jpk,jn)*tmask(i1:i2,j1:j2,1:jpk)129 tr(i1:i2,j1:j2,1:jpk,jn,Krhs_a)=ptab_child(i1:i2,j1:j2,1:jpk,jn)*tmask(i1:i2,j1:j2,1:jpk) 130 130 END DO 131 131 … … 151 151 ibdy = nlci-nbghostcells 152 152 DO jn = 1, jptra 153 tr(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs ) = z1 * ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn)153 tr(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 154 154 DO jk = 1, jpkm1 155 155 DO jj = jmin,jmax 156 156 IF( umask(ibdy-1,jj,jk) == 0._wp ) THEN 157 tr(ibdy,jj,jk,jn,Krhs ) = tr(ibdy+1,jj,jk,jn,Krhs) * tmask(ibdy,jj,jk)158 ELSE 159 tr(ibdy,jj,jk,jn,Krhs )=(z4*tr(ibdy+1,jj,jk,jn,Krhs)+z3*tr(ibdy-1,jj,jk,jn,Krhs))*tmask(ibdy,jj,jk)160 IF( uu(ibdy-1,jj,jk,Kmm ) > 0._wp ) THEN161 tr(ibdy,jj,jk,jn,Krhs )=( z6*tr(ibdy-1,jj,jk,jn,Krhs)+z5*tr(ibdy+1,jj,jk,jn,Krhs) &162 + z7*tr(ibdy-2,jj,jk,jn,Krhs ) ) * tmask(ibdy,jj,jk)163 ENDIF 164 ENDIF 165 END DO 166 END DO 167 ! Restore ghost points: 168 tr(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs ) = ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy+1,jmin:jmax,1:jpkm1)157 tr(ibdy,jj,jk,jn,Krhs_a) = tr(ibdy+1,jj,jk,jn,Krhs_a) * tmask(ibdy,jj,jk) 158 ELSE 159 tr(ibdy,jj,jk,jn,Krhs_a)=(z4*tr(ibdy+1,jj,jk,jn,Krhs_a)+z3*tr(ibdy-1,jj,jk,jn,Krhs_a))*tmask(ibdy,jj,jk) 160 IF( uu(ibdy-1,jj,jk,Kmm_a) > 0._wp ) THEN 161 tr(ibdy,jj,jk,jn,Krhs_a)=( z6*tr(ibdy-1,jj,jk,jn,Krhs_a)+z5*tr(ibdy+1,jj,jk,jn,Krhs_a) & 162 + z7*tr(ibdy-2,jj,jk,jn,Krhs_a) ) * tmask(ibdy,jj,jk) 163 ENDIF 164 ENDIF 165 END DO 166 END DO 167 ! Restore ghost points: 168 tr(ibdy+1,jmin:jmax,1:jpkm1,jn,Krhs_a) = ptab_child(ibdy+1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy+1,jmin:jmax,1:jpkm1) 169 169 END DO 170 170 ENDIF … … 180 180 jbdy = nlcj-nbghostcells 181 181 DO jn = 1, jptra 182 tr(imin:imax,jbdy+1,1:jpkm1,jn,Krhs ) = z1 * ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn)182 tr(imin:imax,jbdy+1,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 183 183 DO jk = 1, jpkm1 184 184 DO ji = imin,imax 185 185 IF( vmask(ji,jbdy-1,jk) == 0._wp ) THEN 186 tr(ji,jbdy,jk,jn,Krhs ) = tr(ji,jbdy+1,jk,jn,Krhs) * tmask(ji,jbdy,jk)187 ELSE 188 tr(ji,jbdy,jk,jn,Krhs )=(z4*tr(ji,jbdy+1,jk,jn,Krhs)+z3*tr(ji,jbdy-1,jk,jn,Krhs))*tmask(ji,jbdy,jk)189 IF (vv(ji,jbdy-1,jk,Kmm ) > 0._wp ) THEN190 tr(ji,jbdy,jk,jn,Krhs )=( z6*tr(ji,jbdy-1,jk,jn,Krhs)+z5*tr(ji,jbdy+1,jk,jn,Krhs) &191 + z7*tr(ji,jbdy-2,jk,jn,Krhs ) ) * tmask(ji,jbdy,jk)192 ENDIF 193 ENDIF 194 END DO 195 END DO 196 ! Restore ghost points: 197 tr(imin:imax,jbdy+1,1:jpkm1,jn,Krhs ) = ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) * tmask(imin:imax,jbdy+1,1:jpkm1)186 tr(ji,jbdy,jk,jn,Krhs_a) = tr(ji,jbdy+1,jk,jn,Krhs_a) * tmask(ji,jbdy,jk) 187 ELSE 188 tr(ji,jbdy,jk,jn,Krhs_a)=(z4*tr(ji,jbdy+1,jk,jn,Krhs_a)+z3*tr(ji,jbdy-1,jk,jn,Krhs_a))*tmask(ji,jbdy,jk) 189 IF (vv(ji,jbdy-1,jk,Kmm_a) > 0._wp ) THEN 190 tr(ji,jbdy,jk,jn,Krhs_a)=( z6*tr(ji,jbdy-1,jk,jn,Krhs_a)+z5*tr(ji,jbdy+1,jk,jn,Krhs_a) & 191 + z7*tr(ji,jbdy-2,jk,jn,Krhs_a) ) * tmask(ji,jbdy,jk) 192 ENDIF 193 ENDIF 194 END DO 195 END DO 196 ! Restore ghost points: 197 tr(imin:imax,jbdy+1,1:jpkm1,jn,Krhs_a) = ptab_child(imin:imax,jbdy+1,1:jpkm1,jn) * tmask(imin:imax,jbdy+1,1:jpkm1) 198 198 END DO 199 199 ENDIF … … 209 209 ibdy = 1+nbghostcells 210 210 DO jn = 1, jptra 211 tr(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs ) = z1 * ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn)211 tr(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) + z2 * ptab_child(ibdy,jmin:jmax,1:jpkm1,jn) 212 212 DO jk = 1, jpkm1 213 213 DO jj = jmin,jmax 214 214 IF( umask(ibdy,jj,jk) == 0._wp ) THEN 215 tr(ibdy,jj,jk,jn,Krhs ) = tr(ibdy-1,jj,jk,jn,Krhs) * tmask(ibdy,jj,jk)216 ELSE 217 tr(ibdy,jj,jk,jn,Krhs )=(z4*tr(ibdy-1,jj,jk,jn,Krhs)+z3*tr(ibdy+1,jj,jk,jn,Krhs))*tmask(ibdy,jj,jk)218 IF( uu(ibdy,jj,jk,Kmm ) < 0._wp ) THEN219 tr(ibdy,jj,jk,jn,Krhs )=( z6*tr(ibdy+1,jj,jk,jn,Krhs)+z5*tr(ibdy-1,jj,jk,jn,Krhs) &220 + z7*tr(ibdy+2,jj,jk,jn,Krhs ) ) * tmask(ibdy,jj,jk)221 ENDIF 222 ENDIF 223 END DO 224 END DO 225 ! Restore ghost points: 226 tr(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs ) = ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy-1,jmin:jmax,1:jpkm1)215 tr(ibdy,jj,jk,jn,Krhs_a) = tr(ibdy-1,jj,jk,jn,Krhs_a) * tmask(ibdy,jj,jk) 216 ELSE 217 tr(ibdy,jj,jk,jn,Krhs_a)=(z4*tr(ibdy-1,jj,jk,jn,Krhs_a)+z3*tr(ibdy+1,jj,jk,jn,Krhs_a))*tmask(ibdy,jj,jk) 218 IF( uu(ibdy,jj,jk,Kmm_a) < 0._wp ) THEN 219 tr(ibdy,jj,jk,jn,Krhs_a)=( z6*tr(ibdy+1,jj,jk,jn,Krhs_a)+z5*tr(ibdy-1,jj,jk,jn,Krhs_a) & 220 + z7*tr(ibdy+2,jj,jk,jn,Krhs_a) ) * tmask(ibdy,jj,jk) 221 ENDIF 222 ENDIF 223 END DO 224 END DO 225 ! Restore ghost points: 226 tr(ibdy-1,jmin:jmax,1:jpkm1,jn,Krhs_a) = ptab_child(ibdy-1,jmin:jmax,1:jpkm1,jn) * tmask(ibdy-1,jmin:jmax,1:jpkm1) 227 227 END DO 228 228 ENDIF … … 238 238 jbdy=1+nbghostcells 239 239 DO jn = 1, jptra 240 tr(imin:imax,jbdy-1,1:jpkm1,jn,Krhs ) = z1 * ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn)240 tr(imin:imax,jbdy-1,1:jpkm1,jn,Krhs_a) = z1 * ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) + z2 * ptab_child(imin:imax,jbdy,1:jpkm1,jn) 241 241 DO jk = 1, jpkm1 242 242 DO ji = imin,imax 243 243 IF( vmask(ji,jbdy,jk) == 0._wp ) THEN 244 tr(ji,jbdy,jk,jn,Krhs )=tr(ji,jbdy-1,jk,jn,Krhs) * tmask(ji,jbdy,jk)245 ELSE 246 tr(ji,jbdy,jk,jn,Krhs )=(z4*tr(ji,jbdy-1,jk,jn,Krhs)+z3*tr(ji,jbdy+1,jk,jn,Krhs))*tmask(ji,jbdy,jk)247 IF( vv(ji,jbdy,jk,Kmm ) < 0._wp ) THEN248 tr(ji,jbdy,jk,jn,Krhs )=( z6*tr(ji,jbdy+1,jk,jn,Krhs)+z5*tr(ji,jbdy-1,jk,jn,Krhs) &249 + z7*tr(ji,jbdy+2,jk,jn,Krhs ) ) * tmask(ji,jbdy,jk)250 ENDIF 251 ENDIF 252 END DO 253 END DO 254 ! Restore ghost points: 255 tr(imin:imax,jbdy-1,1:jpkm1,jn,Krhs ) = ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) * tmask(imin:imax,jbdy-1,1:jpkm1)244 tr(ji,jbdy,jk,jn,Krhs_a)=tr(ji,jbdy-1,jk,jn,Krhs_a) * tmask(ji,jbdy,jk) 245 ELSE 246 tr(ji,jbdy,jk,jn,Krhs_a)=(z4*tr(ji,jbdy-1,jk,jn,Krhs_a)+z3*tr(ji,jbdy+1,jk,jn,Krhs_a))*tmask(ji,jbdy,jk) 247 IF( vv(ji,jbdy,jk,Kmm_a) < 0._wp ) THEN 248 tr(ji,jbdy,jk,jn,Krhs_a)=( z6*tr(ji,jbdy+1,jk,jn,Krhs_a)+z5*tr(ji,jbdy-1,jk,jn,Krhs_a) & 249 + z7*tr(ji,jbdy+2,jk,jn,Krhs_a) ) * tmask(ji,jbdy,jk) 250 ENDIF 251 ENDIF 252 END DO 253 END DO 254 ! Restore ghost points: 255 tr(imin:imax,jbdy-1,1:jpkm1,jn,Krhs_a) = ptab_child(imin:imax,jbdy-1,1:jpkm1,jn) * tmask(imin:imax,jbdy-1,1:jpkm1) 256 256 END DO 257 257 ENDIF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/NST/agrif_user.F90
r10989 r11053 53 53 ! 54 54 CALL nemo_init !* Initializations of each fine grid 55 Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs ! agrif_oce module copies of time level indices 55 56 56 57 ! !* Agrif initialization … … 175 176 tabspongedone_tsn = .FALSE. 176 177 CALL Agrif_Bc_variable(tsn_sponge_id,calledweight=1.,procname=interptsn_sponge) 177 ! reset ts(:,:,:,:,Krhs ) to zero178 ts(:,:,:,:,Krhs ) = 0.178 ! reset ts(:,:,:,:,Krhs_a) to zero 179 ts(:,:,:,:,Krhs_a) = 0. 179 180 180 181 Agrif_UseSpecialValue = ln_spc_dyn … … 191 192 CALL Agrif_Bc_variable(sshn_id,calledweight=1., procname=interpsshn ) 192 193 hbdy_w(:,:) = 0.e0 ; hbdy_e(:,:) = 0.e0 ; hbdy_n(:,:) = 0.e0 ; hbdy_s(:,:) = 0.e0 193 ssh(:,:,Krhs ) = 0.e0194 ssh(:,:,Krhs_a) = 0.e0 194 195 195 196 IF ( ln_dynspg_ts ) THEN … … 207 208 Agrif_UseSpecialValue = .FALSE. 208 209 ! reset velocities to zero 209 uu(:,:,:,Krhs ) = 0.210 vv(:,:,:,Krhs ) = 0.210 uu(:,:,:,Krhs_a) = 0. 211 vv(:,:,:,Krhs_a) = 0. 211 212 212 213 ! 3. Some controls … … 591 592 tabspongedone_trn = .FALSE. 592 593 CALL Agrif_Bc_variable(trn_sponge_id,calledweight=1.,procname=interptrn_sponge) 593 ! reset ts(:,:,:,:,Krhs ) to zero594 tr(:,:,:,:,Krhs ) = 0.594 ! reset ts(:,:,:,:,Krhs_a) to zero 595 tr(:,:,:,:,Krhs_a) = 0. 595 596 596 597 -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/BDY/bdydta.F90
r10957 r11053 255 255 CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & 256 256 & map=nbmap_ptr(jstart:jend), kt_offset=time_offset, jpk_bdy=nb_jpk_bdy, & 257 & fvl=ln_full_vel_array(jbdy) )257 & fvl=ln_full_vel_array(jbdy), Kmm=Kmm ) 258 258 ENDIF 259 259 ! If full velocities in boundary data then split into barotropic and baroclinic data … … 270 270 & + e3u(ii,ij,ik,Kmm) * umask(ii,ij,ik) * dta%u3d(ib,ik) 271 271 END DO 272 dta%u2d(ib) = dta%u2d(ib) * r1_hu _n(ii,ij)272 dta%u2d(ib) = dta%u2d(ib) * r1_hu(ii,ij,Kmm) 273 273 DO ik = 1, jpkm1 274 274 dta%u3d(ib,ik) = dta%u3d(ib,ik) - dta%u2d(ib) … … 284 284 & + e3v(ii,ij,ik,Kmm) * vmask(ii,ij,ik) * dta%v3d(ib,ik) 285 285 END DO 286 dta%v2d(ib) = dta%v2d(ib) * r1_hv _n(ii,ij)286 dta%v2d(ib) = dta%v2d(ib) * r1_hv(ii,ij,Kmm) 287 287 DO ik = 1, jpkm1 288 288 dta%v3d(ib,ik) = dta%v3d(ib,ik) - dta%v2d(ib) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/BDY/bdydyn.F90
r10957 r11053 78 78 zva2d(:,:) = zva2d(:,:) + e3v(:,:,jk,Kaa) * pvv(:,:,jk,Kaa) * vmask(:,:,jk) 79 79 END DO 80 zua2d(:,:) = zua2d(:,:) * r1_hu _a(:,:)81 zva2d(:,:) = zva2d(:,:) * r1_hv _a(:,:)80 zua2d(:,:) = zua2d(:,:) * r1_hu(:,:,Kaa) 81 zva2d(:,:) = zva2d(:,:) * r1_hv(:,:,Kaa) 82 82 83 83 DO jk = 1 , jpkm1 … … 99 99 !------------------------------------------------------- 100 100 101 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, zua2d, zva2d, uu_b(:,:,Kbb), vv_b(:,:,Kbb), r1_hu _a(:,:), r1_hv_a(:,:), ssh(:,:,Kaa) )101 IF( ll_dyn2d ) CALL bdy_dyn2d( kt, zua2d, zva2d, uu_b(:,:,Kbb), vv_b(:,:,Kbb), r1_hu(:,:,Kaa), r1_hv(:,:,Kaa), ssh(:,:,Kaa) ) 102 102 103 103 IF( ll_dyn3d ) CALL bdy_dyn3d( kt, Kbb, puu, pvv, Kaa ) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DIA/diawri.F90
r10989 r11053 138 138 139 139 IF( ll_wd ) THEN 140 CALL iom_put( "ssh" , (ssh n+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying)140 CALL iom_put( "ssh" , (ssh(:,:,Kmm)+ssh_ref)*tmask(:,:,1) ) ! sea surface height (brought back to the reference used for wetting and drying) 141 141 ELSE 142 142 CALL iom_put( "ssh" , ssh(:,:,Kmm) ) ! sea surface height -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DOM/dom_oce.F90
r11050 r11053 121 121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE , DIMENSION(:,:) :: e1e2f , r1_e1e2f !: associated metrics at f-point 122 122 ! 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ff_f , ff_t !: Coriolis factor at f- & t-points [1/s] 124 124 !!---------------------------------------------------------------------- 125 125 !! vertical coordinate and scale factors … … 138 138 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3vw_0 !: vw-vert. scale factor [m] 139 139 ! ! time-dependent scale factors 140 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET,DIMENSION(:,:,:,:) :: e3t, e3u, e3v, e3w, e3uw, e3vw !: vert. scale factor [m]141 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:,:) ::e3f !: F-point vert. scale factor [m]140 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: e3t, e3u, e3v, e3w, e3uw, e3vw !: vert. scale factor [m] 141 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: e3f !: F-point vert. scale factor [m] 142 142 143 143 ! ! reference depths of cells … … 146 146 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gde3w_0 !: w- depth (sum of e3w) [m] 147 147 ! ! time-dependent depths of cells 148 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET,DIMENSION(:,:,:,:) :: gdept, gdepw149 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET,DIMENSION(:,:,:) :: gde3w148 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: gdept, gdepw 149 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: gde3w 150 150 151 151 ! ! reference heights of water column … … 154 154 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hv_0 !: v-depth [m] 155 155 ! time-dependent heights of water column 156 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:) :: ht !: height of water column at T-points [m] 157 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, TARGET, DIMENSION(:,:,:) :: hu, hv, r1_hu, r1_hv !: height of water column [m] and reciprocal [1/m] 158 159 !! TEMPORARY POINTERS FOR DEVELOPMENT ONLY 160 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: e3t_b , e3t_n , e3t_a !: t- vert. scale factor [m] 161 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: e3u_b , e3u_n , e3u_a !: u- vert. scale factor [m] 162 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: e3v_b , e3v_n , e3v_a !: v- vert. scale factor [m] 163 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: e3f_n !: f- vert. scale factor [m] 164 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: e3w_b , e3w_n !: w- vert. scale factor [m] 165 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: e3uw_b , e3uw_n !: uw-vert. scale factor [m] 166 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: e3vw_b , e3vw_n !: vw-vert. scale factor [m] 167 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: gdept_b , gdept_n !: t- depth [m] 168 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: gdepw_b , gdepw_n !: w- depth [m] 169 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: gde3w_n !: w- depth (sum of e3w) [m] 170 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: ht_n !: t-depth [m] 171 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: hu_b , hu_n , hu_a !: u-depth [m] 172 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: hv_b , hv_n , hv_a !: v-depth [m] 173 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: r1_hu_b , r1_hu_n , r1_hu_a !: inverse of u-depth [1/m] 174 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: r1_hv_b , r1_hv_n , r1_hv_a !: inverse of v-depth [1/m] 175 !! TEMPORARY POINTERS FOR DEVELOPMENT ONLY 156 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ht !: height of water column at T-points [m] 157 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hu, hv, r1_hu, r1_hv !: height of water column [m] and reciprocal [1/m] 176 158 177 159 INTEGER, PUBLIC :: nla10 !: deepest W level Above ~10m (nlb10 - 1) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DOM/domain.F90
r10978 r11053 179 179 ! 180 180 ! before ! now ! after ! 181 ht _n= ht_0 ! ! water column thickness182 hu _b = hu_0 ; hu_n = hu_0 ; hu_a= hu_0 !183 hv _b = hv_0 ; hv_n = hv_0 ; hv_a= hv_0 !184 r1_hu _b = z1_hu_0 ; r1_hu_n = z1_hu_0 ; r1_hu_a= z1_hu_0 ! inverse of water column thickness185 r1_hv _b = z1_hv_0 ; r1_hv_n = z1_hv_0 ; r1_hv_a= z1_hv_0 !181 ht = ht_0 ! ! water column thickness 182 hu(:,:,Kbb) = hu_0 ; hu(:,:,Kmm) = hu_0 ; hu(:,:,Kaa) = hu_0 ! 183 hv(:,:,Kbb) = hv_0 ; hv(:,:,Kmm) = hv_0 ; hv(:,:,Kaa) = hv_0 ! 184 r1_hu(:,:,Kbb) = z1_hu_0 ; r1_hu(:,:,Kmm) = z1_hu_0 ; r1_hu(:,:,Kaa) = z1_hu_0 ! inverse of water column thickness 185 r1_hv(:,:,Kbb) = z1_hv_0 ; r1_hv(:,:,Kmm) = z1_hv_0 ; r1_hv(:,:,Kaa) = z1_hv_0 ! 186 186 ! 187 187 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DOM/domvvl.F90
r11050 r11053 181 181 ! 182 182 ! !== thickness of the water column !! (ocean portion only) 183 ht _n(:,:) = e3t(:,:,1,Kmm) * tmask(:,:,1) !!gm BUG : this should be 1/2 * e3w(k=1) ....184 hu _b(:,:) = e3u(:,:,1,Kbb) * umask(:,:,1)185 hu _n(:,:) = e3u(:,:,1,Kmm) * umask(:,:,1)186 hv _b(:,:) = e3v(:,:,1,Kbb) * vmask(:,:,1)187 hv _n(:,:) = e3v(:,:,1,Kmm) * vmask(:,:,1)183 ht(:,:) = e3t(:,:,1,Kmm) * tmask(:,:,1) !!gm BUG : this should be 1/2 * e3w(k=1) .... 184 hu(:,:,Kbb) = e3u(:,:,1,Kbb) * umask(:,:,1) 185 hu(:,:,Kmm) = e3u(:,:,1,Kmm) * umask(:,:,1) 186 hv(:,:,Kbb) = e3v(:,:,1,Kbb) * vmask(:,:,1) 187 hv(:,:,Kmm) = e3v(:,:,1,Kmm) * vmask(:,:,1) 188 188 DO jk = 2, jpkm1 189 ht _n(:,:) = ht_n(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk)190 hu _b(:,:) = hu_b(:,:) + e3u(:,:,jk,Kbb) * umask(:,:,jk)191 hu _n(:,:) = hu_n(:,:) + e3u(:,:,jk,Kmm) * umask(:,:,jk)192 hv _b(:,:) = hv_b(:,:) + e3v(:,:,jk,Kbb) * vmask(:,:,jk)193 hv _n(:,:) = hv_n(:,:) + e3v(:,:,jk,Kmm) * vmask(:,:,jk)189 ht(:,:) = ht(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk) 190 hu(:,:,Kbb) = hu(:,:,Kbb) + e3u(:,:,jk,Kbb) * umask(:,:,jk) 191 hu(:,:,Kmm) = hu(:,:,Kmm) + e3u(:,:,jk,Kmm) * umask(:,:,jk) 192 hv(:,:,Kbb) = hv(:,:,Kbb) + e3v(:,:,jk,Kbb) * vmask(:,:,jk) 193 hv(:,:,Kmm) = hv(:,:,Kmm) + e3v(:,:,jk,Kmm) * vmask(:,:,jk) 194 194 END DO 195 195 ! 196 196 ! !== inverse of water column thickness ==! (u- and v- points) 197 r1_hu _b(:,:) = ssumask(:,:) / ( hu_b(:,:) + 1._wp - ssumask(:,:) ) ! _i mask due to ISF198 r1_hu _n(:,:) = ssumask(:,:) / ( hu_n(:,:) + 1._wp - ssumask(:,:) )199 r1_hv _b(:,:) = ssvmask(:,:) / ( hv_b(:,:) + 1._wp - ssvmask(:,:) )200 r1_hv _n(:,:) = ssvmask(:,:) / ( hv_n(:,:) + 1._wp - ssvmask(:,:) )197 r1_hu(:,:,Kbb) = ssumask(:,:) / ( hu(:,:,Kbb) + 1._wp - ssumask(:,:) ) ! _i mask due to ISF 198 r1_hu(:,:,Kmm) = ssumask(:,:) / ( hu(:,:,Kmm) + 1._wp - ssumask(:,:) ) 199 r1_hv(:,:,Kbb) = ssvmask(:,:) / ( hv(:,:,Kbb) + 1._wp - ssvmask(:,:) ) 200 r1_hv(:,:,Kmm) = ssvmask(:,:) / ( hv(:,:,Kmm) + 1._wp - ssvmask(:,:) ) 201 201 202 202 ! !== z_tilde coordinate case ==! (Restoring frequencies) … … 550 550 ! *********************************** ! 551 551 552 hu _a(:,:) = e3u(:,:,1,Kaa) * umask(:,:,1)553 hv _a(:,:) = e3v(:,:,1,Kaa) * vmask(:,:,1)552 hu(:,:,Kaa) = e3u(:,:,1,Kaa) * umask(:,:,1) 553 hv(:,:,Kaa) = e3v(:,:,1,Kaa) * vmask(:,:,1) 554 554 DO jk = 2, jpkm1 555 hu _a(:,:) = hu_a(:,:) + e3u(:,:,jk,Kaa) * umask(:,:,jk)556 hv _a(:,:) = hv_a(:,:) + e3v(:,:,jk,Kaa) * vmask(:,:,jk)555 hu(:,:,Kaa) = hu(:,:,Kaa) + e3u(:,:,jk,Kaa) * umask(:,:,jk) 556 hv(:,:,Kaa) = hv(:,:,Kaa) + e3v(:,:,jk,Kaa) * vmask(:,:,jk) 557 557 END DO 558 558 ! ! Inverse of the local depth 559 559 !!gm BUG ? don't understand the use of umask_i here ..... 560 r1_hu _a(:,:) = ssumask(:,:) / ( hu_a(:,:) + 1._wp - ssumask(:,:) )561 r1_hv _a(:,:) = ssvmask(:,:) / ( hv_a(:,:) + 1._wp - ssvmask(:,:) )560 r1_hu(:,:,Kaa) = ssumask(:,:) / ( hu(:,:,Kaa) + 1._wp - ssumask(:,:) ) 561 r1_hv(:,:,Kaa) = ssvmask(:,:) / ( hv(:,:,Kaa) + 1._wp - ssvmask(:,:) ) 562 562 ! 563 563 IF( ln_timing ) CALL timing_stop('dom_vvl_sf_nxt') … … 625 625 ! -------------------------------------- 626 626 ! - ML - e3u(:,:,:,Kbb) and e3v(:,:,:,Kbb) are allready computed in dynnxt 627 ! - JC - hu _b, hv_b, hur_b, hvr_b also627 ! - JC - hu(:,:,:,Kbb), hv(:,:,:,:,Kbb), hur_b, hvr_b also 628 628 629 629 CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F' ) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DOM/iscplrst.F90
r10978 r11053 108 108 gdept(:,:,:,Kbb) = gdept(:,:,:,Kmm) 109 109 gdepw(:,:,:,Kbb) = gdepw(:,:,:,Kmm) 110 hu _b (:,:) = hu_n (:,:)111 hv _b (:,:) = hv_n (:,:)112 r1_hu _b(:,:) = r1_hu_n(:,:)113 r1_hv _b(:,:) = r1_hv_n(:,:)110 hu (:,:,Kbb) = hu (:,:,Kmm) 111 hv (:,:,Kbb) = hv (:,:,Kmm) 112 r1_hu(:,:,Kbb) = r1_hu(:,:,Kmm) 113 r1_hv(:,:,Kbb) = r1_hv(:,:,Kmm) 114 114 ! 115 115 END SUBROUTINE iscpl_stp … … 240 240 ! t-, u- and v- water column thickness 241 241 ! ------------------------------------ 242 ht _n(:,:) = 0._wp ; hu_n(:,:) = 0._wp ; hv_n(:,:) = 0._wp242 ht(:,:) = 0._wp ; hu(:,:,Kmm) = 0._wp ; hv(:,:,Kmm) = 0._wp 243 243 DO jk = 1, jpkm1 244 hu _n(:,:) = hu_n(:,:) + e3u(:,:,jk,Kmm) * umask(:,:,jk)245 hv _n(:,:) = hv_n(:,:) + e3v(:,:,jk,Kmm) * vmask(:,:,jk)246 ht _n(:,:) = ht_n(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk)244 hu(:,:,Kmm) = hu(:,:,Kmm) + e3u(:,:,jk,Kmm) * umask(:,:,jk) 245 hv(:,:,Kmm) = hv(:,:,Kmm) + e3v(:,:,jk,Kmm) * vmask(:,:,jk) 246 ht(:,:) = ht(:,:) + e3t(:,:,jk,Kmm) * tmask(:,:,jk) 247 247 END DO 248 248 ! ! Inverse of the local depth 249 r1_hu _n(:,:) = 1._wp / ( hu_n(:,:) + 1._wp - ssumask(:,:) ) * ssumask(:,:)250 r1_hv _n(:,:) = 1._wp / ( hv_n(:,:) + 1._wp - ssvmask(:,:) ) * ssvmask(:,:)249 r1_hu(:,:,Kmm) = 1._wp / ( hu(:,:,Kmm) + 1._wp - ssumask(:,:) ) * ssumask(:,:) 250 r1_hv(:,:,Kmm) = 1._wp / ( hv(:,:,Kmm) + 1._wp - ssvmask(:,:) ) * ssvmask(:,:) 251 251 252 252 END IF -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DOM/istate.F90
r10978 r11053 175 175 END DO 176 176 ! 177 uu_b(:,:,Kmm) = uu_b(:,:,Kmm) * r1_hu _n(:,:)178 vv_b(:,:,Kmm) = vv_b(:,:,Kmm) * r1_hv _n(:,:)177 uu_b(:,:,Kmm) = uu_b(:,:,Kmm) * r1_hu(:,:,Kmm) 178 vv_b(:,:,Kmm) = vv_b(:,:,Kmm) * r1_hv(:,:,Kmm) 179 179 ! 180 uu_b(:,:,Kbb) = uu_b(:,:,Kbb) * r1_hu _b(:,:)181 vv_b(:,:,Kbb) = vv_b(:,:,Kbb) * r1_hv _b(:,:)180 uu_b(:,:,Kbb) = uu_b(:,:,Kbb) * r1_hu(:,:,Kbb) 181 vv_b(:,:,Kbb) = vv_b(:,:,Kbb) * r1_hv(:,:,Kbb) 182 182 ! 183 183 END SUBROUTINE istate_init -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DYN/dynspg_ts.F90
r10919 r11053 250 250 DO jj = 1, jpjm1 251 251 DO ji = 1, jpim1 252 zwz(ji,jj) = ( ht _n(ji ,jj+1) + ht_n(ji+1,jj+1) + &253 & ht _n(ji ,jj ) + ht_n(ji+1,jj ) ) * 0.25_wp252 zwz(ji,jj) = ( ht(ji ,jj+1) + ht(ji+1,jj+1) + & 253 & ht(ji ,jj ) + ht(ji+1,jj ) ) * 0.25_wp 254 254 IF( zwz(ji,jj) /= 0._wp ) zwz(ji,jj) = ff_f(ji,jj) / zwz(ji,jj) 255 255 END DO … … 258 258 DO jj = 1, jpjm1 259 259 DO ji = 1, jpim1 260 zwz(ji,jj) = ( ht _n (ji ,jj+1) + ht_n(ji+1,jj+1) &261 & + ht _n (ji ,jj ) + ht_n(ji+1,jj ) ) &260 zwz(ji,jj) = ( ht (ji ,jj+1) + ht (ji+1,jj+1) & 261 & + ht (ji ,jj ) + ht (ji+1,jj ) ) & 262 262 & / ( MAX( 1._wp, ssmask(ji ,jj+1) + ssmask(ji+1,jj+1) & 263 263 & + ssmask(ji ,jj ) + ssmask(ji+1,jj ) ) ) … … 282 282 DO jj = 2, jpj 283 283 DO ji = 2, jpi 284 z1_ht = ssmask(ji,jj) / ( ht _n(ji,jj) + 1._wp - ssmask(ji,jj) )284 z1_ht = ssmask(ji,jj) / ( ht(ji,jj) + 1._wp - ssmask(ji,jj) ) 285 285 ftne(ji,jj) = ( ff_f(ji-1,jj ) + ff_f(ji ,jj ) + ff_f(ji ,jj-1) ) * z1_ht 286 286 ftnw(ji,jj) = ( ff_f(ji-1,jj-1) + ff_f(ji-1,jj ) + ff_f(ji ,jj ) ) * z1_ht … … 367 367 END DO 368 368 ! 369 zu_frc(:,:) = zu_frc(:,:) * r1_hu _n(:,:)370 zv_frc(:,:) = zv_frc(:,:) * r1_hv _n(:,:)369 zu_frc(:,:) = zu_frc(:,:) * r1_hu(:,:,Kmm) 370 zv_frc(:,:) = zv_frc(:,:) * r1_hv(:,:,Kmm) 371 371 ! 372 372 ! … … 388 388 ! ! -------------------------------------------------------- 389 389 ! 390 zwx(:,:) = puu_b(:,:,Kmm) * hu _n(:,:) * e2u(:,:) ! now fluxes391 zwy(:,:) = pvv_b(:,:,Kmm) * hv _n(:,:) * e1v(:,:)390 zwx(:,:) = puu_b(:,:,Kmm) * hu(:,:,Kmm) * e2u(:,:) ! now fluxes 391 zwy(:,:) = pvv_b(:,:,Kmm) * hv(:,:,Kmm) * e1v(:,:) 392 392 ! 393 393 SELECT CASE( nvor_scheme ) … … 395 395 DO jj = 2, jpjm1 396 396 DO ji = 2, jpim1 ! vector opt. 397 zu_trd(ji,jj) = + r1_4 * r1_e1e2u(ji,jj) * r1_hu _n(ji,jj) &398 & * ( e1e2t(ji+1,jj)*ht _n(ji+1,jj)*ff_t(ji+1,jj) * ( pvv_b(ji+1,jj,Kmm) + pvv_b(ji+1,jj-1,Kmm) ) &399 & + e1e2t(ji ,jj)*ht _n(ji ,jj)*ff_t(ji ,jj) * ( pvv_b(ji ,jj,Kmm) + pvv_b(ji ,jj-1,Kmm) ) )397 zu_trd(ji,jj) = + r1_4 * r1_e1e2u(ji,jj) * r1_hu(ji,jj,Kmm) & 398 & * ( e1e2t(ji+1,jj)*ht(ji+1,jj)*ff_t(ji+1,jj) * ( pvv_b(ji+1,jj,Kmm) + pvv_b(ji+1,jj-1,Kmm) ) & 399 & + e1e2t(ji ,jj)*ht(ji ,jj)*ff_t(ji ,jj) * ( pvv_b(ji ,jj,Kmm) + pvv_b(ji ,jj-1,Kmm) ) ) 400 400 ! 401 zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * r1_hv _n(ji,jj) &402 & * ( e1e2t(ji,jj+1)*ht _n(ji,jj+1)*ff_t(ji,jj+1) * ( puu_b(ji,jj+1,Kmm) + puu_b(ji-1,jj+1,Kmm) ) &403 & + e1e2t(ji,jj )*ht _n(ji,jj )*ff_t(ji,jj ) * ( puu_b(ji,jj ,Kmm) + puu_b(ji-1,jj ,Kmm) ) )401 zv_trd(ji,jj) = - r1_4 * r1_e1e2v(ji,jj) * r1_hv(ji,jj,Kmm) & 402 & * ( e1e2t(ji,jj+1)*ht(ji,jj+1)*ff_t(ji,jj+1) * ( puu_b(ji,jj+1,Kmm) + puu_b(ji-1,jj+1,Kmm) ) & 403 & + e1e2t(ji,jj )*ht(ji,jj )*ff_t(ji,jj ) * ( puu_b(ji,jj ,Kmm) + puu_b(ji-1,jj ,Kmm) ) ) 404 404 END DO 405 405 END DO … … 546 546 DO ji = fs_2, fs_jpim1 ! vector opt. 547 547 zu_frc(ji,jj) = zu_frc(ji,jj) + & 548 & MAX(r1_hu _n(ji,jj) * r1_2 * ( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ), zztmp ) * zwx(ji,jj) * wdrampu(ji,jj)548 & MAX(r1_hu(ji,jj,Kmm) * r1_2 * ( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ), zztmp ) * zwx(ji,jj) * wdrampu(ji,jj) 549 549 zv_frc(ji,jj) = zv_frc(ji,jj) + & 550 & MAX(r1_hv _n(ji,jj) * r1_2 * ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ), zztmp ) * zwy(ji,jj) * wdrampv(ji,jj)550 & MAX(r1_hv(ji,jj,Kmm) * r1_2 * ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ), zztmp ) * zwy(ji,jj) * wdrampv(ji,jj) 551 551 END DO 552 552 END DO … … 554 554 DO jj = 2, jpjm1 555 555 DO ji = fs_2, fs_jpim1 ! vector opt. 556 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_hu _n(ji,jj) * r1_2 * ( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zwx(ji,jj)557 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_hv _n(ji,jj) * r1_2 * ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zwy(ji,jj)556 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2 * ( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj) ) * zwx(ji,jj) 557 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2 * ( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * zwy(ji,jj) 558 558 END DO 559 559 END DO … … 584 584 DO jj = 2, jpjm1 585 585 DO ji = fs_2, fs_jpim1 ! vector opt. 586 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_hu _n(ji,jj) * r1_2 * ( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zwx(ji,jj)587 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_hv _n(ji,jj) * r1_2 * ( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zwy(ji,jj)586 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_hu(ji,jj,Kmm) * r1_2 * ( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * zwx(ji,jj) 587 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2 * ( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zwy(ji,jj) 588 588 END DO 589 589 END DO … … 593 593 DO jj = 2, jpjm1 594 594 DO ji = fs_2, fs_jpim1 ! vector opt. 595 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_rau0 * utau(ji,jj) * r1_hu _n(ji,jj)596 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_rau0 * vtau(ji,jj) * r1_hv _n(ji,jj)595 zu_frc(ji,jj) = zu_frc(ji,jj) + r1_rau0 * utau(ji,jj) * r1_hu(ji,jj,Kmm) 596 zv_frc(ji,jj) = zv_frc(ji,jj) + r1_rau0 * vtau(ji,jj) * r1_hv(ji,jj,Kmm) 597 597 END DO 598 598 END DO … … 601 601 DO jj = 2, jpjm1 602 602 DO ji = fs_2, fs_jpim1 ! vector opt. 603 zu_frc(ji,jj) = zu_frc(ji,jj) + zztmp * ( utau_b(ji,jj) + utau(ji,jj) ) * r1_hu _n(ji,jj)604 zv_frc(ji,jj) = zv_frc(ji,jj) + zztmp * ( vtau_b(ji,jj) + vtau(ji,jj) ) * r1_hv _n(ji,jj)603 zu_frc(ji,jj) = zu_frc(ji,jj) + zztmp * ( utau_b(ji,jj) + utau(ji,jj) ) * r1_hu(ji,jj,Kmm) 604 zv_frc(ji,jj) = zv_frc(ji,jj) + zztmp * ( vtau_b(ji,jj) + vtau(ji,jj) ) * r1_hv(ji,jj,Kmm) 605 605 END DO 606 606 END DO … … 681 681 vn_e (:,:) = pvv_b(:,:,Kmm) 682 682 ! 683 hu_e (:,:) = hu _n(:,:)684 hv_e (:,:) = hv _n(:,:)685 hur_e (:,:) = r1_hu _n(:,:)686 hvr_e (:,:) = r1_hv _n(:,:)683 hu_e (:,:) = hu(:,:,Kmm) 684 hv_e (:,:) = hv(:,:,Kmm) 685 hur_e (:,:) = r1_hu(:,:,Kmm) 686 hvr_e (:,:) = r1_hv(:,:,Kmm) 687 687 ELSE ! CENTRED integration: start from BEFORE fields 688 688 sshn_e(:,:) = pssh(:,:,Kbb) … … 690 690 vn_e (:,:) = pvv_b(:,:,Kbb) 691 691 ! 692 hu_e (:,:) = hu _b(:,:)693 hv_e (:,:) = hv _b(:,:)694 hur_e (:,:) = r1_hu _b(:,:)695 hvr_e (:,:) = r1_hv _b(:,:)692 hu_e (:,:) = hu(:,:,Kbb) 693 hv_e (:,:) = hv(:,:,Kbb) 694 hur_e (:,:) = r1_hu(:,:,Kbb) 695 hvr_e (:,:) = r1_hv(:,:,Kbb) 696 696 ENDIF 697 697 ! … … 790 790 zhtp2_e(:,:) = ht_0(:,:) + zsshp2_e(:,:) 791 791 ELSE 792 zhup2_e(:,:) = hu _n(:,:)793 zhvp2_e(:,:) = hv _n(:,:)794 zhtp2_e(:,:) = ht _n(:,:)792 zhup2_e(:,:) = hu(:,:,Kmm) 793 zhvp2_e(:,:) = hv(:,:,Kmm) 794 zhtp2_e(:,:) = ht(:,:) 795 795 ENDIF 796 796 ! !* after ssh … … 1138 1138 & + rdtbt * ( zhust_e(ji,jj) * zwx(ji,jj) & 1139 1139 & + zhup2_e(ji,jj) * zu_trd(ji,jj) & 1140 & + hu _n(ji,jj) * zu_frc(ji,jj) ) &1140 & + hu(ji,jj,Kmm) * zu_frc(ji,jj) ) & 1141 1141 & ) * zhura 1142 1142 … … 1144 1144 & + rdtbt * ( zhvst_e(ji,jj) * zwy(ji,jj) & 1145 1145 & + zhvp2_e(ji,jj) * zv_trd(ji,jj) & 1146 & + hv _n(ji,jj) * zv_frc(ji,jj) ) &1146 & + hv(ji,jj,Kmm) * zv_frc(ji,jj) ) & 1147 1147 & ) * zhvra 1148 1148 END DO … … 1257 1257 ! 1258 1258 DO jk=1,jpkm1 1259 puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + r1_hu _n(:,:) * ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) * hu_b(:,:) ) * r1_2dt_b1260 pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + r1_hv _n(:,:) * ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) * hv_b(:,:) ) * r1_2dt_b1259 puu(:,:,jk,Krhs) = puu(:,:,jk,Krhs) + r1_hu(:,:,Kmm) * ( puu_b(:,:,Kaa) - puu_b(:,:,Kbb) * hu(:,:,Kbb) ) * r1_2dt_b 1260 pvv(:,:,jk,Krhs) = pvv(:,:,jk,Krhs) + r1_hv(:,:,Kmm) * ( pvv_b(:,:,Kaa) - pvv_b(:,:,Kbb) * hv(:,:,Kbb) ) * r1_2dt_b 1261 1261 END DO 1262 1262 ! Save barotropic velocities not transport: … … 1268 1268 ! Correct velocities so that the barotropic velocity equals (un_adv, vn_adv) (in all cases) 1269 1269 DO jk = 1, jpkm1 1270 puu(:,:,jk,Kmm) = ( puu(:,:,jk,Kmm) + un_adv(:,:)*r1_hu _n(:,:) - puu_b(:,:,Kmm) ) * umask(:,:,jk)1271 pvv(:,:,jk,Kmm) = ( pvv(:,:,jk,Kmm) + vn_adv(:,:)*r1_hv _n(:,:) - pvv_b(:,:,Kmm) ) * vmask(:,:,jk)1270 puu(:,:,jk,Kmm) = ( puu(:,:,jk,Kmm) + un_adv(:,:)*r1_hu(:,:,Kmm) - puu_b(:,:,Kmm) ) * umask(:,:,jk) 1271 pvv(:,:,jk,Kmm) = ( pvv(:,:,jk,Kmm) + vn_adv(:,:)*r1_hv(:,:,Kmm) - pvv_b(:,:,Kmm) ) * vmask(:,:,jk) 1272 1272 END DO 1273 1273 1274 1274 IF ( ln_wd_dl .and. ln_wd_dl_bc) THEN 1275 1275 DO jk = 1, jpkm1 1276 puu(:,:,jk,Kmm) = ( un_adv(:,:)*r1_hu _n(:,:) &1277 & + zuwdav2(:,:)*(puu(:,:,jk,Kmm) - un_adv(:,:)*r1_hu _n(:,:)) ) * umask(:,:,jk)1278 pvv(:,:,jk,Kmm) = ( vn_adv(:,:)*r1_hv _n(:,:) &1279 & + zvwdav2(:,:)*(pvv(:,:,jk,Kmm) - vn_adv(:,:)*r1_hv _n(:,:)) ) * vmask(:,:,jk)1276 puu(:,:,jk,Kmm) = ( un_adv(:,:)*r1_hu(:,:,Kmm) & 1277 & + zuwdav2(:,:)*(puu(:,:,jk,Kmm) - un_adv(:,:)*r1_hu(:,:,Kmm)) ) * umask(:,:,jk) 1278 pvv(:,:,jk,Kmm) = ( vn_adv(:,:)*r1_hv(:,:,Kmm) & 1279 & + zvwdav2(:,:)*(pvv(:,:,jk,Kmm) - vn_adv(:,:)*r1_hv(:,:,Kmm)) ) * vmask(:,:,jk) 1280 1280 END DO 1281 1281 END IF 1282 1282 1283 1283 1284 CALL iom_put( "ubar", un_adv(:,:)*r1_hu _n(:,:) ) ! barotropic i-current1285 CALL iom_put( "vbar", vn_adv(:,:)*r1_hv _n(:,:) ) ! barotropic i-current1284 CALL iom_put( "ubar", un_adv(:,:)*r1_hu(:,:,Kmm) ) ! barotropic i-current 1285 CALL iom_put( "vbar", vn_adv(:,:)*r1_hv(:,:,Kmm) ) ! barotropic i-current 1286 1286 ! 1287 1287 #if defined key_agrif … … 1307 1307 ! 1308 1308 IF( ln_diatmb ) THEN 1309 CALL iom_put( "baro_u" , u n_b*ssumask(:,:)+zmdi*(1.-ssumask(:,:) ) ) ! Barotropic U Velocity1310 CALL iom_put( "baro_v" , v n_b*ssvmask(:,:)+zmdi*(1.-ssvmask(:,:) ) ) ! Barotropic V Velocity1309 CALL iom_put( "baro_u" , uu_b(:,:,Kmm)*ssumask(:,:)+zmdi*(1.-ssumask(:,:) ) ) ! Barotropic U Velocity 1310 CALL iom_put( "baro_v" , vv_b(:,:,Kmm)*ssvmask(:,:)+zmdi*(1.-ssvmask(:,:) ) ) ! Barotropic V Velocity 1311 1311 ENDIF 1312 1312 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DYN/sshwzv.F90
r10978 r11053 93 93 ! !------------------------------! 94 94 IF(ln_wd_il) THEN 95 CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), z2dt )95 CALL wad_lmt(pssh(:,:,Kbb), zcoef * (emp_b(:,:) + emp(:,:)), z2dt, Kmm, uu, vv ) 96 96 ENDIF 97 97 … … 109 109 ! 110 110 #if defined key_agrif 111 CALL agrif_ssh( kt )111 Krhs_a = Kaa ; CALL agrif_ssh( kt ) 112 112 #endif 113 113 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/DYN/wet_dry.F90
r10499 r11053 122 122 123 123 124 SUBROUTINE wad_lmt( sshb1, sshemp, z2dt)124 SUBROUTINE wad_lmt( psshb1, psshemp, z2dt, Kmm, puu, pvv ) 125 125 !!---------------------------------------------------------------------- 126 126 !! *** ROUTINE wad_lmt *** … … 132 132 !! ** Action : - calculate flux limiter and W/D flag 133 133 !!---------------------------------------------------------------------- 134 REAL(wp), DIMENSION(:,:), INTENT(inout) :: sshb1 !!gm DOCTOR names: should start with p ! 135 REAL(wp), DIMENSION(:,:), INTENT(in ) :: sshemp 136 REAL(wp) , INTENT(in ) :: z2dt 134 REAL(wp), DIMENSION(:,:) , INTENT(inout) :: psshb1 135 REAL(wp), DIMENSION(:,:) , INTENT(in ) :: psshemp 136 REAL(wp) , INTENT(in ) :: z2dt 137 INTEGER , INTENT(in ) :: Kmm ! time level index 138 REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(inout) :: puu, pvv ! velocity arrays 137 139 ! 138 140 INTEGER :: ji, jj, jk, jk1 ! dummy loop indices … … 150 152 ! 151 153 DO jk = 1, jpkm1 152 un(:,:,jk) = un(:,:,jk) * zwdlmtu(:,:)153 vn(:,:,jk) = vn(:,:,jk) * zwdlmtv(:,:)154 puu(:,:,jk,Kmm) = puu(:,:,jk,Kmm) * zwdlmtu(:,:) 155 pvv(:,:,jk,Kmm) = pvv(:,:,jk,Kmm) * zwdlmtv(:,:) 154 156 END DO 155 157 jflag = 0 … … 165 167 ! 166 168 DO jk = 1, jpkm1 ! Horizontal Flux in u and v direction 167 zflxu(:,:) = zflxu(:,:) + e3u _n(:,:,jk) * un(:,:,jk) * umask(:,:,jk)168 zflxv(:,:) = zflxv(:,:) + e3v _n(:,:,jk) * vn(:,:,jk) * vmask(:,:,jk)169 zflxu(:,:) = zflxu(:,:) + e3u(:,:,jk,Kmm) * puu(:,:,jk,Kmm) * umask(:,:,jk) 170 zflxv(:,:) = zflxv(:,:) + e3v(:,:,jk,Kmm) * pvv(:,:,jk,Kmm) * vmask(:,:,jk) 169 171 END DO 170 172 zflxu(:,:) = zflxu(:,:) * e2u(:,:) … … 183 185 & + MIN( zflxv(ji,jj) , 0._wp ) - MAX( zflxv(ji, jj-1) , 0._wp ) 184 186 ! 185 zdep2 = ht_0(ji,jj) + sshb1(ji,jj) - rn_wdmin1187 zdep2 = ht_0(ji,jj) + psshb1(ji,jj) - rn_wdmin1 186 188 IF( zdep2 <= 0._wp ) THEN ! add more safty, but not necessary 187 sshb1(ji,jj) = rn_wdmin1 - ht_0(ji,jj)189 psshb1(ji,jj) = rn_wdmin1 - ht_0(ji,jj) 188 190 IF(zflxu(ji, jj) > 0._wp) zwdlmtu(ji ,jj) = 0._wp 189 191 IF(zflxu(ji-1,jj) < 0._wp) zwdlmtu(ji-1,jj) = 0._wp … … 196 198 ! 197 199 ! ! HPG limiter from jholt 198 wdramp(:,:) = min((ht_0(:,:) + sshb1(:,:) - rn_wdmin1)/(rn_wdmin0 - rn_wdmin1),1.0_wp)200 wdramp(:,:) = min((ht_0(:,:) + psshb1(:,:) - rn_wdmin1)/(rn_wdmin0 - rn_wdmin1),1.0_wp) 199 201 !jth assume don't need a lbc_lnk here 200 202 DO jj = 1, jpjm1 … … 226 228 ! 227 229 zdep1 = (zzflxp + zzflxn) * z2dt / ztmp 228 zdep2 = ht_0(ji,jj) + sshb1(ji,jj) - rn_wdmin1 - z2dt *sshemp(ji,jj)230 zdep2 = ht_0(ji,jj) + psshb1(ji,jj) - rn_wdmin1 - z2dt * psshemp(ji,jj) 229 231 ! 230 232 IF( zdep1 > zdep2 ) THEN … … 255 257 ! 256 258 DO jk = 1, jpkm1 257 un(:,:,jk) = un(:,:,jk) * zwdlmtu(:,:)258 vn(:,:,jk) = vn(:,:,jk) * zwdlmtv(:,:)259 END DO 260 u n_b(:,:) = un_b(:,:) * zwdlmtu(:, :)261 v n_b(:,:) = vn_b(:,:) * zwdlmtv(:, :)259 puu(:,:,jk,Kmm) = puu(:,:,jk,Kmm) * zwdlmtu(:,:) 260 pvv(:,:,jk,Kmm) = pvv(:,:,jk,Kmm) * zwdlmtv(:,:) 261 END DO 262 uu_b(:,:,Kmm) = uu_b(:,:,Kmm) * zwdlmtu(:, :) 263 vv_b(:,:,Kmm) = vv_b(:,:,Kmm) * zwdlmtv(:, :) 262 264 ! 263 265 !!gm TO BE SUPPRESSED ? these lbc_lnk are useless since zwdlmtu and zwdlmtv are defined everywhere ! 264 CALL lbc_lnk_multi( 'wet_dry', un , 'U', -1., vn, 'V', -1. )265 CALL lbc_lnk_multi( 'wet_dry', u n_b, 'U', -1., vn_b, 'V', -1. )266 CALL lbc_lnk_multi( 'wet_dry', puu(:,:,:,Kmm) , 'U', -1., pvv(:,:,:,Kmm) , 'V', -1. ) 267 CALL lbc_lnk_multi( 'wet_dry', uu_b(:,:,Kmm), 'U', -1., vv_b(:,:,Kmm), 'V', -1. ) 266 268 !!gm 267 269 ! 268 270 IF(jflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt!!!' 269 271 ! 270 !IF( ln_rnf ) CALL sbc_rnf_div( hdiv n ) ! runoffs (update hdivnfield)272 !IF( ln_rnf ) CALL sbc_rnf_div( hdiv ) ! runoffs (update hdiv field) 271 273 ! 272 274 IF( ln_timing ) CALL timing_stop('wad_lmt') ! … … 392 394 IF( jflag == 1 .AND. lwp ) WRITE(numout,*) 'Need more iterations in wad_lmt_bt!!!' 393 395 ! 394 !IF( ln_rnf ) CALL sbc_rnf_div( hdiv n ) ! runoffs (update hdivnfield)396 !IF( ln_rnf ) CALL sbc_rnf_div( hdiv ) ! runoffs (update hdiv field) 395 397 ! 396 398 IF( ln_timing ) CALL timing_stop('wad_lmt_bt') ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/IOM/restart.F90
r10989 r11053 148 148 149 149 IF ( .NOT. ln_diurnal_only ) THEN 150 CALL iom_rstput( kt, nitrst, numrow, 'ub' , uu(:,:,: ,Kbb), ldxios = lwxios ) ! before fields151 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vv(:,:,: ,Kbb), ldxios = lwxios )150 CALL iom_rstput( kt, nitrst, numrow, 'ub' , uu(:,:,: ,Kbb), ldxios = lwxios ) ! before fields 151 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vv(:,:,: ,Kbb), ldxios = lwxios ) 152 152 CALL iom_rstput( kt, nitrst, numrow, 'tb' , ts(:,:,:,jp_tem,Kbb), ldxios = lwxios ) 153 153 CALL iom_rstput( kt, nitrst, numrow, 'sb' , ts(:,:,:,jp_sal,Kbb), ldxios = lwxios ) 154 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb, ldxios = lwxios )154 CALL iom_rstput( kt, nitrst, numrow, 'sshb' ,ssh(:,: ,Kbb), ldxios = lwxios ) 155 155 ! 156 CALL iom_rstput( kt, nitrst, numrow, 'un' , uu(:,:,: ,Kmm), ldxios = lwxios ) ! now fields157 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vv(:,:,: ,Kmm), ldxios = lwxios )156 CALL iom_rstput( kt, nitrst, numrow, 'un' , uu(:,:,: ,Kmm), ldxios = lwxios ) ! now fields 157 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vv(:,:,: ,Kmm), ldxios = lwxios ) 158 158 CALL iom_rstput( kt, nitrst, numrow, 'tn' , ts(:,:,:,jp_tem,Kmm), ldxios = lwxios ) 159 159 CALL iom_rstput( kt, nitrst, numrow, 'sn' , ts(:,:,:,jp_sal,Kmm), ldxios = lwxios ) 160 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn, ldxios = lwxios )160 CALL iom_rstput( kt, nitrst, numrow, 'sshn' ,ssh(:,: ,Kmm), ldxios = lwxios ) 161 161 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop, ldxios = lwxios ) 162 162 ! extra variable needed for the ice sheet coupling … … 275 275 276 276 IF( iom_varid( numror, 'ub', ldstop = .FALSE. ) > 0 ) THEN 277 CALL iom_get( numror, jpdom_autoglo, 'ub' , uu(:,:,: ,Kbb), ldxios = lrxios) ! before fields278 CALL iom_get( numror, jpdom_autoglo, 'vb' , vv(:,:,: ,Kbb), ldxios = lrxios)277 CALL iom_get( numror, jpdom_autoglo, 'ub' , uu(:,:,: ,Kbb), ldxios = lrxios ) ! before fields 278 CALL iom_get( numror, jpdom_autoglo, 'vb' , vv(:,:,: ,Kbb), ldxios = lrxios ) 279 279 CALL iom_get( numror, jpdom_autoglo, 'tb' , ts(:,:,:,jp_tem,Kbb), ldxios = lrxios ) 280 280 CALL iom_get( numror, jpdom_autoglo, 'sb' , ts(:,:,:,jp_sal,Kbb), ldxios = lrxios ) 281 CALL iom_get( numror, jpdom_autoglo, 'sshb' , sshb, ldxios = lrxios)281 CALL iom_get( numror, jpdom_autoglo, 'sshb' ,ssh(:,: ,Kbb), ldxios = lrxios ) 282 282 ELSE 283 283 neuler = 0 284 284 ENDIF 285 285 ! 286 CALL iom_get( numror, jpdom_autoglo, 'un' , uu(:,:,: ,Kmm), ldxios = lrxios )! now fields287 CALL iom_get( numror, jpdom_autoglo, 'vn' , vv(:,:,: ,Kmm), ldxios = lrxios)286 CALL iom_get( numror, jpdom_autoglo, 'un' , uu(:,:,: ,Kmm), ldxios = lrxios ) ! now fields 287 CALL iom_get( numror, jpdom_autoglo, 'vn' , vv(:,:,: ,Kmm), ldxios = lrxios ) 288 288 CALL iom_get( numror, jpdom_autoglo, 'tn' , ts(:,:,:,jp_tem,Kmm), ldxios = lrxios ) 289 289 CALL iom_get( numror, jpdom_autoglo, 'sn' , ts(:,:,:,jp_sal,Kmm), ldxios = lrxios ) 290 CALL iom_get( numror, jpdom_autoglo, 'sshn' , sshn, ldxios = lrxios )290 CALL iom_get( numror, jpdom_autoglo, 'sshn' ,ssh(:,: ,Kmm), ldxios = lrxios ) 291 291 IF( iom_varid( numror, 'rhop', ldstop = .FALSE. ) > 0 ) THEN 292 292 CALL iom_get( numror, jpdom_autoglo, 'rhop' , rhop, ldxios = lrxios ) ! now potential density … … 297 297 IF( neuler == 0 ) THEN ! Euler restart (neuler=0) 298 298 ts (:,:,:,:,Kbb) = ts (:,:,:,:,Kmm) ! all before fields set to now values 299 uu (:,:,: ,Kbb) = uu (:,:,:,Kmm)300 vv (:,:,: ,Kbb) = vv (:,:,:,Kmm)301 ssh b (:,:) = sshn (:,:)299 uu (:,:,: ,Kbb) = uu (:,:,: ,Kmm) 300 vv (:,:,: ,Kbb) = vv (:,:,: ,Kmm) 301 ssh (:,: ,Kbb) = ssh (:,: ,Kmm) 302 302 ! 303 303 IF( .NOT.ln_linssh ) THEN -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/OBS/diaobs.F90
r10922 r11053 460 460 ! 461 461 IF( TRIM(cobstypessurf(jtype)) == 'sla' ) THEN 462 CALL obs_rea_mdt( surfdataqc(jtype), n2dintsurf(jtype) )462 CALL obs_rea_mdt( surfdataqc(jtype), n2dintsurf(jtype), Kmm ) 463 463 IF( ln_altbias ) & 464 464 & CALL obs_rea_altbias ( surfdataqc(jtype), n2dintsurf(jtype), cn_altbiasfile ) … … 499 499 USE dom_oce, ONLY : gdept, gdept_1d ! Ocean space domain variables (Kmm time-level only) 500 500 USE phycst , ONLY : rday ! Physical constants 501 USE oce , ONLY : ts, uu, vv, ssh n! Ocean dynamics and tracers variables (Kmm time-level only)501 USE oce , ONLY : ts, uu, vv, ssh ! Ocean dynamics and tracers variables (Kmm time-level only) 502 502 USE phycst , ONLY : rday ! Physical constants 503 503 #if defined key_si3 … … 598 598 zsurfvar(:,:) = ts(:,:,1,jp_tem,Kmm) 599 599 CASE('sla') 600 zsurfvar(:,:) = ssh n(:,:)600 zsurfvar(:,:) = ssh(:,:,Kmm) 601 601 CASE('sss') 602 602 zsurfvar(:,:) = ts(:,:,1,jp_sal,Kmm) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/OBS/obs_read_altbias.F90
r10068 r11053 29 29 & gphit 30 30 USE oce, ONLY : & ! Model variables 31 & ssh n31 & ssh 32 32 USE obs_inter_h2d 33 33 USE obs_utils ! Various observation tools -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/OBS/obs_readmdt.F90
r10425 r11053 25 25 & tmask, tmask_i, e1e2t, gphit, glamt 26 26 USE obs_const, ONLY : obfillflt ! Fillvalue 27 USE oce , ONLY : ssh n! Model variables27 USE oce , ONLY : ssh ! Model variables 28 28 29 29 IMPLICIT NONE … … 44 44 CONTAINS 45 45 46 SUBROUTINE obs_rea_mdt( sladata, k2dint )46 SUBROUTINE obs_rea_mdt( sladata, k2dint, Kmm ) 47 47 !!--------------------------------------------------------------------- 48 48 !! … … 59 59 TYPE(obs_surf), INTENT(inout) :: sladata ! SLA data 60 60 INTEGER , INTENT(in) :: k2dint ! ? 61 INTEGER , INTENT(in) :: Kmm ! ? 61 62 ! 62 63 CHARACTER(LEN=12), PARAMETER :: cpname = 'obs_rea_mdt' … … 106 107 ! Remove the offset between the MDT used with the sla and the model MDT 107 108 IF( nn_msshc == 1 .OR. nn_msshc == 2 ) & 108 & CALL obs_offset_mdt( jpi, jpj, z_mdt, zfill )109 & CALL obs_offset_mdt( jpi, jpj, z_mdt, zfill, Kmm ) 109 110 110 111 ! Intepolate the MDT already on the model grid at the observation point … … 169 170 170 171 171 SUBROUTINE obs_offset_mdt( kpi, kpj, mdt, zfill )172 SUBROUTINE obs_offset_mdt( kpi, kpj, mdt, zfill, Kmm ) 172 173 !!--------------------------------------------------------------------- 173 174 !! … … 183 184 !!---------------------------------------------------------------------- 184 185 INTEGER, INTENT(IN) :: kpi, kpj 186 INTEGER, INTENT(IN) :: Kmm 185 187 REAL(wp), DIMENSION(kpi,kpj), INTENT(INOUT) :: mdt ! MDT used on the model grid 186 188 REAL(wp) , INTENT(IN ) :: zfill … … 216 218 zarea = zarea + zdxdy 217 219 zeta1 = zeta1 + mdt(ji,jj) * zdxdy 218 zeta2 = zeta2 + ssh n (ji,jj) * zdxdy220 zeta2 = zeta2 + ssh(ji,jj,Kmm) * zdxdy 219 221 END DO 220 222 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/OBS/obs_sstbias.F90
r9023 r11053 28 28 & glamt 29 29 USE oce, ONLY : & ! Model variables 30 & ssh n30 & ssh 31 31 USE obs_inter_h2d 32 32 USE obs_utils ! Various observation tools -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/SBC/fldread.F90
r10922 r11053 130 130 CONTAINS 131 131 132 SUBROUTINE fld_read( kt, kn_fsbc, sd, map, kit, kt_offset, jpk_bdy, fvl )132 SUBROUTINE fld_read( kt, kn_fsbc, sd, map, kit, kt_offset, jpk_bdy, fvl, Kmm ) 133 133 !!--------------------------------------------------------------------- 134 134 !! *** ROUTINE fld_read *** … … 153 153 INTEGER , INTENT(in ), OPTIONAL :: jpk_bdy ! number of vertical levels in the BDY data 154 154 LOGICAL , INTENT(in ), OPTIONAL :: fvl ! number of vertical levels in the BDY data 155 INTEGER , INTENT(in ), OPTIONAL :: Kmm ! ocean time level index 155 156 !! 156 157 INTEGER :: itmp ! local variable … … 287 288 ! read after data 288 289 IF( PRESENT(jpk_bdy) ) THEN 289 CALL fld_get( sd(jf), imap, jpk_bdy, fvl )290 CALL fld_get( sd(jf), imap, jpk_bdy, fvl, Kmm ) 290 291 ELSE 291 292 CALL fld_get( sd(jf), imap ) … … 614 615 615 616 616 SUBROUTINE fld_get( sdjf, map, jpk_bdy, fvl )617 SUBROUTINE fld_get( sdjf, map, jpk_bdy, fvl, Kmm ) 617 618 !!--------------------------------------------------------------------- 618 619 !! *** ROUTINE fld_get *** … … 624 625 INTEGER , INTENT(in), OPTIONAL :: jpk_bdy ! number of vertical levels in the bdy data 625 626 LOGICAL , INTENT(in), OPTIONAL :: fvl ! number of vertical levels in the bdy data 627 INTEGER , INTENT(in), OPTIONAL :: Kmm ! ocean time level index 626 628 ! 627 629 INTEGER :: ipk ! number of vertical levels of sdjf%fdta ( 2D: ipk=1 ; 3D: ipk=jpk ) … … 638 640 IF( PRESENT(jpk_bdy) ) THEN 639 641 IF( sdjf%ln_tint ) THEN ; CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fdta(:,:,:,2), & 640 sdjf%nrec_a(1), map, sdjf%igrd, sdjf%ibdy, jpk_bdy, fvl )642 sdjf%nrec_a(1), map, sdjf%igrd, sdjf%ibdy, jpk_bdy, fvl, Kmm ) 641 643 ELSE ; CALL fld_map( sdjf%num, sdjf%clvar, sdjf%fnow(:,:,: ), & 642 sdjf%nrec_a(1), map, sdjf%igrd, sdjf%ibdy, jpk_bdy, fvl )644 sdjf%nrec_a(1), map, sdjf%igrd, sdjf%ibdy, jpk_bdy, fvl, Kmm ) 643 645 ENDIF 644 646 ELSE … … 701 703 END SUBROUTINE fld_get 702 704 703 SUBROUTINE fld_map( num, clvar, dta, nrec, map, igrd, ibdy, jpk_bdy, fvl )705 SUBROUTINE fld_map( num, clvar, dta, nrec, map, igrd, ibdy, jpk_bdy, fvl, Kmm ) 704 706 !!--------------------------------------------------------------------- 705 707 !! *** ROUTINE fld_map *** … … 718 720 INTEGER , INTENT(in), OPTIONAL :: igrd, ibdy, jpk_bdy ! grid type, set number and number of vertical levels in the bdy data 719 721 LOGICAL , INTENT(in), OPTIONAL :: fvl ! grid type, set number and number of vertical levels in the bdy data 722 INTEGER , INTENT(in), OPTIONAL :: Kmm ! ocean time level index 720 723 INTEGER :: jpkm1_bdy! number of vertical levels in the bdy data minus 1 721 724 !! … … 813 816 814 817 IF ( ln_bdy ) & 815 CALL fld_bdy_interp(dta_read, dta_read_z, dta_read_dz, map, jpk_bdy, igrd, ibdy, fv, dta, fvl, ilendta )818 CALL fld_bdy_interp(dta_read, dta_read_z, dta_read_dz, map, jpk_bdy, igrd, ibdy, fv, dta, fvl, ilendta, Kmm) 816 819 817 820 ELSE ! boundary data assumed to be on model grid … … 838 841 END SUBROUTINE fld_map 839 842 840 SUBROUTINE fld_bdy_interp(dta_read, dta_read_z, dta_read_dz, map, jpk_bdy, igrd, ibdy, fv, dta, fvl, ilendta )843 SUBROUTINE fld_bdy_interp(dta_read, dta_read_z, dta_read_dz, map, jpk_bdy, igrd, ibdy, fv, dta, fvl, ilendta, Kmm) 841 844 842 845 !!--------------------------------------------------------------------- … … 857 860 INTEGER , INTENT(in) :: igrd, ibdy, jpk_bdy ! number of levels in bdy data 858 861 INTEGER , INTENT(in) :: ilendta ! length of data in file 862 INTEGER , INTENT(in), OPTIONAL :: Kmm ! ocean time level index 859 863 !! 860 864 INTEGER :: ipi ! length of boundary data on local process … … 900 904 SELECT CASE( igrd ) 901 905 CASE(1) 902 IF( ABS( (zh - ht _n(zij,zjj)) / ht_n(zij,zjj)) * tmask(zij,zjj,1) > 0.01_wp ) THEN906 IF( ABS( (zh - ht(zij,zjj)) / ht(zij,zjj)) * tmask(zij,zjj,1) > 0.01_wp ) THEN 903 907 WRITE(ibstr,"(I10.10)") map%ptr(ib) 904 908 CALL ctl_warn('fld_bdy_interp: T depths differ between grids at BDY point '//TRIM(ibstr)//' by more than 1%') 905 ! IF(lwp) WRITE(*,*) 'DEPTHT', zh, sum(e3t(zij,zjj,:, nfld_Nnn), mask=tmask(zij,zjj,:)==1), ht_n(zij,zjj), map%ptr(ib), ib, zij, zjj909 ! IF(lwp) WRITE(*,*) 'DEPTHT', zh, sum(e3t(zij,zjj,:,Kmm), mask=tmask(zij,zjj,:)==1), ht(zij,zjj), map%ptr(ib), ib, zij, zjj 906 910 ENDIF 907 911 CASE(2) 908 IF( ABS( (zh - hu _n(zij,zjj)) * r1_hu_n(zij,zjj)) * umask(zij,zjj,1) > 0.01_wp ) THEN912 IF( ABS( (zh - hu(zij,zjj,Kmm)) * r1_hu(zij,zjj,Kmm)) * umask(zij,zjj,1) > 0.01_wp ) THEN 909 913 WRITE(ibstr,"(I10.10)") map%ptr(ib) 910 914 CALL ctl_warn('fld_bdy_interp: U depths differ between grids at BDY point '//TRIM(ibstr)//' by more than 1%') 911 IF(lwp) WRITE(*,*) 'DEPTHU', zh, sum(e3u(zij,zjj,:, nfld_Nnn), mask=umask(zij,zjj,:)==1), sum(umask(zij,zjj,:)), &912 & hu _n(zij,zjj), map%ptr(ib), ib, zij, zjj, narea-1 , &915 IF(lwp) WRITE(*,*) 'DEPTHU', zh, sum(e3u(zij,zjj,:,Kmm), mask=umask(zij,zjj,:)==1), sum(umask(zij,zjj,:)), & 916 & hu(zij,zjj,Kmm), map%ptr(ib), ib, zij, zjj, narea-1 , & 913 917 & dta_read(map%ptr(ib),1,:) 914 918 ENDIF 915 919 CASE(3) 916 IF( ABS( (zh - hv _n(zij,zjj)) * r1_hv_n(zij,zjj)) * vmask(zij,zjj,1) > 0.01_wp ) THEN920 IF( ABS( (zh - hv(zij,zjj,Kmm)) * r1_hv(zij,zjj,Kmm)) * vmask(zij,zjj,1) > 0.01_wp ) THEN 917 921 WRITE(ibstr,"(I10.10)") map%ptr(ib) 918 922 CALL ctl_warn('fld_bdy_interp: V depths differ between grids at BDY point '//TRIM(ibstr)//' by more than 1%') … … 922 926 SELECT CASE( igrd ) 923 927 CASE(1) 924 zl = gdept(zij,zjj,ik, nfld_Nnn) ! if using in step could use fsdept instead of gdept_n?928 zl = gdept(zij,zjj,ik,Kmm) ! if using in step could use fsdept instead of gdept_n? 925 929 CASE(2) 926 930 IF(ln_sco) THEN 927 zl = ( gdept(zij,zjj,ik, nfld_Nnn) + gdept(zij+1,zjj,ik,nfld_Nnn) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n?931 zl = ( gdept(zij,zjj,ik,Kmm) + gdept(zij+1,zjj,ik,Kmm) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n? 928 932 ELSE 929 zl = MIN( gdept(zij,zjj,ik, nfld_Nnn), gdept(zij+1,zjj,ik,nfld_Nnn) )933 zl = MIN( gdept(zij,zjj,ik,Kmm), gdept(zij+1,zjj,ik,Kmm) ) 930 934 ENDIF 931 935 CASE(3) 932 936 IF(ln_sco) THEN 933 zl = ( gdept(zij,zjj,ik, nfld_Nnn) + gdept(zij,zjj+1,ik,nfld_Nnn) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n?937 zl = ( gdept(zij,zjj,ik,Kmm) + gdept(zij,zjj+1,ik,Kmm) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n? 934 938 ELSE 935 zl = MIN( gdept(zij,zjj,ik, nfld_Nnn), gdept(zij,zjj+1,ik,nfld_Nnn) )939 zl = MIN( gdept(zij,zjj,ik,Kmm), gdept(zij,zjj+1,ik,Kmm) ) 936 940 ENDIF 937 941 END SELECT … … 941 945 dta(ib,1,ik) = dta_read(map%ptr(ib),1,MAXLOC(dta_read_z(map%ptr(ib),1,:),1)) 942 946 ELSE ! inbetween : vertical interpolation between ikk & ikk+1 943 DO ikk = 1, jpkm1_bdy ! when gdept(ikk, nfld_Nnn) < zl < gdept(ikk+1,nfld_Nnn)947 DO ikk = 1, jpkm1_bdy ! when gdept(ikk,Kmm) < zl < gdept(ikk+1,Kmm) 944 948 IF( ( (zl-dta_read_z(map%ptr(ib),1,ikk)) * (zl-dta_read_z(map%ptr(ib),1,ikk+1)) <= 0._wp) & 945 949 & .AND. (dta_read_z(map%ptr(ib),1,ikk+1) /= fv_alt)) THEN … … 965 969 ENDDO 966 970 DO ik = 1, ipk ! calculate transport on model grid 967 ztrans_new = ztrans_new + dta(ib,1,ik) * e3u(zij,zjj,ik, nfld_Nnn) * umask(zij,zjj,ik)971 ztrans_new = ztrans_new + dta(ib,1,ik) * e3u(zij,zjj,ik,Kmm) * umask(zij,zjj,ik) 968 972 ENDDO 969 973 DO ik = 1, ipk ! make transport correction 970 974 IF(fvl) THEN ! bdy data are total velocity so adjust bt transport term to match input data 971 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hu _n(zij,zjj) ) * umask(zij,zjj,ik)975 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hu(zij,zjj,Kmm) ) * umask(zij,zjj,ik) 972 976 ELSE ! we're just dealing with bc velocity so bt transport term should sum to zero 973 IF( ABS(ztrans * r1_hu _n(zij,zjj)) > 0.01_wp ) &977 IF( ABS(ztrans * r1_hu(zij,zjj,Kmm)) > 0.01_wp ) & 974 978 & CALL ctl_warn('fld_bdy_interp: barotropic component of > 0.01 ms-1 found in baroclinic velocities at') 975 dta(ib,1,ik) = dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hu _n(zij,zjj) * umask(zij,zjj,ik)979 dta(ib,1,ik) = dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hu(zij,zjj,Kmm) * umask(zij,zjj,ik) 976 980 ENDIF 977 981 ENDDO … … 990 994 ENDDO 991 995 DO ik = 1, ipk ! calculate transport on model grid 992 ztrans_new = ztrans_new + dta(ib,1,ik) * e3v(zij,zjj,ik, nfld_Nnn) * vmask(zij,zjj,ik)996 ztrans_new = ztrans_new + dta(ib,1,ik) * e3v(zij,zjj,ik,Kmm) * vmask(zij,zjj,ik) 993 997 ENDDO 994 998 DO ik = 1, ipk ! make transport correction 995 999 IF(fvl) THEN ! bdy data are total velocity so adjust bt transport term to match input data 996 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hv _n(zij,zjj) ) * vmask(zij,zjj,ik)1000 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hv(zij,zjj,Kmm) ) * vmask(zij,zjj,ik) 997 1001 ELSE ! we're just dealing with bc velocity so bt transport term should sum to zero 998 dta(ib,1,ik) = dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hv _n(zij,zjj) * vmask(zij,zjj,ik)1002 dta(ib,1,ik) = dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hv(zij,zjj,Kmm) * vmask(zij,zjj,ik) 999 1003 ENDIF 1000 1004 ENDDO … … 1025 1029 SELECT CASE( igrd ) 1026 1030 CASE(1) 1027 IF( ABS( (zh - ht _n(zij,zjj)) / ht_n(zij,zjj)) * tmask(zij,zjj,1) > 0.01_wp ) THEN1031 IF( ABS( (zh - ht(zij,zjj)) / ht(zij,zjj)) * tmask(zij,zjj,1) > 0.01_wp ) THEN 1028 1032 WRITE(ibstr,"(I10.10)") map%ptr(ib) 1029 1033 CALL ctl_warn('fld_bdy_interp: T depths differ between grids at BDY point '//TRIM(ibstr)//' by more than 1%') 1030 ! IF(lwp) WRITE(*,*) 'DEPTHT', zh, sum(e3t(zij,zjj,:, nfld_Nnn), mask=tmask(zij,zjj,:)==1), ht_n(zij,zjj), map%ptr(ib), ib, zij, zjj1034 ! IF(lwp) WRITE(*,*) 'DEPTHT', zh, sum(e3t(zij,zjj,:,Kmm), mask=tmask(zij,zjj,:)==1), ht(zij,zjj), map%ptr(ib), ib, zij, zjj 1031 1035 ENDIF 1032 1036 CASE(2) 1033 IF( ABS( (zh - hu _n(zij,zjj)) * r1_hu_n(zij,zjj)) * umask(zij,zjj,1) > 0.01_wp ) THEN1037 IF( ABS( (zh - hu(zij,zjj,Kmm)) * r1_hu(zij,zjj,Kmm)) * umask(zij,zjj,1) > 0.01_wp ) THEN 1034 1038 WRITE(ibstr,"(I10.10)") map%ptr(ib) 1035 1039 CALL ctl_warn('fld_bdy_interp: U depths differ between grids at BDY point '//TRIM(ibstr)//' by more than 1%') 1036 1040 ENDIF 1037 1041 CASE(3) 1038 IF( ABS( (zh - hv _n(zij,zjj)) * r1_hv_n(zij,zjj)) * vmask(zij,zjj,1) > 0.01_wp ) THEN1042 IF( ABS( (zh - hv(zij,zjj,Kmm)) * r1_hv(zij,zjj,Kmm)) * vmask(zij,zjj,1) > 0.01_wp ) THEN 1039 1043 WRITE(ibstr,"(I10.10)") map%ptr(ib) 1040 1044 CALL ctl_warn('fld_bdy_interp: V depths differ between grids at BDY point '//TRIM(ibstr)//' by more than 1%') … … 1044 1048 SELECT CASE( igrd ) ! coded for sco - need zco and zps option using min 1045 1049 CASE(1) 1046 zl = gdept(zij,zjj,ik, nfld_Nnn) ! if using in step could use fsdept instead of gdept_n?1050 zl = gdept(zij,zjj,ik,Kmm) ! if using in step could use fsdept instead of gdept_n? 1047 1051 CASE(2) 1048 1052 IF(ln_sco) THEN 1049 zl = ( gdept(zij,zjj,ik, nfld_Nnn) + gdept(zij+1,zjj,ik,nfld_Nnn) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n?1053 zl = ( gdept(zij,zjj,ik,Kmm) + gdept(zij+1,zjj,ik,Kmm) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n? 1050 1054 ELSE 1051 zl = MIN( gdept(zij,zjj,ik, nfld_Nnn), gdept(zij+1,zjj,ik,nfld_Nnn) )1055 zl = MIN( gdept(zij,zjj,ik,Kmm), gdept(zij+1,zjj,ik,Kmm) ) 1052 1056 ENDIF 1053 1057 CASE(3) 1054 1058 IF(ln_sco) THEN 1055 zl = ( gdept(zij,zjj,ik, nfld_Nnn) + gdept(zij,zjj+1,ik,nfld_Nnn) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n?1059 zl = ( gdept(zij,zjj,ik,Kmm) + gdept(zij,zjj+1,ik,Kmm) ) * 0.5_wp ! if using in step could use fsdept instead of gdept_n? 1056 1060 ELSE 1057 zl = MIN( gdept(zij,zjj,ik, nfld_Nnn), gdept(zij,zjj+1,ik,nfld_Nnn) )1061 zl = MIN( gdept(zij,zjj,ik,Kmm), gdept(zij,zjj+1,ik,Kmm) ) 1058 1062 ENDIF 1059 1063 END SELECT … … 1063 1067 dta(ib,1,ik) = dta_read(ji,jj,MAXLOC(dta_read_z(ji,jj,:),1)) 1064 1068 ELSE ! inbetween : vertical interpolation between ikk & ikk+1 1065 DO ikk = 1, jpkm1_bdy ! when gdept(ikk, nfld_Nnn) < zl < gdept(ikk+1,nfld_Nnn)1069 DO ikk = 1, jpkm1_bdy ! when gdept(ikk,Kmm) < zl < gdept(ikk+1,Kmm) 1066 1070 IF( ( (zl-dta_read_z(ji,jj,ikk)) * (zl-dta_read_z(ji,jj,ikk+1)) <= 0._wp) & 1067 1071 & .AND. (dta_read_z(ji,jj,ikk+1) /= fv_alt)) THEN … … 1089 1093 ENDDO 1090 1094 DO ik = 1, ipk ! calculate transport on model grid 1091 ztrans_new = ztrans_new + dta(ib,1,ik) * e3u(zij,zjj,ik, nfld_Nnn) * umask(zij,zjj,ik)1095 ztrans_new = ztrans_new + dta(ib,1,ik) * e3u(zij,zjj,ik,Kmm) * umask(zij,zjj,ik) 1092 1096 ENDDO 1093 1097 DO ik = 1, ipk ! make transport correction 1094 1098 IF(fvl) THEN ! bdy data are total velocity so adjust bt transport term to match input data 1095 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hu _n(zij,zjj) ) * umask(zij,zjj,ik)1099 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hu(zij,zjj,Kmm) ) * umask(zij,zjj,ik) 1096 1100 ELSE ! we're just dealing with bc velocity so bt transport term should sum to zero 1097 dta(ib,1,ik) = ( dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hu _n(zij,zjj) ) * umask(zij,zjj,ik)1101 dta(ib,1,ik) = ( dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hu(zij,zjj,Kmm) ) * umask(zij,zjj,ik) 1098 1102 ENDIF 1099 1103 ENDDO … … 1114 1118 ENDDO 1115 1119 DO ik = 1, ipk ! calculate transport on model grid 1116 ztrans_new = ztrans_new + dta(ib,1,ik) * e3v(zij,zjj,ik, nfld_Nnn) * vmask(zij,zjj,ik)1120 ztrans_new = ztrans_new + dta(ib,1,ik) * e3v(zij,zjj,ik,Kmm) * vmask(zij,zjj,ik) 1117 1121 ENDDO 1118 1122 DO ik = 1, ipk ! make transport correction 1119 1123 IF(fvl) THEN ! bdy data are total velocity so adjust bt transport term to match input data 1120 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hv _n(zij,zjj) ) * vmask(zij,zjj,ik)1124 dta(ib,1,ik) = ( dta(ib,1,ik) + ( ztrans - ztrans_new ) * r1_hv(zij,zjj,Kmm) ) * vmask(zij,zjj,ik) 1121 1125 ELSE ! we're just dealing with bc velocity so bt transport term should sum to zero 1122 dta(ib,1,ik) = ( dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hv _n(zij,zjj) ) * vmask(zij,zjj,ik)1126 dta(ib,1,ik) = ( dta(ib,1,ik) + ( 0._wp - ztrans_new ) * r1_hv(zij,zjj,Kmm) ) * vmask(zij,zjj,ik) 1123 1127 ENDIF 1124 1128 ENDDO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/SBC/sbccpl.F90
r10922 r11053 32 32 USE cpl_oasis3 ! OASIS3 coupling 33 33 USE geo2ocean ! 34 USE oce , ONLY : ts, uu, vv, ssh n, sshb, fraqsr_1lev34 USE oce , ONLY : ts, uu, vv, ssh, fraqsr_1lev 35 35 USE ocealb ! 36 36 USE eosbn2 ! … … 2037 2037 2038 2038 2039 SUBROUTINE sbc_cpl_snd( kt, K mm )2039 SUBROUTINE sbc_cpl_snd( kt, Kbb, Kmm ) 2040 2040 !!---------------------------------------------------------------------- 2041 2041 !! *** ROUTINE sbc_cpl_snd *** … … 2047 2047 !!---------------------------------------------------------------------- 2048 2048 INTEGER, INTENT(in) :: kt 2049 INTEGER, INTENT(in) :: K mm ! ocean model time level index2049 INTEGER, INTENT(in) :: Kbb, Kmm ! ocean model time level index 2050 2050 ! 2051 2051 INTEGER :: ji, jj, jl ! dummy loop indices … … 2476 2476 IF( ln_apr_dyn ) THEN 2477 2477 IF( kt /= nit000 ) THEN 2478 ztmp1(:,:) = ssh b(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )2478 ztmp1(:,:) = ssh(:,:,Kbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 2479 2479 ELSE 2480 ztmp1(:,:) = ssh b(:,:)2480 ztmp1(:,:) = ssh(:,:,Kbb) 2481 2481 ENDIF 2482 2482 ELSE 2483 ztmp1(:,:) = ssh n(:,:)2483 ztmp1(:,:) = ssh(:,:,Kmm) 2484 2484 ENDIF 2485 2485 CALL cpl_snd( jps_wlev , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info ) … … 2491 2491 ! ! removed inverse barometer ssh when Patm 2492 2492 ! forcing is used (for sea-ice dynamics) 2493 IF( ln_apr_dyn ) THEN ; ztmp1(:,:) = ssh b(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )2494 ELSE ; ztmp1(:,:) = ssh n(:,:)2493 IF( ln_apr_dyn ) THEN ; ztmp1(:,:) = ssh(:,:,Kbb) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 2494 ELSE ; ztmp1(:,:) = ssh(:,:,Kmm) 2495 2495 ENDIF 2496 2496 CALL cpl_snd( jps_ssh , isec, RESHAPE ( ztmp1 , (/jpi,jpj,1/) ), info ) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/SBC/sbcfwb.F90
r10570 r11053 48 48 CONTAINS 49 49 50 SUBROUTINE sbc_fwb( kt, kn_fwb, kn_fsbc )50 SUBROUTINE sbc_fwb( kt, kn_fwb, kn_fsbc, Kmm ) 51 51 !!--------------------------------------------------------------------- 52 52 !! *** ROUTINE sbc_fwb *** … … 65 65 INTEGER, INTENT( in ) :: kn_fsbc ! 66 66 INTEGER, INTENT( in ) :: kn_fwb ! ocean time-step index 67 INTEGER, INTENT( in ) :: Kmm ! ocean time level index 67 68 ! 68 69 INTEGER :: inum, ikty, iyear ! local integers … … 131 132 a_fwb_b = a_fwb ! mean sea level taking into account the ice+snow 132 133 ! sum over the global domain 133 a_fwb = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh n(:,:) + snwice_mass(:,:) * r1_rau0 ) )134 a_fwb = glob_sum( 'sbcfwb', e1e2t(:,:) * ( ssh(:,:,Kmm) + snwice_mass(:,:) * r1_rau0 ) ) 134 135 a_fwb = a_fwb * 1.e+3 / ( area * rday * 365. ) ! convert in Kg/m3/s = mm/s 135 136 !!gm ! !!bug 365d year -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/SBC/sbcice_cice.F90
r10922 r11053 147 147 148 148 149 SUBROUTINE cice_sbc_init( ksbc )149 SUBROUTINE cice_sbc_init( ksbc, Kbb, Kmm ) 150 150 !!--------------------------------------------------------------------- 151 151 !! *** ROUTINE cice_sbc_init *** … … 154 154 !!--------------------------------------------------------------------- 155 155 INTEGER, INTENT( in ) :: ksbc ! surface forcing type 156 INTEGER, INTENT( in ) :: Kbb, Kmm ! time level indices 156 157 REAL(wp), DIMENSION(jpi,jpj) :: ztmp1, ztmp2 157 158 REAL(wp) :: zcoefu, zcoefv, zcoeff ! local scalar … … 227 228 IF( .NOT.ln_rstart ) THEN 228 229 IF( ln_ice_embd ) THEN ! embedded sea-ice: deplete the initial ssh below sea-ice area 229 ssh n(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0230 ssh b(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0230 ssh(:,:,Kmm) = ssh(:,:,Kmm) - snwice_mass(:,:) * r1_rau0 231 ssh(:,:,Kbb) = ssh(:,:,Kbb) - snwice_mass(:,:) * r1_rau0 231 232 232 233 !!gm This should be put elsewhere.... (same remark for limsbc) … … 235 236 ! 236 237 DO jk = 1,jpkm1 ! adjust initial vertical scale factors 237 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk)*( 1._wp + ssh n(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) )238 e3t(:,:,jk,Kbb) = e3t_0(:,:,jk)*( 1._wp + ssh b(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) )238 e3t(:,:,jk,Kmm) = e3t_0(:,:,jk)*( 1._wp + ssh(:,:,Kmm)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 239 e3t(:,:,jk,Kbb) = e3t_0(:,:,jk)*( 1._wp + ssh(:,:,Kbb)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) ) 239 240 ENDDO 240 241 e3t(:,:,:,Krhs) = e3t(:,:,:,Kbb) … … 259 260 gdept(:,:,1,Kmm) = 0.5_wp * e3w(:,:,1,Kmm) 260 261 gdepw(:,:,1,Kmm) = 0.0_wp 261 gde3w(:,:,1) = gdept(:,:,1,Kmm) - ssh n(:,:)262 gde3w(:,:,1) = gdept(:,:,1,Kmm) - ssh(:,:,Kmm) 262 263 DO jk = 2, jpk 263 264 gdept(:,:,jk,Kmm) = gdept(:,:,jk-1,Kmm) + e3w(:,:,jk,Kmm) … … 1056 1057 END SUBROUTINE sbc_ice_cice 1057 1058 1058 SUBROUTINE cice_sbc_init (ksbc ) ! Dummy routine1059 SUBROUTINE cice_sbc_init (ksbc, Kbb, Kmm) ! Dummy routine 1059 1060 IMPLICIT NONE 1060 1061 INTEGER, INTENT( in ) :: ksbc 1062 INTEGER, INTENT( in ) :: Kbb, Kmm 1061 1063 WRITE(*,*) 'cice_sbc_init: You should not have seen this print! error?', ksbc 1062 1064 END SUBROUTINE cice_sbc_init -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/SBC/sbcisf.F90
r10954 r11053 149 149 DO jj = 1,jpj 150 150 DO ji = 1,jpi 151 zdep(ji,jj)=gdepw _n(ji,jj,misfkt(ji,jj))151 zdep(ji,jj)=gdepw(ji,jj,misfkt(ji,jj),Kmm) 152 152 END DO 153 153 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/SBC/sbcmod.F90
r10998 r11053 341 341 IF( sbc_ice_alloc() /= 0 ) CALL ctl_stop('STOP', 'sbc_ice_alloc : unable to allocate arrays' ) 342 342 ELSEIF( nn_ice == 2 ) THEN 343 CALL ice_init( Kbb, Kmm, Kaa ) ! ICE initialization343 CALL ice_init( Kbb, Kmm, Kaa ) ! ICE initialization 344 344 ENDIF 345 345 #endif 346 IF( nn_ice == 3 ) CALL cice_sbc_init( nsbc ) ! CICE initialization347 ! 348 IF( ln_wave ) CALL sbc_wave_init ! surface wave initialisation346 IF( nn_ice == 3 ) CALL cice_sbc_init( nsbc, Kbb, Kmm ) ! CICE initialization 347 ! 348 IF( ln_wave ) CALL sbc_wave_init ! surface wave initialisation 349 349 ! 350 350 IF( lwxios ) THEN … … 442 442 CASE( 1 ) ; CALL sbc_ice_if ( kt, Kbb, Kmm ) ! Ice-cover climatology ("Ice-if" model) 443 443 #if defined key_si3 444 CASE( 2 ) ; CALL ice_stp ( kt, Kbb, nsbc )! SI3 ice model444 CASE( 2 ) ; CALL ice_stp ( kt, Kbb, Kmm, nsbc ) ! SI3 ice model 445 445 #endif 446 446 CASE( 3 ) ; CALL sbc_ice_cice ( kt, nsbc ) ! CICE ice model … … 454 454 ENDIF 455 455 456 IF( ln_isf ) CALL sbc_isf( kt, Kmm ) ! compute iceshelves457 458 IF( ln_rnf ) CALL sbc_rnf( kt ) ! add runoffs to fresh water fluxes459 460 IF( ln_ssr ) CALL sbc_ssr( kt ) ! add SST/SSS damping term461 462 IF( nn_fwb /= 0 ) CALL sbc_fwb( kt, nn_fwb, nn_fsbc ) ! control the freshwater budget456 IF( ln_isf ) CALL sbc_isf( kt, Kmm ) ! compute iceshelves 457 458 IF( ln_rnf ) CALL sbc_rnf( kt ) ! add runoffs to fresh water fluxes 459 460 IF( ln_ssr ) CALL sbc_ssr( kt ) ! add SST/SSS damping term 461 462 IF( nn_fwb /= 0 ) CALL sbc_fwb( kt, nn_fwb, nn_fsbc, Kmm ) ! control the freshwater budget 463 463 464 464 ! Special treatment of freshwater fluxes over closed seas in the model domain … … 471 471 IF ( ll_wd ) THEN ! If near WAD point limit the flux for now 472 472 zthscl = atanh(rn_wd_sbcfra) ! taper frac default is .999 473 zwdht(:,:) = ssh n(:,:) + ht_0(:,:) - rn_wdmin1 ! do this calc of water473 zwdht(:,:) = ssh(:,:,Kmm) + ht_0(:,:) - rn_wdmin1 ! do this calc of water 474 474 ! depth above wd limit once 475 475 WHERE( zwdht(:,:) <= 0.0 ) … … 557 557 ! 558 558 IF(ln_ctl) THEN ! print mean trends (used for debugging) 559 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' fr_i - : ', mask1=tmask )560 CALL prt_ctl(tab2d_1=(emp-rnf + fwfisf) , clinfo1=' emp-rnf - : ', mask1=tmask )561 CALL prt_ctl(tab2d_1=(sfx-rnf + fwfisf) , clinfo1=' sfx-rnf - : ', mask1=tmask )562 CALL prt_ctl(tab2d_1=qns , clinfo1=' qns - : ', mask1=tmask )563 CALL prt_ctl(tab2d_1=qsr , clinfo1=' qsr - : ', mask1=tmask )564 CALL prt_ctl(tab3d_1=tmask , clinfo1=' tmask - : ', mask1=tmask, kdim=jpk )565 CALL prt_ctl(tab3d_1=ts n(:,:,:,jp_tem), clinfo1=' sst - : ', mask1=tmask, kdim=1 )566 CALL prt_ctl(tab3d_1=ts n(:,:,:,jp_sal), clinfo1=' sss - : ', mask1=tmask, kdim=1 )567 CALL prt_ctl(tab2d_1=utau , clinfo1=' utau - : ', mask1=umask, &568 & tab2d_2=vtau , clinfo2=' vtau - : ', mask2=vmask )559 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' fr_i - : ' , mask1=tmask ) 560 CALL prt_ctl(tab2d_1=(emp-rnf + fwfisf) , clinfo1=' emp-rnf - : ' , mask1=tmask ) 561 CALL prt_ctl(tab2d_1=(sfx-rnf + fwfisf) , clinfo1=' sfx-rnf - : ' , mask1=tmask ) 562 CALL prt_ctl(tab2d_1=qns , clinfo1=' qns - : ', mask1=tmask ) 563 CALL prt_ctl(tab2d_1=qsr , clinfo1=' qsr - : ', mask1=tmask ) 564 CALL prt_ctl(tab3d_1=tmask , clinfo1=' tmask - : ', mask1=tmask, kdim=jpk ) 565 CALL prt_ctl(tab3d_1=ts(:,:,:,jp_tem,Kmm), clinfo1=' sst - : ', mask1=tmask, kdim=1 ) 566 CALL prt_ctl(tab3d_1=ts(:,:,:,jp_sal,Kmm), clinfo1=' sss - : ', mask1=tmask, kdim=1 ) 567 CALL prt_ctl(tab2d_1=utau , clinfo1=' utau - : ', mask1=umask, & 568 & tab2d_2=vtau , clinfo2=' vtau - : ', mask2=vmask ) 569 569 ENDIF 570 570 -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/SBC/sbcssm.F90
r10922 r11053 77 77 sss_m(:,:) = zts(:,:,jp_sal) 78 78 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 79 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh n(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )80 ELSE ; ssh_m(:,:) = ssh n(:,:)79 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh(:,:,Kmm) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 80 ELSE ; ssh_m(:,:) = ssh(:,:,Kmm) 81 81 ENDIF 82 82 ! … … 100 100 sss_m(:,:) = zcoef * zts(:,:,jp_sal) 101 101 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 102 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( ssh n(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) )103 ELSE ; ssh_m(:,:) = zcoef * sshn(:,:)102 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = zcoef * ( ssh(:,:,Kmm) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) ) 103 ELSE ; ssh_m(:,:) = zcoef * ssh(:,:,Kmm) 104 104 ENDIF 105 105 ! … … 128 128 sss_m(:,:) = sss_m(:,:) + zts(:,:,jp_sal) 129 129 ! ! removed inverse barometer ssh when Patm forcing is used (for sea-ice dynamics) 130 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + ssh n(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )131 ELSE ; ssh_m(:,:) = ssh_m(:,:) + ssh n(:,:)130 IF( ln_apr_dyn ) THEN ; ssh_m(:,:) = ssh_m(:,:) + ssh(:,:,Kmm) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) ) 131 ELSE ; ssh_m(:,:) = ssh_m(:,:) + ssh(:,:,Kmm) 132 132 ENDIF 133 133 ! … … 250 250 ENDIF 251 251 sss_m(:,:) = ts (:,:,1,jp_sal,Kmm) 252 ssh_m(:,:) = ssh n(:,:)252 ssh_m(:,:) = ssh(:,:,Kmm) 253 253 e3t_m(:,:) = e3t (:,:,1,Kmm) 254 254 frq_m(:,:) = 1._wp -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/TRD/trddyn.F90
r10946 r11053 123 123 z3dx(:,:,:) = 0._wp ! U.dxU & V.dyV (approximation) 124 124 z3dy(:,:,:) = 0._wp 125 DO jk = 1, jpkm1 ! no mask as u n,vnare masked125 DO jk = 1, jpkm1 ! no mask as uu, vv are masked 126 126 DO jj = 2, jpjm1 127 127 DO ji = 2, jpim1 -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/TRD/trdvor.F90
r10946 r11053 189 189 190 190 ! Average except for Beta.V 191 zudpvor(:,:) = zudpvor(:,:) * r1_hu _n(:,:)192 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv _n(:,:)191 zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 192 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 193 193 194 194 ! Curl … … 276 276 END DO 277 277 ! Average of the Curl and Surface mask 278 vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu _n(:,:) * fmask(:,:,1)278 vortrd(:,:,jpvor_bev) = vortrd(:,:,jpvor_bev) * r1_hu(:,:,Kmm) * fmask(:,:,1) 279 279 ENDIF 280 280 ! 281 281 ! Average 282 zudpvor(:,:) = zudpvor(:,:) * r1_hu _n(:,:)283 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv _n(:,:)282 zudpvor(:,:) = zudpvor(:,:) * r1_hu(:,:,Kmm) 283 zvdpvor(:,:) = zvdpvor(:,:) * r1_hv(:,:,Kmm) 284 284 ! 285 285 ! Curl … … 342 342 END DO 343 343 344 zuu(:,:) = zuu(:,:) * r1_hu _n(:,:)345 zvv(:,:) = zvv(:,:) * r1_hv _n(:,:)344 zuu(:,:) = zuu(:,:) * r1_hu(:,:,Kmm) 345 zvv(:,:) = zvv(:,:) * r1_hv(:,:,Kmm) 346 346 347 347 ! Curl -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/ZDF/zdfosm.F90
r10955 r11053 489 489 490 490 zhbl_t(:,:) = hbl(:,:) + (zdhdt(:,:) - ww(ji,jj,ibld(ji,jj)))* rn_rdt ! certainly need wb here, so subtract it 491 zhbl_t(:,:) = MIN(zhbl_t(:,:), ht _n(:,:))491 zhbl_t(:,:) = MIN(zhbl_t(:,:), ht(:,:)) 492 492 zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_rdt + ww(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom 493 493 … … 525 525 526 526 zhbl_s = zhbl_s + MIN( - zwb_ent(ji,jj) / zdb * rn_rdt / FLOAT(ibld(ji,jj)-imld(ji,jj) ), e3w(ji,jj,jk,Kmm) ) 527 zhbl_s = MIN(zhbl_s, ht _n(ji,jj))527 zhbl_s = MIN(zhbl_s, ht(ji,jj)) 528 528 529 529 IF ( zhbl_s >= gdepw(ji,jj,jm+1,Kmm) ) jm = jm + 1 … … 546 546 & * zwstrl(ji,jj)**3 / hbli(ji,jj) ) / zdb * e3w(ji,jj,jk,Kmm) / zdhdt(ji,jj) ! ALMG to investigate whether need to include ww here 547 547 548 zhbl_s = MIN(zhbl_s, ht _n(ji,jj))548 zhbl_s = MIN(zhbl_s, ht(ji,jj)) 549 549 IF ( zhbl_s >= gdepw(ji,jj,jm,Kmm) ) jm = jm + 1 550 550 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/nemogcm.F90
r10998 r11053 137 137 ! !-----------------------! 138 138 #if defined key_agrif 139 Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs ! agrif_oce module copies of time level indices 139 140 CALL Agrif_Declare_Var_dom ! AGRIF: set the meshes for DOM 140 141 CALL Agrif_Declare_Var ! " " " " " DYN/TRA … … 169 170 ! 170 171 ! Recursive update from highest nested level to lowest: 172 Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nnn ! agrif_oce module copies of time level indices 171 173 CALL Agrif_step_child_adj(Agrif_Update_All) 172 174 ! … … 404 406 Nbb = 1; Nnn = 2; Naa = 3; Nrhs = Naa 405 407 406 ! Initialisation of temporary pointers (to be deleted after development finished)407 CALL update_pointers( Nbb, Nnn, Naa )408 408 ! !-------------------------------! 409 409 ! ! NEMO general initialization ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/oce.F90
r10919 r11053 17 17 PUBLIC oce_alloc ! routine called by nemo_init in nemogcm.F90 18 18 19 !! dynamics and tracer fields NOTE THAT "TARGET" ATTRIBUTE CAN BE REMOVED AFTER IMMERSE DEVELOPMENT FINISHED19 !! dynamics and tracer fields 20 20 !! -------------------------- 21 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) , TARGET:: uu , vv !: horizontal velocities [m/s]22 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) , TARGET:: ww !: vertical velocity [m/s]23 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) 24 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) , TARGET:: hdiv !: horizontal divergence [s-1]25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) ,TARGET:: ts !: 4D T-S fields [Celsius,psu]26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: rab_b, rab_n!: thermal/haline expansion coef. [Celsius-1,psu-1]27 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rn2b , rn2!: brunt-vaisala frequency**2 [s-2]21 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: uu , vv !: horizontal velocities [m/s] 22 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ww !: vertical velocity [m/s] 23 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wi !: vertical vel. (adaptive-implicit) [m/s] 24 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdiv !: horizontal divergence [s-1] 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: ts !: 4D T-S fields [Celsius,psu] 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: rab_b, rab_n !: thermal/haline expansion coef. [Celsius-1,psu-1] 27 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rn2b , rn2 !: brunt-vaisala frequency**2 [s-2] 28 28 ! 29 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: rhd !: in situ density anomalie rhd=(rho-rau0)/rau0 [no units] … … 33 33 !! free surface ! before ! now ! after ! 34 34 !! ------------ ! fields ! fields ! fields ! 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) , TARGET:: ssh, uu_b, vv_b !: SSH [m] and barotropic velocities [m/s]35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ssh, uu_b, vv_b !: SSH [m] and barotropic velocities [m/s] 36 36 37 37 !! Arrays at barotropic time step: ! befbefore! before ! now ! after ! … … 64 64 65 65 !! Energy budget of the leads (open water embedded in sea ice) 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fraqsr_1lev !: fraction of solar net radiation absorbed in the first ocean level [-] 67 68 !! TEMPORARY POINTERS FOR DEVELOPMENT ONLY 69 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: ub , un , ua !: i-horizontal velocity [m/s] 70 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: vb , vn , va !: j-horizontal velocity [m/s] 71 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: wn !: k-vertical velocity [m/s] 72 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:) :: hdivn !: horizontal divergence [s-1] 73 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:,:) :: tsb , tsn , tsa !: 4D T-S fields [Celsius,psu] 74 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: ub_b , un_b , ua_b !: Barotropic velocities at u-point [m/s] 75 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: vb_b , vn_b , va_b !: Barotropic velocities at v-point [m/s] 76 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:) :: sshb , sshn , ssha !: sea surface height at t-point [m] 77 !! TEMPORARY POINTERS FOR DEVELOPMENT ONLY 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fraqsr_1lev !: fraction of solar net radiation absorbed in the first ocean level [-] 67 INTEGER, PUBLIC, DIMENSION(2) :: noce_array !: unused array but seems to be needed to prevent agrif from creating an empty module 78 68 79 69 !!---------------------------------------------------------------------- -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OCE/step.F90
r11050 r11053 44 44 45 45 PUBLIC stp ! called by nemogcm.F90 46 PUBLIC update_pointers ! called by nemo_init47 46 48 47 !!---------------------------------------------------------------------- … … 253 252 #endif 254 253 CALL tra_adv ( kstp, Nbb, Nnn, ts, Nrhs ) ! hor. + vert. advection ==> RHS 255 IF( ln_zdfosm ) CALL tra_osm ( kstp, Nnn, ts, Nrhs ) ! OSMOSIS non-local tracer fluxes ==> RHS254 IF( ln_zdfosm ) CALL tra_osm ( kstp, Nnn, ts, Nrhs ) ! OSMOSIS non-local tracer fluxes ==> RHS 256 255 IF( lrst_oce .AND. ln_zdfosm ) & 257 & CALL osm_rst ( kstp, Nnn, 'WRITE' )! write OSMOSIS outputs + ww (so must do here) to restarts256 & CALL osm_rst ( kstp, Nnn, 'WRITE' ) ! write OSMOSIS outputs + ww (so must do here) to restarts 258 257 CALL tra_ldf ( kstp, Nbb, Nnn, ts, Nrhs ) ! lateral mixing 259 258 260 259 !!gm : why CALL to dia_ptr has been moved here??? (use trends info?) 261 IF( ln_diaptr ) CALL dia_ptr( Nnn ) ! Poleward adv/ldf TRansports diagnostics260 IF( ln_diaptr ) CALL dia_ptr( Nnn ) ! Poleward adv/ldf TRansports diagnostics 262 261 !!gm 263 262 CALL tra_zdf ( kstp, Nbb, Nnn, Nrhs, ts, Naa ) ! vert. mixing & after tracer ==> after … … 282 281 !!jc2: dynnxt must be the latest call. e3t(:,:,:,Nbb) are indeed updated in that routine 283 282 CALL tra_nxt ( kstp, Nbb, Nnn, Nrhs, Naa ) ! finalize (bcs) tracer fields at next time step and swap 284 CALL dyn_atf ( kstp, Nbb, Nnn, Naa, uu, vv, e3t, e3u, e3v ) ! time swapping of "now" arrays283 CALL dyn_atf ( kstp, Nbb, Nnn, Naa, uu, vv, e3t, e3u, e3v ) ! time filtering of "now" arrays 285 284 CALL ssh_swp ( kstp, Nbb, Nnn, Naa ) ! swap of sea surface height 286 285 ! … … 291 290 Naa = Nrhs 292 291 ! 293 ! Update temporary pointers294 CALL update_pointers( Nbb, Nnn, Naa )295 296 292 IF(.NOT.ln_linssh) CALL dom_vvl_sf_swp( kstp, Nbb, Nnn, Naa ) ! swap of vertical scale factors 297 293 ! … … 310 306 ! AGRIF 311 307 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 312 CALL Agrif_Integrate_ChildGrids( stp ) ! allows to finish all the Child Grids before updating 313 314 IF( Agrif_NbStepint() == 0 ) CALL Agrif_update_all( ) ! Update all components 308 CALL Agrif_Integrate_ChildGrids( stp ) ! allows to finish all the Child Grids before updating 309 310 IF( Agrif_NbStepint() == 0 ) THEN 311 Kbb_a = Nbb; Kmm_a = Nnn; Krhs_a = Nrhs ! agrif_oce module copies of time level indices 312 CALL Agrif_update_all( ) ! Update all components 313 ENDIF 315 314 #endif 316 315 IF( ln_diaobs ) CALL dia_obs ( kstp, Nnn ) ! obs-minus-model (assimilation) diagnostics (call after dynamics update) … … 331 330 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 332 331 !!gm why lk_oasis and not lk_cpl ???? 333 IF( lk_oasis ) CALL sbc_cpl_snd( kstp, N nn )! coupled mode : field exchanges332 IF( lk_oasis ) CALL sbc_cpl_snd( kstp, Nbb, Nnn ) ! coupled mode : field exchanges 334 333 ! 335 334 #if defined key_iomput … … 344 343 ! 345 344 END SUBROUTINE stp 346 347 SUBROUTINE update_pointers( Kbb, Kmm, Kaa ) 348 !!---------------------------------------------------------------------- 349 !! *** ROUTINE update_pointers *** 350 !! 351 !! ** Purpose : Associate temporary pointer arrays. 352 !! For IMMERSE development phase only - to be deleted 353 !! 354 !! ** Method : 355 !!---------------------------------------------------------------------- 356 INTEGER, INTENT( in ) :: Kbb, Kmm, Kaa ! time level indices 357 358 ub => uu(:,:,:,Kbb); un => uu(:,:,:,Kmm); ua => uu(:,:,:,Kaa) 359 vb => vv(:,:,:,Kbb); vn => vv(:,:,:,Kmm); va => vv(:,:,:,Kaa) 360 wn => ww(:,:,:) 361 hdivn => hdiv(:,:,:) 362 363 sshb => ssh(:,:,Kbb); sshn => ssh(:,:,Kmm); ssha => ssh(:,:,Kaa) 364 ub_b => uu_b(:,:,Kbb); un_b => uu_b(:,:,Kmm); ua_b => uu_b(:,:,Kaa) 365 vb_b => vv_b(:,:,Kbb); vn_b => vv_b(:,:,Kmm); va_b => vv_b(:,:,Kaa) 366 367 tsb => ts(:,:,:,:,Kbb); tsn => ts(:,:,:,:,Kmm); tsa => ts(:,:,:,:,Kaa) 368 369 e3t_b => e3t(:,:,:,Kbb); e3t_n => e3t(:,:,:,Kmm); e3t_a => e3t(:,:,:,Kaa) 370 e3u_b => e3u(:,:,:,Kbb); e3u_n => e3u(:,:,:,Kmm); e3u_a => e3u(:,:,:,Kaa) 371 e3v_b => e3v(:,:,:,Kbb); e3v_n => e3v(:,:,:,Kmm); e3v_a => e3v(:,:,:,Kaa) 372 373 e3f_n => e3f(:,:,:) 374 375 e3w_b => e3w (:,:,:,Kbb); e3w_n => e3w (:,:,:,Kmm) 376 e3uw_b => e3uw(:,:,:,Kbb); e3uw_n => e3uw(:,:,:,Kmm) 377 e3vw_b => e3vw(:,:,:,Kbb); e3vw_n => e3vw(:,:,:,Kmm) 378 379 gdept_b => gdept(:,:,:,Kbb); gdept_n => gdept(:,:,:,Kmm) 380 gdepw_b => gdepw(:,:,:,Kbb); gdepw_n => gdepw(:,:,:,Kmm) 381 gde3w_n => gde3w(:,:,:) 382 383 ht_n => ht(:,:) 384 385 hu_b => hu(:,:,Kbb); hu_n => hu(:,:,Kmm); hu_a => hu(:,:,Kaa) 386 hv_b => hv(:,:,Kbb); hv_n => hv(:,:,Kmm); hv_a => hv(:,:,Kaa) 387 388 r1_hu_b => r1_hu(:,:,Kbb); r1_hu_n => r1_hu(:,:,Kmm); r1_hu_a => r1_hu(:,:,Kaa) 389 r1_hv_b => r1_hv(:,:,Kbb); r1_hv_n => r1_hv(:,:,Kmm); r1_hv_a => r1_hv(:,:,Kaa) 390 391 392 END SUBROUTINE update_pointers 393 345 ! 394 346 !!====================================================================== 395 347 END MODULE step -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OFF/dtadyn.F90
r10955 r11053 182 182 CALL prt_ctl(tab3d_1=uu(:,:,:,Kmm) , clinfo1=' uu(:,:,:,Kmm) - : ', mask1=umask, kdim=jpk ) 183 183 CALL prt_ctl(tab3d_1=vv(:,:,:,Kmm) , clinfo1=' vv(:,:,:,Kmm) - : ', mask1=vmask, kdim=jpk ) 184 CALL prt_ctl(tab3d_1=w n, clinfo1=' ww - : ', mask1=tmask, kdim=jpk )184 CALL prt_ctl(tab3d_1=ww , clinfo1=' ww - : ', mask1=tmask, kdim=jpk ) 185 185 CALL prt_ctl(tab3d_1=avt , clinfo1=' kz - : ', mask1=tmask, kdim=jpk ) 186 186 CALL prt_ctl(tab3d_1=uslp , clinfo1=' slp - u : ', tab3d_2=vslp, clinfo2=' v : ', kdim=jpk) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/OFF/nemogcm.F90
r10998 r11053 59 59 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 60 60 USE lbcnfd , ONLY : isendto, nsndto, nfsloop, nfeloop ! Setup of north fold exchanges 61 USE step, ONLY : update_pointers62 61 63 62 IMPLICIT NONE … … 296 295 Nbb = 1; Nnn = 2; Naa = 3; Nrhs = Naa 297 296 298 ! Initialisation of temporary pointers (to be deleted after development finished)299 CALL update_pointers( Nbb, Nnn, Naa )300 297 301 298 ! !-------------------------------! … … 536 533 vv (:,:,:,Kmm) = 0._wp ; vv(:,:,:,Kaa) = 0._wp ! 537 534 ww (:,:,:) = 0._wp ! ! 538 hdiv n(:,:,:) = 0._wp ! !535 hdiv (:,:,:) = 0._wp ! ! 539 536 ts (:,:,:,:,Kmm) = 0._wp ! ! 540 537 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/SAS/diawri.F90
r10425 r11053 78 78 79 79 80 SUBROUTINE dia_wri( kt )80 SUBROUTINE dia_wri( kt, Kmm ) 81 81 !!--------------------------------------------------------------------- 82 82 !! *** ROUTINE dia_wri *** … … 90 90 !! 91 91 INTEGER, INTENT( in ) :: kt ! ocean time-step index 92 INTEGER, INTENT( in ) :: Kmm ! ocean time levelindex 92 93 !!---------------------------------------------------------------------- 93 94 ! 94 95 ! Output the initial state and forcings 95 96 IF( ninist == 1 ) THEN 96 CALL dia_wri_state( 'output.init' )97 CALL dia_wri_state( 'output.init', Kmm ) 97 98 ninist = 0 98 99 ENDIF … … 330 331 #endif 331 332 332 SUBROUTINE dia_wri_state( cdfile_name )333 SUBROUTINE dia_wri_state( cdfile_name, Kmm ) 333 334 !!--------------------------------------------------------------------- 334 335 !! *** ROUTINE dia_wri_state *** … … 344 345 !!---------------------------------------------------------------------- 345 346 CHARACTER (len=* ), INTENT( in ) :: cdfile_name ! name of the file created 347 INTEGER , INTENT( in ) :: Kmm ! ocean time levelindex 346 348 !! 347 349 INTEGER :: inum … … 359 361 #endif 360 362 361 CALL iom_rstput( 0, 0, inum, 'votemper', ts n(:,:,:,jp_tem) ) ! now temperature362 CALL iom_rstput( 0, 0, inum, 'vosaline', ts n(:,:,:,jp_sal) ) ! now salinity363 CALL iom_rstput( 0, 0, inum, 'sossheig', ssh n) ! sea surface height364 CALL iom_rstput( 0, 0, inum, 'vozocrtx', u n) ! now i-velocity365 CALL iom_rstput( 0, 0, inum, 'vomecrty', v n) ! now j-velocity366 CALL iom_rstput( 0, 0, inum, 'vovecrtz', w n) ! now k-velocity367 CALL iom_rstput( 0, 0, inum, 'sowaflup', emp - rnf ) ! freshwater budget368 CALL iom_rstput( 0, 0, inum, 'sohefldo', qsr + qns ) ! total heat flux369 CALL iom_rstput( 0, 0, inum, 'soshfldo', qsr ) ! solar heat flux370 CALL iom_rstput( 0, 0, inum, 'soicecov', fr_i ) ! ice fraction371 CALL iom_rstput( 0, 0, inum, 'sozotaux', utau ) ! i-wind stress372 CALL iom_rstput( 0, 0, inum, 'sometauy', vtau ) ! j-wind stress363 CALL iom_rstput( 0, 0, inum, 'votemper', ts (:,:,:,jp_tem,Kmm) ) ! now temperature 364 CALL iom_rstput( 0, 0, inum, 'vosaline', ts (:,:,:,jp_sal,Kmm) ) ! now salinity 365 CALL iom_rstput( 0, 0, inum, 'sossheig', ssh(:,:, Kmm) ) ! sea surface height 366 CALL iom_rstput( 0, 0, inum, 'vozocrtx', uu (:,:,:, Kmm) ) ! now i-velocity 367 CALL iom_rstput( 0, 0, inum, 'vomecrty', vv (:,:,:, Kmm) ) ! now j-velocity 368 CALL iom_rstput( 0, 0, inum, 'vovecrtz', ww ) ! now k-velocity 369 CALL iom_rstput( 0, 0, inum, 'sowaflup', emp - rnf ) ! freshwater budget 370 CALL iom_rstput( 0, 0, inum, 'sohefldo', qsr + qns ) ! total heat flux 371 CALL iom_rstput( 0, 0, inum, 'soshfldo', qsr ) ! solar heat flux 372 CALL iom_rstput( 0, 0, inum, 'soicecov', fr_i ) ! ice fraction 373 CALL iom_rstput( 0, 0, inum, 'sozotaux', utau ) ! i-wind stress 374 CALL iom_rstput( 0, 0, inum, 'sometauy', vtau ) ! j-wind stress 373 375 374 376 #if defined key_si3 -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/SAS/nemogcm.F90
r10998 r11053 355 355 Nbb = 1; Nnn = 2; Naa = 3; Nrhs = Naa 356 356 357 ! Initialisation of temporary pointers (to be deleted after development finished)358 CALL update_pointers( Nbb, Nnn, Naa )359 357 ! !-------------------------------! 360 358 ! ! NEMO general initialization ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/SAS/sbcssm.F90
r10922 r11053 121 121 IF( .NOT. ln_linssh ) e3t_m(:,:) = e3t_0(:,:,1) !clem: necessary at least for sas2D 122 122 frq_m(:,:) = 1._wp ! - - 123 ssh n (:,:) = 0._wp ! - -123 ssh (:,:,Kmm) = 0._wp ! - - 124 124 ENDIF 125 125 126 126 IF ( nn_ice == 1 ) THEN 127 ts n(:,:,1,jp_tem) = sst_m(:,:)128 ts n(:,:,1,jp_sal) = sss_m(:,:)129 ts b(:,:,1,jp_tem) = sst_m(:,:)130 ts b(:,:,1,jp_sal) = sss_m(:,:)131 ENDIF 132 u b (:,:,1) = ssu_m(:,:)133 v b (:,:,1) = ssv_m(:,:)127 ts(:,:,1,jp_tem,Kmm) = sst_m(:,:) 128 ts(:,:,1,jp_sal,Kmm) = sss_m(:,:) 129 ts(:,:,1,jp_tem,Kbb) = sst_m(:,:) 130 ts(:,:,1,jp_sal,Kbb) = sss_m(:,:) 131 ENDIF 132 uu (:,:,1,Kbb) = ssu_m(:,:) 133 vv (:,:,1,Kbb) = ssv_m(:,:) 134 134 135 135 IF(ln_ctl) THEN ! print control -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/SAS/step.F90
r10975 r11053 47 47 48 48 PUBLIC stp ! called by nemogcm.F90 49 PUBLIC update_pointers ! called by nemo_init50 49 51 50 !!---------------------------------------------------------------------- … … 105 104 CALL sbc ( kstp, Nbb, Nnn ) ! Sea Boundary Condition (including sea-ice) 106 105 107 CALL dia_wri( kstp )! ocean model: outputs106 CALL dia_wri( kstp, Nnn ) ! ocean model: outputs 108 107 109 108 #if defined key_agrif … … 126 125 IF( indic < 0 ) THEN 127 126 CALL ctl_stop( 'step: indic < 0' ) 128 CALL dia_wri_state( 'output.abort' )127 CALL dia_wri_state( 'output.abort', Nnn ) 129 128 ENDIF 130 IF( kstp == nit000 ) CALL iom_close( numror ) ! close input ocean restart file129 IF( kstp == nit000 ) CALL iom_close( numror ) ! close input ocean restart file 131 130 132 131 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 133 132 ! Coupled mode 134 133 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 135 IF( lk_oasis ) CALL sbc_cpl_snd( kstp, N nn ) ! coupled mode : field exchanges if OASIS-coupled ice134 IF( lk_oasis ) CALL sbc_cpl_snd( kstp, Nbb, Nnn ) ! coupled mode : field exchanges if OASIS-coupled ice 136 135 137 136 #if defined key_iomput … … 153 152 END SUBROUTINE stp 154 153 155 SUBROUTINE update_pointers( Kbb, Kmm, Kaa )156 !!----------------------------------------------------------------------157 !! *** ROUTINE update_pointers ***158 !!159 !! ** Purpose : Associate temporary pointer arrays.160 !! For IMMERSE development phase only - to be deleted161 !!162 !! ** Method :163 !!----------------------------------------------------------------------164 INTEGER, INTENT( in ) :: Kbb, Kmm, Kaa ! time level indices165 166 ub => uu(:,:,:,Kbb); un => uu(:,:,:,Kmm); ua => uu(:,:,:,Kaa)167 vb => vv(:,:,:,Kbb); vn => vv(:,:,:,Kmm); va => vv(:,:,:,Kaa)168 wn => ww(:,:,:)169 hdivn => hdiv(:,:,:)170 171 sshb => ssh(:,:,Kbb); sshn => ssh(:,:,Kmm); ssha => ssh(:,:,Kaa)172 ub_b => uu_b(:,:,Kbb); un_b => uu_b(:,:,Kmm); ua_b => uu_b(:,:,Kaa)173 vb_b => vv_b(:,:,Kbb); vn_b => vv_b(:,:,Kmm); va_b => vv_b(:,:,Kaa)174 175 tsb => ts(:,:,:,:,Kbb); tsn => ts(:,:,:,:,Kmm); tsa => ts(:,:,:,:,Kaa)176 177 e3t_b => e3t(:,:,:,Kbb); e3t_n => e3t(:,:,:,Kmm); e3t_a => e3t(:,:,:,Kaa)178 e3u_b => e3u(:,:,:,Kbb); e3u_n => e3u(:,:,:,Kmm); e3u_a => e3u(:,:,:,Kaa)179 e3v_b => e3v(:,:,:,Kbb); e3v_n => e3v(:,:,:,Kmm); e3v_a => e3v(:,:,:,Kaa)180 181 e3f_n => e3f(:,:,:)182 183 e3w_b => e3w (:,:,:,Kbb); e3w_n => e3w (:,:,:,Kmm)184 e3uw_b => e3uw(:,:,:,Kbb); e3uw_n => e3uw(:,:,:,Kmm)185 e3vw_b => e3vw(:,:,:,Kbb); e3vw_n => e3vw(:,:,:,Kmm)186 187 gdept_b => gdept(:,:,:,Kbb); gdept_n => gdept(:,:,:,Kmm)188 gdepw_b => gdepw(:,:,:,Kbb); gdepw_n => gdepw(:,:,:,Kmm)189 gde3w_n => gde3w(:,:,:)190 191 END SUBROUTINE update_pointers192 193 154 !!====================================================================== 194 155 END MODULE step -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/TOP/oce_trc.F90
r10963 r11053 34 34 35 35 !* ocean fields: here now and after fields * 36 USE oce , ONLY : tsn => tsn !: 4D array contaning ( tn, sn ) !TEMPORARY37 USE oce , ONLY : tsb => tsb !: 4D array contaning ( tb, sb ) !TEMPORARY38 USE oce , ONLY : tsa => tsa !: 4D array contaning ( ta, sa ) !TEMPORARY39 USE oce , ONLY : sshn => sshn !: sea surface height at t-point [m] !TEMPORARY40 USE oce , ONLY : sshb => sshb !: sea surface height at t-point [m] !TEMPORARY41 USE oce , ONLY : ssha => ssha !: sea surface height at t-point [m] !TEMPORARY42 USE oce , ONLY : un => un !: 4D array !TEMPORARY43 USE oce , ONLY : vn => vn !: 4D array !TEMPORARY44 USE oce , ONLY : wn => wn !: 4D array !TEMPORARY45 36 USE oce , ONLY : uu => uu !: i-horizontal velocity (m s-1) 46 37 USE oce , ONLY : vv => vv !: j-horizontal velocity (m s-1) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/TOP/trc.F90
r10880 r11053 33 33 REAL(wp), PUBLIC :: areatot !: total volume 34 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: cvol !: volume correction -degrad option- 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) , TARGET :: tr!: tracer concentration35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: tr !: tracer concentration 36 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc_b !: Before sbc fluxes for tracers 37 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: sbc_trc !: Now sbc fluxes for tracers … … 40 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,: ) :: trc_o !: prescribed tracer concentration in ocean for SBC 41 41 INTEGER , PUBLIC :: nn_ice_tr !: handling of sea ice tracers 42 43 !! TEMPORARY POINTERS - TO BE DELETED AFTER IMMERSE DEVELOPMENT COMPLETE44 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:,:) :: trn !: tracer concentration for now time step45 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:,:) :: tra !: tracer concentration for next time step46 REAL(wp), PUBLIC, POINTER, SAVE, DIMENSION(:,:,:,:) :: trb !: tracer concentration for before time step47 !! TEMPORARY POINTERS - TO BE DELETED AFTER IMMERSE DEVELOPMENT COMPLETE48 42 49 43 !! interpolated gradient -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/TOP/trcini.F90
r10975 r11053 52 52 !! or read data or analytical formulation 53 53 !!--------------------------------------------------------------------- 54 !! Time level indices only required for call to update_pointers_trc55 !! To be removed after IMMERSE development finished.56 54 INTEGER, INTENT( in ) :: Kbb, Kmm, Kaa ! time level indices 57 55 ! … … 66 64 CALL top_alloc() ! allocate TOP arrays 67 65 68 ! Initialisation of temporary pointers (to be deleted after development finished)69 CALL update_pointers_trc( Kbb, Kmm, Kaa )70 66 ! 71 67 IF(.NOT.ln_trcdta ) ln_trc_ini(:) = .FALSE. -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps_rewrite_time_filterswap/src/TOP/trcstp.F90
r10975 r11053 30 30 31 31 PUBLIC trc_stp ! called by step 32 PUBLIC update_pointers_trc ! called in initialisation33 32 34 33 LOGICAL :: llnew ! ??? … … 126 125 ! 127 126 END SUBROUTINE trc_stp 128 129 SUBROUTINE update_pointers_trc( Kbb, Kmm, Kaa )130 !!----------------------------------------------------------------------131 !! *** ROUTINE update_pointers_trc ***132 !!133 !! ** Purpose : Associate temporary pointer arrays.134 !! For IMMERSE development phase only - to be deleted135 !!136 !! ** Method :137 !!----------------------------------------------------------------------138 INTEGER, INTENT( in ) :: Kbb, Kmm, Kaa ! time level indices139 140 trb => tr(:,:,:,:,Kbb); trn => tr(:,:,:,:,Kmm); tra => tr(:,:,:,:,Kaa)141 142 END SUBROUTINE update_pointers_trc143 127 144 128 SUBROUTINE trc_mean_qsr( kt )
Note: See TracChangeset
for help on using the changeset viewer.