Ticket #567: lmd_diff.txt

File lmd_diff.txt, 10.7 KB (added by kate, 12 years ago)
Line 
1diff --git a/ROMS/Nonlinear/lmd_vmix.F b/ROMS/Nonlinear/lmd_vmix.F
2index 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
40diff --git a/ROMS/Utility/checkvars.F b/ROMS/Utility/checkvars.F
41index 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
65diff --git a/ROMS/Utility/def_rst.F b/ROMS/Utility/def_rst.F
66index 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)
127diff --git a/ROMS/Utility/get_state.F b/ROMS/Utility/get_state.F
128index 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.
260diff --git a/ROMS/Utility/wrt_rst.F b/ROMS/Utility/wrt_rst.F
261index 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 !