1 | Index: ROMS/Nonlinear/ini_fields.F
|
---|
2 | ===================================================================
|
---|
3 | --- ROMS/Nonlinear/ini_fields.F (revision 611)
|
---|
4 | +++ ROMS/Nonlinear/ini_fields.F (working copy)
|
---|
5 | @@ -54,6 +54,11 @@
|
---|
6 | & GRID(ng) % umask, &
|
---|
7 | & GRID(ng) % vmask, &
|
---|
8 | # endif
|
---|
9 | +# ifdef WET_DRY
|
---|
10 | + & GRID(ng) % rmask_wet, &
|
---|
11 | + & GRID(ng) % umask_wet, &
|
---|
12 | + & GRID(ng) % vmask_wet, &
|
---|
13 | +# endif
|
---|
14 | # if defined PERFECT_RESTART && \
|
---|
15 | (defined EW_PERIODIC || defined NS_PERIODIC)
|
---|
16 | # ifdef SOLVE3D
|
---|
17 | @@ -106,6 +111,9 @@
|
---|
18 | # ifdef MASKING
|
---|
19 | & rmask, umask, vmask, &
|
---|
20 | # endif
|
---|
21 | +# ifdef WET_DRY
|
---|
22 | + & rmask_wet, umask_wet, vmask_wet, &
|
---|
23 | +# endif
|
---|
24 | # if defined PERFECT_RESTART && \
|
---|
25 | (defined EW_PERIODIC || defined NS_PERIODIC)
|
---|
26 | # ifdef SOLVE3D
|
---|
27 | @@ -139,6 +147,9 @@
|
---|
28 | # if defined SEDIMENT || defined BBL_MODEL
|
---|
29 | USE mod_sediment
|
---|
30 | # endif
|
---|
31 | +# ifdef WET_DRY
|
---|
32 | + USE bc_2d_mod
|
---|
33 | +# endif
|
---|
34 | !
|
---|
35 | # if defined EW_PERIODIC || defined NS_PERIODIC
|
---|
36 | USE exchange_2d_mod
|
---|
37 | @@ -198,6 +209,11 @@
|
---|
38 | real(r8), intent(in) :: umask(LBi:,LBj:)
|
---|
39 | real(r8), intent(in) :: vmask(LBi:,LBj:)
|
---|
40 | # endif
|
---|
41 | +# ifdef WET_DRY
|
---|
42 | + real(r8), intent(inout) :: rmask_wet(LBi:,LBj:)
|
---|
43 | + real(r8), intent(inout) :: umask_wet(LBi:,LBj:)
|
---|
44 | + real(r8), intent(inout) :: vmask_wet(LBi:,LBj:)
|
---|
45 | +# endif
|
---|
46 | # ifdef SOLVE3D
|
---|
47 | # ifdef ICESHELF
|
---|
48 | real(r8), intent(in) :: zice(LBi:,LBj:)
|
---|
49 | @@ -245,6 +261,11 @@
|
---|
50 | real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
|
---|
51 | real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
|
---|
52 | # endif
|
---|
53 | +# ifdef WET_DRY
|
---|
54 | + real(r8), intent(inout) :: rmask_wet(LBi:UBi,LBj:UBj)
|
---|
55 | + real(r8), intent(inout) :: umask_wet(LBi:UBi,LBj:UBj)
|
---|
56 | + real(r8), intent(inout) :: vmask_wet(LBi:UBi,LBj:UBj)
|
---|
57 | +# endif
|
---|
58 | # ifdef SOLVE3D
|
---|
59 | # ifdef ICESHELF
|
---|
60 | real(r8), intent(in) :: zice(LBi:UBi,LBj:UBj)
|
---|
61 | @@ -300,10 +321,76 @@
|
---|
62 | real(r8), dimension(PRIVATE_1D_SCRATCH_ARRAY,0:N(ng)) :: CF
|
---|
63 | real(r8), dimension(PRIVATE_1D_SCRATCH_ARRAY,0:N(ng)) :: DC
|
---|
64 | # endif
|
---|
65 | +# ifdef WET_DRY
|
---|
66 | + real(r8), dimension(PRIVATE_2D_SCRATCH_ARRAY) :: wetdry
|
---|
67 | +# endif
|
---|
68 |
|
---|
69 | # include "set_bounds.h"
|
---|
70 | +# if defined WET_DRY
|
---|
71 | !
|
---|
72 | !-----------------------------------------------------------------------
|
---|
73 | +! If wet/drying, compute new masks for cells with depth < Dcrit.
|
---|
74 | +!-----------------------------------------------------------------------
|
---|
75 | +!
|
---|
76 | + DO j=JstrV-1,Jend
|
---|
77 | + DO i=IstrU-1,Iend
|
---|
78 | + wetdry(i,j)=1.0_r8
|
---|
79 | + IF (zeta(i,j,kstp).le.(Dcrit(ng)-h(i,j))) THEN
|
---|
80 | + wetdry(i,j)=0.0_r8
|
---|
81 | + END IF
|
---|
82 | +# ifdef MASKING
|
---|
83 | + wetdry(i,j)=wetdry(i,j)*rmask(i,j)
|
---|
84 | +# endif
|
---|
85 | + END DO
|
---|
86 | + END DO
|
---|
87 | + DO j=Jstr,Jend
|
---|
88 | + DO i=Istr,Iend
|
---|
89 | + rmask_wet(i,j)=wetdry(i,j)
|
---|
90 | + END DO
|
---|
91 | + END DO
|
---|
92 | + DO j=Jstr,Jend
|
---|
93 | + DO i=IstrU,Iend
|
---|
94 | + umask_wet(i,j)=wetdry(i-1,j)+wetdry(i,j)
|
---|
95 | + END DO
|
---|
96 | + END DO
|
---|
97 | + DO j=JstrV,Jend
|
---|
98 | + DO i=Istr,Iend
|
---|
99 | + vmask_wet(i,j)=wetdry(i,j-1)+wetdry(i,j)
|
---|
100 | + END DO
|
---|
101 | + END DO
|
---|
102 | +!
|
---|
103 | +! Apply boundary conditions
|
---|
104 | +!
|
---|
105 | + CALL bc_r2d_tile (ng, tile, &
|
---|
106 | + & LBi, UBi, LBj, UBj, &
|
---|
107 | + & rmask_wet)
|
---|
108 | + CALL bc_u2d_tile (ng, tile, &
|
---|
109 | + & LBi, UBi, LBj, UBj, &
|
---|
110 | + & umask_wet)
|
---|
111 | + CALL bc_v2d_tile (ng, tile, &
|
---|
112 | + & LBi, UBi, LBj, UBj, &
|
---|
113 | + & vmask_wet)
|
---|
114 | +
|
---|
115 | +# if defined EW_PERIODIC || defined NS_PERIODIC
|
---|
116 | + CALL exchange_r2d_tile (ng, tile, &
|
---|
117 | + & LBi, UBi, LBj, UBj, &
|
---|
118 | + & rmask_wet)
|
---|
119 | + CALL exchange_u2d_tile (ng, tile, &
|
---|
120 | + & LBi, UBi, LBj, UBj, &
|
---|
121 | + & umask_wet)
|
---|
122 | + CALL exchange_v2d_tile (ng, tile, &
|
---|
123 | + & LBi, UBi, LBj, UBj, &
|
---|
124 | + & vmask_wet)
|
---|
125 | +# endif
|
---|
126 | +# ifdef DISTRIBUTE
|
---|
127 | + CALL mp_exchange2d (ng, tile, iNLM, 3, &
|
---|
128 | + & LBi, UBi, LBj, UBj, &
|
---|
129 | + & NghostPoints, EWperiodic, NSperiodic, &
|
---|
130 | + & rmask_wet, umask_wet, vmask_wet)
|
---|
131 | +# endif
|
---|
132 | +# endif
|
---|
133 | +!
|
---|
134 | +!-----------------------------------------------------------------------
|
---|
135 | ! Initialize other free-surface time-levels.
|
---|
136 | !-----------------------------------------------------------------------
|
---|
137 | !
|
---|