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