Changeset 503 for trunk/NEMO/OPA_SRC/DYN/dynzad.F90
- Timestamp:
- 2006-09-27T10:52:29+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DYN/dynzad.F90
r455 r503 4 4 !! Ocean dynamics : vertical advection trend 5 5 !!====================================================================== 6 !! History : 6.0 ! 91-01 (G. Madec) Original code 7 !! 7.0 ! 91-11 (G. Madec) 8 !! 7.5 ! 96-01 (G. Madec) statement function for e3 9 !! 8.5 ! 02-07 (G. Madec) j-k-i case: Original code 10 !! 8.5 ! 02-07 (G. Madec) Free form, F90 11 !!---------------------------------------------------------------------- 6 12 7 13 !!---------------------------------------------------------------------- 8 !! dyn_zad : vertical advection momentum trend 9 !!---------------------------------------------------------------------- 10 !! * Modules used 11 USE oce ! ocean dynamics and tracers 12 USE dom_oce ! ocean space and time domain 13 USE in_out_manager ! I/O manager 14 USE trdmod ! ocean dynamics trends 15 USE trdmod_oce ! ocean variables trends 16 USE flxrnf ! ocean runoffs 17 USE prtctl ! Print control 14 !! dyn_zad : vertical advection momentum trend 15 !!---------------------------------------------------------------------- 16 USE oce ! ocean dynamics and tracers 17 USE dom_oce ! ocean space and time domain 18 USE in_out_manager ! I/O manager 19 USE trdmod ! ocean dynamics trends 20 USE trdmod_oce ! ocean variables trends 21 USE flxrnf ! ocean runoffs 22 USE prtctl ! Print control 18 23 19 24 IMPLICIT NONE 20 25 PRIVATE 21 26 22 !! * Accessibility 23 PUBLIC dyn_zad ! routine called by step.F90 27 PUBLIC dyn_zad ! routine called by step.F90 24 28 25 29 !! * Substitutions … … 29 33 !! OPA 9.0 , LOCEAN-IPSL (2005) 30 34 !! $Header$ 31 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt35 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 32 36 !!---------------------------------------------------------------------- 33 37 … … 54 58 !! 55 59 !! ** Action : - Update (ua,va) with the vert. momentum advection trends 56 !! - Save the trends in (utrd,vtrd) ('key_trddyn') 57 !! 58 !! History : 59 !! 6.0 ! 91-01 (G. Madec) Original code 60 !! 7.0 ! 91-11 (G. Madec) 61 !! 7.5 ! 96-01 (G. Madec) statement function for e3 62 !! 8.5 ! 02-07 (G. Madec) Free form, F90 63 !! 9.0 ! 04-08 (C. Talandier) New trends organization 64 !!---------------------------------------------------------------------- 65 !! * modules used 66 USE oce, ONLY: zwuw => ta, & ! use ta as 3D workspace 67 zwvw => sa ! use sa as 3D workspace 68 69 !! * Arguments 70 INTEGER, INTENT( in ) :: kt ! ocean time-step inedx 71 72 !! * Local declarations 73 INTEGER :: ji, jj, jk ! dummy loop indices 74 REAL(wp) :: zvn, zua, zva ! temporary scalars 75 REAL(wp), DIMENSION(jpi) :: & 76 zww ! temporary workspace 77 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 78 ztdua, ztdva ! temporary workspace 60 !! - Save the trends in (ztrdu,ztrdv) ('key_trddyn') 61 !!---------------------------------------------------------------------- 62 USE oce, ONLY: zwuw => ta ! use ta as 3D workspace 63 USE oce, ONLY: zwvw => sa ! use sa as 3D workspace 64 !! 65 INTEGER, INTENT(in) :: kt ! ocean time-step inedx 66 !! 67 INTEGER :: ji, jj, jk ! dummy loop indices 68 REAL(wp) :: zvn, zua, zva ! temporary scalars 69 REAL(wp), DIMENSION(jpi) :: zww ! 1D workspace 70 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D workspace 79 71 !!---------------------------------------------------------------------- 80 72 … … 85 77 ENDIF 86 78 87 ! Save ua and va trends 88 IF( l_trddyn ) THEN 89 ztdua(:,:,:) = ua(:,:,:) 90 ztdva(:,:,:) = va(:,:,:) 79 IF( l_trddyn ) THEN ! Save ua and va trends 80 ztrdu(:,:,:) = ua(:,:,:) 81 ztrdv(:,:,:) = va(:,:,:) 91 82 ENDIF 92 83 … … 94 85 DO jj = 2, jpjm1 ! Vertical slab 95 86 ! ! =============== 96 97 ! Vertical momentum advection at level w and u- and v- vertical 98 ! ---------------------------------------------------------------- 99 DO jk = 2, jpkm1 100 ! vertical fluxes 101 DO ji = 2, jpi 87 DO jk = 2, jpkm1 ! Vertical momentum advection at uw and vw-pts 88 DO ji = 2, jpi ! vertical fluxes 102 89 zww(ji) = 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) 103 90 END DO 104 ! vertical momentum advection at w-point 105 DO ji = 2, jpim1 91 DO ji = 2, jpim1 ! vertical momentum advection at w-point 106 92 zvn = 0.25 * e1t(ji,jj+1) * e2t(ji,jj+1) * wn(ji,jj+1,jk) 107 93 zwuw(ji,jj,jk) = ( zww(ji+1) + zww(ji) ) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) … … 109 95 END DO 110 96 END DO 111 112 ! Surface and bottom values set to zero 113 DO ji = 2, jpim1 97 DO ji = 2, jpim1 ! Surface and bottom values set to zero 114 98 zwuw(ji,jj, 1 ) = 0.e0 115 99 zwvw(ji,jj, 1 ) = 0.e0 … … 117 101 zwvw(ji,jj,jpk) = 0.e0 118 102 END DO 119 120 ! Vertical momentum advection at u- and v-points 121 ! ---------------------------------------------- 122 DO jk = 1, jpkm1 103 ! 104 DO jk = 1, jpkm1 ! Vertical momentum advection at u- and v-points 123 105 DO ji = 2, jpim1 124 ! vertical momentum advective trends106 ! ! vertical momentum advective trends 125 107 zua = - ( zwuw(ji,jj,jk) + zwuw(ji,jj,jk+1) ) / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 126 108 zva = - ( zwvw(ji,jj,jk) + zwvw(ji,jj,jk+1) ) / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 127 ! add the trends to the general momentum trends109 ! ! add the trends to the general momentum trends 128 110 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 129 111 va(ji,jj,jk) = va(ji,jj,jk) + zva … … 133 115 END DO ! End of slab 134 116 ! ! =============== 135 136 ! save the vertical advection trends for diagnostic 137 ! momentum trends 138 IF( l_trddyn ) THEN 139 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 140 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 141 142 CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 143 ENDIF 144 145 IF(ln_ctl) THEN ! print sum trends (used for debugging) 146 CALL prt_ctl(tab3d_1=ua, clinfo1=' zad - Ua: ', mask1=umask, & 147 & tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 148 ENDIF 149 117 ! 118 IF( l_trddyn ) THEN ! save the vertical advection trends for diagnostic 119 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 120 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 121 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_zad, 'DYN', kt ) 122 ENDIF 123 ! ! Control print 124 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' zad - Ua: ', mask1=umask, & 125 & tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn' ) 126 ! 150 127 END SUBROUTINE dyn_zad 151 128 … … 169 146 !! 170 147 !! ** Action : - Update (ua,va) with the vert. momentum adv. trends 171 !! - Save the trends in (utrd,vtrd) ('key_trddyn') 172 !! 173 !! History : 174 !! 8.5 ! 02-07 (G. Madec) Original code 175 !!---------------------------------------------------------------------- 176 !! * modules used 177 USE oce, ONLY: zwuw => ta, & ! use ta as 3D workspace 178 zwvw => sa ! use sa as 3D workspace 179 !! * Arguments 180 INTEGER, INTENT( in ) :: kt ! ocean time-step inedx 181 182 !! * Local declarations 183 INTEGER :: ji, jj, jk ! dummy loop indices 184 REAL(wp) :: zua, zva ! temporary scalars 185 REAL(wp), DIMENSION(jpi,jpj) :: & 186 zww ! temporary workspace 187 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 188 ztdua, ztdva ! temporary workspace 148 !! - Save the trends in (ztrdu,ztrdv) ('key_trddyn') 149 !!---------------------------------------------------------------------- 150 USE oce, ONLY: zwuw => ta ! use ta as 3D workspace 151 USE oce, ONLY: zwvw => sa ! use sa as 3D workspace 152 !! 153 INTEGER, INTENT(in) :: kt ! ocean time-step inedx 154 !! 155 INTEGER :: ji, jj, jk ! dummy loop indices 156 REAL(wp) :: zua, zva ! temporary scalars 157 REAL(wp), DIMENSION(jpi,jpj) :: zww ! 2D workspace 158 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D workspace 189 159 !!---------------------------------------------------------------------- 190 160 … … 195 165 ENDIF 196 166 197 ! Save ua and va trends 198 IF( l_trddyn ) THEN 199 ztdua(:,:,:) = ua(:,:,:) 200 ztdva(:,:,:) = va(:,:,:) 167 IF( l_trddyn ) THEN ! Save ua and va trends 168 ztrdu(:,:,:) = ua(:,:,:) 169 ztrdv(:,:,:) = va(:,:,:) 201 170 ENDIF 202 171 203 ! Vertical momentum advection at level w and u- and v- vertical 204 ! ------------------------------------------------------------- 205 DO jk = 2, jpkm1 206 ! vertical fluxes 207 DO jj = 2, jpj 208 DO ji = fs_2, jpi ! vector opt. 172 DO jk = 2, jpkm1 ! Vertical momentum advection at level w and u- and v- vertical 173 DO jj = 2, jpj ! vertical fluxes 174 DO ji = fs_2, jpi ! vector opt. 209 175 zww(ji,jj) = 0.25 * e1t(ji,jj) * e2t(ji,jj) * wn(ji,jj,jk) 210 176 END DO 211 177 END DO 212 ! vertical momentum advection at w-point 213 DO jj = 2, jpjm1 214 DO ji = fs_2, fs_jpim1 ! vector opt. 178 DO jj = 2, jpjm1 ! vertical momentum advection at w-point 179 DO ji = fs_2, fs_jpim1 ! vector opt. 215 180 zwuw(ji,jj,jk) = ( zww(ji+1,jj ) + zww(ji,jj) ) * ( un(ji,jj,jk-1)-un(ji,jj,jk) ) 216 181 zwvw(ji,jj,jk) = ( zww(ji ,jj+1) + zww(ji,jj) ) * ( vn(ji,jj,jk-1)-vn(ji,jj,jk) ) … … 218 183 END DO 219 184 END DO 220 221 ! Surface and bottom values set to zero 222 DO jj = 2, jpjm1 223 DO ji = fs_2, fs_jpim1 ! vector opt. 185 DO jj = 2, jpjm1 ! Surface and bottom values set to zero 186 DO ji = fs_2, fs_jpim1 ! vector opt. 224 187 zwuw(ji,jj, 1 ) = 0.e0 225 188 zwvw(ji,jj, 1 ) = 0.e0 … … 229 192 END DO 230 193 231 232 ! Vertical momentum advection at u- and v-points 233 ! ---------------------------------------------- 234 DO jk = 1, jpkm1 194 DO jk = 1, jpkm1 ! Vertical momentum advection at u- and v-points 235 195 DO jj = 2, jpjm1 236 DO ji = fs_2, fs_jpim1 ! vector opt.237 ! vertical momentum advective trends196 DO ji = fs_2, fs_jpim1 ! vector opt. 197 ! ! vertical momentum advective trends 238 198 zua = - ( zwuw(ji,jj,jk) + zwuw(ji,jj,jk+1) ) / ( e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) ) 239 199 zva = - ( zwvw(ji,jj,jk) + zwvw(ji,jj,jk+1) ) / ( e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) ) 240 ! add the trends to the general momentum trends200 ! ! add the trends to the general momentum trends 241 201 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 242 202 va(ji,jj,jk) = va(ji,jj,jk) + zva … … 245 205 END DO 246 206 247 ! save the vertical advection trends for diagnostic 248 ! momentum trends 249 IF( l_trddyn ) THEN 250 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 251 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 252 253 CALL trd_mod(ztdua, ztdva, jpdtdzad, 'DYN', kt) 254 ENDIF 255 256 IF(ln_ctl) THEN ! print sum trends (used for debugging) 257 CALL prt_ctl(tab3d_1=ua, clinfo1=' zad - Ua: ', mask1=umask, & 258 & tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 259 ENDIF 260 207 IF( l_trddyn ) THEN ! save the vertical advection trends for diagnostic 208 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 209 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 210 CALL trd_mod(ztrdu, ztrdv, jpdyn_trd_zad, 'DYN', kt) 211 ENDIF 212 ! ! Control print 213 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' zad - Ua: ', mask1=umask, & 214 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 215 ! 261 216 END SUBROUTINE dyn_zad 262 217 #endif 263 218 264 !!======================================================================219 !!====================================================================== 265 220 END MODULE dynzad
Note: See TracChangeset
for help on using the changeset viewer.