- Timestamp:
- 2018-10-29T15:20:26+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/OPA_SRC/TRA/tranxt.F90
r10249 r10251 28 28 USE sbc_oce ! surface boundary condition: ocean 29 29 USE sbcrnf ! river runoffs 30 USE sbcisf ! ice shelf melting/freezing31 30 USE zdf_oce ! ocean vertical mixing 32 31 USE domvvl ! variable volume … … 47 46 USE timing ! Timing 48 47 #if defined key_agrif 48 USE agrif_opa_update 49 49 USE agrif_opa_interp 50 50 #endif … … 58 58 59 59 REAL(wp) :: rbcp ! Brown & Campana parameters for semi-implicit hpg 60 INTEGER :: warn_1, warn_2 ! indicators for warning statement61 60 62 61 !! * Substitutions … … 94 93 INTEGER, INTENT(in) :: kt ! ocean time-step index 95 94 !! 96 INTEGER :: jk, jn , ji, jj! dummy loop indices97 REAL(wp) :: zfact , zfreeze! local scalars95 INTEGER :: jk, jn ! dummy loop indices 96 REAL(wp) :: zfact ! local scalars 98 97 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrdt, ztrds 99 98 !!---------------------------------------------------------------------- … … 111 110 ! Update after tracer on domain lateral boundaries 112 111 ! 112 CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1._wp ) ! local domain boundaries (T-point, unchanged sign) 113 CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1._wp ) 114 ! 115 #if defined key_bdy 116 IF( lk_bdy ) CALL bdy_tra( kt ) ! BDY open boundaries 117 #endif 113 118 #if defined key_agrif 114 119 CALL Agrif_tra ! AGRIF zoom boundaries 115 #endif116 !117 CALL lbc_lnk( tsa(:,:,:,jp_tem), 'T', 1._wp ) ! local domain boundaries (T-point, unchanged sign)118 CALL lbc_lnk( tsa(:,:,:,jp_sal), 'T', 1._wp )119 !120 #if defined key_bdy121 IF( lk_bdy ) CALL bdy_tra( kt ) ! BDY open boundaries122 120 #endif 123 121 … … 126 124 ELSEIF( kt <= nit000 + 1 ) THEN ; r2dtra(:) = 2._wp* rdttra(:) ! at nit000 or nit000+1 (Leapfrog) 127 125 ENDIF 128 129 #if ( ! defined key_lim3 && ! defined key_lim2 && ! key_cice )130 IF ( kt == nit000 ) warn_1=0131 warn_2=0132 DO jk = 1, jpkm1133 DO jj = 1, jpj134 DO ji = 1, jpi135 IF ( tsa(ji,jj,jk,jp_tem) .lt. 0.0 ) THEN136 ! calculate freezing point137 zfreeze = ( -0.0575_wp + 1.710523E-3 * Sqrt(Abs(tsn(ji,jj,jk,jp_sal))) &138 - 2.154996E-4 * tsn(ji,jj,jk,jp_sal) ) * tsn(ji,jj,jk,jp_sal) - 7.53E-4 * ( 10.0_wp + fsdept(ji,jj,jk) )139 IF ( tsa(ji,jj,jk,jp_tem) .lt. zfreeze ) THEN140 tsa(ji,jj,jk,jp_tem)=zfreeze141 warn_2=1142 ENDIF143 ENDIF144 END DO145 END DO146 END DO147 CALL mpp_max(warn_1)148 CALL mpp_max(warn_2)149 IF ( (warn_1 == 0) .and. (warn_2 /= 0) ) THEN150 IF(lwp) THEN151 CALL ctl_warn( ' Temperatures dropping below freezing point, ', &152 & ' being forced to freezing point, no longer conservative' )153 ENDIF154 warn_1=1155 ENDIF156 #endif157 126 158 127 ! trends computation initialisation … … 179 148 ELSE ; CALL tra_nxt_fix( kt, nit000, 'TRA', tsb, tsn, tsa, jpts ) ! fixed volume level 180 149 ENDIF 181 ENDIF 182 ! 183 ! trends computation 150 ENDIF 151 ! 152 #if defined key_agrif 153 ! Update tracer at AGRIF zoom boundaries 154 IF( .NOT.Agrif_Root() ) CALL Agrif_Update_Tra( kt ) ! children only 155 #endif 156 ! 157 ! trends computation 184 158 IF( l_trdtra ) THEN ! trend of the Asselin filter (tb filtered - tb)/dt 185 159 DO jk = 1, jpkm1 … … 305 279 306 280 !! 307 LOGICAL :: ll_tra_hpg, ll_traqsr, ll_rnf , ll_isf! local logical281 LOGICAL :: ll_tra_hpg, ll_traqsr, ll_rnf ! local logical 308 282 INTEGER :: ji, jj, jk, jn ! dummy loop indices 309 283 REAL(wp) :: zfact1, ztc_a , ztc_n , ztc_b , ztc_f , ztc_d ! local scalar … … 321 295 ll_traqsr = ln_traqsr ! active tracers case and solar penetration 322 296 ll_rnf = ln_rnf ! active tracers case and river runoffs 323 IF (nn_isf .GE. 1) THEN324 ll_isf = .TRUE. ! active tracers case and ice shelf melting/freezing325 ELSE326 ll_isf = .FALSE.327 END IF328 297 ELSE 329 298 ll_tra_hpg = .FALSE. ! passive tracers case or NO semi-implicit hpg 330 299 ll_traqsr = .FALSE. ! active tracers case and NO solar penetration 331 300 ll_rnf = .FALSE. ! passive tracers or NO river runoffs 332 ll_isf = .FALSE. ! passive tracers or NO ice shelf melting/freezing333 301 ENDIF 334 302 ! … … 353 321 ztc_f = ztc_n + atfp * ztc_d 354 322 ! 355 IF( jk == mikt(ji,jj) ) THEN ! first level 356 ze3t_f = ze3t_f - zfact2 * ( (emp_b(ji,jj) - emp(ji,jj) ) & 357 & - (rnf_b(ji,jj) - rnf(ji,jj) ) & 358 & + (fwfisf_b(ji,jj) - fwfisf(ji,jj)) ) 323 IF( jk == 1 ) THEN ! first level 324 ze3t_f = ze3t_f - zfact2 * ( emp_b(ji,jj) - emp(ji,jj) + rnf(ji,jj) - rnf_b(ji,jj) ) 359 325 ztc_f = ztc_f - zfact1 * ( psbc_tc(ji,jj,jn) - psbc_tc_b(ji,jj,jn) ) 360 326 ENDIF 361 327 362 ! solar penetration (temperature only) 363 IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr ) & 328 IF( ll_traqsr .AND. jn == jp_tem .AND. jk <= nksr ) & ! solar penetration (temperature only) 364 329 & ztc_f = ztc_f - zfact1 * ( qsr_hc(ji,jj,jk) - qsr_hc_b(ji,jj,jk) ) 365 330 366 ! river runoff 367 IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) ) & 331 IF( ll_rnf .AND. jk <= nk_rnf(ji,jj) ) & ! river runoffs 368 332 & ztc_f = ztc_f - zfact1 * ( rnf_tsc(ji,jj,jn) - rnf_tsc_b(ji,jj,jn) ) & 369 333 & * fse3t_n(ji,jj,jk) / h_rnf(ji,jj) 370 371 ! ice shelf372 IF( ll_isf ) THEN373 ! level fully include in the Losch_2008 ice shelf boundary layer374 IF ( jk >= misfkt(ji,jj) .AND. jk < misfkb(ji,jj) ) &375 ztc_f = ztc_f - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) &376 & * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj)377 ! level partially include in Losch_2008 ice shelf boundary layer378 IF ( jk == misfkb(ji,jj) ) &379 ztc_f = ztc_f - zfact1 * ( risf_tsc(ji,jj,jn) - risf_tsc_b(ji,jj,jn) ) &380 & * fse3t_n(ji,jj,jk) * r1_hisf_tbl (ji,jj) * ralpha(ji,jj)381 END IF382 334 383 335 ze3t_f = 1.e0 / ze3t_f
Note: See TracChangeset
for help on using the changeset viewer.