- Timestamp:
- 2015-11-13T08:01:08+01:00 (9 years ago)
- Location:
- branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_cen2.F90
r5866 r5883 10 10 11 11 !!---------------------------------------------------------------------- 12 !! dyn_adv_cen2 : flux form momentum advection (ln_dynadv_cen2=T) 13 !! trends using a 2nd order centred scheme 12 !! dyn_adv_cen2 : flux form momentum advection (ln_dynadv_cen2=T) using a 2nd order centred scheme 14 13 !!---------------------------------------------------------------------- 15 14 USE oce ! ocean dynamics and tracers … … 67 66 ENDIF 68 67 ! 69 IF( l_trddyn ) THEN ! Save ua and vatrends68 IF( l_trddyn ) THEN ! trends: store the input trends 70 69 zfu_uw(:,:,:) = ua(:,:,:) 71 70 zfv_vw(:,:,:) = va(:,:,:) 72 71 ENDIF 73 74 ! ! ====================== ! 75 ! ! Horizontal advection ! 76 DO jk = 1, jpkm1 ! ====================== ! 77 ! ! horizontal volume fluxes 72 ! 73 ! !== Horizontal advection ==! 74 ! 75 DO jk = 1, jpkm1 ! horizontal transport 78 76 zfu(:,:,jk) = 0.25 * e2u(:,:) * e3u_n(:,:,jk) * un(:,:,jk) 79 77 zfv(:,:,jk) = 0.25 * e1v(:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 80 ! 81 DO jj = 1, jpjm1 ! horizontal momentum fluxes at T- and F-point 78 DO jj = 1, jpjm1 ! horizontal momentum fluxes (at T- and F-point) 82 79 DO ji = 1, fs_jpim1 ! vector opt. 83 zfu_t(ji+1,jj ,jk) = ( zfu(ji,jj,jk) + zfu(ji+1,jj 84 zfv_f(ji ,jj ,jk) = ( zfv(ji,jj,jk) + zfv(ji+1,jj 85 zfu_f(ji ,jj ,jk) = ( zfu(ji,jj,jk) + zfu(ji 86 zfv_t(ji ,jj+1,jk) = ( zfv(ji,jj,jk) + zfv(ji 80 zfu_t(ji+1,jj ,jk) = ( zfu(ji,jj,jk) + zfu(ji+1,jj,jk) ) * ( un(ji,jj,jk) + un(ji+1,jj ,jk) ) 81 zfv_f(ji ,jj ,jk) = ( zfv(ji,jj,jk) + zfv(ji+1,jj,jk) ) * ( un(ji,jj,jk) + un(ji ,jj+1,jk) ) 82 zfu_f(ji ,jj ,jk) = ( zfu(ji,jj,jk) + zfu(ji,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji+1,jj ,jk) ) 83 zfv_t(ji ,jj+1,jk) = ( zfv(ji,jj,jk) + zfv(ji,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji ,jj+1,jk) ) 87 84 END DO 88 85 END DO 89 DO jj = 2, jpjm1 86 DO jj = 2, jpjm1 ! divergence of horizontal momentum fluxes 90 87 DO ji = fs_2, fs_jpim1 ! vector opt. 91 88 zbu = e1e2u(ji,jj) * e3u_n(ji,jj,jk) 92 89 zbv = e1e2v(ji,jj) * e3v_n(ji,jj,jk) 93 90 ! 94 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_t(ji+1,jj ,jk) - zfu_t(ji,jj ,jk) &95 & + zfv_f(ji ,jj ,jk) - zfv_f(ji,jj-1,jk) ) / zbu96 va(ji,jj,jk) = va(ji,jj,jk) - ( zfu_f(ji ,jj ,jk) - zfu_f(ji-1,jj,jk) &97 & + zfv_t(ji ,jj+1,jk) - zfv_t(ji ,jj,jk) ) / zbv91 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_t(ji+1,jj,jk) - zfu_t(ji,jj ,jk) & 92 & + zfv_f(ji ,jj,jk) - zfv_f(ji,jj-1,jk) ) / zbu 93 va(ji,jj,jk) = va(ji,jj,jk) - ( zfu_f(ji,jj ,jk) - zfu_f(ji-1,jj,jk) & 94 & + zfv_t(ji,jj+1,jk) - zfv_t(ji ,jj,jk) ) / zbv 98 95 END DO 99 96 END DO 100 97 END DO 101 98 ! 102 IF( l_trddyn ) THEN ! save the horizontal advection trendfor diagnostic99 IF( l_trddyn ) THEN ! trends: send trend to trddyn for diagnostic 103 100 zfu_uw(:,:,:) = ua(:,:,:) - zfu_uw(:,:,:) 104 101 zfv_vw(:,:,:) = va(:,:,:) - zfv_vw(:,:,:) … … 108 105 ENDIF 109 106 ! 110 111 ! ! ==================== ! 112 ! ! Vertical advection ! 113 DO jk = 1, jpkm1 ! ==================== ! 114 ! ! Vertical volume fluxesÊ 115 zfw(:,:,jk) = 0.25 * e1e2t(:,:) * wn(:,:,jk) 116 ! 117 IF( jk == 1 ) THEN ! surface/bottom advective fluxes 118 zfu_uw(:,:,jpk) = 0.e0 ! Bottom value : flux set to zero 119 zfv_vw(:,:,jpk) = 0.e0 120 ! ! Surface value : 121 IF( .NOT.ln_linssh ) THEN ! variable volume : flux set to zero 122 zfu_uw(:,:, 1 ) = 0._wp 123 zfv_vw(:,:, 1 ) = 0._wp 124 ELSE ! constant volume : advection through the surface 125 DO jj = 2, jpjm1 126 DO ji = fs_2, fs_jpim1 127 zfu_uw(ji,jj, 1 ) = 2.e0 * ( zfw(ji,jj,1) + zfw(ji+1,jj ,1) ) * un(ji,jj,1) 128 zfv_vw(ji,jj, 1 ) = 2.e0 * ( zfw(ji,jj,1) + zfw(ji ,jj+1,1) ) * vn(ji,jj,1) 129 END DO 130 END DO 131 ENDIF 132 ELSE ! interior fluxes 133 DO jj = 2, jpjm1 134 DO ji = fs_2, fs_jpim1 ! vector opt. 135 zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj ,jk) ) * ( un(ji,jj,jk) + un(ji,jj,jk-1) ) 136 zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji ,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji,jj,jk-1) ) 137 END DO 107 ! !== Vertical advection ==! 108 ! 109 DO jj = 2, jpjm1 ! surface/bottom advective fluxes set to zero 110 DO ji = fs_2, fs_jpim1 111 zfu_uw(ji,jj,jpk) = 0._wp ; zfv_vw(jj,jj,jpk) = 0._wp 112 zfu_uw(ji,jj, 1 ) = 0._wp ; zfv_vw(jj,jj, 1 ) = 0._wp 113 END DO 114 END DO 115 IF( ln_linssh ) THEN ! linear free surface: advection through the surface 116 DO jj = 2, jpjm1 117 DO ji = fs_2, fs_jpim1 118 zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji+1,jj) * wn(ji+1,jj,1) ) * un(ji,jj,1) 119 zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji,jj+1) * wn(ji,jj+1,1) ) * vn(ji,jj,1) 138 120 END DO 139 ENDIF 140 END DO 141 DO jk = 1, jpkm1 ! divergence of vertical momentum flux divergence 142 DO jj = 2, jpjm1 121 END DO 122 ENDIF 123 DO jk = 2, jpkm1 ! interior advective fluxes 124 DO jj = 2, jpjm1 ! 1/4 * Vertical transport 125 DO ji = fs_2, fs_jpim1 126 zfw(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * wn(ji,jj,jk) 127 END DO 128 END DO 129 DO jj = 2, jpjm1 143 130 DO ji = fs_2, fs_jpim1 ! vector opt. 144 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) & 145 & / ( e1e2u(ji,jj) * e3u_n(ji,jj,jk) ) 146 va(ji,jj,jk) = va(ji,jj,jk) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) & 147 & / ( e1e2v(ji,jj) * e3v_n(ji,jj,jk) ) 131 zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji+1,jj ,jk) ) * ( un(ji,jj,jk) + un(ji,jj,jk-1) ) 132 zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk) + zfw(ji ,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji,jj,jk-1) ) 148 133 END DO 149 134 END DO 150 135 END DO 151 136 ! 152 IF( l_trddyn ) THEN ! save the vertical advection trend for diagnostic 137 DO jk = 1, jpkm1 ! divergence of vertical momentum flux divergence 138 DO jj = 2, jpjm1 139 DO ji = fs_2, fs_jpim1 ! vector opt. 140 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) * r1_e1e2u(ji,jj) / e3u_n(ji,jj,jk) 141 va(ji,jj,jk) = va(ji,jj,jk) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) * r1_e1e2v(ji,jj) / e3v_n(ji,jj,jk) 142 END DO 143 END DO 144 END DO 145 ! 146 IF( l_trddyn ) THEN ! trends: send trend to trddyn for diagnostic 153 147 zfu_t(:,:,:) = ua(:,:,:) - zfu_t(:,:,:) 154 148 zfv_t(:,:,:) = va(:,:,:) - zfv_t(:,:,:) 155 149 CALL trd_dyn( zfu_t, zfv_t, jpdyn_zad, kt ) 156 150 ENDIF 157 ! 151 ! ! Control print 158 152 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' cen2 adv - Ua: ', mask1=umask, & 159 153 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_ubs.F90
r5866 r5883 100 100 zlu_uv(:,:,:,:) = 0._wp 101 101 zlv_vu(:,:,:,:) = 0._wp 102 103 IF( l_trddyn ) THEN ! Save ua and vatrends102 ! 103 IF( l_trddyn ) THEN ! trends: store the input trends 104 104 zfu_uw(:,:,:) = ua(:,:,:) 105 105 zfv_vw(:,:,:) = va(:,:,:) 106 106 ENDIF 107 108 107 ! ! =========================== ! 109 108 DO jk = 1, jpkm1 ! Laplacian of the velocity ! … … 115 114 DO jj = 2, jpjm1 ! laplacian 116 115 DO ji = fs_2, fs_jpim1 ! vector opt. 117 !118 116 zlu_uu(ji,jj,jk,1) = ( ub (ji+1,jj ,jk) - 2.*ub (ji,jj,jk) + ub (ji-1,jj ,jk) ) * umask(ji,jj,jk) 119 117 zlv_vv(ji,jj,jk,1) = ( vb (ji ,jj+1,jk) - 2.*vb (ji,jj,jk) + vb (ji ,jj-1,jk) ) * vmask(ji,jj,jk) … … 136 134 CALL lbc_lnk( zlv_vv(:,:,:,1), 'V', 1. ) ; CALL lbc_lnk( zlv_vu(:,:,:,1), 'V', 1. ) 137 135 CALL lbc_lnk( zlv_vv(:,:,:,2), 'V', 1. ) ; CALL lbc_lnk( zlv_vu(:,:,:,2), 'V', 1. ) 138 136 ! 139 137 ! ! ====================== ! 140 138 ! ! Horizontal advection ! … … 149 147 zvj = ( vn(ji,jj,jk) + vn(ji ,jj+1,jk) ) 150 148 ! 151 IF (zui > 0) THEN ; zl_u = zlu_uu(ji ,jj,jk,1)152 ELSE ; zl_u = zlu_uu(ji+1,jj,jk,1)153 ENDIF 154 IF (zvj > 0) THEN ; zl_v = zlv_vv(ji,jj ,jk,1)155 ELSE ; zl_v = zlv_vv(ji,jj+1,jk,1)149 IF( zui > 0 ) THEN ; zl_u = zlu_uu(ji ,jj,jk,1) 150 ELSE ; zl_u = zlu_uu(ji+1,jj,jk,1) 151 ENDIF 152 IF( zvj > 0 ) THEN ; zl_v = zlv_vv(ji,jj ,jk,1) 153 ELSE ; zl_v = zlv_vv(ji,jj+1,jk,1) 156 154 ENDIF 157 155 ! … … 165 163 zfuj = ( zfu(ji,jj,jk) + zfu(ji ,jj+1,jk) ) 166 164 zfvi = ( zfv(ji,jj,jk) + zfv(ji+1,jj ,jk) ) 167 IF (zfuj > 0) THEN ; zl_v = zlv_vu( ji ,jj ,jk,1)168 ELSE ; zl_v = zlv_vu( ji+1,jj,jk,1)169 ENDIF 170 IF (zfvi > 0) THEN ; zl_u = zlu_uv( ji,jj ,jk,1)171 ELSE ; zl_u = zlu_uv( ji,jj+1,jk,1)165 IF( zfuj > 0 ) THEN ; zl_v = zlv_vu( ji ,jj ,jk,1) 166 ELSE ; zl_v = zlv_vu( ji+1,jj,jk,1) 167 ENDIF 168 IF( zfvi > 0 ) THEN ; zl_u = zlu_uv( ji,jj ,jk,1) 169 ELSE ; zl_u = zlu_uv( ji,jj+1,jk,1) 172 170 ENDIF 173 171 ! … … 190 188 END DO 191 189 END DO 192 IF( l_trddyn ) THEN ! save the horizontal advection trendfor diagnostic190 IF( l_trddyn ) THEN ! trends: send trends to trddyn for diagnostic 193 191 zfu_uw(:,:,:) = ua(:,:,:) - zfu_uw(:,:,:) 194 192 zfv_vw(:,:,:) = va(:,:,:) - zfv_vw(:,:,:) … … 197 195 zfv_t(:,:,:) = va(:,:,:) 198 196 ENDIF 199 200 197 ! ! ==================== ! 201 198 ! ! Vertical advection ! 202 DO jk = 1, jpkm1! ==================== !203 ! ! Vertical volume fluxesÊ204 zfw(:,:,jk) = 0.25 * e1e2t(:,:) * wn(:,:,jk)205 !206 IF( jk == 1 ) THEN ! surface/bottom advective fluxes207 zfu_uw( :,:,jpk) = 0.e0 ! Bottom value : flux set to zero208 zfv_vw( :,:,jpk) = 0.e0209 ! ! Surface value :210 IF( .NOT.ln_linssh ) THEN ! variable volume : flux set to zero211 zfu_uw(:,:, 1 ) = 0._wp212 zfv_vw(:,:, 1 ) = 0._wp213 ELSE ! constant volume : advection through the surface214 DO jj = 2, jpjm1215 DO ji = fs_2, fs_jpim1216 zfu_uw(ji,jj, 1 ) = 2._wp * ( zfw(ji,jj,1) + zfw(ji+1,jj ,1) ) * un(ji,jj,1)217 zfv_vw(ji,jj, 1 ) = 2._wp * ( zfw(ji,jj,1) + zfw(ji ,jj+1,1) ) * vn(ji,jj,1)218 END DO219 END DO220 ENDIF221 ELSE ! interior fluxes222 DO jj = 2, jpjm1223 DO ji = fs_2, fs_jpim1 ! vector opt.224 zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj ,jk) ) * ( un(ji,jj,jk) + un(ji,jj,jk-1) )225 zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji ,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji,jj,jk-1) )226 END DO227 END DO228 ENDIF229 END DO230 DO jk = 1, jpkm1 ! divergence of vertical momentum flux divergence231 DO jj = 2, jpjm1232 DO ji = fs_2, fs_jpim1 ! vector opt.233 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) &234 & / ( e1e2u(ji,jj) * e3u_n(ji,jj,jk) )235 va(ji,jj,jk) = va(ji,jj,jk) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) &236 & / ( e1e2v(ji,jj) * e3v_n(ji,jj,jk))237 END DO 238 END DO 239 END DO 240 ! 241 IF( l_trddyn ) THEN 199 ! ! ==================== ! 200 DO jj = 2, jpjm1 ! surface/bottom advective fluxes set to zero 201 DO ji = fs_2, fs_jpim1 202 zfu_uw(ji,jj,jpk) = 0._wp 203 zfv_vw(ji,jj,jpk) = 0._wp 204 zfu_uw(ji,jj, 1 ) = 0._wp 205 zfv_vw(ji,jj, 1 ) = 0._wp 206 END DO 207 END DO 208 IF( ln_linssh ) THEN ! constant volume : advection through the surface 209 DO jj = 2, jpjm1 210 DO ji = fs_2, fs_jpim1 211 zfu_uw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji+1,jj) * wn(ji+1,jj,1) ) * un(ji,jj,1) 212 zfv_vw(ji,jj,1) = 0.5_wp * ( e1e2t(ji,jj) * wn(ji,jj,1) + e1e2t(ji,jj+1) * wn(ji,jj+1,1) ) * vn(ji,jj,1) 213 END DO 214 END DO 215 ENDIF 216 DO jk = 2, jpkm1 ! interior fluxes 217 DO jj = 2, jpjm1 218 DO ji = fs_2, fs_jpim1 219 zfw(ji,jj,jk) = 0.25 * e1e2t(ji,jj) * wn(ji,jj,jk) 220 END DO 221 END DO 222 DO jj = 2, jpjm1 223 DO ji = fs_2, fs_jpim1 ! vector opt. 224 zfu_uw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji+1,jj,jk) ) * ( un(ji,jj,jk) + un(ji,jj,jk-1) ) 225 zfv_vw(ji,jj,jk) = ( zfw(ji,jj,jk)+ zfw(ji,jj+1,jk) ) * ( vn(ji,jj,jk) + vn(ji,jj,jk-1) ) 226 END DO 227 END DO 228 END DO 229 DO jk = 1, jpkm1 ! divergence of vertical momentum flux divergence 230 DO jj = 2, jpjm1 231 DO ji = fs_2, fs_jpim1 ! vector opt. 232 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zfu_uw(ji,jj,jk) - zfu_uw(ji,jj,jk+1) ) * r1_e1e2u(ji,jj) / e3u_n(ji,jj,jk) 233 va(ji,jj,jk) = va(ji,jj,jk) - ( zfv_vw(ji,jj,jk) - zfv_vw(ji,jj,jk+1) ) * r1_e1e2v(ji,jj) / e3v_n(ji,jj,jk) 234 END DO 235 END DO 236 END DO 237 ! 238 IF( l_trddyn ) THEN ! save the vertical advection trend for diagnostic 242 239 zfu_t(:,:,:) = ua(:,:,:) - zfu_t(:,:,:) 243 240 zfv_t(:,:,:) = va(:,:,:) - zfv_t(:,:,:) 244 241 CALL trd_dyn( zfu_t, zfv_t, jpdyn_zad, kt ) 245 242 ENDIF 246 ! 243 ! ! Control print 247 244 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' ubs2 adv - Ua: ', mask1=umask, & 248 245 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynbfr.F90
r5845 r5883 63 63 zm1_2dt = - 1._wp / ( 2._wp * rdt ) 64 64 65 IF( l_trddyn ) THEN ! temporary save of ua and vatrends66 CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv )65 IF( l_trddyn ) THEN ! trends: store the input trends 66 CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv ) 67 67 ztrdu(:,:,:) = ua(:,:,:) 68 68 ztrdv(:,:,:) = va(:,:,:) … … 80 80 END DO 81 81 END DO 82 83 IF ( ln_isfcav ) THEN82 ! 83 IF( ln_isfcav ) THEN ! ocean cavities 84 84 DO jj = 2, jpjm1 85 85 DO ji = 2, jpim1 … … 97 97 END DO 98 98 END IF 99 100 99 ! 101 IF( l_trddyn ) THEN ! save the vertical diffusive trendsfor further diagnostics100 IF( l_trddyn ) THEN ! trends: send trends to trddyn for further diagnostics 102 101 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 103 102 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 104 103 CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt ) 105 CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv )104 CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv ) 106 105 ENDIF 107 106 ! ! print mean trends (used for debugging) -
branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_lap_blp.F90
r5866 r5883 4 4 !! Ocean dynamics: lateral viscosity trend (laplacian and bilaplacian) 5 5 !!====================================================================== 6 !! History : OPA ! 1990-09 (G. Madec) Original code 7 !! 4.0 ! 1991-11 (G. Madec) 8 !! 6.0 ! 1996-01 (G. Madec) statement function for e3 and ahm 9 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 10 !! - ! 2004-08 (C. Talandier) New trends organization 11 !! 3.7 ! 2014-01 (F. Lemarie, G. Madec) restructuration/simplification of ahm specification, 12 !! ! add velocity dependent coefficient and optional read in file 6 !! History : 3.7 ! 2014-01 (G. Madec, S. Masson) Original code, re-entrant laplacian 13 7 !!---------------------------------------------------------------------- 14 8
Note: See TracChangeset
for help on using the changeset viewer.