122 & LBi, UBi, LBj, UBj, &
123 & IminS, ImaxS, JminS, JmaxS, &
126# if defined UV_LOGDRAG
128# elif defined UV_LDRAG
130# elif defined UV_QDRAG
133# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
141# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
148# if defined SCORRECTION || defined SRELAXATION
156 & tl_sustr, tl_svstr, &
158# ifndef BBL_MODEL_NOT_YET
160 & tl_bustr, tl_bvstr, &
164 & tl_stflx, tl_btflx)
177 integer,
intent(in) :: ng, tile
178 integer,
intent(in) :: LBi, UBi, LBj, UBj
179 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
180 integer,
intent(in) :: nrhs
183 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
184 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
185# if defined UV_LOGDRAG
186 real(r8),
intent(in) :: ZoBot(LBi:,LBj:)
187# elif defined UV_LDRAG
188 real(r8),
intent(in) :: rdrag(LBi:,LBj:)
189# elif defined UV_QDRAG
190 real(r8),
intent(in) :: rdrag2(LBi:,LBj:)
192# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
193 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
194 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
195 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
196 real(r8),
intent(in) :: tl_z_w(LBi:,LBj:,0:)
199 real(r8),
intent(in) :: zice(LBi:,LBj:)
201 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
202 real(r8),
intent(in) :: tl_t(LBi:,LBj:,:,:,:)
203# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
204 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
205 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
206 real(r8),
intent(in) :: tl_u(LBi:,LBj:,:,:)
207 real(r8),
intent(in) :: tl_v(LBi:,LBj:,:,:)
210 real(r8),
intent(in) :: dqdt(LBi:,LBj:)
211 real(r8),
intent(in) :: sst(LBi:,LBj:)
213# if defined SCORRECTION || defined SRELAXATION
214 real(r8),
intent(in) :: sss(LBi:,LBj:)
216 real(r8),
intent(in) :: stflux(LBi:,LBj:,:)
217 real(r8),
intent(in) :: btflux(LBi:,LBj:,:)
220 real(r8),
intent(inout) :: srflx(LBi:,LBj:)
222 real(r8),
intent(inout) :: sustr(LBi:,LBj:)
223 real(r8),
intent(inout) :: svstr(LBi:,LBj:)
224 real(r8),
intent(inout) :: tl_sustr(LBi:,LBj:)
225 real(r8),
intent(inout) :: tl_svstr(LBi:,LBj:)
227# ifndef BBL_MODEL_NOT_YET
228 real(r8),
intent(inout) :: bustr(LBi:,LBj:)
229 real(r8),
intent(inout) :: bvstr(LBi:,LBj:)
230 real(r8),
intent(inout) :: tl_bustr(LBi:,LBj:)
231 real(r8),
intent(inout) :: tl_bvstr(LBi:,LBj:)
233 real(r8),
intent(inout) :: stflx(LBi:,LBj:,:)
234 real(r8),
intent(inout) :: btflx(LBi:,LBj:,:)
235 real(r8),
intent(inout) :: tl_stflx(LBi:,LBj:,:)
236 real(r8),
intent(inout) :: tl_btflx(LBi:,LBj:,:)
238 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
239 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
240# if defined UV_LOGDRAG
241 real(r8),
intent(in) :: ZoBot(LBi:UBi,LBj:UBj)
242# elif defined UV_LDRAG
243 real(r8),
intent(in) :: rdrag(LBi:UBi,LBj:UBj)
244# elif defined UV_QDRAG
245 real(r8),
intent(in) :: rdrag2(LBi:UBi,LBj:UBj)
247# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
248 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
249 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
250 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
251 real(r8),
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
254 real(r8),
intent(in) :: zice(LBi:UBi,LBj:UBj)
256 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
257 real(r8),
intent(in) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
258# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
259 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
260 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
261 real(r8),
intent(in) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
262 real(r8),
intent(in) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
265 real(r8),
intent(in) :: dqdt(LBi:UBi,LBj:UBj)
266 real(r8),
intent(in) :: sst(LBi:UBi,LBj:UBj)
268# if defined SCORRECTION || defined SRELAXATION
269 real(r8),
intent(in) :: sss(LBi:UBi,LBj:UBj)
271 real(r8),
intent(in) :: stflux(LBi:UBi,LBj:UBj,NT(ng))
272 real(r8),
intent(in) :: btflux(LBi:UBi,LBj:UBj,NT(ng))
275 real(r8),
intent(inout) :: srflx(LBi:UBi,LBj:UBj)
277 real(r8),
intent(inout) :: sustr(LBi:UBi,LBj:UBj)
278 real(r8),
intent(inout) :: svstr(LBi:UBi,LBj:UBj)
279 real(r8),
intent(inout) :: tl_sustr(LBi:UBi,LBj:UBj)
280 real(r8),
intent(inout) :: tl_svstr(LBi:UBi,LBj:UBj)
282# ifndef BBL_MODEL_NOT_YET
283 real(r8),
intent(inout) :: bustr(LBi:UBi,LBj:UBj)
284 real(r8),
intent(inout) :: bvstr(LBi:UBi,LBj:UBj)
285 real(r8),
intent(inout) :: tl_bustr(LBi:UBi,LBj:UBj)
286 real(r8),
intent(inout) :: tl_bvstr(LBi:UBi,LBj:UBj)
288 real(r8),
intent(inout) :: stflx(LBi:UBi,LBj:UBj,NT(ng))
289 real(r8),
intent(inout) :: btflx(LBi:UBi,LBj:UBj,NT(ng))
290 real(r8),
intent(inout) :: tl_stflx(LBi:UBi,LBj:UBj,NT(ng))
291 real(r8),
intent(inout) :: tl_btflx(LBi:UBi,LBj:UBj,NT(ng))
296 integer :: i, j, itrc
298 real(r8) :: EmP, tl_EmP
299# if !defined BBL_MODEL_NOT_YET || defined ICESHELF
300 real(r8) :: cff1, cff2, cff3
301 real(r8) :: tl_cff1, tl_cff2, tl_cff3
304# if (!defined BBL_MODEL_NOT_YET || defined ICESHELF) && defined UV_LOGDRAG
305 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wrk
306 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: tl_wrk
309# include "set_bounds.h"
329 tl_stflx(i,j,
itemp)=0.0_r8
332 tl_btflx(i,j,
itemp)=0.0_r8
351 & dqdt(i,j)*(tl_t(i,j,n(ng),nrhs,
itemp)- &
355 & dqdt(i,j)*tl_t(i,j,n(ng),nrhs,
itemp)
361# ifdef LIMIT_STFLX_COOLING
382 cff2=stflx(i,j,
itemp)
383 tl_cff2=tl_stflx(i,j,
itemp)
384 cff3=0.5_r8*(1.0_r8+sign(1.0_r8,cff1-t(i,j,n(ng),nrhs,
itemp)))
390 tl_stflx(i,j,
itemp)=(1.0_r8- &
391 & cff3*0.5_r8*(1.0_r8-sign(1.0_r8,cff2)))* &
394 & cff3*0.5_r8*(cff2-abs(cff2))
409 emp=stflux(i,j,
isalt)
411# if defined SCORRECTION
417 tl_stflx(i,j,
isalt)=emp*tl_t(i,j,n(ng),nrhs,
isalt)+ &
418 & tl_emp*t(i,j,n(ng),nrhs,
isalt)- &
420 & (tl_hz(i,j,n(ng))* &
421 & (t(i,j,n(ng),nrhs,
isalt)-sss(i,j))+ &
423 & (tl_t(i,j,n(ng),nrhs,
isalt)+ &
424 & t(i,j,n(ng),nrhs,
isalt)))- &
425 & emp*t(i,j,n(ng),nrhs,
isalt)
427 tl_stflx(i,j,
isalt)=emp*tl_t(i,j,n(ng),nrhs,
isalt)+ &
428 & tl_emp*t(i,j,n(ng),nrhs,
isalt)- &
430 & (tl_hz(i,j,n(ng))* &
431 & (t(i,j,n(ng),nrhs,
isalt)-sss(i,j))+ &
433 & tl_t(i,j,n(ng),nrhs,
isalt))
435# elif defined SRELAXATION
441 & (tl_hz(i,j,n(ng))* &
442 & (t(i,j,n(ng),nrhs,
isalt)-sss(i,j))+ &
444 & (tl_t(i,j,n(ng),nrhs,
isalt)- &
445 & t(i,j,n(ng),nrhs,
isalt)))
448 & (tl_hz(i,j,n(ng))* &
449 & (t(i,j,n(ng),nrhs,
isalt)-sss(i,j))+ &
451 & tl_t(i,j,n(ng),nrhs,
isalt))
457 tl_stflx(i,j,
isalt)=emp*tl_t(i,j,n(ng),nrhs,
isalt)+ &
459 & t(i,j,n(ng),nrhs,
isalt)
461 tl_stflx(i,j,
isalt)=emp*tl_t(i,j,n(ng),nrhs,
isalt)+ &
462 & tl_emp*t(i,j,n(ng),nrhs,
isalt)
468 & tl_t(i,j,1,nrhs,
isalt)+ &
469 & tl_btflx(i,j,
isalt)* &
470 & t(i,j,1,nrhs,
isalt)- &
478# if defined BIOLOGY || defined SEDIMENT || defined T_PASSIVE
489 rp_stflx(i,j,itrc)=0.0_r8
492 rp_btflx(i,j,itrc)=0.0_r8
508 IF (zice(i,j).ne.0.0_r8)
THEN
511 tl_stflx(i,j,itrc)=0.0_r8
519 IF (zice(i,j).ne.0.0_r8)
THEN
533# if defined UV_LOGDRAG
539 cff1=1.0_r8/log((z_w(i,j,n(ng))-z_r(i,j,n(ng)))/zobot(i,j))
540 tl_cff1=-cff1*cff1*(tl_z_w(i,j,n(ng))-tl_z_r(i,j,n(ng)))/ &
541 & (z_w(i,j,n(ng))-z_r(i,j,n(ng)))+ &
551 tl_cff3=(0.5_r8-sign(0.5_r8,
cdb_min-cff2))*tl_cff2+ &
556 tl_wrk(i,j)=(0.5_r8-sign(0.5_r8,cff3-
cdb_max))*tl_cff3+ &
564 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
565 cff1=0.25_r8*(v(i ,j ,n(ng),nrhs)+ &
566 & v(i ,j+1,n(ng),nrhs)+ &
567 & v(i-1,j ,n(ng),nrhs)+ &
568 & v(i-1,j+1,n(ng),nrhs))
569 tl_cff1=0.25_r8*(tl_v(i ,j ,n(ng),nrhs)+ &
570 & tl_v(i ,j+1,n(ng),nrhs)+ &
571 & tl_v(i-1,j ,n(ng),nrhs)+ &
572 & tl_v(i-1,j+1,n(ng),nrhs))
573 cff2=sqrt(u(i,j,n(ng),nrhs)*u(i,j,n(ng),nrhs)+cff1*cff1)
574 IF (cff2.ne.0.0_r8)
THEN
575 tl_cff2=(u(i,j,n(ng),nrhs)*tl_u(i,j,n(ng),nrhs)+ &
580 sustr(i,j)=-0.5_r8*(wrk(i-1,j)+wrk(i,j))* &
581 & u(i,j,n(ng),nrhs)*cff2
583 tl_sustr(i,j)=-0.5_r8* &
584 & ((tl_wrk(i-1,j)+tl_wrk(i,j))* &
585 & u(i,j,n(ng),nrhs)*cff2+ &
586 & (wrk(i-1,j)+wrk(i,j))* &
587 & (tl_u(i,j,n(ng),nrhs)*cff2+ &
588 & u(i,j,n(ng),nrhs)*tl_cff2))+ &
591 tl_sustr(i,j)=-0.5_r8* &
592 & ((tl_wrk(i-1,j)+tl_wrk(i,j))* &
593 & u(i,j,n(ng),nrhs)*cff2+ &
594 & (wrk(i-1,j)+wrk(i,j))* &
595 & (tl_u(i,j,n(ng),nrhs)*cff2+ &
596 & u(i,j,n(ng),nrhs)*tl_cff2))
603 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
604 cff1=0.25_r8*(u(i ,j ,n(ng),nrhs)+ &
605 & u(i+1,j ,n(ng),nrhs)+ &
606 & u(i ,j-1,n(ng),nrhs)+ &
607 & u(i+1,j-1,n(ng),nrhs))
608 tl_cff1=0.25_r8*(tl_u(i ,j ,n(ng),nrhs)+ &
609 & tl_u(i+1,j ,n(ng),nrhs)+ &
610 & tl_u(i ,j-1,n(ng),nrhs)+ &
611 & tl_u(i+1,j-1,n(ng),nrhs))
612 cff2=sqrt(cff1*cff1+v(i,j,n(ng),nrhs)*v(i,j,n(ng),nrhs))
613 IF (cff2.ne.0.0_r8)
THEN
614 tl_cff2=(cff1*tl_cff1+ &
615 & v(i,j,n(ng),nrhs)*tl_v(i,j,n(ng),nrhs))/cff2
619 svstr(i,j)=-0.5_r8*(wrk(i,j-1)+wrk(i,j))* &
620 & v(i,j,n(ng),nrhs)*cff2
622 tl_svstr(i,j)=-0.5_r8* &
623 & ((tl_wrk(i,j-1)+tl_wrk(i,j))* &
624 & v(i,j,n(ng),nrhs)*cff2+ &
625 & (wrk(i,j-1)+wrk(i,j))* &
626 & (tl_v(i,j,n(ng),nrhs)*cff2+ &
627 & v(i,j,n(ng),nrhs)*tl_cff2))+ &
630 tl_svstr(i,j)=-0.5_r8* &
631 & ((tl_wrk(i,j-1)+tl_wrk(i,j))* &
632 & v(i,j,n(ng),nrhs)*cff2+ &
633 & (wrk(i,j-1)+wrk(i,j))* &
634 & (tl_v(i,j,n(ng),nrhs)*cff2+ &
635 & v(i,j,n(ng),nrhs)*tl_cff2))
640# elif defined UV_QDRAG
646 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
647 cff1=0.25_r8*(v(i ,j ,n(ng),nrhs)+ &
648 & v(i ,j+1,n(ng),nrhs)+ &
649 & v(i-1,j ,n(ng),nrhs)+ &
650 & v(i-1,j+1,n(ng),nrhs))
651 tl_cff1=0.25_r8*(tl_v(i ,j ,n(ng),nrhs)+ &
652 & tl_v(i ,j+1,n(ng),nrhs)+ &
653 & tl_v(i-1,j ,n(ng),nrhs)+ &
654 & tl_v(i-1,j+1,n(ng),nrhs))
655 & cff2=sqrt(u(i,j,n(ng),nrhs)*u(i,j,n(ng),nrhs)+cff1*cff1)
656 IF (cff2.ne.0.0_r8)
THEN
657 tl_cff2=(u(i,j,n(ng),nrhs)*tl_u(i,j,n(ng),nrhs)+ &
662 sustr(i,j)=-0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))* &
663 & u(i,j,n(ng),nrhs)*cff2
665 tl_sustr(i,j)=-0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))* &
666 & (tl_u(i,j,n(ng),nrhs)*cff2+ &
667 & u(i,j,n(ng),nrhs)*tl_cff2)+ &
670 tl_sustr(i,j)=-0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))* &
671 & (tl_u(i,j,n(ng),nrhs)*cff2+ &
672 & u(i,j,n(ng),nrhs)*tl_cff2)
679 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
680 cff1=0.25_r8*(u(i ,j ,n(ng),nrhs)+ &
681 & u(i+1,j ,n(ng),nrhs)+ &
682 & u(i ,j-1,n(ng),nrhs)+ &
683 & u(i+1,j-1,n(ng),nrhs))
684 tl_cff1=0.25_r8*(tl_u(i ,j ,n(ng),nrhs)+ &
685 & tl_u(i+1,j ,n(ng),nrhs)+ &
686 & tl_u(i ,j-1,n(ng),nrhs)+ &
687 & tl_u(i+1,j-1,n(ng),nrhs))
688 cff2=sqrt(cff1*cff1+v(i,j,n(ng),nrhs)*v(i,j,n(ng),nrhs))
689 IF (cff2.ne.0.0_r8)
THEN
690 tl_cff2=(cff1*tl_cff1+ &
691 & v(i,j,n(ng),nrhs)*tl_v(i,j,n(ng),nrhs))/cff2
695 svstr(i,j)=-0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))* &
696 & v(i,j,n(ng),nrhs)*cff2
698 tl_svstr(i,j)=-0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))* &
699 & (tl_v(i,j,n(ng),nrhs)*cff2+ &
700 & v(i,j,n(ng),nrhs)*tl_cff2)+ &
703 tl_svstr(i,j)=-0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))* &
704 & (tl_v(i,j,n(ng),nrhs)*cff2+ &
705 & v(i,j,n(ng),nrhs)*tl_cff2)
710# elif defined UV_LDRAG
716 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
717 sustr(i,j)=-0.5_r8*(rdrag(i-1,j)+rdrag(i,j))* &
719 tl_sustr(i,j)=-0.5_r8*(rdrag(i-1,j)+rdrag(i,j))* &
720 & tl_u(i,j,n(ng),nrhs)
726 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
727 svstr(i,j)=-0.5_r8*(rdrag(i,j-1)+rdrag(i,j))* &
729 tl_svstr(i,j)=-0.5_r8*(rdrag(i,j-1)+rdrag(i,j))* &
730 & tl_v(i,j,n(ng),nrhs)
737 IF (zice(i,j)*zice(i-1,j).ne.0.0_r8)
THEN
745 IF (zice(i,j)*zice(i,j-1).ne.0.0_r8)
THEN
757 & lbi, ubi, lbj, ubj, &
760 & lbi, ubi, lbj, ubj, &
763 & lbi, ubi, lbj, ubj, &
766 & lbi, ubi, lbj, ubj, &
777 & lbi, ubi, lbj, ubj, &
781 & tl_sustr, tl_svstr)
784# ifndef BBL_MODEL_NOT_YET
790# if defined UV_LOGDRAG
796 cff1=1.0_r8/log((z_r(i,j,1)-z_w(i,j,0))/zobot(i,j))
797 tl_cff1=-cff1*cff1*(tl_z_r(i,j,1)-tl_z_w(i,j,0))/ &
798 & (z_r(i,j,1)-z_w(i,j,0))+ &
808 tl_cff3=(0.5_r8-sign(0.5_r8,
cdb_min-cff2))*tl_cff2+ &
813 tl_wrk(i,j)=(0.5_r8-sign(0.5_r8,cff3-
cdb_max))*tl_cff3+ &
821 cff1=0.25_r8*(v(i ,j ,1,nrhs)+ &
822 & v(i ,j+1,1,nrhs)+ &
823 & v(i-1,j ,1,nrhs)+ &
825 tl_cff1=0.25_r8*(tl_v(i ,j ,1,nrhs)+ &
826 & tl_v(i ,j+1,1,nrhs)+ &
827 & tl_v(i-1,j ,1,nrhs)+ &
828 & tl_v(i-1,j+1,1,nrhs))
829 cff2=sqrt(u(i,j,1,nrhs)*u(i,j,1,nrhs)+cff1*cff1)
830 IF (cff2.ne.0.0_r8)
THEN
831 tl_cff2=(u(i,j,1,nrhs)*tl_u(i,j,1,nrhs)+cff1*tl_cff1)/cff2
835 bustr(i,j)=0.5_r8*(wrk(i-1,j)+wrk(i,j))* &
838 tl_bustr(i,j)=0.5_r8* &
839 & ((tl_wrk(i-1,j)+tl_wrk(i,j))* &
840 & u(i,j,1,nrhs)*cff2+ &
841 & (wrk(i-1,j)+wrk(i,j))* &
842 & (tl_u(i,j,1,nrhs)*cff2+ &
843 & u(i,j,1,nrhs)*tl_cff2))- &
846 tl_bustr(i,j)=0.5_r8* &
847 & ((tl_wrk(i-1,j)+tl_wrk(i,j))* &
848 & u(i,j,1,nrhs)*cff2+ &
849 & (wrk(i-1,j)+wrk(i,j))* &
850 & (tl_u(i,j,1,nrhs)*cff2+ &
851 & u(i,j,1,nrhs)*tl_cff2))
857 cff1=0.25_r8*(u(i ,j ,1,nrhs)+ &
858 & u(i+1,j ,1,nrhs)+ &
859 & u(i ,j-1,1,nrhs)+ &
861 tl_cff1=0.25_r8*(tl_u(i ,j ,1,nrhs)+ &
862 & tl_u(i+1,j ,1,nrhs)+ &
863 & tl_u(i ,j-1,1,nrhs)+ &
864 & tl_u(i+1,j-1,1,nrhs))
865 cff2=sqrt(cff1*cff1+v(i,j,1,nrhs)*v(i,j,1,nrhs))
866 IF (cff2.ne.0.0_r8)
THEN
867 tl_cff2=(cff1*tl_cff1+v(i,j,1,nrhs)*tl_v(i,j,1,nrhs))/cff2
871 bvstr(i,j)=0.5_r8*(wrk(i,j-1)+wrk(i,j))* &
874 tl_bvstr(i,j)=0.5_r8* &
875 & ((tl_wrk(i,j-1)+tl_wrk(i,j))* &
876 & v(i,j,1,nrhs)*cff2+ &
877 & (wrk(i,j-1)+wrk(i,j))* &
878 & (tl_v(i,j,1,nrhs)*cff2+ &
879 & v(i,j,1,nrhs)*tl_cff2))- &
882 tl_bvstr(i,j)=0.5_r8* &
883 & ((tl_wrk(i,j-1)+tl_wrk(i,j))* &
884 & v(i,j,1,nrhs)*cff2+ &
885 & (wrk(i,j-1)+wrk(i,j))* &
886 & (tl_v(i,j,1,nrhs)*cff2+ &
887 & v(i,j,1,nrhs)*tl_cff2))
891# elif defined UV_QDRAG
897 cff1=0.25_r8*(v(i ,j ,1,nrhs)+ &
898 & v(i ,j+1,1,nrhs)+ &
899 & v(i-1,j ,1,nrhs)+ &
901 tl_cff1=0.25_r8*(tl_v(i ,j ,1,nrhs)+ &
902 & tl_v(i ,j+1,1,nrhs)+ &
903 & tl_v(i-1,j ,1,nrhs)+ &
904 & tl_v(i-1,j+1,1,nrhs))
905 cff2=sqrt(u(i,j,1,nrhs)*u(i,j,1,nrhs)+cff1*cff1)
906 IF (cff2.ne.0.0_r8)
THEN
907 tl_cff2=(u(i,j,1,nrhs)*tl_u(i,j,1,nrhs)+cff1*tl_cff1)/cff2
911 bustr(i,j)=0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))* &
914 tl_bustr(i,j)=0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))* &
915 & (tl_u(i,j,1,nrhs)*cff2+ &
916 & u(i,j,1,nrhs)*tl_cff2)- &
919 tl_bustr(i,j)=0.5_r8*(rdrag2(i-1,j)+rdrag2(i,j))* &
920 & (tl_u(i,j,1,nrhs)*cff2+ &
921 & u(i,j,1,nrhs)*tl_cff2)
927 cff1=0.25_r8*(u(i ,j ,1,nrhs)+ &
928 & u(i+1,j ,1,nrhs)+ &
929 & u(i ,j-1,1,nrhs)+ &
931 tl_cff1=0.25_r8*(tl_u(i ,j ,1,nrhs)+ &
932 & tl_u(i+1,j ,1,nrhs)+ &
933 & tl_u(i ,j-1,1,nrhs)+ &
934 & tl_u(i+1,j-1,1,nrhs))
935 cff2=sqrt(cff1*cff1+v(i,j,1,nrhs)*v(i,j,1,nrhs))
936 IF (cff2.ne.0.0_r8)
THEN
937 tl_cff2=(cff1*tl_cff1+v(i,j,1,nrhs)*tl_v(i,j,1,nrhs))/cff2
941 bvstr(i,j)=0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))* &
944 tl_bvstr(i,j)=0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))* &
945 & (tl_v(i,j,1,nrhs)*cff2+ &
946 & v(i,j,1,nrhs)*tl_cff2)- &
949 tl_bvstr(i,j)=0.5_r8*(rdrag2(i,j-1)+rdrag2(i,j))* &
950 & (tl_v(i,j,1,nrhs)*cff2+ &
951 & v(i,j,1,nrhs)*tl_cff2)
955# elif defined UV_LDRAG
961 bustr(i,j)=0.5_r8*(rdrag(i-1,j)+rdrag(i,j))* &
963 tl_bustr(i,j)=0.5_r8*(rdrag(i-1,j)+rdrag(i,j))* &
969 bvstr(i,j)=0.5_r8*(rdrag(i,j-1)+rdrag(i,j))* &
971 tl_bvstr(i,j)=0.5_r8*(rdrag(i,j-1)+rdrag(i,j))* &
980 & lbi, ubi, lbj, ubj, &
983 & lbi, ubi, lbj, ubj, &
986 & lbi, ubi, lbj, ubj, &
989 & lbi, ubi, lbj, ubj, &
1000 & lbi, ubi, lbj, ubj, &
1004 & tl_bustr, tl_bvstr)