- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/TRA/tranpc.F90
r10425 r13463 34 34 35 35 !! * Substitutions 36 # include "vectopt_loop_substitute.h90" 36 # include "do_loop_substitute.h90" 37 # include "domzgr_substitute.h90" 37 38 !!---------------------------------------------------------------------- 38 39 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 42 43 CONTAINS 43 44 44 SUBROUTINE tra_npc( kt )45 SUBROUTINE tra_npc( kt, Kmm, Krhs, pts, Kaa ) 45 46 !!---------------------------------------------------------------------- 46 47 !! *** ROUTINE tranpc *** … … 58 59 !! References : Madec, et al., 1991, JPO, 21, 9, 1349-1371. 59 60 !!---------------------------------------------------------------------- 60 INTEGER, INTENT(in) :: kt ! ocean time-step index 61 INTEGER, INTENT(in ) :: kt ! ocean time-step index 62 INTEGER, INTENT(in ) :: Kmm, Krhs, Kaa ! time level indices 63 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 61 64 ! 62 65 INTEGER :: ji, jj, jk ! dummy loop indices … … 65 68 LOGICAL :: l_bottom_reached, l_column_treated 66 69 REAL(wp) :: zta, zalfa, zsum_temp, zsum_alfa, zaw, zdz, zsum_z 67 REAL(wp) :: zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw, z1_r 2dt68 REAL(wp), PARAMETER :: zn2_zero = 1.e-14_wp ! acceptance criteria for neutrality (N2==0)69 REAL(wp), DIMENSION( jpk ) :: zvn2 ! vertical profile of N2 at 1 given point...70 REAL(wp), DIMENSION( jpk,jpts) :: zvts, zvab ! vertical profile of T & S , and alpha & betaat 1 given point71 REAL(wp), DIMENSION(jpi,jpj,jpk ) :: zn2 ! N^272 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zab ! alpha and beta73 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, ztrds 70 REAL(wp) :: zsa, zbeta, zsum_sali, zsum_beta, zbw, zrw, z1_rDt 71 REAL(wp), PARAMETER :: zn2_zero = 1.e-14_wp ! acceptance criteria for neutrality (N2==0) 72 REAL(wp), DIMENSION( jpk ) :: zvn2 ! vertical profile of N2 at 1 given point... 73 REAL(wp), DIMENSION( jpk,jpts) :: zvts, zvab ! vertical profile of T & S , and alpha & betaat 1 given point 74 REAL(wp), DIMENSION(jpi,jpj,jpk ) :: zn2 ! N^2 75 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) :: zab ! alpha and beta 76 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, ztrds ! 3D workspace 74 77 ! 75 78 LOGICAL, PARAMETER :: l_LB_debug = .FALSE. ! set to true if you want to follow what is … … 84 87 IF( l_trdtra ) THEN !* Save initial after fields 85 88 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 86 ztrdt(:,:,:) = tsa(:,:,:,jp_tem)87 ztrds(:,:,:) = tsa(:,:,:,jp_sal)89 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Kaa) 90 ztrds(:,:,:) = pts(:,:,:,jp_sal,Kaa) 88 91 ENDIF 89 92 ! … … 95 98 ENDIF 96 99 ! 97 CALL eos_rab( tsa, zab) ! after alpha and beta (given on T-points)98 CALL bn2 ( tsa, zab, zn2) ! after Brunt-Vaisala (given on W-points)100 CALL eos_rab( pts(:,:,:,:,Kaa), zab, Kmm ) ! after alpha and beta (given on T-points) 101 CALL bn2 ( pts(:,:,:,:,Kaa), zab, zn2, Kmm ) ! after Brunt-Vaisala (given on W-points) 99 102 ! 100 103 inpcc = 0 101 104 ! 102 DO jj = 2, jpjm1 ! interior column only 103 DO ji = fs_2, fs_jpim1 105 DO_2D( 0, 0, 0, 0 ) 106 ! 107 IF( tmask(ji,jj,2) == 1 ) THEN ! At least 2 ocean points 108 ! ! consider one ocean column 109 zvts(:,jp_tem) = pts(ji,jj,:,jp_tem,Kaa) ! temperature 110 zvts(:,jp_sal) = pts(ji,jj,:,jp_sal,Kaa) ! salinity 104 111 ! 105 IF( tmask(ji,jj,2) == 1 ) THEN ! At least 2 ocean points 106 ! ! consider one ocean column 107 zvts(:,jp_tem) = tsa(ji,jj,:,jp_tem) ! temperature 108 zvts(:,jp_sal) = tsa(ji,jj,:,jp_sal) ! salinity 109 ! 110 zvab(:,jp_tem) = zab(ji,jj,:,jp_tem) ! Alpha 111 zvab(:,jp_sal) = zab(ji,jj,:,jp_sal) ! Beta 112 zvn2(:) = zn2(ji,jj,:) ! N^2 113 ! 114 IF( l_LB_debug ) THEN !LB debug: 115 lp_monitor_point = .FALSE. 116 IF( ( ji == ilc1 ).AND.( jj == jlc1 ) ) lp_monitor_point = .TRUE. 117 ! writing only if on CPU domain where conv region is: 118 lp_monitor_point = (narea == nncpu).AND.lp_monitor_point 119 ENDIF !LB debug end 120 ! 121 ikbot = mbkt(ji,jj) ! ikbot: ocean bottom T-level 122 ikp = 1 ! because N2 is irrelevant at the surface level (will start at ikp=2) 123 ilayer = 0 124 jiter = 0 125 l_column_treated = .FALSE. 126 ! 127 DO WHILE ( .NOT. l_column_treated ) 128 ! 129 jiter = jiter + 1 130 ! 131 IF( jiter >= 400 ) EXIT 132 ! 133 l_bottom_reached = .FALSE. 134 ! 135 DO WHILE ( .NOT. l_bottom_reached ) 136 ! 137 ikp = ikp + 1 138 ! 139 !! Testing level ikp for instability 140 !! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 141 IF( zvn2(ikp) < -zn2_zero ) THEN ! Instability found! 142 ! 143 ilayer = ilayer + 1 ! yet another instable portion of the water column found.... 144 ! 145 IF( lp_monitor_point ) THEN 112 zvab(:,jp_tem) = zab(ji,jj,:,jp_tem) ! Alpha 113 zvab(:,jp_sal) = zab(ji,jj,:,jp_sal) ! Beta 114 zvn2(:) = zn2(ji,jj,:) ! N^2 115 ! 116 IF( l_LB_debug ) THEN !LB debug: 117 lp_monitor_point = .FALSE. 118 IF( ( ji == ilc1 ).AND.( jj == jlc1 ) ) lp_monitor_point = .TRUE. 119 ! writing only if on CPU domain where conv region is: 120 lp_monitor_point = (narea == nncpu).AND.lp_monitor_point 121 ENDIF !LB debug end 122 ! 123 ikbot = mbkt(ji,jj) ! ikbot: ocean bottom T-level 124 ikp = 1 ! because N2 is irrelevant at the surface level (will start at ikp=2) 125 ilayer = 0 126 jiter = 0 127 l_column_treated = .FALSE. 128 ! 129 DO WHILE ( .NOT. l_column_treated ) 130 ! 131 jiter = jiter + 1 132 ! 133 IF( jiter >= 400 ) EXIT 134 ! 135 l_bottom_reached = .FALSE. 136 ! 137 DO WHILE ( .NOT. l_bottom_reached ) 138 ! 139 ikp = ikp + 1 140 ! 141 !! Testing level ikp for instability 142 !! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 143 IF( zvn2(ikp) < -zn2_zero ) THEN ! Instability found! 144 ! 145 ilayer = ilayer + 1 ! yet another instable portion of the water column found.... 146 ! 147 IF( lp_monitor_point ) THEN 148 WRITE(numout,*) 149 IF( ilayer == 1 .AND. jiter == 1 ) THEN ! first time a column is spoted with an instability 146 150 WRITE(numout,*) 147 IF( ilayer == 1 .AND. jiter == 1 ) THEN ! first time a column is spoted with an instability 148 WRITE(numout,*) 149 WRITE(numout,*) 'Time step = ',kt,' !!!' 150 ENDIF 151 WRITE(numout,*) ' * Iteration #',jiter,': found instable portion #',ilayer, & 152 & ' in column! Starting at ikp =', ikp 153 WRITE(numout,*) ' *** N2 for point (i,j) = ',ji,' , ',jj 154 DO jk = 1, klc1 155 WRITE(numout,*) jk, zvn2(jk) 156 END DO 157 WRITE(numout,*) 151 WRITE(numout,*) 'Time step = ',kt,' !!!' 158 152 ENDIF 159 ! 160 IF( jiter == 1 ) inpcc = inpcc + 1 161 ! 162 IF( lp_monitor_point ) WRITE(numout, *) 'Negative N2 at ikp =',ikp,' for layer #', ilayer 163 ! 164 !! ikup is the uppermost point where mixing will start: 165 ikup = ikp - 1 ! ikup is always "at most at ikp-1", less if neutral levels overlying 166 ! 167 !! If the points above ikp-1 have N2 == 0 they must also be mixed: 168 IF( ikp > 2 ) THEN 169 DO jk = ikp-1, 2, -1 170 IF( ABS(zvn2(jk)) < zn2_zero ) THEN 171 ikup = ikup - 1 ! 1 more upper level has N2=0 and must be added for the mixing 172 ELSE 173 EXIT 174 ENDIF 175 END DO 176 ENDIF 177 ! 178 IF( ikup < 1 ) CALL ctl_stop( 'tra_npc : PROBLEM #1') 179 ! 180 zsum_temp = 0._wp 181 zsum_sali = 0._wp 182 zsum_alfa = 0._wp 183 zsum_beta = 0._wp 184 zsum_z = 0._wp 185 186 DO jk = ikup, ikbot ! Inside the instable (and overlying neutral) portion of the column 187 ! 188 zdz = e3t_n(ji,jj,jk) 189 zsum_temp = zsum_temp + zvts(jk,jp_tem)*zdz 190 zsum_sali = zsum_sali + zvts(jk,jp_sal)*zdz 191 zsum_alfa = zsum_alfa + zvab(jk,jp_tem)*zdz 192 zsum_beta = zsum_beta + zvab(jk,jp_sal)*zdz 193 zsum_z = zsum_z + zdz 194 ! 195 IF( jk == ikbot ) EXIT ! avoid array-index overshoot in case ikbot = jpk, cause we're calling jk+1 next line 196 !! EXIT when we have reached the last layer that is instable (N2<0) or neutral (N2=0): 197 IF( zvn2(jk+1) > zn2_zero ) EXIT 198 END DO 199 200 ikdown = jk ! for the current unstable layer, ikdown is the deepest point with a negative or neutral N2 201 IF( ikup == ikdown ) CALL ctl_stop( 'tra_npc : PROBLEM #2') 202 203 ! Mixing Temperature, salinity, alpha and beta from ikup to ikdown included: 204 zta = zsum_temp/zsum_z 205 zsa = zsum_sali/zsum_z 206 zalfa = zsum_alfa/zsum_z 207 zbeta = zsum_beta/zsum_z 208 209 IF( lp_monitor_point ) THEN 210 WRITE(numout,*) 'MIXED T, S, alfa and beta between ikup =',ikup, & 211 & ' and ikdown =',ikdown,', in layer #',ilayer 212 WRITE(numout,*) ' => Mean temp. in that portion =', zta 213 WRITE(numout,*) ' => Mean sali. in that portion =', zsa 214 WRITE(numout,*) ' => Mean Alfa in that portion =', zalfa 215 WRITE(numout,*) ' => Mean Beta in that portion =', zbeta 216 ENDIF 217 218 !! Homogenaizing the temperature, salinity, alpha and beta in this portion of the column 219 DO jk = ikup, ikdown 220 zvts(jk,jp_tem) = zta 221 zvts(jk,jp_sal) = zsa 222 zvab(jk,jp_tem) = zalfa 223 zvab(jk,jp_sal) = zbeta 224 END DO 225 226 227 !! Updating N2 in the relvant portion of the water column 228 !! Temperature, Salinity, Alpha and Beta have been homogenized in the unstable portion 229 !! => Need to re-compute N2! will use Alpha and Beta! 230 231 ikup = MAX(2,ikup) ! ikup can never be 1 ! 232 ik_low = MIN(ikdown+1,ikbot) ! we must go 1 point deeper than ikdown! 233 234 DO jk = ikup, ik_low ! we must go 1 point deeper than ikdown! 235 236 !! Interpolating alfa and beta at W point: 237 zrw = (gdepw_n(ji,jj,jk ) - gdept_n(ji,jj,jk)) & 238 & / (gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk)) 239 zaw = zvab(jk,jp_tem) * (1._wp - zrw) + zvab(jk-1,jp_tem) * zrw 240 zbw = zvab(jk,jp_sal) * (1._wp - zrw) + zvab(jk-1,jp_sal) * zrw 241 242 !! N2 at W point, doing exactly as in eosbn2.F90: 243 zvn2(jk) = grav*( zaw * ( zvts(jk-1,jp_tem) - zvts(jk,jp_tem) ) & 244 & - zbw * ( zvts(jk-1,jp_sal) - zvts(jk,jp_sal) ) ) & 245 & / e3w_n(ji,jj,jk) * tmask(ji,jj,jk) 246 247 !! OR, faster => just considering the vertical gradient of density 248 !! as only the signa maters... 249 !zvn2(jk) = ( zaw * ( zvts(jk-1,jp_tem) - zvts(jk,jp_tem) ) & 250 ! & - zbw * ( zvts(jk-1,jp_sal) - zvts(jk,jp_sal) ) ) 251 252 END DO 253 254 ikp = MIN(ikdown+1,ikbot) 255 256 257 ENDIF !IF( zvn2(ikp) < 0. ) 258 259 260 IF( ikp == ikbot ) l_bottom_reached = .TRUE. 261 ! 262 END DO ! DO WHILE ( .NOT. l_bottom_reached ) 263 264 IF( ikp /= ikbot ) CALL ctl_stop( 'tra_npc : PROBLEM #3') 265 266 ! ******* At this stage ikp == ikbot ! ******* 267 268 IF( ilayer > 0 ) THEN !! least an unstable layer has been found 269 ! 270 IF( lp_monitor_point ) THEN 271 WRITE(numout,*) 272 WRITE(numout,*) 'After ',jiter,' iteration(s), we neutralized ',ilayer,' instable layer(s)' 273 WRITE(numout,*) ' ==> N2 at i,j=',ji,',',jj,' now looks like this:' 153 WRITE(numout,*) ' * Iteration #',jiter,': found instable portion #',ilayer, & 154 & ' in column! Starting at ikp =', ikp 155 WRITE(numout,*) ' *** N2 for point (i,j) = ',ji,' , ',jj 274 156 DO jk = 1, klc1 275 157 WRITE(numout,*) jk, zvn2(jk) … … 278 160 ENDIF 279 161 ! 280 ikp = 1 ! starting again at the surface for the next iteration 281 ilayer = 0 162 IF( jiter == 1 ) inpcc = inpcc + 1 163 ! 164 IF( lp_monitor_point ) WRITE(numout, *) 'Negative N2 at ikp =',ikp,' for layer #', ilayer 165 ! 166 !! ikup is the uppermost point where mixing will start: 167 ikup = ikp - 1 ! ikup is always "at most at ikp-1", less if neutral levels overlying 168 ! 169 !! If the points above ikp-1 have N2 == 0 they must also be mixed: 170 IF( ikp > 2 ) THEN 171 DO jk = ikp-1, 2, -1 172 IF( ABS(zvn2(jk)) < zn2_zero ) THEN 173 ikup = ikup - 1 ! 1 more upper level has N2=0 and must be added for the mixing 174 ELSE 175 EXIT 176 ENDIF 177 END DO 178 ENDIF 179 ! 180 IF( ikup < 1 ) CALL ctl_stop( 'tra_npc : PROBLEM #1') 181 ! 182 zsum_temp = 0._wp 183 zsum_sali = 0._wp 184 zsum_alfa = 0._wp 185 zsum_beta = 0._wp 186 zsum_z = 0._wp 187 188 DO jk = ikup, ikbot ! Inside the instable (and overlying neutral) portion of the column 189 ! 190 zdz = e3t(ji,jj,jk,Kmm) 191 zsum_temp = zsum_temp + zvts(jk,jp_tem)*zdz 192 zsum_sali = zsum_sali + zvts(jk,jp_sal)*zdz 193 zsum_alfa = zsum_alfa + zvab(jk,jp_tem)*zdz 194 zsum_beta = zsum_beta + zvab(jk,jp_sal)*zdz 195 zsum_z = zsum_z + zdz 196 ! 197 IF( jk == ikbot ) EXIT ! avoid array-index overshoot in case ikbot = jpk, cause we're calling jk+1 next line 198 !! EXIT when we have reached the last layer that is instable (N2<0) or neutral (N2=0): 199 IF( zvn2(jk+1) > zn2_zero ) EXIT 200 END DO 201 202 ikdown = jk ! for the current unstable layer, ikdown is the deepest point with a negative or neutral N2 203 IF( ikup == ikdown ) CALL ctl_stop( 'tra_npc : PROBLEM #2') 204 205 ! Mixing Temperature, salinity, alpha and beta from ikup to ikdown included: 206 zta = zsum_temp/zsum_z 207 zsa = zsum_sali/zsum_z 208 zalfa = zsum_alfa/zsum_z 209 zbeta = zsum_beta/zsum_z 210 211 IF( lp_monitor_point ) THEN 212 WRITE(numout,*) 'MIXED T, S, alfa and beta between ikup =',ikup, & 213 & ' and ikdown =',ikdown,', in layer #',ilayer 214 WRITE(numout,*) ' => Mean temp. in that portion =', zta 215 WRITE(numout,*) ' => Mean sali. in that portion =', zsa 216 WRITE(numout,*) ' => Mean Alfa in that portion =', zalfa 217 WRITE(numout,*) ' => Mean Beta in that portion =', zbeta 218 ENDIF 219 220 !! Homogenaizing the temperature, salinity, alpha and beta in this portion of the column 221 DO jk = ikup, ikdown 222 zvts(jk,jp_tem) = zta 223 zvts(jk,jp_sal) = zsa 224 zvab(jk,jp_tem) = zalfa 225 zvab(jk,jp_sal) = zbeta 226 END DO 227 228 229 !! Updating N2 in the relvant portion of the water column 230 !! Temperature, Salinity, Alpha and Beta have been homogenized in the unstable portion 231 !! => Need to re-compute N2! will use Alpha and Beta! 232 233 ikup = MAX(2,ikup) ! ikup can never be 1 ! 234 ik_low = MIN(ikdown+1,ikbot) ! we must go 1 point deeper than ikdown! 235 236 DO jk = ikup, ik_low ! we must go 1 point deeper than ikdown! 237 238 !! Interpolating alfa and beta at W point: 239 zrw = (gdepw(ji,jj,jk ,Kmm) - gdept(ji,jj,jk,Kmm)) & 240 & / (gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm)) 241 zaw = zvab(jk,jp_tem) * (1._wp - zrw) + zvab(jk-1,jp_tem) * zrw 242 zbw = zvab(jk,jp_sal) * (1._wp - zrw) + zvab(jk-1,jp_sal) * zrw 243 244 !! N2 at W point, doing exactly as in eosbn2.F90: 245 zvn2(jk) = grav*( zaw * ( zvts(jk-1,jp_tem) - zvts(jk,jp_tem) ) & 246 & - zbw * ( zvts(jk-1,jp_sal) - zvts(jk,jp_sal) ) ) & 247 & / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 248 249 !! OR, faster => just considering the vertical gradient of density 250 !! as only the signa maters... 251 !zvn2(jk) = ( zaw * ( zvts(jk-1,jp_tem) - zvts(jk,jp_tem) ) & 252 ! & - zbw * ( zvts(jk-1,jp_sal) - zvts(jk,jp_sal) ) ) 253 254 END DO 255 256 ikp = MIN(ikdown+1,ikbot) 257 258 259 ENDIF !IF( zvn2(ikp) < 0. ) 260 261 262 IF( ikp == ikbot ) l_bottom_reached = .TRUE. 263 ! 264 END DO ! DO WHILE ( .NOT. l_bottom_reached ) 265 266 IF( ikp /= ikbot ) CALL ctl_stop( 'tra_npc : PROBLEM #3') 267 268 ! ******* At this stage ikp == ikbot ! ******* 269 270 IF( ilayer > 0 ) THEN !! least an unstable layer has been found 271 ! 272 IF( lp_monitor_point ) THEN 273 WRITE(numout,*) 274 WRITE(numout,*) 'After ',jiter,' iteration(s), we neutralized ',ilayer,' instable layer(s)' 275 WRITE(numout,*) ' ==> N2 at i,j=',ji,',',jj,' now looks like this:' 276 DO jk = 1, klc1 277 WRITE(numout,*) jk, zvn2(jk) 278 END DO 279 WRITE(numout,*) 282 280 ENDIF 283 281 ! 284 IF( ikp >= ikbot ) l_column_treated = .TRUE. 285 ! 286 END DO ! DO WHILE ( .NOT. l_column_treated ) 287 288 !! Updating tsa: 289 tsa(ji,jj,:,jp_tem) = zvts(:,jp_tem) 290 tsa(ji,jj,:,jp_sal) = zvts(:,jp_sal) 291 292 !! LB: Potentially some other global variable beside theta and S can be treated here 293 !! like BGC tracers. 294 295 IF( lp_monitor_point ) WRITE(numout,*) 296 297 ENDIF ! IF( tmask(ji,jj,3) == 1 ) THEN 298 299 END DO ! ji 300 END DO ! jj 282 ikp = 1 ! starting again at the surface for the next iteration 283 ilayer = 0 284 ENDIF 285 ! 286 IF( ikp >= ikbot ) l_column_treated = .TRUE. 287 ! 288 END DO ! DO WHILE ( .NOT. l_column_treated ) 289 290 !! Updating pts: 291 pts(ji,jj,:,jp_tem,Kaa) = zvts(:,jp_tem) 292 pts(ji,jj,:,jp_sal,Kaa) = zvts(:,jp_sal) 293 294 !! LB: Potentially some other global variable beside theta and S can be treated here 295 !! like BGC tracers. 296 297 IF( lp_monitor_point ) WRITE(numout,*) 298 299 ENDIF ! IF( tmask(ji,jj,3) == 1 ) THEN 300 301 END_2D 301 302 ! 302 303 IF( l_trdtra ) THEN ! send the Non penetrative mixing trends for diagnostic 303 z1_r 2dt = 1._wp / (2._wp * rdt)304 ztrdt(:,:,:) = ( tsa(:,:,:,jp_tem) - ztrdt(:,:,:) ) * z1_r2dt305 ztrds(:,:,:) = ( tsa(:,:,:,jp_sal) - ztrds(:,:,:) ) * z1_r2dt306 CALL trd_tra( kt, 'TRA', jp_tem, jptra_npc, ztrdt )307 CALL trd_tra( kt, 'TRA', jp_sal, jptra_npc, ztrds )304 z1_rDt = 1._wp / (2._wp * rn_Dt) 305 ztrdt(:,:,:) = ( pts(:,:,:,jp_tem,Kaa) - ztrdt(:,:,:) ) * z1_rDt 306 ztrds(:,:,:) = ( pts(:,:,:,jp_sal,Kaa) - ztrds(:,:,:) ) * z1_rDt 307 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_npc, ztrdt ) 308 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_npc, ztrds ) 308 309 DEALLOCATE( ztrdt, ztrds ) 309 310 ENDIF 310 311 ! 311 CALL lbc_lnk_multi( 'tranpc', tsa(:,:,:,jp_tem), 'T', 1., tsa(:,:,:,jp_sal), 'T', 1.)312 CALL lbc_lnk_multi( 'tranpc', pts(:,:,:,jp_tem,Kaa), 'T', 1.0_wp, pts(:,:,:,jp_sal,Kaa), 'T', 1.0_wp ) 312 313 ! 313 314 IF( lwp .AND. l_LB_debug ) THEN
Note: See TracChangeset
for help on using the changeset viewer.