94 & LBi, UBi, LBj, UBj, &
95 & IminS, ImaxS, JminS, JmaxS, &
97 & pmask, rmask, umask, vmask, &
101 & DU_avg1, DV_avg1, &
104 & pmask_wet, pmask_full, &
105 & rmask_wet, rmask_full, &
106 & umask_wet, umask_full, &
107 & vmask_wet, vmask_full)
122 integer,
intent(in) :: ng, tile
123 integer,
intent(in) :: LBi, UBi, LBj, UBj
124 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
127 real(r8),
intent(in) :: h(LBi:,LBj:)
129 real(r8),
intent(in) :: pmask(LBi:,LBj:)
130 real(r8),
intent(in) :: rmask(LBi:,LBj:)
131 real(r8),
intent(in) :: umask(LBi:,LBj:)
132 real(r8),
intent(in) :: vmask(LBi:,LBj:)
134 real(r8),
intent(in) :: zeta(LBi:,LBj:)
136 real(r8),
intent(in) :: DU_avg1(LBi:,LBj:)
137 real(r8),
intent(in) :: DV_avg1(LBi:,LBj:)
138 real(r8),
intent(inout) :: rmask_wet_avg(LBi:,LBj:)
140 real(r8),
intent(out) :: pmask_full(LBi:,LBj:)
141 real(r8),
intent(out) :: rmask_full(LBi:,LBj:)
142 real(r8),
intent(out) :: umask_full(LBi:,LBj:)
143 real(r8),
intent(out) :: vmask_full(LBi:,LBj:)
145 real(r8),
intent(out) :: pmask_wet(LBi:,LBj:)
146 real(r8),
intent(out) :: rmask_wet(LBi:,LBj:)
147 real(r8),
intent(out) :: umask_wet(LBi:,LBj:)
148 real(r8),
intent(out) :: vmask_wet(LBi:,LBj:)
152 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
154 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
155 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
156 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
157 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
159 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj)
161 real(r8),
intent(in) :: DU_avg1(LBi:UBi,LBj:UBj)
162 real(r8),
intent(in) :: DV_avg1(LBi:UBi,LBj:UBj)
163 real(r8),
intent(inout) :: rmask_wet_avg(LBi:UBi,LBj:UBj)
165 real(r8),
intent(out) :: pmask_full(LBi:UBi,LBj:UBj)
166 real(r8),
intent(out) :: rmask_full(LBi:UBi,LBj:UBj)
167 real(r8),
intent(out) :: umask_full(LBi:UBi,LBj:UBj)
168 real(r8),
intent(out) :: vmask_full(LBi:UBi,LBj:UBj)
170 real(r8),
intent(out) :: pmask_wet(LBi:UBi,LBj:UBj)
171 real(r8),
intent(out) :: rmask_wet(LBi:UBi,LBj:UBj)
172 real(r8),
intent(out) :: umask_wet(LBi:UBi,LBj:UBj)
173 real(r8),
intent(out) :: vmask_wet(LBi:UBi,LBj:UBj)
181 real(r8),
parameter :: eps = 1.0e-10_r8
183 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
185# include "set_bounds.h"
198 wetdry(i,j)=wetdry(i,j)*rmask(i,j)
200 IF ((zeta(i,j)+h(i,j)).le.(
dcrit(ng)+eps))
THEN
210 & lbi, ubi, lbj, ubj, &
211 & imins, imaxs, jmins, jmaxs, &
213 & pmask_wet, rmask_wet, &
214 & umask_wet, vmask_wet)
225 rmask_wet_avg(i,j)=wetdry(i,j)
231 rmask_wet_avg(i,j)=rmask_wet_avg(i,j)+wetdry(i,j)
238 & lbi, ubi, lbj, ubj, &
245 & lbi, ubi, lbj, ubj, &
255 cff=1.0_r8/real(2*
nfast(ng),r8)
258 wetdry(i,j)=aint(rmask_wet_avg(i,j)*cff)
265 & lbi, ubi, lbj, ubj, &
266 & imins, imaxs, jmins, jmaxs, &
267 & du_avg1, dv_avg1, &
269 & pmask_wet, rmask_wet, &
270 & umask_wet, vmask_wet)
285 rmask_full(i,j)=rmask_wet(i,j)*rmask(i,j)
290 pmask_full(i,j)=max(pmask_wet(i,j)*pmask(i,j), 2.0_r8)
295 umask_full(i,j)=umask_wet(i,j)*umask(i,j)
300 vmask_full(i,j)=vmask_wet(i,j)*vmask(i,j)
311 IF (((istrr.le.i).and.(i.le.iendr)).and. &
312 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
313 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
314 umask_full(i,j)=1.0_r8
315 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
316 vmask_full(i,j)=1.0_r8
326 & lbi, ubi, lbj, ubj, &
329 & lbi, ubi, lbj, ubj, &
332 & lbi, ubi, lbj, ubj, &
335 & lbi, ubi, lbj, ubj, &
342 & lbi, ubi, lbj, ubj, &
345 & pmask_full, rmask_full, &
346 & umask_full, vmask_full)
355 & LBi, UBi, LBj, UBj, &
356 & IminS, ImaxS, JminS, JmaxS, &
358 & pmask, rmask, umask, vmask, &
364 & pmask_wet, pmask_full, &
365 & rmask_wet, rmask_full, &
366 & umask_wet, umask_full, &
367 & vmask_wet, vmask_full)
382 integer,
intent(in) :: ng, tile
383 integer,
intent(in) :: LBi, UBi, LBj, UBj
384 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
387 real(r8),
intent(in) :: h(LBi:,LBj:)
389 real(r8),
intent(in) :: pmask(LBi:,LBj:)
390 real(r8),
intent(in) :: rmask(LBi:,LBj:)
391 real(r8),
intent(in) :: umask(LBi:,LBj:)
392 real(r8),
intent(in) :: vmask(LBi:,LBj:)
394 real(r8),
intent(in) :: zeta(LBi:,LBj:)
396 real(r8),
intent(in) :: ubar(LBi:,LBj:)
397 real(r8),
intent(in) :: vbar(LBi:,LBj:)
399 real(r8),
intent(out) :: pmask_full(LBi:,LBj:)
400 real(r8),
intent(out) :: rmask_full(LBi:,LBj:)
401 real(r8),
intent(out) :: umask_full(LBi:,LBj:)
402 real(r8),
intent(out) :: vmask_full(LBi:,LBj:)
404 real(r8),
intent(out) :: pmask_wet(LBi:,LBj:)
405 real(r8),
intent(out) :: rmask_wet(LBi:,LBj:)
406 real(r8),
intent(out) :: umask_wet(LBi:,LBj:)
407 real(r8),
intent(out) :: vmask_wet(LBi:,LBj:)
411 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
413 real(r8),
intent(in) :: pmask(LBi:UBi,LBj:UBj)
414 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
415 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
416 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
418 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj)
420 real(r8),
intent(in) :: ubar(LBi:UBi,LBj:UBj)
421 real(r8),
intent(in) :: vbar(LBi:UBi,LBj:UBj)
423 real(r8),
intent(out) :: pmask_full(LBi:UBi,LBj:UBj)
424 real(r8),
intent(out) :: rmask_full(LBi:UBi,LBj:UBj)
425 real(r8),
intent(out) :: umask_full(LBi:UBi,LBj:UBj)
426 real(r8),
intent(out) :: vmask_full(LBi:UBi,LBj:UBj)
428 real(r8),
intent(out) :: pmask_wet(LBi:UBi,LBj:UBj)
429 real(r8),
intent(out) :: rmask_wet(LBi:UBi,LBj:UBj)
430 real(r8),
intent(out) :: umask_wet(LBi:UBi,LBj:UBj)
431 real(r8),
intent(out) :: vmask_wet(LBi:UBi,LBj:UBj)
439 real(r8),
parameter :: eps = 1.0e-10_r8
441 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: wetdry
443# include "set_bounds.h"
456 wetdry(i,j)=wetdry(i,j)*rmask(i,j)
458 IF ((zeta(i,j)+h(i,j)).le.(
dcrit(ng)+eps))
THEN
468 & lbi, ubi, lbj, ubj, &
469 & imins, imaxs, jmins, jmaxs, &
472 & pmask_wet, rmask_wet, &
473 & umask_wet, vmask_wet)
476 & lbi, ubi, lbj, ubj, &
477 & imins, imaxs, jmins, jmaxs, &
479 & pmask_wet, rmask_wet, &
480 & umask_wet, vmask_wet)
489 rmask_full(i,j)=rmask_wet(i,j)*rmask(i,j)
494 pmask_full(i,j)=max(pmask_wet(i,j)*pmask(i,j), 2.0_r8)
499 umask_full(i,j)=umask_wet(i,j)*umask(i,j)
504 vmask_full(i,j)=vmask_wet(i,j)*vmask(i,j)
515 IF (((istrr.le.i).and.(i.le.iendr)).and. &
516 & ((jstrr.le.j).and.(j.le.jendr)))
THEN
517 IF (int(
sources(ng)%Dsrc(is)).eq.0)
THEN
518 umask_full(i,j)=1.0_r8
519 ELSE IF (int(
sources(ng)%Dsrc(is)).eq.1)
THEN
520 vmask_full(i,j)=1.0_r8
530 & lbi, ubi, lbj, ubj, &
533 & lbi, ubi, lbj, ubj, &
536 & lbi, ubi, lbj, ubj, &
539 & lbi, ubi, lbj, ubj, &
546 & lbi, ubi, lbj, ubj, &
549 & pmask_full, rmask_full, &
550 & umask_full, vmask_full)
558 & LBi, UBi, LBj, UBj, &
559 & IminS, ImaxS, JminS, JmaxS, &
561 & pmask_wet, rmask_wet, &
562 & umask_wet, vmask_wet)
575 integer,
intent(in) :: ng, tile
576 integer,
intent(in) :: LBi, UBi, LBj, UBj
577 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
580 real(r8),
intent(in) :: wetdry(IminS:,JminS:)
581 real(r8),
intent(out) :: pmask_wet(LBi:,LBj:)
582 real(r8),
intent(out) :: rmask_wet(LBi:,LBj:)
583 real(r8),
intent(out) :: umask_wet(LBi:,LBj:)
584 real(r8),
intent(out) :: vmask_wet(LBi:,LBj:)
586 real(r8),
intent(in) :: wetdry(IminS:ImaxS,JminS:JmaxS)
587 real(r8),
intent(out) :: pmask_wet(LBi:UBi,LBj:UBj)
588 real(r8),
intent(out) :: rmask_wet(LBi:UBi,LBj:UBj)
589 real(r8),
intent(out) :: umask_wet(LBi:UBi,LBj:UBj)
590 real(r8),
intent(out) :: vmask_wet(LBi:UBi,LBj:UBj)
597 real(r8) :: cff1, cff2
599# include "set_bounds.h"
609 rmask_wet(i,j)=wetdry(i,j)
617 umask_wet(i,j)=wetdry(i-1,j)+wetdry(i,j)
618 IF (umask_wet(i,j).eq.1.0_r8)
THEN
619 umask_wet(i,j)=wetdry(i-1,j)-wetdry(i,j)
628 vmask_wet(i,j)=wetdry(i,j-1)+wetdry(i,j)
629 IF (vmask_wet(i,j).eq.1.0_r8)
THEN
630 vmask_wet(i,j)=wetdry(i,j-1)-wetdry(i,j)
641 IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
642 & (wetdry(i ,j ).gt.0.5_r8).and. &
643 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
644 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
645 pmask_wet(i,j)=1.0_r8
646 ELSE IF ((wetdry(i-1,j ).lt.0.5_r8).and. &
647 & (wetdry(i ,j ).gt.0.5_r8).and. &
648 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
649 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
651 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
652 & (wetdry(i ,j ).lt.0.5_r8).and. &
653 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
654 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
656 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
657 & (wetdry(i ,j ).gt.0.5_r8).and. &
658 & (wetdry(i-1,j-1).lt.0.5_r8).and. &
659 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
661 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
662 & (wetdry(i ,j ).gt.0.5_r8).and. &
663 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
664 & (wetdry(i ,j-1).lt.0.5_r8))
THEN
666 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
667 & (wetdry(i ,j ).lt.0.5_r8).and. &
668 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
669 & (wetdry(i ,j-1).lt.0.5_r8))
THEN
671 ELSE IF ((wetdry(i-1,j ).lt.0.5_r8).and. &
672 & (wetdry(i ,j ).gt.0.5_r8).and. &
673 & (wetdry(i-1,j-1).lt.0.5_r8).and. &
674 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
676 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
677 & (wetdry(i ,j ).gt.0.5_r8).and. &
678 & (wetdry(i-1,j-1).lt.0.5_r8).and. &
679 & (wetdry(i ,j-1).lt.0.5_r8))
THEN
681 ELSE IF ((wetdry(i-1,j ).lt.0.5_r8).and. &
682 & (wetdry(i ,j ).lt.0.5_r8).and. &
683 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
684 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
687 pmask_wet(i,j)=0.0_r8
696 & lbi, ubi, lbj, ubj, &
699 & lbi, ubi, lbj, ubj, &
702 & lbi, ubi, lbj, ubj, &
705 & lbi, ubi, lbj, ubj, &
712 & lbi, ubi, lbj, ubj, &
715 & pmask_wet, rmask_wet, umask_wet, vmask_wet)
725 & LBi, UBi, LBj, UBj, &
726 & IminS, ImaxS, JminS, JmaxS, &
727 & DU_avg1, DV_avg1, &
729 & pmask_wet, rmask_wet, &
730 & umask_wet, vmask_wet)
743 integer,
intent(in) :: ng, tile
744 integer,
intent(in) :: LBi, UBi, LBj, UBj
745 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
748 real(r8),
intent(in) :: wetdry(IminS:,JminS:)
749 real(r8),
intent(in) :: DU_avg1(LBi:,LBj:)
750 real(r8),
intent(in) :: DV_avg1(LBi:,LBj:)
751 real(r8),
intent(out) :: pmask_wet(LBi:,LBj:)
752 real(r8),
intent(out) :: rmask_wet(LBi:,LBj:)
753 real(r8),
intent(out) :: umask_wet(LBi:,LBj:)
754 real(r8),
intent(out) :: vmask_wet(LBi:,LBj:)
756 real(r8),
intent(in) :: wetdry(IminS:ImaxS,JminS:JmaxS)
757 real(r8),
intent(in) :: DU_avg1(LBi:UBi,LBj:UBj)
758 real(r8),
intent(in) :: DV_avg1(LBi:UBi,LBj:UBj)
759 real(r8),
intent(out) :: pmask_wet(LBi:UBi,LBj:UBj)
760 real(r8),
intent(out) :: rmask_wet(LBi:UBi,LBj:UBj)
761 real(r8),
intent(out) :: umask_wet(LBi:UBi,LBj:UBj)
762 real(r8),
intent(out) :: vmask_wet(LBi:UBi,LBj:UBj)
769 real(r8) :: cff1, cff2, cff5, cff6
771# include "set_bounds.h"
782 rmask_wet(i,j)=wetdry(i,j)
790 cff1=wetdry(i-1,j)+wetdry(i,j)
791 IF (cff1.eq.1.0_r8)
THEN
792 cff1=wetdry(i-1,j)-wetdry(i,j)
794 cff5=abs(abs(cff1)-1.0_r8)
795 cff6=0.5_r8+dsign(0.5_r8,du_avg1(i,j))*cff1
796 umask_wet(i,j)=0.5_r8*cff1*cff5+cff6*(1.0_r8-cff5)
798 IF (du_avg1(i,j).eq.0.0_r8)
THEN
799 IF ((wetdry(i-1,j)+wetdry(i,j)).le.1.0_r8)
THEN
800 umask_wet(i,j)=0.0_r8
810 cff1=wetdry(i,j-1)+wetdry(i,j)
811 IF (cff1.eq.1.0_r8)
THEN
812 cff1=wetdry(i,j-1)-wetdry(i,j)
814 cff5=abs(abs(cff1)-1.0_r8)
815 cff6=0.5_r8+dsign(0.5_r8,dv_avg1(i,j))*cff1
816 vmask_wet(i,j)=0.5_r8*cff1*cff5+cff6*(1.0_r8-cff5)
818 IF (dv_avg1(i,j).eq.0.0_r8)
THEN
819 IF ((wetdry(i,j-1)+wetdry(i,j)).le.1.0_r8)
THEN
820 vmask_wet(i,j)=0.0_r8
832 IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
833 & (wetdry(i ,j ).gt.0.5_r8).and. &
834 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
835 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
836 pmask_wet(i,j)=1.0_r8
837 ELSE IF ((wetdry(i-1,j ).lt.0.5_r8).and. &
838 & (wetdry(i ,j ).gt.0.5_r8).and. &
839 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
840 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
842 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
843 & (wetdry(i ,j ).lt.0.5_r8).and. &
844 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
845 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
847 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
848 & (wetdry(i ,j ).gt.0.5_r8).and. &
849 & (wetdry(i-1,j-1).lt.0.5_r8).and. &
850 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
852 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
853 & (wetdry(i ,j ).gt.0.5_r8).and. &
854 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
855 & (wetdry(i ,j-1).lt.0.5_r8))
THEN
857 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
858 & (wetdry(i ,j ).lt.0.5_r8).and. &
859 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
860 & (wetdry(i ,j-1).lt.0.5_r8))
THEN
862 ELSE IF ((wetdry(i-1,j ).lt.0.5_r8).and. &
863 & (wetdry(i ,j ).gt.0.5_r8).and. &
864 & (wetdry(i-1,j-1).lt.0.5_r8).and. &
865 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
867 ELSE IF ((wetdry(i-1,j ).gt.0.5_r8).and. &
868 & (wetdry(i ,j ).gt.0.5_r8).and. &
869 & (wetdry(i-1,j-1).lt.0.5_r8).and. &
870 & (wetdry(i ,j-1).lt.0.5_r8))
THEN
872 ELSE IF ((wetdry(i-1,j ).lt.0.5_r8).and. &
873 & (wetdry(i ,j ).lt.0.5_r8).and. &
874 & (wetdry(i-1,j-1).gt.0.5_r8).and. &
875 & (wetdry(i ,j-1).gt.0.5_r8))
THEN
878 pmask_wet(i,j)=0.0_r8
887 & lbi, ubi, lbj, ubj, &
890 & lbi, ubi, lbj, ubj, &
893 & lbi, ubi, lbj, ubj, &
896 & lbi, ubi, lbj, ubj, &
903 & lbi, ubi, lbj, ubj, &
906 & pmask_wet, rmask_wet, umask_wet, vmask_wet)
subroutine wetdry_ini_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, pmask, rmask, umask, vmask, h, zeta, ubar, vbar, pmask_wet, pmask_full, rmask_wet, rmask_full, umask_wet, umask_full, vmask_wet, vmask_full)
subroutine wetdry_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, pmask, rmask, umask, vmask, h, zeta, du_avg1, dv_avg1, rmask_wet_avg, pmask_wet, pmask_full, rmask_wet, rmask_full, umask_wet, umask_full, vmask_wet, vmask_full)