1 | diff --git a/ROMS/Nonlinear/lmd_vmix.F b/ROMS/Nonlinear/lmd_vmix.F
|
---|
2 | index 694f75d..be56e1c 100644
|
---|
3 | --- a/ROMS/Nonlinear/lmd_vmix.F
|
---|
4 | +++ b/ROMS/Nonlinear/lmd_vmix.F
|
---|
5 | @@ -37,6 +37,7 @@
|
---|
6 | USE mod_grid
|
---|
7 | USE mod_mixing
|
---|
8 | USE mod_ocean
|
---|
9 | + USE mod_scalars
|
---|
10 | USE mod_stepping
|
---|
11 | !
|
---|
12 | # ifdef LMD_SKPP
|
---|
13 | @@ -57,7 +58,8 @@
|
---|
14 | # ifdef PROFILE
|
---|
15 | CALL wclock_on (ng, iNLM, 18)
|
---|
16 | # endif
|
---|
17 | - CALL lmd_vmix_tile (ng, tile, &
|
---|
18 | + IF (.not.PerfectRST(ng).or.iic(ng).ne.ntstart(ng)) THEN
|
---|
19 | + CALL lmd_vmix_tile (ng, tile, &
|
---|
20 | & LBi, UBi, LBj, UBj, &
|
---|
21 | & IminS, ImaxS, JminS, JmaxS, &
|
---|
22 | & nstp(ng), &
|
---|
23 | @@ -76,12 +78,13 @@
|
---|
24 | & MIXING(ng) % Akt, &
|
---|
25 | & MIXING(ng) % Akv)
|
---|
26 | # ifdef LMD_SKPP
|
---|
27 | - CALL lmd_skpp (ng, tile)
|
---|
28 | + CALL lmd_skpp (ng, tile)
|
---|
29 | # endif
|
---|
30 | # ifdef LMD_BKPP
|
---|
31 | - CALL lmd_bkpp (ng, tile)
|
---|
32 | + CALL lmd_bkpp (ng, tile)
|
---|
33 | # endif
|
---|
34 | - CALL lmd_finish (ng, tile)
|
---|
35 | + CALL lmd_finish (ng, tile)
|
---|
36 | + END IF
|
---|
37 | # ifdef PROFILE
|
---|
38 | CALL wclock_off (ng, iNLM, 18)
|
---|
39 | # endif
|
---|
40 | diff --git a/ROMS/Utility/checkvars.F b/ROMS/Utility/checkvars.F
|
---|
41 | index 033aafa..3b37251 100644
|
---|
42 | --- a/ROMS/Utility/checkvars.F
|
---|
43 | +++ b/ROMS/Utility/checkvars.F
|
---|
44 | @@ -327,6 +327,20 @@
|
---|
45 | have_var(idTdif)=.TRUE.
|
---|
46 | ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idSdif))) THEN
|
---|
47 | have_var(idSdif)=.TRUE.
|
---|
48 | +# ifdef LMD_SKPP
|
---|
49 | + ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idHsbl))) THEN
|
---|
50 | + have_var(idHsbl)=.TRUE.
|
---|
51 | +# endif
|
---|
52 | +# ifdef LMD_BKPP
|
---|
53 | + ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idHbbl))) THEN
|
---|
54 | + have_var(idHbbl)=.TRUE.
|
---|
55 | +# endif
|
---|
56 | +# ifdef LMD_NONLOCAL
|
---|
57 | + ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idGhat(itemp)))) THEN
|
---|
58 | + have_var(idGhat(itemp))=.TRUE.
|
---|
59 | + ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idGhat(isalt)))) THEN
|
---|
60 | + have_var(idGhat(isalt))=.TRUE.
|
---|
61 | +# endif
|
---|
62 | # endif
|
---|
63 | # if defined GLS_MIXING || defined MY25_MIXING
|
---|
64 | ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idMtke))) THEN
|
---|
65 | diff --git a/ROMS/Utility/def_rst.F b/ROMS/Utility/def_rst.F
|
---|
66 | index 7768fed..a0ebc7f 100644
|
---|
67 | --- a/ROMS/Utility/def_rst.F
|
---|
68 | +++ b/ROMS/Utility/def_rst.F
|
---|
69 | @@ -1008,7 +1008,7 @@
|
---|
70 | Vinfo(22)='coordinates'
|
---|
71 | Aval(5)=REAL(Iinfo(1,idHsbl,ng),r8)
|
---|
72 | status=def_var(ng, iNLM, RST(ng)%ncid, RST(ng)%Vid(idHsbl), &
|
---|
73 | - & NF_FRST, nvd3, t2dgrd, Aval, Vinfo, ncname)
|
---|
74 | + & NF_FRST, nvd3, sr2dgrd, Aval, Vinfo, ncname)
|
---|
75 | IF (exit_flag.ne.NoError) RETURN
|
---|
76 | # endif
|
---|
77 |
|
---|
78 | @@ -1032,9 +1032,30 @@
|
---|
79 | Vinfo(22)='coordinates'
|
---|
80 | Aval(5)=REAL(Iinfo(1,idHbbl,ng),r8)
|
---|
81 | status=def_var(ng, iNLM, RST(ng)%ncid, RST(ng)%Vid(idHbbl), &
|
---|
82 | - & NF_FRST, nvd3, t2dgrd, Aval, Vinfo, ncname)
|
---|
83 | + & NF_FRST, nvd3, sr2dgrd, Aval, Vinfo, ncname)
|
---|
84 | IF (exit_flag.ne.NoError) RETURN
|
---|
85 | # endif
|
---|
86 | +# if defined PERFECT_RESTART && defined LMD_NONLOCAL
|
---|
87 | +!
|
---|
88 | +! Define out KPP nonlocal transport.
|
---|
89 | +!
|
---|
90 | + DO itrc=1,NAT
|
---|
91 | + Vinfo( 1)=Vname(1,idGhat(itrc))
|
---|
92 | + Vinfo( 2)=Vname(2,idGhat(itrc))
|
---|
93 | + Vinfo( 3)=Vname(3,idGhat(itrc))
|
---|
94 | + Vinfo(14)=Vname(4,idGhat(itrc))
|
---|
95 | + Vinfo(16)=Vname(1,idtime)
|
---|
96 | +# if defined WRITE_WATER && defined MASKING
|
---|
97 | + Vinfo(20)='mask_rho'
|
---|
98 | +# endif
|
---|
99 | + Vinfo(22)='coordinates'
|
---|
100 | + Aval(5)=REAL(Iinfo(1,idGhat(itrc),ng),r8)
|
---|
101 | + status=def_var(ng, iNLM, RST(ng)%ncid, &
|
---|
102 | + & RST(ng)%Vid(idGhat(itrc)), NF_FRST, &
|
---|
103 | + & nvd4, w3dgrd, Aval, Vinfo, ncname)
|
---|
104 | + IF (exit_flag.ne.NoError) RETURN
|
---|
105 | + END DO
|
---|
106 | +# endif
|
---|
107 | # if defined BVF_MIXING || defined LMD_MIXING || \
|
---|
108 | defined GLS_MIXING || defined MY25_MIXING
|
---|
109 | !
|
---|
110 | @@ -1551,6 +1572,16 @@
|
---|
111 | got_var(idHbbl)=.TRUE.
|
---|
112 | RST(ng)%Vid(idHbbl)=var_id(i)
|
---|
113 | # endif
|
---|
114 | +# if defined PERFECT_RESTART && defined LMD_NONLOCAL
|
---|
115 | + ELSE IF (TRIM(var_name(i)).eq. &
|
---|
116 | + & TRIM(Vname(1,idGhat(itemp)))) THEN
|
---|
117 | + got_var(idGhat(itemp))=.TRUE.
|
---|
118 | + RST(ng)%Vid(idGhat(itemp))=var_id(i)
|
---|
119 | + ELSE IF (TRIM(var_name(i)).eq. &
|
---|
120 | + & TRIM(Vname(1,idGhat(isalt)))) THEN
|
---|
121 | + got_var(idGhat(isalt))=.TRUE.
|
---|
122 | + RST(ng)%Vid(idGhat(isalt))=var_id(i)
|
---|
123 | +# endif
|
---|
124 | ELSE IF (TRIM(var_name(i)).eq.TRIM(Vname(1,idVvis))) THEN
|
---|
125 | got_var(idVvis)=.TRUE.
|
---|
126 | RST(ng)%Vid(idVvis)=var_id(i)
|
---|
127 | diff --git a/ROMS/Utility/get_state.F b/ROMS/Utility/get_state.F
|
---|
128 | index 97221ff..0c3f8fc 100644
|
---|
129 | --- a/ROMS/Utility/get_state.F
|
---|
130 | +++ b/ROMS/Utility/get_state.F
|
---|
131 | @@ -168,7 +168,7 @@
|
---|
132 | Perfect3D=.TRUE.
|
---|
133 | END IF
|
---|
134 | #endif
|
---|
135 | - PerfectRST(ng)=Perfect2d.or.Perfect3d
|
---|
136 | + PerfectRST(ng)=Perfect2D.or.Perfect3D
|
---|
137 | !
|
---|
138 | ! Determine variables to read.
|
---|
139 | !
|
---|
140 | @@ -441,12 +441,12 @@
|
---|
141 | IF (get_var(idFsur)) THEN
|
---|
142 | foundit=find_string(var_name, n_var, TRIM(Vname(1,idFsur)), &
|
---|
143 | & varid)
|
---|
144 | - IF (Perfect2d) THEN
|
---|
145 | + IF (Perfect2D) THEN
|
---|
146 | gtype=var_flag(varid)*r3dvar
|
---|
147 | ELSE
|
---|
148 | gtype=var_flag(varid)*r2dvar
|
---|
149 | END IF
|
---|
150 | - IF (Perfect2d) THEN
|
---|
151 | + IF (Perfect2D) THEN
|
---|
152 | status=nf_fread3d(ng, IDmod, ncname, ncINPid, &
|
---|
153 | & Vname(1,idFsur), varid, &
|
---|
154 | & InpRec, gtype, Vsize, &
|
---|
155 | @@ -970,6 +970,104 @@
|
---|
156 | END IF
|
---|
157 | # endif
|
---|
158 | # endif
|
---|
159 | +# if defined LMD_SKPP
|
---|
160 | +!
|
---|
161 | +! Read in Hsbl
|
---|
162 | +!
|
---|
163 | + IF (have_var(idHsbl).and.Perfect3D) THEN
|
---|
164 | + foundit=find_string(var_name, n_var, TRIM(Vname(1,idHsbl)), &
|
---|
165 | + & varid)
|
---|
166 | + gtype=var_flag(varid)*r2dvar
|
---|
167 | + status=nf_fread2d(ng, IDmod, ncname, ncINPid, &
|
---|
168 | + & Vname(1,idHsbl), varid, &
|
---|
169 | + & InpRec, gtype, Vsize, &
|
---|
170 | + & LBi, UBi, LBj, UBj, &
|
---|
171 | + & Fscl, Fmin, Fmax, &
|
---|
172 | +# ifdef MASKING
|
---|
173 | + & GRID(ng) % rmask, &
|
---|
174 | +# endif
|
---|
175 | + & MIXING(ng) % Hsbl)
|
---|
176 | + IF (status.ne.nf90_noerr) THEN
|
---|
177 | + IF (Master) THEN
|
---|
178 | + WRITE (stdout,60) string, TRIM(Vname(1,idHsbl)), InpRec, &
|
---|
179 | + & TRIM(ncname)
|
---|
180 | + END IF
|
---|
181 | + exit_flag=2
|
---|
182 | + ioerror=status
|
---|
183 | + RETURN
|
---|
184 | + ELSE
|
---|
185 | + IF (Master) THEN
|
---|
186 | + WRITE (stdout,70) TRIM(Vname(2,idHsbl)), Fmin, Fmax
|
---|
187 | + END IF
|
---|
188 | + END IF
|
---|
189 | + END IF
|
---|
190 | +# endif
|
---|
191 | +# if defined LMD_BKPP
|
---|
192 | +!
|
---|
193 | +! Read in Hbbl
|
---|
194 | +!
|
---|
195 | + IF (have_var(idHbbl).and.Perfect3D) THEN
|
---|
196 | + foundit=find_string(var_name, n_var, TRIM(Vname(1,idHbbl)), &
|
---|
197 | + & varid)
|
---|
198 | + gtype=var_flag(varid)*r2dvar
|
---|
199 | + status=nf_fread2d(ng, IDmod, ncname, ncINPid, &
|
---|
200 | + & Vname(1,idHbbl), varid, &
|
---|
201 | + & InpRec, gtype, Vsize, &
|
---|
202 | + & LBi, UBi, LBj, UBj, &
|
---|
203 | + & Fscl, Fmin, Fmax, &
|
---|
204 | +# ifdef MASKING
|
---|
205 | + & GRID(ng) % rmask, &
|
---|
206 | +# endif
|
---|
207 | + & MIXING(ng) % Hbbl)
|
---|
208 | + IF (status.ne.nf90_noerr) THEN
|
---|
209 | + IF (Master) THEN
|
---|
210 | + WRITE (stdout,60) string, TRIM(Vname(1,idHbbl)), InpRec, &
|
---|
211 | + & TRIM(ncname)
|
---|
212 | + END IF
|
---|
213 | + exit_flag=2
|
---|
214 | + ioerror=status
|
---|
215 | + RETURN
|
---|
216 | + ELSE
|
---|
217 | + IF (Master) THEN
|
---|
218 | + WRITE (stdout,70) TRIM(Vname(2,idHbbl)), Fmin, Fmax
|
---|
219 | + END IF
|
---|
220 | + END IF
|
---|
221 | + END IF
|
---|
222 | +# endif
|
---|
223 | +# if defined LMD_NONLOCAL && defined PERFECT_RESTART
|
---|
224 | +!
|
---|
225 | +! Read in Ghats
|
---|
226 | +!
|
---|
227 | + DO itrc=1,NAT
|
---|
228 | + IF (have_var(idGhat(itrc))) THEN
|
---|
229 | + foundit=find_string(var_name, n_var, &
|
---|
230 | + & TRIM(Vname(1,idGhat(itrc))), varid)
|
---|
231 | + gtype=var_flag(varid)*w3dvar
|
---|
232 | + status=nf_fread3d(ng, IDmod, ncname, ncINPid, &
|
---|
233 | + & Vname(1,idGhat(itrc)), varid, &
|
---|
234 | + & InpRec, gtype, Vsize, &
|
---|
235 | + & LBi, UBi, LBj, UBj, 0, N(ng), &
|
---|
236 | + & Fscl, Fmin,Fmax, &
|
---|
237 | +# ifdef MASKING
|
---|
238 | + & GRID(ng) % rmask, &
|
---|
239 | +# endif
|
---|
240 | + & MIXING(ng) % Ghats(:,:,:,itrc))
|
---|
241 | + IF (status.ne.nf90_noerr) THEN
|
---|
242 | + IF (Master) THEN
|
---|
243 | + WRITE (stdout,60) string, TRIM(Vname(1,idGhat(itrc))), &
|
---|
244 | + & InpRec, TRIM(ncname)
|
---|
245 | + END IF
|
---|
246 | + exit_flag=2
|
---|
247 | + ioerror=status
|
---|
248 | + RETURN
|
---|
249 | + ELSE
|
---|
250 | + IF (Master) THEN
|
---|
251 | + WRITE (stdout,70) TRIM(Vname(2,idGhat(itrc))), Fmin, Fmax
|
---|
252 | + END IF
|
---|
253 | + END IF
|
---|
254 | + END IF
|
---|
255 | + END DO
|
---|
256 | +# endif
|
---|
257 | # if defined GLS_MIXING || defined MY25_MIXING
|
---|
258 | !
|
---|
259 | ! Read in turbulent kinetic energy.
|
---|
260 | diff --git a/ROMS/Utility/wrt_rst.F b/ROMS/Utility/wrt_rst.F
|
---|
261 | index 8b4045a..6272b9b 100644
|
---|
262 | --- a/ROMS/Utility/wrt_rst.F
|
---|
263 | +++ b/ROMS/Utility/wrt_rst.F
|
---|
264 | @@ -593,6 +593,31 @@
|
---|
265 | RETURN
|
---|
266 | END IF
|
---|
267 | # endif
|
---|
268 | +# if defined PERFECT_RESTART && defined LMD_NONLOCAL
|
---|
269 | +!
|
---|
270 | +! Write out KPP nonlocal transport.
|
---|
271 | +!
|
---|
272 | + DO i=1,NAT
|
---|
273 | + scale=1.0_r8
|
---|
274 | + gtype=gfactor*w3dvar
|
---|
275 | + status=nf_fwrite3d(ng, iNLM, RST(ng)%ncid, &
|
---|
276 | + & RST(ng)%Vid(idGhat(i)), &
|
---|
277 | + & RST(ng)%Rindex, gtype, &
|
---|
278 | + & LBi, UBi, LBj, UBj, 0, N(ng), scale, &
|
---|
279 | +# ifdef MASKING
|
---|
280 | + & GRID(ng) % rmask_io, &
|
---|
281 | +# endif
|
---|
282 | + & MIXING(ng) % ghats(:,:,:,i))
|
---|
283 | + IF (status.ne.nf90_noerr) THEN
|
---|
284 | + IF (Master) THEN
|
---|
285 | + WRITE (stdout,10) TRIM(Vname(1,idGhat(i))), RST(ng)%Rindex
|
---|
286 | + END IF
|
---|
287 | + exit_flag=3
|
---|
288 | + ioerror=status
|
---|
289 | + RETURN
|
---|
290 | + END IF
|
---|
291 | + END DO
|
---|
292 | +# endif
|
---|
293 | # if defined BVF_MIXING || defined GLS_MIXING || \
|
---|
294 | defined MY25_MIXING || defined LMD_MIXING
|
---|
295 | !
|
---|