- Timestamp:
- 2019-11-22T15:29:17+01:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11943_MERGE_2019/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src
- Property svn:mergeinfo deleted
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src/OCE/TRA/trasbc.F90
r10499 r11949 51 51 CONTAINS 52 52 53 SUBROUTINE tra_sbc ( kt )53 SUBROUTINE tra_sbc ( kt, Kmm, pts, Krhs ) 54 54 !!---------------------------------------------------------------------- 55 55 !! *** ROUTINE tra_sbc *** … … 63 63 !! (2) Fwe , tracer carried with the water that is exchanged with air+ice. 64 64 !! The input forcing fields (emp, rnf, sfx, isf) contain Fext+Fwe, 65 !! they are simply added to the tracer trend (ts a).65 !! they are simply added to the tracer trend (ts(Krhs)). 66 66 !! In linear free surface case (ln_linssh=T), the volume of the 67 67 !! ocean does not change with the water exchanges at the (air+ice)-sea … … 69 69 !! concentration/dilution effect associated with water exchanges. 70 70 !! 71 !! ** Action : - Update ts awith the surface boundary condition trend71 !! ** Action : - Update ts(Krhs) with the surface boundary condition trend 72 72 !! - send trends to trdtra module for further diagnostics(l_trdtra=T) 73 73 !!---------------------------------------------------------------------- 74 INTEGER, INTENT(in) :: kt ! ocean time-step index 74 INTEGER, INTENT(in ) :: kt ! ocean time-step index 75 INTEGER, INTENT(in ) :: Kmm, Krhs ! time level indices 76 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 75 77 ! 76 78 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 90 92 IF( l_trdtra ) THEN !* Save ta and sa trends 91 93 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 92 ztrdt(:,:,:) = tsa(:,:,:,jp_tem)93 ztrds(:,:,:) = tsa(:,:,:,jp_sal)94 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) 95 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) 94 96 ENDIF 95 97 ! … … 131 133 DO jj = 2, jpj !==>> add concentration/dilution effect due to constant volume cell 132 134 DO ji = fs_2, fs_jpim1 ! vector opt. 133 sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_tem)134 sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * tsn(ji,jj,1,jp_sal)135 sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rau0 * emp(ji,jj) * pts(ji,jj,1,jp_tem,Kmm) 136 sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rau0 * emp(ji,jj) * pts(ji,jj,1,jp_sal,Kmm) 135 137 END DO 136 138 END DO !==>> output c./d. term 137 IF( iom_use('emp_x_sst') ) CALL iom_put( "emp_x_sst", emp (:,:) * tsn(:,:,1,jp_tem) )138 IF( iom_use('emp_x_sss') ) CALL iom_put( "emp_x_sss", emp (:,:) * tsn(:,:,1,jp_sal) )139 IF( iom_use('emp_x_sst') ) CALL iom_put( "emp_x_sst", emp (:,:) * pts(:,:,1,jp_tem,Kmm) ) 140 IF( iom_use('emp_x_sss') ) CALL iom_put( "emp_x_sss", emp (:,:) * pts(:,:,1,jp_sal,Kmm) ) 139 141 ENDIF 140 142 ! … … 142 144 DO jj = 2, jpj 143 145 DO ji = fs_2, fs_jpim1 ! vector opt. 144 tsa(ji,jj,1,jn) = tsa(ji,jj,1,jn) + zfact * ( sbc_tsc_b(ji,jj,jn) + sbc_tsc(ji,jj,jn) ) / e3t_n(ji,jj,1)146 pts(ji,jj,1,jn,Krhs) = pts(ji,jj,1,jn,Krhs) + zfact * ( sbc_tsc_b(ji,jj,jn) + sbc_tsc(ji,jj,jn) ) / e3t(ji,jj,1,Kmm) 145 147 END DO 146 148 END DO … … 173 175 DO jk = ikt, ikb - 1 174 176 ! compute trend 175 tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)&176 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )&177 & * r1_hisf_tbl(ji,jj)177 pts(ji,jj,jk,jp_tem,Krhs) = pts(ji,jj,jk,jp_tem,Krhs) & 178 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) ) & 179 & * r1_hisf_tbl(ji,jj) 178 180 END DO 179 181 180 182 ! level partially include in ice shelf boundary layer 181 183 ! compute trend 182 tsa(ji,jj,ikb,jp_tem) = tsa(ji,jj,ikb,jp_tem)&183 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) )&184 & * r1_hisf_tbl(ji,jj) * ralpha(ji,jj)184 pts(ji,jj,ikb,jp_tem,Krhs) = pts(ji,jj,ikb,jp_tem,Krhs) & 185 & + zfact * ( risf_tsc_b(ji,jj,jp_tem) + risf_tsc(ji,jj,jp_tem) ) & 186 & * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) 185 187 186 188 END DO … … 199 201 zdep = zfact / h_rnf(ji,jj) 200 202 DO jk = 1, nk_rnf(ji,jj) 201 tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem)&202 & + ( rnf_tsc_b(ji,jj,jp_tem) + rnf_tsc(ji,jj,jp_tem) ) * zdep203 IF( ln_rnf_sal ) tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal)&204 & + ( rnf_tsc_b(ji,jj,jp_sal) + rnf_tsc(ji,jj,jp_sal) ) * zdep203 pts(ji,jj,jk,jp_tem,Krhs) = pts(ji,jj,jk,jp_tem,Krhs) & 204 & + ( rnf_tsc_b(ji,jj,jp_tem) + rnf_tsc(ji,jj,jp_tem) ) * zdep 205 IF( ln_rnf_sal ) pts(ji,jj,jk,jp_sal,Krhs) = pts(ji,jj,jk,jp_sal,Krhs) & 206 & + ( rnf_tsc_b(ji,jj,jp_sal) + rnf_tsc(ji,jj,jp_sal) ) * zdep 205 207 END DO 206 208 ENDIF … … 209 211 ENDIF 210 212 211 IF( iom_use('rnf_x_sst') ) CALL iom_put( "rnf_x_sst", rnf* tsn(:,:,1,jp_tem) ) ! runoff term on sst212 IF( iom_use('rnf_x_sss') ) CALL iom_put( "rnf_x_sss", rnf* tsn(:,:,1,jp_sal) ) ! runoff term on sss213 IF( iom_use('rnf_x_sst') ) CALL iom_put( "rnf_x_sst", rnf*pts(:,:,1,jp_tem,Kmm) ) ! runoff term on sst 214 IF( iom_use('rnf_x_sss') ) CALL iom_put( "rnf_x_sss", rnf*pts(:,:,1,jp_sal,Kmm) ) ! runoff term on sss 213 215 214 216 #if defined key_asminc … … 223 225 DO jj = 2, jpj 224 226 DO ji = fs_2, fs_jpim1 225 ztim = ssh_iau(ji,jj) / e3t _n(ji,jj,1)226 tsa(ji,jj,1,jp_tem) = tsa(ji,jj,1,jp_tem) + tsn(ji,jj,1,jp_tem) * ztim227 tsa(ji,jj,1,jp_sal) = tsa(ji,jj,1,jp_sal) + tsn(ji,jj,1,jp_sal) * ztim227 ztim = ssh_iau(ji,jj) / e3t(ji,jj,1,Kmm) 228 pts(ji,jj,1,jp_tem,Krhs) = pts(ji,jj,1,jp_tem,Krhs) + pts(ji,jj,1,jp_tem,Kmm) * ztim 229 pts(ji,jj,1,jp_sal,Krhs) = pts(ji,jj,1,jp_sal,Krhs) + pts(ji,jj,1,jp_sal,Kmm) * ztim 228 230 END DO 229 231 END DO … … 231 233 DO jj = 2, jpj 232 234 DO ji = fs_2, fs_jpim1 233 ztim = ssh_iau(ji,jj) / ( ht _n(ji,jj) + 1. - ssmask(ji, jj) )234 tsa(ji,jj,:,jp_tem) = tsa(ji,jj,:,jp_tem) + tsn(ji,jj,:,jp_tem) * ztim235 tsa(ji,jj,:,jp_sal) = tsa(ji,jj,:,jp_sal) + tsn(ji,jj,:,jp_sal) * ztim235 ztim = ssh_iau(ji,jj) / ( ht(ji,jj) + 1. - ssmask(ji, jj) ) 236 pts(ji,jj,:,jp_tem,Krhs) = pts(ji,jj,:,jp_tem,Krhs) + pts(ji,jj,:,jp_tem,Kmm) * ztim 237 pts(ji,jj,:,jp_sal,Krhs) = pts(ji,jj,:,jp_sal,Krhs) + pts(ji,jj,:,jp_sal,Kmm) * ztim 236 238 END DO 237 239 END DO … … 250 252 DO jj = 2, jpj 251 253 DO ji = fs_2, fs_jpim1 252 zdep = 1._wp / e3t _n(ji,jj,jk)253 tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) - htsc_iscpl(ji,jj,jk,jp_tem) * zdep254 tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal) - htsc_iscpl(ji,jj,jk,jp_sal) * zdep254 zdep = 1._wp / e3t(ji,jj,jk,Kmm) 255 pts(ji,jj,jk,jp_tem,Krhs) = pts(ji,jj,jk,jp_tem,Krhs) - htsc_iscpl(ji,jj,jk,jp_tem) * zdep 256 pts(ji,jj,jk,jp_sal,Krhs) = pts(ji,jj,jk,jp_sal,Krhs) - htsc_iscpl(ji,jj,jk,jp_sal) * zdep 255 257 END DO 256 258 END DO … … 259 261 260 262 IF( l_trdtra ) THEN ! save the horizontal diffusive trends for further diagnostics 261 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:)262 ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:)263 CALL trd_tra( kt, 'TRA', jp_tem, jptra_nsr, ztrdt )264 CALL trd_tra( kt, 'TRA', jp_sal, jptra_nsr, ztrds )263 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 264 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 265 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_nsr, ztrdt ) 266 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_nsr, ztrds ) 265 267 DEALLOCATE( ztrdt , ztrds ) 266 268 ENDIF 267 269 ! 268 IF(ln_ctl) CALL prt_ctl( tab3d_1= tsa(:,:,:,jp_tem), clinfo1=' sbc - Ta: ', mask1=tmask, &269 & tab3d_2= tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )270 IF(ln_ctl) CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' sbc - Ta: ', mask1=tmask, & 271 & tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 270 272 ! 271 273 IF( ln_timing ) CALL timing_stop('tra_sbc')
Note: See TracChangeset
for help on using the changeset viewer.