Changeset 13769
- Timestamp:
- 2020-11-10T17:04:11+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/dev_r13327_KERNEL-06_2_techene_e3/src
- Files:
-
- 2 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13327_KERNEL-06_2_techene_e3/src/OCE/LDF/ldfdyn.F90
r13513 r13769 171 171 ! 172 172 SELECT CASE( nn_dynldf_typ ) ! div-rot or symmetric 173 CASE( np_typ_rot ) ; WRITE(numout,*) ' ==>>> use div-rot operator '174 CASE( np_typ_sym ) ; WRITE(numout,*) ' ==>>> use symmetric operator '173 CASE( np_typ_rot ) ; IF(lwp) WRITE(numout,*) ' ==>>> use div-rot operator ' 174 CASE( np_typ_sym ) ; IF(lwp) WRITE(numout,*) ' ==>>> use symmetric operator ' 175 175 CASE DEFAULT ! error 176 176 CALL ctl_stop('ldf_dyn_init: wrong value for nn_dynldf_typ (0 or 1)' ) -
NEMO/branches/2020/dev_r13327_KERNEL-06_2_techene_e3/src/SWE/nemogcm.F90
r13708 r13769 24 24 USE trd_oce , ONLY : l_trddyn ! dynamical trend logical 25 25 #if defined key_RK3 26 USE stp RK3 ! NEMO time-stepping (stp_RK3 routine)26 USE stprk3 ! NEMO time-stepping (stp_RK3 routine) 27 27 #else 28 28 USE stpmlf ! NEMO time-stepping (stp_MLF routine) -
NEMO/branches/2020/dev_r13327_KERNEL-06_2_techene_e3/src/SWE/stprk3.F90
r13694 r13769 1 MODULE stp RK31 MODULE stprk3 2 2 !!====================================================================== 3 !! *** MODULE stp RK3 ***3 !! *** MODULE stprk3 *** 4 4 !! Time-stepping : manager of the shallow water equation time stepping 5 5 !! 3rd order Runge-Kutta scheme … … 69 69 INTEGER :: indic ! error indicator if < 0 70 70 REAL(wp):: z1_2rho0, z5_6, z3_4 ! local scalars 71 REAL(wp):: zue3a, zue3b, zua ! local scalars72 REAL(wp):: zve3a, zve3b, zva ! - -71 REAL(wp):: zue3a, zue3b, zua, zrhs_u ! local scalars 72 REAL(wp):: zve3a, zve3b, zva, zrhs_v ! - - 73 73 !! --------------------------------------------------------------------- 74 74 ! … … 129 129 CALL dyn_ldf( kstp, Nbb, Nbb, uu, vv, Nrhs ) ! lateral mixing 130 130 #endif 131 ! 132 DO_3D( 0,0, 0,0, 1,jpkm1 ) 131 !!st ! 132 !!st DO_3D( 0,0, 0,0, 1,jpkm1 ) 133 !!st ! ! horizontal pressure gradient 134 !!st uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - grav * ( ssh(ji+1,jj,Nbb) - ssh(ji,jj,Nbb) ) * r1_e1u(ji,jj) 135 !!st vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - grav * ( ssh(ji,jj+1,Nbb) - ssh(ji,jj,Nbb) ) * r1_e2v(ji,jj) 136 !!st END_3D 137 !!st ! 138 !!st #if defined key_RK3all 139 !!st ! ! wind stress and layer friction 140 !!st z5_6 = 5._wp/6._wp 141 !!st DO_3D( 0, 0, 0, 0,1,jpkm1) 142 !!st uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + r1_rho0 * ( z5_6*utau_b(ji,jj) + (1._wp - z5_6)*utau(ji,jj) ) / e3u(ji,jj,jk,Nbb) & 143 !!st & - rn_rfr * uu(ji,jj,jk,Nbb) 144 !!st vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + r1_rho0 * ( z5_6*vtau_b(ji,jj) + (1._wp - z5_6)*vtau(ji,jj) ) / e3v(ji,jj,jk,Nbb) & 145 !!st & - rn_rfr * vv(ji,jj,jk,Nbb) 146 !!st END_3D 147 !!st #endif 148 !!st why not ? 149 z5_6 = 5._wp/6._wp 150 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 133 151 ! ! horizontal pressure gradient 134 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - grav * ( ssh(ji+1,jj,Nbb) - ssh(ji,jj,Nbb) ) * r1_e1u(ji,jj) 135 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - grav * ( ssh(ji,jj+1,Nbb) - ssh(ji,jj,Nbb) ) * r1_e2v(ji,jj) 152 zrhs_u = - grav * ( ssh(ji+1,jj,Nbb) - ssh(ji,jj,Nbb) ) * r1_e1u(ji,jj) 153 zrhs_v = - grav * ( ssh(ji,jj+1,Nbb) - ssh(ji,jj,Nbb) ) * r1_e2v(ji,jj) 154 #if defined key_RK3all 155 ! ! wind stress and layer friction 156 zrhs_u = zrhs_u + r1_rho0 * ( z5_6*utau_b(ji,jj) + (1._wp - z5_6)*utau(ji,jj) ) / e3u(ji,jj,jk,Nbb) & 157 & - rn_rfr * uu(ji,jj,jk,Nbb) 158 zrhs_v = zrhs_v + r1_rho0 * ( z5_6*vtau_b(ji,jj) + (1._wp - z5_6)*vtau(ji,jj) ) / e3v(ji,jj,jk,Nbb) & 159 & - rn_rfr * vv(ji,jj,jk,Nbb) 160 #endif 161 ! ! ==> RHS 162 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + zrhs_u 163 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + zrhs_v 136 164 END_3D 137 ! 138 #if defined key_RK3all 139 ! ! wind stress and layer friction 140 z5_6 = 5._wp/6._wp 141 DO_3D( 0, 0, 0, 0,1,jpkm1) 142 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + r1_rho0 * ( z5_6*utau_b(ji,jj) + (1._wp - z5_6)*utau(ji,jj) ) / e3u(ji,jj,jk,Nbb) & 143 & - rn_rfr * uu(ji,jj,jk,Nbb) 144 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + r1_rho0 * ( z5_6*vtau_b(ji,jj) + (1._wp - z5_6)*vtau(ji,jj) ) / e3v(ji,jj,jk,Nbb) & 145 & - rn_rfr * vv(ji,jj,jk,Nbb) 146 END_3D 147 #endif 148 !!!!st why not ? 149 !! z5_6 = 5._wp/6._wp 150 !! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 151 !! ! ! horizontal pressure gradient 152 !! zrhs_u = - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 153 !! zrhs_v = - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 154 !! ! ! wind stress and layer friction 155 !!#if defined key_RK3all 156 !! zrhs_u = zrhs_u + r1_rho0 * ( z5_6*utau_b(ji,jj) + (1._wp - z5_6)*utau(ji,jj) ) / e3u(ji,jj,jk,Nbb) & 157 !! & - rn_rfr * uu(ji,jj,jk,Nbb) 158 !! zrhs_v = zrhs_v + r1_rho0 * ( z5_6*vtau_b(ji,jj) + (1._wp - z5_6)*vtau(ji,jj) ) / e3v(ji,jj,jk,Nbb) & 159 !! & - rn_rfr * vv(ji,jj,jk,Nbb) 160 !! ! ! ==> RHS 161 !!#endif 162 163 !! uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + zrhs_u 164 !! vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + zrhs_v 165 !! END_3D 166 !!!!st end 165 !!st end 167 166 ! 168 167 ! !== Time stepping of ssh Eq. ==! (and update r3_Naa) 169 168 ! 170 169 CALL ssh_nxt( kstp, Nbb, Nbb, ssh, Naa ) ! after ssh 171 ! ! after ssh/h_0 ratio explicit170 ! ! after ssh/h_0 ratio 172 171 CALL dom_qco_r3c( ssh(:,:,Naa), r3t(:,:,Naa), r3u(:,:,Naa), r3v(:,:,Naa), r3f(:,:) ) 173 172 ! … … 175 174 ! 176 175 IF( ln_dynadv_vec ) THEN ! vector invariant form : applied on velocity 177 DO_3D( 0, 0, 0, 0, 1,jpkm1)176 DO_3D( 0, 0, 0, 0, 1,jpkm1) 178 177 uu(ji,jj,jk,Naa) = uu(ji,jj,jk,Nbb) + rDt * uu(ji,jj,jk,Nrhs) * umask(ji,jj,jk) 179 178 vv(ji,jj,jk,Naa) = vv(ji,jj,jk,Nbb) + rDt * vv(ji,jj,jk,Nrhs) * vmask(ji,jj,jk) 180 179 END_3D 181 180 ELSE 182 DO_3D( 0, 0, 0, 0, 1,jpkm1) ! flux form : applied on thickness weighted velocity181 DO_3D( 0, 0, 0, 0, 1,jpkm1) ! flux form : applied on thickness weighted velocity 183 182 zue3b = e3u(ji,jj,jk,Nbb) * uu(ji,jj,jk,Nbb) 184 183 zve3b = e3v(ji,jj,jk,Nbb) * vv(ji,jj,jk,Nbb) … … 191 190 ENDIF 192 191 ! 192 CALL lbc_lnk_multi( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. ) 193 ! 193 194 ! !== Swap time levels ==! 194 !195 195 Nrhs= Nnn 196 196 Nnn = Naa … … 213 213 #endif 214 214 ! 215 z3_4 = 3._wp/4._wp 215 216 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 216 217 ! ! horizontal pressure gradient 217 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 218 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 218 zrhs_u = - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 219 zrhs_v = - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 220 #if defined key_RK3all 221 ! ! wind stress and layer friction 222 zrhs_u = zrhs_u + r1_rho0 * ( z3_4*utau_b(ji,jj) + (1._wp - z3_4)*utau(ji,jj) ) / e3u(ji,jj,jk,Nnn) & 223 & - rn_rfr * uu(ji,jj,jk,Nbb) 224 zrhs_v = zrhs_v + r1_rho0 * ( z3_4*vtau_b(ji,jj) + (1._wp - z3_4)*vtau(ji,jj) ) / e3v(ji,jj,jk,Nnn) & 225 & - rn_rfr * vv(ji,jj,jk,Nbb) 226 #endif 227 ! ! ==> RHS 228 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + zrhs_u 229 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + zrhs_v 219 230 END_3D 220 ! 221 #if defined key_RK3all 222 ! ! wind stress and layer friction 223 z3_4 = 3._wp/4._wp 224 DO_3D( 0, 0, 0, 0,1,jpkm1) 225 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + r1_rho0 * ( z3_4*utau_b(ji,jj) + (1._wp - z3_4)*utau(ji,jj) ) / e3u(ji,jj,jk,Nbb) & 226 & - rn_rfr * uu(ji,jj,jk,Nbb) 227 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + r1_rho0 * ( z3_4*vtau_b(ji,jj) + (1._wp - z3_4)*vtau(ji,jj) ) / e3v(ji,jj,jk,Nbb) & 228 & - rn_rfr * vv(ji,jj,jk,Nbb) 229 END_3D 230 #endif 231 !!st ! 232 !!st DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 233 !!st ! ! horizontal pressure gradient 234 !!st uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 235 !!st vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 236 !!st END_3D 237 !!st ! 238 !!st #if defined key_RK3all 239 !!st ! ! wind stress and layer friction 240 !!st z3_4 = 3._wp/4._wp 241 !!st DO_3D( 0, 0, 0, 0,1,jpkm1) 242 !!st uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + r1_rho0 * ( z3_4*utau_b(ji,jj) + (1._wp - z3_4)*utau(ji,jj) ) / e3u(ji,jj,jk,Nbb) & 243 !!st & - rn_rfr * uu(ji,jj,jk,Nbb) 244 !!st vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + r1_rho0 * ( z3_4*vtau_b(ji,jj) + (1._wp - z3_4)*vtau(ji,jj) ) / e3v(ji,jj,jk,Nbb) & 245 !!st & - rn_rfr * vv(ji,jj,jk,Nbb) 246 !!st END_3D 247 !!st #endif 231 248 ! 232 249 ! !== Time stepping of ssh Eq. ==! (and update r3_Naa) 233 250 ! 234 251 CALL ssh_nxt( kstp, Nbb, Nnn, ssh, Naa ) ! after ssh 235 ! ! after ssh/h_0 ratio explicit252 ! ! after ssh/h_0 ratio 236 253 CALL dom_qco_r3c( ssh(:,:,Naa), r3t(:,:,Naa), r3u(:,:,Naa), r3v(:,:,Naa), r3f(:,:) ) 237 254 ! … … 239 256 ! 240 257 IF( ln_dynadv_vec ) THEN ! vector invariant form : applied on velocity 241 DO_3D( 0, 0, 0, 0, 1,jpkm1)258 DO_3D( 0, 0, 0, 0, 1,jpkm1) 242 259 uu(ji,jj,jk,Naa) = uu(ji,jj,jk,Nbb) + rDt * uu(ji,jj,jk,Nrhs) * umask(ji,jj,jk) 243 260 vv(ji,jj,jk,Naa) = vv(ji,jj,jk,Nbb) + rDt * vv(ji,jj,jk,Nrhs) * vmask(ji,jj,jk) 244 261 END_3D 245 262 ELSE 246 DO_3D( 0, 0, 0, 0, 1,jpkm1) ! flux form : applied on thickness weighted velocity263 DO_3D( 0, 0, 0, 0, 1,jpkm1) ! flux form : applied on thickness weighted velocity 247 264 zue3b = e3u(ji,jj,jk,Nbb) * uu(ji,jj,jk,Nbb) 248 265 zve3b = e3v(ji,jj,jk,Nbb) * vv(ji,jj,jk,Nbb) … … 255 272 ENDIF 256 273 ! 274 CALL lbc_lnk_multi( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. ) 275 ! 257 276 ! !== Swap time levels ==! 258 !259 277 Nrhs= Nnn 260 278 Nnn = Naa … … 276 294 CALL dyn_ldf( kstp, Nbb, Nnn, uu, vv, Nrhs ) ! lateral mixing 277 295 278 DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 296 z1_2rho0 = 0.5_wp * r1_rho0 297 DO_3D( 0, 0, 0, 0, 1,jpkm1 ) 279 298 ! ! horizontal pressure gradient 280 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 281 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 299 zrhs_u = - grav * ( ssh(ji+1,jj,Nnn) - ssh(ji,jj,Nnn) ) * r1_e1u(ji,jj) 300 zrhs_v = - grav * ( ssh(ji,jj+1,Nnn) - ssh(ji,jj,Nnn) ) * r1_e2v(ji,jj) 301 ! ! wind stress and layer friction 302 zrhs_u = zrhs_u + z1_2rho0 * ( utau_b(ji,jj) + utau(ji,jj) ) / e3u(ji,jj,jk,Nnn) & 303 & - rn_rfr * uu(ji,jj,jk,Nbb) 304 zrhs_v = zrhs_v + z1_2rho0 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / e3v(ji,jj,jk,Nnn) & 305 & - rn_rfr * vv(ji,jj,jk,Nbb) 306 ! ! ==> RHS 307 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + zrhs_u 308 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + zrhs_v 282 309 END_3D 283 ! ! wind stress and layer friction284 z1_2rho0 = 0.5_wp * r1_rho0285 DO_3D( 0, 0, 0, 0,1,jpkm1)286 uu(ji,jj,jk,Nrhs) = uu(ji,jj,jk,Nrhs) + z1_2rho0 * ( utau_b(ji,jj) + utau(ji,jj) ) / e3u(ji,jj,jk,Nnn) &287 & - rn_rfr * uu(ji,jj,jk,Nbb)288 vv(ji,jj,jk,Nrhs) = vv(ji,jj,jk,Nrhs) + z1_2rho0 * ( vtau_b(ji,jj) + vtau(ji,jj) ) / e3v(ji,jj,jk,Nnn) &289 & - rn_rfr * vv(ji,jj,jk,Nbb)290 END_3D291 310 ! 292 311 ! !== Time stepping of ssh Eq. ==! (and update r3_Naa) 293 312 ! 294 313 CALL ssh_nxt( kstp, Nbb, Nnn, ssh, Naa ) ! after ssh 295 ! ! after ssh/h_0 ratio explicit314 ! ! after ssh/h_0 ratio 296 315 CALL dom_qco_r3c( ssh(:,:,Naa), r3t(:,:,Naa), r3u(:,:,Naa), r3v(:,:,Naa), r3f(:,:) ) 297 316 ! … … 299 318 ! 300 319 IF( ln_dynadv_vec ) THEN ! vector invariant form : applied on velocity 301 DO_3D( 1, 1, 1, 1,1,jpkm1) 302 zua = uu(ji,jj,jk,Nbb) + rDt * uu(ji,jj,jk,Nrhs) * umask(ji,jj,jk) 303 zva = vv(ji,jj,jk,Nbb) + rDt * vv(ji,jj,jk,Nrhs) * vmask(ji,jj,jk) 304 ! ! Asselin time filter on u,v (Nnn) 305 uu(ji,jj,jk,Nnn) = uu(ji,jj,jk,Nnn) + rn_atfp * (uu(ji,jj,jk,Nbb) - 2._wp * uu(ji,jj,jk,Nnn) + zua) 306 vv(ji,jj,jk,Nnn) = vv(ji,jj,jk,Nnn) + rn_atfp * (vv(ji,jj,jk,Nbb) - 2._wp * vv(ji,jj,jk,Nnn) + zva) 307 ! 308 uu(ji,jj,jk,Naa) = zua 309 vv(ji,jj,jk,Naa) = zva 320 DO_3D( 0, 0, 0, 0, 1,jpkm1) 321 uu(ji,jj,jk,Naa) = uu(ji,jj,jk,Nbb) + rDt * uu(ji,jj,jk,Nrhs) * umask(ji,jj,jk) 322 vv(ji,jj,jk,Naa) = vv(ji,jj,jk,Nbb) + rDt * vv(ji,jj,jk,Nrhs) * vmask(ji,jj,jk) 310 323 END_3D 311 324 ! 312 325 ELSE ! flux form : applied on thickness weighted velocity 313 DO_3D( 1, 1, 1, 1,1,jpkm1)326 DO_3D( 0, 0, 0, 0, 1,jpkm1) 314 327 zue3b = e3u(ji,jj,jk,Nbb) * uu(ji,jj,jk,Nbb) 315 328 zve3b = e3v(ji,jj,jk,Nbb) * vv(ji,jj,jk,Nbb) … … 321 334 END_3D 322 335 ENDIF 323 324 CALL lbc_lnk_multi( 'stp_RK3', uu(:,:,:,Nnn), 'U', -1., vv(:,:,:,Nnn), 'V', -1., & !* local domain boundaries 325 & uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. ) 336 ! 337 CALL lbc_lnk_multi( 'stp_RK3', uu(:,:,:,Naa), 'U', -1., vv(:,:,:,Naa), 'V', -1. ) 326 338 ! 327 339 ! !== Swap time levels ==! … … 363 375 364 376 !!====================================================================== 365 END MODULE stp RK3377 END MODULE stprk3
Note: See TracChangeset
for help on using the changeset viewer.