154
155
159# ifdef SEDIMENT_NOT_YET
161# endif
162
165# ifdef DISTRIBUTE
167# endif
168
169
170
171 integer, intent(in) :: ng, tile, model
172 integer, intent(in) :: LBi, UBi, LBj, UBj
173 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
174 integer, intent(in) :: nrhs
175
176# ifdef ASSUMED_SHAPE
177# ifdef MASKING
178 real(r8), intent(in) :: rmask(LBi:,LBj:)
179# endif
180# ifdef VAR_RHO_2D_NOT_YET
181 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
182# endif
183 real(r8), intent(in) :: z_r(LBi:,LBj:,:)
184 real(r8), intent(in) :: z_w(LBi:,LBj:,0:)
185 real(r8), intent(in) :: t(LBi:,LBj:,:,:,:)
186# ifdef VAR_RHO_2D_NOT_YET
187 real(r8), intent(in) :: tl_Hz(LBi:,LBj:,:)
188# endif
189 real(r8), intent(in) :: tl_z_r(LBi:,LBj:,:)
190 real(r8), intent(in) :: tl_z_w(LBi:,LBj:,0:)
191 real(r8), intent(in) :: tl_t(LBi:,LBj:,:,:,:)
192# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
193 defined bulk_fluxes
194 real(r8), intent(inout) :: alpha(LBi:,LBj:)
195 real(r8), intent(inout) :: beta(LBi:,LBj:)
196# endif
197# ifdef VAR_RHO_2D_NOT_YET
198 real(r8), intent(out) :: rhoA(LBi:,LBj:)
199 real(r8), intent(out) :: rhoS(LBi:,LBj:)
200 real(r8), intent(out) :: tl_rhoA(LBi:,LBj:)
201 real(r8), intent(out) :: tl_rhoS(LBi:,LBj:)
202# endif
203# ifdef BV_FREQUENCY_NOT_YET
204 real(r8), intent(out) :: tl_bvf(LBi:,LBj:,0:)
205# endif
206# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
207 defined bulk_fluxes
208 real(r8), intent(out) :: tl_alpha(LBi:,LBj:)
209 real(r8), intent(out) :: tl_beta(LBi:,LBj:)
210# ifdef LMD_DDMIX_NOT_YET
211 real(r8), intent(out) :: tl_alfaobeta(LBi:,LBj:,0:)
212# endif
213# endif
214# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
215 real(r8), intent(out) :: tl_pden(LBi:,LBj:,:)
216# endif
217 real(r8), intent(out) :: rho(LBi:,LBj:,:)
218 real(r8), intent(out) :: tl_rho(LBi:,LBj:,:)
219# else
220# ifdef MASKING
221 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
222# endif
223# ifdef VAR_RHO_2D_NOT_YET
224 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
225# endif
226 real(r8), intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
227 real(r8), intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
228 real(r8), intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
229# ifdef VAR_RHO_2D_NOT_YET
230 real(r8), intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
231# endif
232 real(r8), intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
233 real(r8), intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
234 real(r8), intent(in) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
235# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
236 defined bulk_fluxes
237 real(r8), intent(inout) :: alpha(LBi:UBi,LBj:UBj)
238 real(r8), intent(inout) :: beta(LBi:UBi,LBj:UBj)
239# endif
240# ifdef VAR_RHO_2D_NOT_YET
241 real(r8), intent(out) :: rhoA(LBi:UBi,LBj:UBj)
242 real(r8), intent(out) :: rhoS(LBi:UBi,LBj:UBj)
243 real(r8), intent(out) :: tl_rhoA(LBi:UBi,LBj:UBj)
244 real(r8), intent(out) :: tl_rhoS(LBi:UBi,LBj:UBj)
245# endif
246# ifdef BV_FREQUENCY_NOT_YET
247 real(r8), intent(out) :: tl_bvf(LBi:UBi,LBj:UBj,0:N(ng))
248# endif
249# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
250 defined bulk_fluxes
251 real(r8), intent(out) :: tl_alpha(LBi:UBi,LBj:UBj)
252 real(r8), intent(out) :: tl_beta(LBi:UBi,LBj:UBj)
253# ifdef LMD_DDMIX_NOT_YET
254 real(r8), intent(out) :: tl_alfaobeta(LBi:UBi,LBj:UBj,0:N(ng))
255# endif
256# endif
257# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
258 real(r8), intent(out) :: tl_pden(LBi:UBi,LBj:UBj,N(ng))
259# endif
260 real(r8), intent(out) :: rho(LBi:UBi,LBj:UBj,N(ng))
261 real(r8), intent(out) :: tl_rho(LBi:UBi,LBj:UBj,N(ng))
262# endif
263
264
265
266 integer :: i, ised, itrc, j, k
267
268 real(r8) :: SedDen, Tp, Tpr10, Ts, Tt, sqrtTs
269 real(r8) :: tl_SedDen, tl_Tp, tl_Tpr10, tl_Ts, tl_Tt, tl_sqrtTs
270# ifdef BV_FREQUENCY_NOT_YET
271 real(r8) :: bulk_dn, bulk_up, den_dn, den_up
272 real(r8) :: tl_bulk_dn, tl_bulk_up, tl_den_dn, tl_den_up
273# endif
274 real(r8) :: cff, cff1, cff2, cff3
275 real(r8) :: tl_cff, tl_cff1, tl_cff2, tl_cff3
276
277 real(r8), dimension(0:9) :: C
278 real(r8), dimension(0:9) :: tl_C
279# ifdef EOS_TDERIVATIVE
280 real(r8), dimension(0:9) :: dCdT(0:9)
281 real(r8), dimension(0:9) :: tl_dCdT(0:9)
282 real(r8), dimension(0:9) :: d2Cd2T(0:9)
283
284 real(r8), dimension(IminS:ImaxS,N(ng)) :: DbulkDS
285 real(r8), dimension(IminS:ImaxS,N(ng)) :: DbulkDT
286 real(r8), dimension(IminS:ImaxS,N(ng)) :: Dden1DS
287 real(r8), dimension(IminS:ImaxS,N(ng)) :: Dden1DT
288 real(r8), dimension(IminS:ImaxS,N(ng)) :: Scof
289 real(r8), dimension(IminS:ImaxS,N(ng)) :: Tcof
290 real(r8), dimension(IminS:ImaxS,N(ng)) :: wrk
291
292 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_DbulkDS
293 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_DbulkDT
294 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_Dden1DS
295 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_Dden1DT
296 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_Scof
297 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_Tcof
298 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_wrk
299# endif
300 real(r8), dimension(IminS:ImaxS,N(ng)) :: bulk
301 real(r8), dimension(IminS:ImaxS,N(ng)) :: bulk0
302 real(r8), dimension(IminS:ImaxS,N(ng)) :: bulk1
303 real(r8), dimension(IminS:ImaxS,N(ng)) :: bulk2
304 real(r8), dimension(IminS:ImaxS,N(ng)) :: den
305 real(r8), dimension(IminS:ImaxS,N(ng)) :: den1
306
307 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_bulk
308 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_bulk0
309 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_bulk1
310 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_bulk2
311 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_den
312 real(r8), dimension(IminS:ImaxS,N(ng)) :: tl_den1
313
314# include "set_bounds.h"
315
316
317
318
319
320
321
322 DO j=jstrt,jendt
324 DO i=istrt,iendt
325
326
327
328
329 tt=max(-2.0_r8,t(i,j,k,nrhs,
itemp))
330 tl_tt=(0.5_r8-sign(0.5_r8,-2.0_r8-t(i,j,k,nrhs,
itemp)))* &
331 & tl_t(i,j,k,nrhs,
itemp)- &
332# ifdef TL_IOMS
333 & 2.0_r8*(0.5_r8+sign(0.5_r8, &
334 & -2.0_r8-t(i,j,k,nrhs,
itemp)))
335# endif
336# ifdef SALINITY
337 ts=max(0.0_r8,t(i,j,k,nrhs,
isalt))
338 tl_ts=(0.5_r8-sign(0.5_r8,-t(i,j,k,nrhs,
isalt)))* &
339 & tl_t(i,j,k,nrhs,
isalt)
340 sqrtts=sqrt(ts)
341 IF (ts.ne.0.0_r8) THEN
342 tl_sqrtts=0.5_r8*(tl_ts/sqrtts)+ &
343# ifdef TL_IOMS
344 & 0.5_r8*sqrtts
345# endif
346 ELSE
347 tl_sqrtts=0.0_r8
348 END IF
349# else
350 ts=0.0_r8
351 tl_ts=0.0_r8
352 sqrtts=0.0_r8
353 tl_sqrtts=0.0_r8
354# endif
355 tp=z_r(i,j,k)
356 tl_tp=tl_z_r(i,j,k)
357 tpr10=0.1_r8*tp
358 tl_tpr10=0.1_r8*tl_tp
359
360
361
362
363
364
368# ifdef EOS_TDERIVATIVE
369
370 dcdt(0)=
q01+tt*(2.0_r8*
q02+tt*(3.0_r8*
q03+tt*(4.0_r8*
q04+ &
372 dcdt(1)=
u01+tt*(2.0_r8*
u02+tt*(3.0_r8*
u03+tt*4.0_r8*
u04))
374# endif
375 tl_c(0)=tl_tt*dcdt(0)+ &
376# ifdef TL_IOMS
379# endif
380 tl_c(1)=tl_tt*dcdt(1)+ &
381# ifdef TL_IOMS
383# endif
384 tl_c(2)=tl_tt*dcdt(2)+ &
385# ifdef TL_IOMS
387# endif
388
389 den1(i,k)=c(0)+ts*(c(1)+sqrtts*c(2)+ts*
w00)
390 tl_den1(i,k)=tl_c(0)+ &
391 & tl_ts*(c(1)+sqrtts*c(2)+ts*
w00)+ &
392 & ts*(tl_c(1)+tl_sqrtts*c(2)+ &
393 & sqrtts*tl_c(2)+tl_ts*
w00)- &
394# ifdef TL_IOMS
395 & ts*(c(1)+2.0_r8*sqrtts*c(2)+ts*
w00)
396# endif
397# ifdef EOS_TDERIVATIVE
398
399
400
401
402
403 d2cd2t(0)=2.0_r8*
q02+tt*(6.0_r8*
q03+tt*(12.0_r8*
q04+ &
405 d2cd2t(1)=2.0_r8*
u02+tt*(6.0_r8*
u03+tt*12.0_r8*
u04)
407
408 tl_dcdt(0)=tl_tt*d2cd2t(0)+ &
409# ifdef TL_IOMS
410 &
q01-tt*tt*(3.0_r8*
q03+tt*(8.0_r8*
q04+ &
411 & tt*15.0_r8*
q05*tt))
412# endif
413 tl_dcdt(1)=tl_tt*d2cd2t(1)+ &
414# ifdef TL_IOMS
416# endif
417 tl_dcdt(2)=tl_tt*d2cd2t(2)+ &
418# ifdef TL_IOMS
420# endif
421
422 dden1ds(i,k)=c(1)+1.5_r8*c(2)*sqrtts+2.0_r8*
w00*ts
423 dden1dt(i,k)=dcdt(0)+ts*(dcdt(1)+sqrtts*dcdt(2))
424
425 tl_dden1ds(i,k)=tl_c(1)+ &
426 & 1.5_r8*(tl_c(2)*sqrtts+ &
427 & c(2)*tl_sqrtts)+ &
428 & 2.0_r8*
w00*tl_ts- &
429# ifdef TL_IOMS
430 & 1.5_r8*c(2)*sqrtts
431# endif
432 tl_dden1dt(i,k)=tl_dcdt(0)+ &
433 & tl_ts*(dcdt(1)+sqrtts*dcdt(2))+ &
434 & ts*(tl_dcdt(1)+tl_sqrtts*dcdt(2)+ &
435 & sqrtts*tl_dcdt(2))- &
436# ifdef TL_IOMS
437 & ts*(dcdt(1)+2.0_r8*sqrtts*dcdt(2))
438# endif
439# endif
440
441
442
443
444
452# ifdef EOS_TDERIVATIVE
453
454 dcdt(3)=
a01+tt*(2.0_r8*
a02+tt*(3.0_r8*
a03+tt*4.0_r8*
a04))
455 dcdt(4)=
b01+tt*(2.0_r8*
b02+tt*3.0_r8*
b03)
457 dcdt(6)=
e01+tt*(2.0_r8*
e02+tt*3.0_r8*
e03)
461# endif
462
463 tl_c(3)=tl_tt*dcdt(3)+ &
464# ifdef TL_IOMS
466# endif
467 tl_c(4)=tl_tt*dcdt(4)+ &
468# ifdef TL_IOMS
470# endif
471 tl_c(5)=tl_tt*dcdt(5)+ &
472# ifdef TL_IOMS
474# endif
475 tl_c(6)=tl_tt*dcdt(6)+ &
476# ifdef TL_IOMS
478# endif
479 tl_c(7)=tl_tt*dcdt(7)+ &
480# ifdef TL_IOMS
482# endif
483 tl_c(8)=tl_tt*dcdt(8)+ &
484# ifdef TL_IOMS
486# endif
487 tl_c(9)=tl_tt*dcdt(9)+ &
488# ifdef TL_IOMS
490# endif
491
492 bulk0(i,k)=c(3)+ts*(c(4)+sqrtts*c(5))
493 bulk1(i,k)=c(6)+ts*(c(7)+sqrtts*
g00)
494 bulk2(i,k)=c(8)+ts*c(9)
495 bulk(i,k)=bulk0(i,k)-tp*(bulk1(i,k)-tp*bulk2(i,k))
496
497 tl_bulk0(i,k)=tl_c(3)+ &
498 & tl_ts*(c(4)+sqrtts*c(5))+ &
499 & ts*(tl_c(4)+tl_sqrtts*c(5)+ &
500 & sqrtts*tl_c(5))- &
501# ifdef TL_IOMS
502 & ts*(c(4)+2.0_r8*sqrtts*c(5))
503# endif
504 tl_bulk1(i,k)=tl_c(6)+ &
505 & tl_ts*(c(7)+sqrtts*
g00)+ &
506 & ts*(tl_c(7)+tl_sqrtts*
g00)- &
507# ifdef TL_IOMS
508 & ts*(c(7)+sqrtts*
g00)
509# endif
510 tl_bulk2(i,k)=tl_c(8)+tl_ts*c(9)+ts*tl_c(9)- &
511# ifdef TL_IOMS
512 & ts*c(9)
513# endif
514 tl_bulk(i,k)=tl_bulk0(i,k)- &
515 & tl_tp*(bulk1(i,k)-tp*bulk2(i,k))- &
516 & tp*(tl_bulk1(i,k)- &
517 & tl_tp*bulk2(i,k)- &
518 & tp*tl_bulk2(i,k))+ &
519# ifdef TL_IOMS
520 & tp*(bulk1(i,k)-2.0_r8*tp*bulk2(i,k))
521# endif
522
523# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
524 defined bulk_fluxes
525
526
527
528
529
530 d2cd2t(3)=2.0_r8*
a02+tt*(6.0_r8*
a03+tt*12.0_r8*
a04)
531 d2cd2t(4)=2.0_r8*
b02+tt*6.0_r8*
b03
533 d2cd2t(6)=2.0_r8*
e02+tt*6.0_r8*
e03
537
538 tl_dcdt(3)=tl_tt*d2cd2t(3)+ &
539# ifdef TL_IOMS
541# endif
542 tl_dcdt(4)=tl_tt*d2cd2t(4)+ &
543# ifdef TL_IOMS
545# endif
546 tl_dcdt(5)=tl_tt*d2cd2t(5)+ &
547# ifdef TL_IOMS
549# endif
550 tl_dcdt(6)=tl_tt*d2cd2t(6)+ &
551# ifdef TL_IOMS
553# endif
554 tl_dcdt(7)=tl_tt*d2cd2t(7)+ &
555# ifdef TL_IOMS
557# endif
558 tl_dcdt(8)=tl_tt*d2cd2t(8)+ &
559# ifdef TL_IOMS
561# endif
562 tl_dcdt(9)=tl_tt*d2cd2t(9)+ &
563# ifdef TL_IOMS
565# endif
566
567 dbulkds(i,k)=c(4)+sqrtts*1.5_r8*c(5)- &
568 & tp*(c(7)+sqrtts*1.5_r8*
g00-tp*c(9))
569 dbulkdt(i,k)=dcdt(3)+ts*(dcdt(4)+sqrtts*dcdt(5))- &
570 & tp*(dcdt(6)+ts*dcdt(7)- &
571 & tp*(dcdt(8)+ts*dcdt(9)))
572
573 tl_dbulkds(i,k)=tl_c(4)+ &
574 & 1.5_r8*(tl_sqrtts*c(5)+ &
575 & sqrtts*tl_c(5))- &
576 & tl_tp*(c(7)+sqrtts*1.5_r8*
g00- &
577 & tp*c(9))- &
578 & tp*(tl_c(7)+tl_sqrtts*1.5_r8*
g00- &
579 & tl_tp*c(9)-tp*tl_c(9))- &
580# ifdef TL_IOMS
581 & sqrtts*1.5_r8*c(5)+ &
582 & tp*(c(7)+sqrtts*1.5_r8*
g00-2.0_r8*tp*c(9))
583# endif
584 tl_dbulkdt(i,k)=tl_dcdt(3)+ &
585 & tl_ts*(dcdt(4)+sqrtts*dcdt(5))+ &
586 & ts*(tl_dcdt(4)+tl_sqrtts*dcdt(5)+ &
587 & sqrtts*tl_dcdt(5))- &
588 & tl_tp*(dcdt(6)+ts*dcdt(7)- &
589 & tp*(dcdt(8)+ts*dcdt(9)))- &
590 & tp*(tl_dcdt(6)+tl_ts*dcdt(7)+ts*tl_dcdt(7)- &
591 & tl_tp*(dcdt(8)+ts*dcdt(9))- &
592 & tp*(tl_dcdt(8)+tl_ts*dcdt(9)+ &
593 & ts*tl_dcdt(9)))- &
594# ifdef TL_IOMS
595 & ts*(dcdt(4)+2.0_r8*sqrtts*dcdt(5))+ &
596 & tp*(dcdt(6)+2.0_r8*ts*dcdt(7)- &
597 & tp*(2.0_r8*dcdt(8)+ &
598 & 3.0_r8*ts*dcdt(9)))
599# endif
600# endif
601
602
603
604
605
606 cff=1.0_r8/(bulk(i,k)+tpr10)
607 tl_cff=-cff*cff*(tl_bulk(i,k)+tl_tpr10)+ &
608# ifdef TL_IOMS
609 & 2.0_r8*cff
610# endif
611 den(i,k)=den1(i,k)*bulk(i,k)*cff
612 tl_den(i,k)=tl_den1(i,k)*bulk(i,k)*cff+ &
613 & den1(i,k)*(tl_bulk(i,k)*cff+ &
614 & bulk(i,k)*tl_cff)- &
615# ifdef TL_IOMS
616 & 2.0_r8*den(i,k)
617# endif
618# if defined SEDIMENT_NOT_YET && defined SED_DENS_NOT_YET
619 sedden=0.0_r8
620 tl_sedden=0.0_r8
623 cff1=1.0_r8/
srho(ised,ng)
624 sedden=sedden+ &
625 & t(i,j,k,nrhs,itrc)* &
626 & (
srho(ised,ng)-den(i,k))*cff1
627 tl_sedden=tl_sedden+ &
628 & (tl_t(i,j,k,nrhs,itrc)* &
629 & (
srho(ised,ng)-den(i,k))- &
630 & t(i,j,k,nrhs,itrc)* &
631 & tl_den(i,k))*cff1+ &
632# ifdef TL_IOMS
633 & t(i,j,k,nrhs,itrc)*den(i,k)*cff1
634# endif
635 END DO
636 den(i,k)=den(i,k)+sedden
637 tl_den(i,k)=tl_den(i,k)+tl_sedden
638# endif
639 den(i,k)=den(i,k)-1000.0_r8
640# ifdef TL_IOMS
641 tl_den(i,k)=tl_den(i,k)-1000.0_r8
642# endif
643# ifdef MASKING
644 den(i,k)=den(i,k)*rmask(i,j)
645 tl_den(i,k)=tl_den(i,k)*rmask(i,j)
646# endif
647 END DO
648 END DO
649
650# ifdef VAR_RHO_2D_NOT_YET
651
652
653
654
655
656
657 DO i=istrt,iendt
658 cff1=den(i,
n(ng))*hz(i,j,
n(ng))
659 tl_cff1=tl_den(i,
n(ng))*hz(i,j,
n(ng))+ &
660 & den(i,
n(ng))*tl_hz(i,j,
n(ng))- &
661# ifdef TL_IOMS
662 & cff1
663# endif
664 rhos(i,j)=0.5_r8*cff1*hz(i,j,
n(ng))
665 tl_rhos(i,j)=0.5_r8*(tl_cff1*hz(i,j,
n(ng))+ &
666 & cff1*tl_hz(i,j,
n(ng)))- &
667# ifdef TL_IOMS
668 & rhos(i,j)
669# endif
670 rhoa(i,j)=cff1
671 tl_rhoa(i,j)=tl_cff1
672 END DO
674 DO i=istrt,iendt
675 cff1=den(i,k)*hz(i,j,k)
676 tl_cff1=tl_den(i,k)*hz(i,j,k)+ &
677 & den(i,k)*tl_hz(i,j,k)- &
678# ifdef TL_IOMS
679 & cff1
680# endif
681 rhos(i,j)=rhos(i,j)+hz(i,j,k)*(rhoa(i,j)+0.5_r8*cff1)
682 tl_rhos(i,j)=tl_rhos(i,j)+ &
683 & tl_hz(i,j,k)*(rhoa(i,j)+0.5_r8*cff1)+ &
684 & hz(i,j,k)*(tl_rhoa(i,j)+0.5_r8*tl_cff1)- &
685# ifdef TL_IOMS
686 & hz(i,j,k)*(rhoa(i,j)+0.5_r8*cff1)
687# endif
688 rhoa(i,j)=rhoa(i,j)+cff1
689 tl_rhoa(i,j)=tl_rhoa(i,j)+tl_cff1
690 END DO
691 END DO
693 DO i=istrt,iendt
694 cff1=1.0_r8/(z_w(i,j,
n(ng))-z_w(i,j,0))
695 tl_cff1=-cff1*cff1*(tl_z_w(i,j,
n(ng))-tl_z_w(i,j,0))+ &
696# ifdef TL_IOMS
697 & 2.0_r8*cff1
698# endif
699
700
701
702
703
704 tl_rhoa(i,j)=cff2*(tl_cff1*rhoa(i,j)+cff1*tl_rhoa(i,j))
705 rhoa(i,j)=cff2*cff1*rhoa(i,j)
706# ifdef TL_IOMS
707 tl_rhoa(i,j)=tl_rhoa(i,j)-rhoa(i,j)
708# endif
709 tl_rhos(i,j)=2.0_r8*cff2* &
710 & cff1*(2.0_r8*tl_cff1*rhos(i,j)+ &
711 & cff1*tl_rhos(i,j))
712 rhos(i,j)=2.0_r8*cff1*cff1*cff2*rhos(i,j)
713# ifdef TL_IOMS
714 tl_rhos(i,j)=tl_rhos(i,j)-2.0_r8*rhos(i,j)
715# endif
716 END DO
717# endif
718
719# if defined BV_FREQUENCY_NOT_YET
720
721
722
723
724
725
726
727
728
729
730
732 DO i=istrt,iendt
733 bulk_up=bulk0(i,k+1)- &
734 & z_w(i,j,k)*(bulk1(i,k+1)- &
735 & bulk2(i,k+1)*z_w(i,j,k))
736 tl_bulk_up=tl_bulk0(i,k+1)- &
737 & tl_z_w(i,j,k)*(bulk1(i,k+1)- &
738 & bulk2(i,k+1)*z_w(i,j,k))- &
739 & z_w(i,j,k)*(tl_bulk1(i,k+1)- &
740 & tl_bulk2(i,k+1)*z_w(i,j,k)- &
741 & bulk2(i,k+1)*tl_z_w(i,j,k))+ &
742# ifdef TL_IOMS
743 & z_w(i,j,k)*(bulk1(i,k+1)- &
744 & 2.0_r8*bulk2(i,k+1)*z_w(i,j,k))
745# endif
746 bulk_dn=bulk0(i,k )- &
747 & z_w(i,j,k)*(bulk1(i,k )- &
748 & bulk2(i,k )*z_w(i,j,k))
749 tl_bulk_dn=tl_bulk0(i,k )- &
750 & tl_z_w(i,j,k)*(bulk1(i,k )- &
751 & bulk2(i,k )*z_w(i,j,k))- &
752 & z_w(i,j,k)*(tl_bulk1(i,k )- &
753 & tl_bulk2(i,k )*z_w(i,j,k)- &
754 & bulk2(i,k )*tl_z_w(i,j,k))+ &
755# ifdef TL_IOMS
756 & z_w(i,j,k)*(bulk1(i,k )- &
757 & 2.0_r8*bulk2(i,k )*z_w(i,j,k))
758# endif
759 cff1=1.0_r8/(bulk_up+0.1_r8*z_w(i,j,k))
760 cff2=1.0_r8/(bulk_dn+0.1_r8*z_w(i,j,k))
761 tl_cff1=-cff1*cff1*(tl_bulk_up+0.1_r8*tl_z_w(i,j,k))+ &
762# ifdef TL_IOMS
763 & 2.0_r8*cff1
764# endif
765 tl_cff2=-cff2*cff2*(tl_bulk_dn+0.1_r8*tl_z_w(i,j,k))+ &
766# ifdef TL_IOMS
767 & 2.0_r8*cff2
768# endif
769 den_up=cff1*(den1(i,k+1)*bulk_up)
770 den_dn=cff2*(den1(i,k )*bulk_dn)
771 tl_den_up=tl_cff1*(den1(i,k+1)*bulk_up)+ &
772 & cff1*(tl_den1(i,k+1)*bulk_up+ &
773 & den1(i,k+1)*tl_bulk_up)- &
774# ifdef TL_IOMS
775 & 2.0_r8*den_up
776# endif
777 tl_den_dn=tl_cff2*(den1(i,k )*bulk_dn)+ &
778 & cff2*(tl_den1(i,k )*bulk_dn+ &
779 & den1(i,k )*tl_bulk_dn)- &
780# ifdef TL_IOMS
781 & 2.0_r8*den_dn
782# endif
783
784
785
786
787 cff3=1.0_r8/(0.5_r8*(den_up+den_dn)* &
788 & (z_r(i,j,k+1)-z_r(i,j,k)))
789 tl_cff3=-cff3*cff3* &
790 & 0.5_r8*((tl_den_up+tl_den_dn)* &
791 & (z_r(i,j,k+1)-z_r(i,j,k))+ &
792 & (den_up+den_dn)* &
793 & (tl_z_r(i,j,k+1)-tl_z_r(i,j,k)))+ &
794# ifdef TL_IOMS
795 & 3.0_r8*cff3
796# endif
797 tl_bvf(i,j,k)=-
g*((tl_den_up-tl_den_dn)*cff3+ &
798 & (den_up-den_dn)*tl_cff3)+ &
799# ifdef TL_IOMS
800 & 2.0_r8*
g*(den_up-den_dn)*cff3
801# endif
802 END DO
803 END DO
804 DO i=istrt,iendt
805
806
807 tl_bvf(i,j,0)=0.0_r8
808
809
810 tl_bvf(i,j,
n(ng))=0.0_r8
811 END DO
812# endif
813
814# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
815 defined bulk_fluxes
816
817
818
819
820
821
822# ifdef LMD_DDMIX_NOT_YET
824# else
826# endif
827 DO i=istrt,iendt
828 tpr10=0.1_r8*z_r(i,j,k)
829 tl_tpr10=0.1_r8*tl_z_r(i,j,k)
830
831
832
833 cff=bulk(i,k)+tpr10
834 tl_cff=tl_bulk(i,k)+tl_tpr10
835 cff1=tpr10*den1(i,k)
836 tl_cff1=tl_tpr10*den1(i,k)+tpr10*tl_den1(i,k)- &
837# ifdef TL_IOMS
838 & cff1
839# endif
840 cff2=bulk(i,k)*cff
841 tl_cff2=tl_bulk(i,k)*cff+bulk(i,k)*tl_cff- &
842# ifdef TL_IOMS
843 & cff2
844# endif
845 wrk(i,k)=(den(i,k)+1000.0_r8)*cff*cff
846 tl_wrk(i,k)=cff*(cff*tl_den(i,k)+ &
847 & 2.0_r8*tl_cff*(den(i,k)+1000.0_r8))- &
848# ifdef TL_IOMS
849 & cff*cff*(2.0_r8*den(i,k)+1000.0_r8)
850# endif
851 tcof(i,k)=-(dbulkdt(i,k)*cff1+ &
852 & dden1dt(i,k)*cff2)
853 tl_tcof(i,k)=-(tl_dbulkdt(i,k)*cff1+ &
854 & dbulkdt(i,k)*tl_cff1+ &
855 & tl_dden1dt(i,k)*cff2+ &
856 & dden1dt(i,k)*tl_cff2)- &
857# ifdef TL_IOMS
858 & tcof(i,k)
859# endif
860 scof(i,k)= (dbulkds(i,k)*cff1+ &
861 & dden1ds(i,k)*cff2)
862 tl_scof(i,k)= (tl_dbulkds(i,k)*cff1+ &
863 & dbulkds(i,k)*tl_cff1+ &
864 & tl_dden1ds(i,k)*cff2+ &
865 & dden1ds(i,k)*tl_cff2)- &
866# ifdef TL_IOMS
867 & scof(i,k)
868# endif
869# ifdef LMD_DDMIX_NOT_YET
870
871
872 tl_alfaobeta(i,j,k)=(tl_tcof(i,k)*scof(i,k)- &
873 & tcof(i,k)*tl_scof(i,k))/ &
874 & (scof(i,k)*scof(i,k))+ &
875# ifdef TL_IOMS
876 & tcof(i,k)/scof(i,k)
877# endif
878# endif
879 END DO
881 DO i=istrt,iendt
882 cff=1.0_r8/wrk(i,
n(ng))
883 tl_cff=-cff*cff*tl_wrk(i,
n(ng))+ &
884# ifdef TL_IOMS
885 & 2.0_r8*cff
886# endif
887 alpha(i,j)=cff*tcof(i,
n(ng))
888 tl_alpha(i,j)=tl_cff*tcof(i,
n(ng))+cff*tl_tcof(i,
n(ng))- &
889# ifdef TL_IOMS
890 & alpha(i,j)
891# endif
892 beta(i,j)=cff*scof(i,
n(ng))
893 tl_beta(i,j)=tl_cff*scof(i,
n(ng))+cff*tl_scof(i,
n(ng))- &
894# ifdef TL_IOMS
895 & beta(i,j)
896# endif
897 END DO
898 END IF
899 END DO
900# endif
901
902
903
904
905
906
907
908
910 DO i=istrt,iendt
911 rho(i,j,k)=den(i,k)
912 tl_rho(i,j,k)=tl_den(i,k)
913# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
914
915
916 tl_pden(i,j,k)=tl_den1(i,k)- &
917# ifdef TL_IOMS
918 & 1000.0_r8
919# endif
920# ifdef MASKING
921
922
923 tl_pden(i,j,k)=tl_pden(i,k)*rmask(i,j)
924# endif
925# endif
926 END DO
927 END DO
928 END DO
929
930
931
932
933
936 & lbi, ubi, lbj, ubj, 1,
n(ng), &
937 & rho)
939 & lbi, ubi, lbj, ubj, 1,
n(ng), &
940 & tl_rho)
941
942# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
943
944
945
946
948 & lbi, ubi, lbj, ubj, 1,
n(ng), &
949 & tl_pden)
950# endif
951
952# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
953 defined bulk_fluxes_not_yet
954# ifdef LMD_DDMIX_NOT_YET
955
956
957
958
960 & lbi, ubi, lbj, ubj, 0,
n(ng), &
961 & tl_alfaobeta)
962# endif
964 & lbi, ubi, lbj, ubj, &
965 & alpha)
967 & lbi, ubi, lbj, ubj, &
968 & tl_alpha)
970 & lbi, ubi, lbj, ubj, &
971 & beta)
973 & lbi, ubi, lbj, ubj, &
974 & tl_beta)
975# endif
976
977# ifdef VAR_RHO_2D_NOT_YET
979 & lbi, ubi, lbj, ubj, &
980 & rhoa)
982 & lbi, ubi, lbj, ubj, &
983 & tl_rhoa)
985 & lbi, ubi, lbj, ubj, &
986 & rhos)
988 & lbi, ubi, lbj, ubj, &
989 & tl_rhos)
990# endif
991
992# ifdef BV_FREQUENCY_NOT_YET
993
994
995
996
998 & lbi, ubi, lbj, ubj, 0,
n(ng), &
999 & tl_bvf)
1000# endif
1001 END IF
1002
1003# ifdef DISTRIBUTE
1004
1006 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1009 & rho)
1011 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1014 & tl_rho)
1015
1016# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET
1017
1018
1019
1020
1021
1022
1024 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1027 & tl_pden)
1028# endif
1029
1030# if defined LMD_SKPP_NOT_YET || defined LMD_BKPP_NOT_YET || \
1031 defined bulk_fluxes
1032# ifdef LMD_DDMIX_NOT_YET
1033
1034
1035
1036
1037
1038
1040 & lbi, ubi, lbj, ubj, 0,
n(ng), &
1043 & tl_alfaobeta)
1044# endif
1046 & lbi, ubi, lbj, ubj, &
1049 & alpha, beta)
1051 & lbi, ubi, lbj, ubj, &
1054 & tl_alpha, tl_beta)
1055# endif
1056
1057# ifdef VAR_RHO_2D_NOT_YET
1059 & lbi, ubi, lbj, ubj, &
1062 & rhoa, rhos)
1064 & lbi, ubi, lbj, ubj, &
1067 & tl_rhoa, tl_rhos)
1068# endif
1069
1070# ifdef BV_FREQUENCY_NOT_YET
1071
1072
1073
1074
1075
1076
1078 & lbi, ubi, lbj, ubj, 0,
n(ng), &
1081 & tl_bvf)
1082# endif
1083# endif
1084
1085 RETURN
subroutine exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_w3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
integer, dimension(:), allocatable n
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
real(r8), dimension(:,:), allocatable srho
integer, dimension(:), allocatable idsed
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)