Changeset 5883 for branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv_cen2.F90
- Timestamp:
- 2015-11-13T08:01:08+01:00 (8 years ago)
- File:
-
- 1 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' )
Note: See TracChangeset
for help on using the changeset viewer.