- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Property svn:externals
-
old new 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/TRP/trcdmp.F90
r12178 r12928 44 44 45 45 !! * Substitutions 46 # include " vectopt_loop_substitute.h90"46 # include "do_loop_substitute.h90" 47 47 !!---------------------------------------------------------------------- 48 48 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 63 63 64 64 65 SUBROUTINE trc_dmp( kt )65 SUBROUTINE trc_dmp( kt, Kbb, Kmm, ptr, Krhs ) 66 66 !!---------------------------------------------------------------------- 67 67 !! *** ROUTINE trc_dmp *** … … 73 73 !! ** Method : Newtonian damping towards trdta computed 74 74 !! and add to the general tracer trends: 75 !! tr n = tra + restotr * (trdta - trb)75 !! tr(Kmm) = tr(Krhs) + restotr * (trdta - tr(Kbb)) 76 76 !! The trend is computed either throughout the water column 77 77 !! (nlmdmptr=0) or in area of weak vertical mixing (nlmdmptr=1) or 78 78 !! below the well mixed layer (nlmdmptr=2) 79 79 !! 80 !! ** Action : - update the tracer trends tr awith the newtonian80 !! ** Action : - update the tracer trends tr(:,:,:,:,Krhs) with the newtonian 81 81 !! damping trends. 82 82 !! - save the trends ('key_trdmxl_trc') 83 83 !!---------------------------------------------------------------------- 84 INTEGER, INTENT(in) :: kt ! ocean time-step index 84 INTEGER, INTENT(in ) :: kt ! ocean time-step index 85 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! time level indices 86 REAL(wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr ! passive tracers and RHS of tracer equation 85 87 ! 86 88 INTEGER :: ji, jj, jk, jn, jl ! dummy loop indices … … 100 102 DO jn = 1, jptra ! tracer loop 101 103 ! ! =========== 102 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends104 IF( l_trdtrc ) ztrtrd(:,:,:) = ptr(:,:,:,jn,Krhs) ! save trends 103 105 ! 104 106 IF( ln_trc_ini(jn) ) THEN ! update passive tracers arrays with input data read from file 105 107 ! 106 108 jl = n_trc_index(jn) 107 CALL trc_dta( kt, sf_trcdta(jl), rf_trfac(jl), ztrcdta ) ! read tracer data at nit000109 CALL trc_dta( kt, Kmm, sf_trcdta(jl), rf_trfac(jl), ztrcdta ) ! read tracer data at nit000 108 110 ! 109 111 SELECT CASE ( nn_zdmp_tr ) 110 112 ! 111 113 CASE( 0 ) !== newtonian damping throughout the water column ==! 112 DO jk = 1, jpkm1 113 DO jj = 2, jpjm1 114 DO ji = fs_2, fs_jpim1 ! vector opt. 115 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 116 END DO 117 END DO 118 END DO 114 DO_3D_00_00( 1, jpkm1 ) 115 ptr(ji,jj,jk,jn,Krhs) = ptr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - ptr(ji,jj,jk,jn,Kbb) ) 116 END_3D 119 117 ! 120 118 CASE ( 1 ) !== no damping in the turbocline (avt > 5 cm2/s) ==! 121 DO jk = 1, jpkm1 122 DO jj = 2, jpjm1 123 DO ji = fs_2, fs_jpim1 ! vector opt. 124 IF( avt(ji,jj,jk) <= avt_c ) THEN 125 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 126 ENDIF 127 END DO 128 END DO 129 END DO 119 DO_3D_00_00( 1, jpkm1 ) 120 IF( avt(ji,jj,jk) <= avt_c ) THEN 121 ptr(ji,jj,jk,jn,Krhs) = ptr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - ptr(ji,jj,jk,jn,Kbb) ) 122 ENDIF 123 END_3D 130 124 ! 131 125 CASE ( 2 ) !== no damping in the mixed layer ==! 132 DO jk = 1, jpkm1 133 DO jj = 2, jpjm1 134 DO ji = fs_2, fs_jpim1 ! vector opt. 135 IF( gdept_n(ji,jj,jk) >= hmlp (ji,jj) ) THEN 136 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 137 END IF 138 END DO 139 END DO 140 END DO 126 DO_3D_00_00( 1, jpkm1 ) 127 IF( gdept(ji,jj,jk,Kmm) >= hmlp (ji,jj) ) THEN 128 ptr(ji,jj,jk,jn,Krhs) = ptr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - ptr(ji,jj,jk,jn,Kbb) ) 129 END IF 130 END_3D 141 131 ! 142 132 END SELECT … … 145 135 ! 146 136 IF( l_trdtrc ) THEN 147 ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:)148 CALL trd_tra( kt, 'TRC', jn, jptra_dmp, ztrtrd )137 ztrtrd(:,:,:) = ptr(:,:,:,jn,Krhs) - ztrtrd(:,:,:) 138 CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_dmp, ztrtrd ) 149 139 END IF 150 140 ! ! =========== … … 156 146 IF( l_trdtrc ) DEALLOCATE( ztrtrd ) 157 147 ! ! print mean trends (used for debugging) 158 IF( ln_ctl) THEN148 IF( sn_cfctl%l_prttrc ) THEN 159 149 WRITE(charout, FMT="('dmp ')") 160 150 CALL prt_ctl_trc_info(charout) 161 CALL prt_ctl_trc( tab4d= tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )151 CALL prt_ctl_trc( tab4d=ptr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 162 152 ENDIF 163 153 ! … … 181 171 !!---------------------------------------------------------------------- 182 172 ! 183 REWIND( numnat_ref ) ! Namelist namtrc_dmp in reference namelist : Passive tracers newtonian damping184 173 READ ( numnat_ref, namtrc_dmp, IOSTAT = ios, ERR = 909) 185 174 909 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in reference namelist' ) 186 REWIND( numnat_cfg ) ! Namelist namtrc_dmp in configuration namelist : Passive tracers newtonian damping187 175 READ ( numnat_cfg, namtrc_dmp, IOSTAT = ios, ERR = 910) 188 176 910 IF( ios > 0 ) CALL ctl_nam ( ios , 'namtrc_dmp in configuration namelist' ) … … 224 212 225 213 226 SUBROUTINE trc_dmp_clo( kt )214 SUBROUTINE trc_dmp_clo( kt, Kbb, Kmm ) 227 215 !!--------------------------------------------------------------------- 228 216 !! *** ROUTINE trc_dmp_clo *** … … 236 224 !! nctsi2(), nctsj2() : north-east Closed sea limits (i,j) 237 225 !!---------------------------------------------------------------------- 238 INTEGER, INTENT( in ) :: kt ! ocean time-step index 226 INTEGER, INTENT( in ) :: kt ! ocean time-step index 227 INTEGER, INTENT( in ) :: Kbb, Kmm ! time level indices 239 228 ! 240 229 INTEGER :: ji , jj, jk, jn, jl, jc ! dummy loop indicesa … … 354 343 IF( ln_trc_ini(jn) ) THEN ! update passive tracers arrays with input data read from file 355 344 jl = n_trc_index(jn) 356 CALL trc_dta( kt, sf_trcdta(jl), rf_trfac(jl), ztrcdta ) ! read tracer data at nit000345 CALL trc_dta( kt, Kmm, sf_trcdta(jl), rf_trfac(jl), ztrcdta ) ! read tracer data at nit000 357 346 DO jc = 1, npncts 358 347 DO jk = 1, jpkm1 359 348 DO jj = nctsj1(jc), nctsj2(jc) 360 349 DO ji = nctsi1(jc), nctsi2(jc) 361 tr n(ji,jj,jk,jn) = ztrcdta(ji,jj,jk)362 tr b(ji,jj,jk,jn) = trn(ji,jj,jk,jn)350 tr(ji,jj,jk,jn,Kmm) = ztrcdta(ji,jj,jk) 351 tr(ji,jj,jk,jn,Kbb) = tr(ji,jj,jk,jn,Kmm) 363 352 END DO 364 353 END DO
Note: See TracChangeset
for help on using the changeset viewer.