1 |
C $Header: /u/gcmpack/MITgcm/pkg/autodiff/addummy_in_stepping.F,v 1.64 2016/08/20 03:10:02 heimbach Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "AUTODIFF_OPTIONS.h" |
5 |
#ifdef ALLOW_OPENAD |
6 |
# include "OPENAD_OPTIONS.h" |
7 |
#endif |
8 |
#ifdef ALLOW_CTRL |
9 |
# include "CTRL_OPTIONS.h" |
10 |
#endif |
11 |
#include "AD_CONFIG.h" |
12 |
|
13 |
CBOP |
14 |
C !ROUTINE: ADDUMMY_IN_STEPPING |
15 |
C !INTERFACE: |
16 |
SUBROUTINE ADDUMMY_IN_STEPPING( myTime, myIter, myThid ) |
17 |
|
18 |
C !DESCRIPTION: \bv |
19 |
C *==========================================================* |
20 |
C | SUBROUTINE ADDUMMY_IN_STEPPING | |
21 |
C *==========================================================* |
22 |
C Extract adjoint variable from TAMC/TAF-generated |
23 |
C adjoint common blocks, contained in adcommon.h |
24 |
C and write fields to file; |
25 |
C Make sure common blocks in adcommon.h are up-to-date |
26 |
C w.r.t. current adjoint code. |
27 |
C *==========================================================* |
28 |
C | SUBROUTINE ADDUMMY_IN_STEPPING | |
29 |
C *==========================================================* |
30 |
C \ev |
31 |
|
32 |
C !USES: |
33 |
IMPLICIT NONE |
34 |
|
35 |
C == Global variables === |
36 |
#ifdef ALLOW_OPENAD |
37 |
use OAD_active |
38 |
use OAD_rev |
39 |
use OAD_tape |
40 |
use OAD_cp |
41 |
#endif |
42 |
#include "SIZE.h" |
43 |
#include "EEPARAMS.h" |
44 |
#include "PARAMS.h" |
45 |
#ifdef ALLOW_OPENAD |
46 |
# include "DYNVARS.h" |
47 |
# include "FFIELDS.h" |
48 |
#endif |
49 |
#include "AUTODIFF_PARAMS.h" |
50 |
#ifdef ALLOW_MNC |
51 |
#include "MNC_PARAMS.h" |
52 |
#endif |
53 |
c#include "GRID.h" |
54 |
#ifdef ALLOW_AUTODIFF_MONITOR |
55 |
# include "AUTODIFF.h" |
56 |
# ifndef ALLOW_OPENAD |
57 |
# include "adcommon.h" |
58 |
# endif /* ALLOW_OPENAD */ |
59 |
#endif /* ALLOW_AUTODIFF_MONITOR */ |
60 |
|
61 |
C !INPUT/OUTPUT PARAMETERS: |
62 |
C == Routine arguments == |
63 |
C myTime :: time counter for this thread |
64 |
C myIter :: iteration counter for this thread |
65 |
C myThid :: Thread number for this instance of the routine. |
66 |
_RL myTime |
67 |
INTEGER myIter |
68 |
INTEGER myThid |
69 |
|
70 |
#if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM)) |
71 |
#ifdef ALLOW_AUTODIFF_MONITOR |
72 |
|
73 |
C !FUNCTIONS: |
74 |
LOGICAL DIFFERENT_MULTIPLE |
75 |
EXTERNAL DIFFERENT_MULTIPLE |
76 |
|
77 |
C !LOCAL VARIABLES: |
78 |
c == local variables == |
79 |
C suff :: Hold suffix part of a filename |
80 |
C msgBuf :: Error message buffer |
81 |
CHARACTER*(10) suff |
82 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
83 |
_RL var2Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
84 |
_RL var2Dv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
85 |
_RL foo2D (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
86 |
_RL var3Du(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
87 |
_RL var3Dv(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
88 |
_RL foo3D (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) |
89 |
_RS dumRS(1) |
90 |
_RL dumRL(1) |
91 |
CEOP |
92 |
|
93 |
IF ( |
94 |
& DIFFERENT_MULTIPLE(adjDumpFreq,myTime,deltaTClock) |
95 |
& ) THEN |
96 |
|
97 |
CALL TIMER_START('I/O (WRITE) [ADJOINT LOOP]', myThid ) |
98 |
|
99 |
c increment ad dump record number (used only if dumpAdByRec is true) |
100 |
dumpAdRecMn=dumpAdRecMn+1 |
101 |
c#ifdef ALLOW_DEBUG |
102 |
c IF ( debugMode ) print*,'dumpAdRecMn',dumpAdRecMn |
103 |
c#endif |
104 |
|
105 |
IF ( dumpAdVarExch.EQ.1 ) THEN |
106 |
#ifdef ALLOW_OPENAD |
107 |
C-- need to all the correct OpenAD EXCH S/R ; left empty for now |
108 |
#else /* ALLOW_OPENAD */ |
109 |
|
110 |
#ifdef AUTODIFF_TAMC_COMPATIBILITY |
111 |
|
112 |
call adexch_xy_rl( myThid,adetan) |
113 |
call adexch_xyz_rl( myThid,adtheta) |
114 |
call adexch_xyz_rl( myThid,adsalt) |
115 |
call adexch_xyz_rl( myThid,adwvel ) |
116 |
call adexch_uv_xyz_rl( .true. ,myThid,aduvel,advvel ) |
117 |
|
118 |
call adexch_uv_xy_rs( .true., myThid, adfu, adfv ) |
119 |
call adexch_xy_rs( myThid,adqnet ) |
120 |
call adexch_xy_rs( myThid,adempmr ) |
121 |
# ifdef ALLOW_EDDYPSI_CONTROL |
122 |
call adexch_uv_xyz_rs( .true. ,myThid,adeddypsix,adeddypsiy ) |
123 |
# endif |
124 |
# ifdef ALLOW_DIFFKR_CONTROL |
125 |
call adexch_xyz_rl( myThid,addiffkr ) |
126 |
# endif |
127 |
# ifdef ALLOW_KAPGM_CONTROL |
128 |
call adexch_xyz_rl( myThid,adkapgm ) |
129 |
# endif |
130 |
# ifdef ALLOW_KAPREDI_CONTROL |
131 |
call adexch_xyz_rl( myThid,adkapredi ) |
132 |
# endif |
133 |
# ifdef ALLOW_SST0_CONTROL |
134 |
call adexch_xy_rl( myThid,adsst ) |
135 |
# endif |
136 |
# ifdef ALLOW_SSS0_CONTROL |
137 |
call adexch_xy_rl( myThid,adsss ) |
138 |
# endif |
139 |
# ifdef ALLOW_BOTTOMDRAG_CONTROL |
140 |
call adexch_xy_rl( myThid,adbottomdragfld) |
141 |
# endif |
142 |
|
143 |
# else /* ndfef AUTODIFF_TAMC_COMPATIBILITY */ |
144 |
|
145 |
CALL ADEXCH_3D_RL( adEtaN, 1 , myThid ) |
146 |
# ifndef ALLOW_BULK_OFFLINE |
147 |
CALL ADEXCH_3D_RL( adTheta,Nr, myThid ) |
148 |
CALL ADEXCH_3D_RL( adSalt, Nr, myThid ) |
149 |
CALL ADEXCH_3D_RL( adwVel, Nr, myThid ) |
150 |
CALL ADEXCH_UV_3D_RL( aduVel,advVel, .TRUE., Nr, myThid ) |
151 |
# endif |
152 |
CALL ADEXCH_UV_XY_RS( adFu, adFv, .TRUE., myThid ) |
153 |
CALL ADEXCH_XY_RS( adQnet, myThid ) |
154 |
CALL ADEXCH_XY_RS( adEmPmR, myThid ) |
155 |
# ifdef ALLOW_EDDYPSI_CONTROL |
156 |
CALL ADEXCH_UV_XYZ_RS( adEddyPsiX, adEddyPsiY, .TRUE., myThid ) |
157 |
# endif |
158 |
# ifdef ALLOW_DIFFKR_CONTROL |
159 |
CALL ADEXCH_3D_RL( adDiffKr, Nr, myThid ) |
160 |
# endif |
161 |
# ifdef ALLOW_KAPGM_CONTROL |
162 |
CALL ADEXCH_3D_RL( adKapGM, Nr, myThid ) |
163 |
# endif |
164 |
# ifdef ALLOW_KAPREDI_CONTROL |
165 |
CALL ADEXCH_3D_RL( adKapRedi, Nr, myThid ) |
166 |
# endif |
167 |
# ifdef ALLOW_SST0_CONTROL |
168 |
CALL ADEXCH_XY_RS( adSST, myThid ) |
169 |
# endif |
170 |
# ifdef ALLOW_SSS0_CONTROL |
171 |
CALL ADEXCH_XY_RS( adSSS, myThid ) |
172 |
# endif |
173 |
# ifdef ALLOW_BOTTOMDRAG_CONTROL |
174 |
CALL ADEXCH_3D_RL( adBottomDragFld, 1 , myThid ) |
175 |
# endif |
176 |
|
177 |
#endif /* AUTODIFF_TAMC_COMPATIBILITY */ |
178 |
#endif /* ALLOW_OPENAD */ |
179 |
ENDIF |
180 |
|
181 |
C-- Set suffix for this set of data files. |
182 |
IF ( rwSuffixType.EQ.0 ) THEN |
183 |
WRITE(suff,'(I10.10)') myIter |
184 |
ELSE |
185 |
CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid ) |
186 |
ENDIF |
187 |
C ==>> Resetting run-time parameter writeBinaryPrec in the middle of a run |
188 |
C ==>> is very very very nasty !!! |
189 |
c writeBinaryPrec = writeStatePrec |
190 |
C <<== If you really want to mess-up with this at your own risk, |
191 |
C <<== uncomment the line above |
192 |
|
193 |
C----------------------------------------------------------------------- |
194 |
#ifndef ALLOW_OPENAD |
195 |
C----------------------------------------------------------------------- |
196 |
|
197 |
IF ( ( dumpAdVarExch.NE.2 ).AND.(.NOT.dumpAdByRec) ) THEN |
198 |
CALL WRITE_FLD_XYZ_RL( 'ADJtheta.', suff, |
199 |
& adTheta, myIter, myThid ) |
200 |
CALL WRITE_FLD_XYZ_RL( 'ADJsalt.', suff, |
201 |
& adSalt, myIter, myThid ) |
202 |
CALL WRITE_FLD_XYZ_RL( 'ADJuvel.', suff, |
203 |
& aduVel, myIter, myThid ) |
204 |
CALL WRITE_FLD_XYZ_RL( 'ADJvvel.', suff, |
205 |
& advVel, myIter, myThid ) |
206 |
CALL WRITE_FLD_XYZ_RL( 'ADJwvel.', suff, |
207 |
& adwVel, myIter, myThid ) |
208 |
CALL WRITE_FLD_XY_RL ( 'ADJetan.', suff, |
209 |
& adEtaN, myIter, myThid ) |
210 |
|
211 |
IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN |
212 |
CALL WRITE_FLD_XY_RS('ADJtaux.',suff, adFu, myIter, myThid ) |
213 |
CALL WRITE_FLD_XY_RS('ADJtauy.',suff, adFv, myIter, myThid ) |
214 |
CALL WRITE_FLD_XY_RS('ADJqnet.',suff, adQnet,myIter,myThid ) |
215 |
CALL WRITE_FLD_XY_RS('ADJempr.',suff,adEmPmR,myIter,myThid ) |
216 |
#ifdef SHORTWAVE_HEATING |
217 |
CALL WRITE_FLD_XY_RS('ADJqsw.', suff, adQsw,myIter, myThid ) |
218 |
#endif |
219 |
ENDIF |
220 |
|
221 |
#ifdef ALLOW_GGL90 |
222 |
c CALL WRITE_FLD_XYZ_RL ( 'ADJggl90diffkr.',suff, |
223 |
c & adGGL90DiffKr, myIter, myThid ) |
224 |
CALL WRITE_FLD_XYZ_RL( 'ADJggl90tke.', suff, |
225 |
& adGGL90TKE, myIter, myThid ) |
226 |
#endif |
227 |
#ifdef ALLOW_DIFFKR_CONTROL |
228 |
CALL WRITE_FLD_XYZ_RL( 'ADJdiffkr.', suff, |
229 |
& adDiffKr, myIter, myThid ) |
230 |
#endif |
231 |
#ifdef ALLOW_KAPGM_CONTROL |
232 |
CALL WRITE_FLD_XYZ_RL( 'ADJkapgm.', suff, |
233 |
& adKapGM, myIter, myThid ) |
234 |
#endif |
235 |
#ifdef ALLOW_KAPREDI_CONTROL |
236 |
CALL WRITE_FLD_XYZ_RL( 'ADJkapredi.', suff, |
237 |
& adKapRedi, myIter, myThid ) |
238 |
#endif |
239 |
#ifdef ALLOW_EDDYPSI_CONTROL |
240 |
CALL WRITE_FLD_XYZ_RS( 'ADJeddypsix.', suff, |
241 |
& adEddyPsiX, myIter, myThid ) |
242 |
CALL WRITE_FLD_XYZ_RS( 'ADJeddypsiy.', suff, |
243 |
& adEddyPsiY, myIter, myThid ) |
244 |
#endif |
245 |
#ifdef ALLOW_SST0_CONTROL |
246 |
CALL WRITE_FLD_XY_RS( 'ADJsst.',suff, adSST, myIter, myThid ) |
247 |
#endif |
248 |
#ifdef ALLOW_SSS0_CONTROL |
249 |
CALL WRITE_FLD_XY_RS( 'ADJsss.',suff, adSSS, myIter, myThid ) |
250 |
#endif |
251 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
252 |
CALL WRITE_FLD_XY_RL ( 'ADJbottomdrag.', suff, |
253 |
& adBottomDragFld, myIter, myThid ) |
254 |
#endif |
255 |
|
256 |
ELSEIF ( ( dumpAdVarExch.NE.2 ).AND.(dumpAdByRec) ) THEN |
257 |
|
258 |
CALL WRITE_REC_XYZ_RL( 'ADJtheta', |
259 |
& adTheta, dumpAdRecMn, myIter,myThid ) |
260 |
CALL WRITE_REC_XYZ_RL( 'ADJsalt', |
261 |
& adSalt, dumpAdRecMn, myIter, myThid ) |
262 |
CALL WRITE_REC_XYZ_RL( 'ADJuvel', |
263 |
& aduVel, dumpAdRecMn, myIter, myThid ) |
264 |
CALL WRITE_REC_XYZ_RL( 'ADJvvel', |
265 |
& advVel, dumpAdRecMn, myIter, myThid ) |
266 |
CALL WRITE_REC_XYZ_RL( 'ADJwvel', |
267 |
& adwVel, dumpAdRecMn, myIter, myThid ) |
268 |
CALL WRITE_REC_XY_RL ( 'ADJetan', |
269 |
& adEtaN, dumpAdRecMn, myIter, myThid ) |
270 |
|
271 |
IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN |
272 |
CALL WRITE_REC_XY_RS('ADJtaux', |
273 |
& adFu, dumpAdRecMn, myIter, myThid ) |
274 |
CALL WRITE_REC_XY_RS('ADJtauy', |
275 |
& adFv, dumpAdRecMn, myIter, myThid ) |
276 |
CALL WRITE_REC_XY_RS('ADJqnet', |
277 |
& adQnet,dumpAdRecMn, myIter,myThid ) |
278 |
CALL WRITE_REC_XY_RS('ADJempr', |
279 |
& adEmPmR,dumpAdRecMn, myIter,myThid ) |
280 |
#ifdef SHORTWAVE_HEATING |
281 |
CALL WRITE_REC_XY_RS('ADJqsw', |
282 |
& adQsw,dumpAdRecMn, myIter, myThid ) |
283 |
#endif |
284 |
ENDIF |
285 |
|
286 |
#ifdef ALLOW_GGL90 |
287 |
c CALL WRITE_REC_XYZ_RL ( 'ADJggl90diffkr', |
288 |
c & adGGL90DiffKr, dumpAdRecMn, myIter, myThid ) |
289 |
CALL WRITE_REC_XYZ_RL( 'ADJggl90tke', |
290 |
& adGGL90TKE, dumpAdRecMn, myIter, myThid ) |
291 |
#endif |
292 |
#ifdef ALLOW_DIFFKR_CONTROL |
293 |
CALL WRITE_REC_XYZ_RL( 'ADJdiffkr', |
294 |
& adDiffKr, dumpAdRecMn, myIter, myThid ) |
295 |
#endif |
296 |
#ifdef ALLOW_KAPGM_CONTROL |
297 |
CALL WRITE_REC_XYZ_RL( 'ADJkapgm', |
298 |
& adKapGM, dumpAdRecMn, myIter, myThid ) |
299 |
#endif |
300 |
#ifdef ALLOW_KAPREDI_CONTROL |
301 |
CALL WRITE_REC_XYZ_RL( 'ADJkapredi', |
302 |
& adKapRedi, dumpAdRecMn, myIter, myThid ) |
303 |
#endif |
304 |
#ifdef ALLOW_EDDYPSI_CONTROL |
305 |
CALL WRITE_REC_XYZ_RS( 'ADJeddypsix', |
306 |
& adEddyPsiX, dumpAdRecMn, myIter, myThid ) |
307 |
CALL WRITE_REC_XYZ_RS( 'ADJeddypsiy', |
308 |
& adEddyPsiY, dumpAdRecMn, myIter, myThid ) |
309 |
#endif |
310 |
#ifdef ALLOW_SST0_CONTROL |
311 |
CALL WRITE_REC_XY_RS( 'ADJsst', |
312 |
& adSST, dumpAdRecMn, myIter, myThid ) |
313 |
#endif |
314 |
#ifdef ALLOW_SSS0_CONTROL |
315 |
CALL WRITE_REC_XY_RS( 'ADJsss', |
316 |
& adSSS, dumpAdRecMn, myIter, myThid ) |
317 |
#endif |
318 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
319 |
CALL WRITE_REC_XY_RL ( 'ADJbottomdrag', |
320 |
& adBottomDragFld, dumpAdRecMn, myIter, myThid ) |
321 |
#endif |
322 |
|
323 |
ELSE |
324 |
C case dumpAdVarExch = 2 |
325 |
CALL COPY_ADVAR_OUTP( dumRS, adTheta,var3Du, Nr, 12, myThid ) |
326 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJtheta.', |
327 |
& suff, var3Du, myIter, myThid ) |
328 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJtheta', |
329 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
330 |
CALL COPY_ADVAR_OUTP( dumRS, adSalt, var3Du, Nr, 12, myThid ) |
331 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJsalt.', |
332 |
& suff, var3Du, myIter, myThid ) |
333 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJsalt', |
334 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
335 |
CALL COPY_AD_UV_OUTP( dumRS, dumRS, aduVel, advVel, |
336 |
& var3Du, var3Dv, Nr, 34, myThid ) |
337 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJuvel.', |
338 |
& suff, var3Du, myIter, myThid ) |
339 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJuvel', |
340 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
341 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJvvel.', |
342 |
& suff, var3Dv, myIter, myThid ) |
343 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJvvel', |
344 |
& var3Dv, dumpAdRecMn, myIter, myThid ) |
345 |
CALL COPY_ADVAR_OUTP( dumRS, adwVel, var3Du, Nr, 12, myThid ) |
346 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJwvel.', |
347 |
& suff, var3Du, myIter, myThid ) |
348 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJwvel', |
349 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
350 |
CALL COPY_ADVAR_OUTP( dumRS, adEtaN, var2Du, 1 , 12, myThid ) |
351 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJetan.', |
352 |
& suff, var2Du, myIter, myThid ) |
353 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJetan', |
354 |
& var2Du, dumpAdRecMn, myIter, myThid ) |
355 |
|
356 |
IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN |
357 |
CALL COPY_AD_UV_OUTP( adFu, adFv, dumRL, dumRL, |
358 |
& var2Du, var2Dv, 1, 33, myThid ) |
359 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJtaux.', |
360 |
& suff,var2Du,myIter,myThid ) |
361 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJtaux', |
362 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
363 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJtauy.', |
364 |
& suff,var2Dv,myIter,myThid ) |
365 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJtauy', |
366 |
& var2Dv,dumpAdRecMn, myIter,myThid ) |
367 |
CALL COPY_ADVAR_OUTP( adQnet, dumRL, var2Du, 1, 11, myThid ) |
368 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJqnet.', |
369 |
& suff,var2Du,myIter,myThid ) |
370 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJqnet', |
371 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
372 |
CALL COPY_ADVAR_OUTP( adEmPmR,dumRL, var2Du, 1, 11, myThid ) |
373 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJempr.', |
374 |
& suff,var2Du,myIter,myThid ) |
375 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJempr', |
376 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
377 |
#ifdef SHORTWAVE_HEATING |
378 |
CALL COPY_ADVAR_OUTP( adQsw, dumRL, var2Du, 1, 11, myThid ) |
379 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJqsw.', |
380 |
& suff,var2Du,myIter,myThid ) |
381 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJqsw', |
382 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
383 |
#endif |
384 |
ENDIF |
385 |
#ifdef ALLOW_GGL90 |
386 |
CALL COPY_ADVAR_OUTP( dumRS,adGGL90TKE,var3Du,Nr, 12,myThid ) |
387 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJggl90tke.', |
388 |
& suff, var3Du, myIter, myThid ) |
389 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJggl90tke', |
390 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
391 |
#endif |
392 |
#ifdef ALLOW_DIFFKR_CONTROL |
393 |
CALL COPY_ADVAR_OUTP( dumRS, adDiffKr,var3Du, Nr, 12,myThid ) |
394 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJdiffkr.', |
395 |
& suff, var3Du, myIter, myThid ) |
396 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJdiffkr', |
397 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
398 |
#endif |
399 |
#ifdef ALLOW_KAPGM_CONTROL |
400 |
CALL COPY_ADVAR_OUTP( dumRS, adKapGM, var3Du, Nr, 12,myThid ) |
401 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJkapgm.', |
402 |
& suff, var3Du, myIter, myThid ) |
403 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJkapgm', |
404 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
405 |
#endif |
406 |
#ifdef ALLOW_KAPREDI_CONTROL |
407 |
CALL COPY_ADVAR_OUTP( dumRS,adKapRedi,var3Du, Nr, 12,myThid ) |
408 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJkapredi.', |
409 |
& suff, var3Du, myIter, myThid ) |
410 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJkapredi', |
411 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
412 |
#endif |
413 |
#ifdef ALLOW_EDDYPSI_CONTROL |
414 |
CALL COPY_AD_UV_OUTP( adEddyPsiX, adEddyPsiY, dumRL, dumRL, |
415 |
& var3Du, var3Dv, Nr, 33, myThid ) |
416 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJeddypsix.', |
417 |
& suff, var3Du, myIter, myThid ) |
418 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJeddypsix', |
419 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
420 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJeddypsiy.', |
421 |
& suff, var3Dv, myIter, myThid ) |
422 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJeddypsiy', |
423 |
& var3Dv, dumpAdRecMn, myIter, myThid ) |
424 |
#endif |
425 |
#ifdef ALLOW_SST0_CONTROL |
426 |
CALL COPY_ADVAR_OUTP( adSST, dumRL, var2Du, 1, 11, myThid ) |
427 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJsst.', |
428 |
& suff,var2Du,myIter,myThid ) |
429 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJsst', |
430 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
431 |
#endif |
432 |
#ifdef ALLOW_SSS0_CONTROL |
433 |
CALL COPY_ADVAR_OUTP( adSSS, dumRL, var2Du, 1, 11, myThid ) |
434 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJsss.', |
435 |
& suff,var2Du,myIter,myThid ) |
436 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJsss', |
437 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
438 |
#endif |
439 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
440 |
CALL COPY_ADVAR_OUTP( dumRS, adBottomDragFld, |
441 |
& var2Du, 1, 12, myThid ) |
442 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJbottomdrag.', |
443 |
& suff, var2Du, myIter, myThid ) |
444 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJbottomdrag', |
445 |
& var2Du, dumpAdRecMn, myIter, myThid ) |
446 |
#endif |
447 |
C end if dumpAdVarExch = 2 |
448 |
ENDIF |
449 |
|
450 |
C----------------------------------------------------------------------- |
451 |
#else /* ndef ALLOW_OPENAD */ |
452 |
C----------------------------------------------------------------------- |
453 |
|
454 |
IF ( ( dumpAdVarExch.NE.2 ).AND.(.NOT.dumpAdByRec) ) THEN |
455 |
foo3D = theta%d |
456 |
CALL WRITE_FLD_XYZ_RL( 'ADJtheta.', suff, |
457 |
& foo3D, myIter, myThid ) |
458 |
foo3D = salt%d |
459 |
CALL WRITE_FLD_XYZ_RL( 'ADJsalt.', suff, |
460 |
& foo3D, myIter, myThid ) |
461 |
foo3D = uvel%d |
462 |
CALL WRITE_FLD_XYZ_RL( 'ADJuvel.', suff, |
463 |
& foo3D, myIter, myThid ) |
464 |
foo3D = vvel%d |
465 |
CALL WRITE_FLD_XYZ_RL( 'ADJvvel.', suff, |
466 |
& foo3D, myIter, myThid ) |
467 |
foo3D = wvel%d |
468 |
CALL WRITE_FLD_XYZ_RL( 'ADJwvel.', suff, |
469 |
& foo3D, myIter, myThid ) |
470 |
foo2D = etaN%d |
471 |
CALL WRITE_FLD_XY_RL ( 'ADJetan.', suff, |
472 |
& foo2D, myIter, myThid ) |
473 |
|
474 |
IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN |
475 |
foo2D = Fu%d |
476 |
CALL WRITE_FLD_XY_RS('ADJtaux.',suff, foo2d, myIter, myThid ) |
477 |
foo2D = Fv%d |
478 |
CALL WRITE_FLD_XY_RS('ADJtauy.',suff, foo2d, myIter, myThid ) |
479 |
foo2D = Qnet%d |
480 |
CALL WRITE_FLD_XY_RS('ADJqnet.',suff, foo2d,myIter,myThid ) |
481 |
foo2D = EmPmR%d |
482 |
CALL WRITE_FLD_XY_RS('ADJempr.',suff,foo2d,myIter,myThid ) |
483 |
#ifdef SHORTWAVE_HEATING |
484 |
cc foo2D = Qsw%d |
485 |
cc CALL WRITE_FLD_XY_RS('ADJqsw.', suff, foo2d,myIter, myThid ) |
486 |
#endif |
487 |
ENDIF |
488 |
|
489 |
#ifdef ALLOW_GGL90 |
490 |
c CALL WRITE_FLD_XYZ_RL ( 'ADJggl90diffkr.',suff, |
491 |
c & adGGL90DiffKr, myIter, myThid ) |
492 |
cc foo3D = GGL90TKE%d |
493 |
cc CALL WRITE_FLD_XYZ_RL( 'ADJggl90tke.', suff, |
494 |
cc & foo3d, myIter, myThid ) |
495 |
#endif |
496 |
#ifdef ALLOW_DIFFKR_CONTROL |
497 |
foo3D = DiffKr%d |
498 |
CALL WRITE_FLD_XYZ_RL( 'ADJdiffkr.', suff, |
499 |
& foo3d, myIter, myThid ) |
500 |
#endif |
501 |
#ifdef ALLOW_KAPGM_CONTROL |
502 |
foo3D = KapGM%d |
503 |
CALL WRITE_FLD_XYZ_RL( 'ADJkapgm.', suff, |
504 |
& foo3d, myIter, myThid ) |
505 |
#endif |
506 |
#ifdef ALLOW_KAPREDI_CONTROL |
507 |
foo3D = KapRedi%d |
508 |
CALL WRITE_FLD_XYZ_RL( 'ADJkapredi.', suff, |
509 |
& foo3d, myIter, myThid ) |
510 |
#endif |
511 |
#ifdef ALLOW_EDDYPSI_CONTROL |
512 |
foo3D = EddyPsiX%d |
513 |
CALL WRITE_FLD_XYZ_RS( 'ADJeddypsix.', suff, |
514 |
& foo3d, myIter, myThid ) |
515 |
foo3D = EddyPsiY%d |
516 |
CALL WRITE_FLD_XYZ_RS( 'ADJeddypsiy.', suff, |
517 |
& foo3d, myIter, myThid ) |
518 |
#endif |
519 |
#ifdef ALLOW_SST0_CONTROL |
520 |
foo2D = sst%d |
521 |
CALL WRITE_FLD_XY_RS( 'ADJsst.',suff, adSST, myIter, myThid ) |
522 |
#endif |
523 |
#ifdef ALLOW_SSS0_CONTROL |
524 |
foo2D = sss%d |
525 |
CALL WRITE_FLD_XY_RS( 'ADJsss.',suff, adSSS, myIter, myThid ) |
526 |
#endif |
527 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
528 |
foo2D = BottomDragFld%d |
529 |
CALL WRITE_FLD_XY_RL ( 'ADJbottomdrag.', suff, |
530 |
& adBottomDragFld, myIter, myThid ) |
531 |
#endif |
532 |
|
533 |
ELSEIF ( ( dumpAdVarExch.NE.2 ).AND.(dumpAdByRec) ) THEN |
534 |
|
535 |
foo3D = theta%d |
536 |
CALL WRITE_REC_XYZ_RL( 'ADJtheta', |
537 |
& foo3d, dumpAdRecMn, myIter,myThid ) |
538 |
foo3D = salt%d |
539 |
CALL WRITE_REC_XYZ_RL( 'ADJsalt', |
540 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
541 |
foo3D = uvel%d |
542 |
CALL WRITE_REC_XYZ_RL( 'ADJuvel', |
543 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
544 |
foo3D = vvel%d |
545 |
CALL WRITE_REC_XYZ_RL( 'ADJvvel', |
546 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
547 |
foo3D = wvel%d |
548 |
CALL WRITE_REC_XYZ_RL( 'ADJwvel', |
549 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
550 |
foo2D = etan%d |
551 |
CALL WRITE_REC_XY_RL ( 'ADJetan', |
552 |
& foo2d, dumpAdRecMn, myIter, myThid ) |
553 |
|
554 |
IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN |
555 |
foo2D = fu%d |
556 |
CALL WRITE_REC_XY_RS('ADJtaux', |
557 |
& foo2d, dumpAdRecMn, myIter, myThid ) |
558 |
foo2D = fv%d |
559 |
CALL WRITE_REC_XY_RS('ADJtauy', |
560 |
& foo2d, dumpAdRecMn, myIter, myThid ) |
561 |
foo2D = Qnet%d |
562 |
CALL WRITE_REC_XY_RS('ADJqnet', |
563 |
& foo2d,dumpAdRecMn, myIter,myThid ) |
564 |
foo2D = EmPmR%d |
565 |
CALL WRITE_REC_XY_RS('ADJempr', |
566 |
& foo2d,dumpAdRecMn, myIter,myThid ) |
567 |
#ifdef SHORTWAVE_HEATING |
568 |
cc foo2D = Qsw%d |
569 |
cc CALL WRITE_REC_XY_RS('ADJqsw', |
570 |
cc & foo2d,dumpAdRecMn, myIter, myThid ) |
571 |
#endif |
572 |
ENDIF |
573 |
|
574 |
#ifdef ALLOW_GGL90 |
575 |
c CALL WRITE_REC_XYZ_RL ( 'ADJggl90diffkr', |
576 |
c & adGGL90DiffKr, dumpAdRecMn, myIter, myThid ) |
577 |
cc foo3D = GGL90TKE%d |
578 |
cc CALL WRITE_REC_XYZ_RL( 'ADJggl90tke', |
579 |
cc & foo3d, dumpAdRecMn, myIter, myThid ) |
580 |
#endif |
581 |
#ifdef ALLOW_DIFFKR_CONTROL |
582 |
foo3D = Diffkr%d |
583 |
CALL WRITE_REC_XYZ_RL( 'ADJdiffkr', |
584 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
585 |
#endif |
586 |
#ifdef ALLOW_KAPGM_CONTROL |
587 |
foo3D = KapGM%d |
588 |
CALL WRITE_REC_XYZ_RL( 'ADJkapgm', |
589 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
590 |
#endif |
591 |
#ifdef ALLOW_KAPREDI_CONTROL |
592 |
foo3D = KapRedi%d |
593 |
CALL WRITE_REC_XYZ_RL( 'ADJkapredi', |
594 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
595 |
#endif |
596 |
#ifdef ALLOW_EDDYPSI_CONTROL |
597 |
foo3D = EddyPsiX%d |
598 |
CALL WRITE_REC_XYZ_RS( 'ADJeddypsix', |
599 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
600 |
foo3D = EddyPsiY%d |
601 |
CALL WRITE_REC_XYZ_RS( 'ADJeddypsiy', |
602 |
& foo3d, dumpAdRecMn, myIter, myThid ) |
603 |
#endif |
604 |
#ifdef ALLOW_SST0_CONTROL |
605 |
foo2D = sst%d |
606 |
CALL WRITE_REC_XY_RS( 'ADJsst', |
607 |
& foo2d, dumpAdRecMn, myIter, myThid ) |
608 |
#endif |
609 |
#ifdef ALLOW_SSS0_CONTROL |
610 |
foo2D = sss%d |
611 |
CALL WRITE_REC_XY_RS( 'ADJsss', |
612 |
& foo2d, dumpAdRecMn, myIter, myThid ) |
613 |
#endif |
614 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
615 |
foo2D = BottomDragFld%d |
616 |
CALL WRITE_REC_XY_RL ( 'ADJbottomdrag', |
617 |
& foo2d, dumpAdRecMn, myIter, myThid ) |
618 |
#endif |
619 |
|
620 |
ELSE |
621 |
C case dumpAdVarExch = 2 |
622 |
|
623 |
CALL COPY_ADVAR_OUTP( dumRS, theta%d,var3Du, Nr, 12, myThid ) |
624 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJtheta.', |
625 |
& suff, var3Du, myIter, myThid ) |
626 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJtheta', |
627 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
628 |
CALL COPY_ADVAR_OUTP( dumRS, salt%d, var3Du, Nr, 12, myThid ) |
629 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJsalt.', |
630 |
& suff, var3Du, myIter, myThid ) |
631 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJsalt', |
632 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
633 |
CALL COPY_AD_UV_OUTP( dumRS, dumRS, uVel%d, vVel%d, |
634 |
& var3Du, var3Dv, Nr, 34, myThid ) |
635 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJuvel.', |
636 |
& suff, var3Du, myIter, myThid ) |
637 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJuvel', |
638 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
639 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJvvel.', |
640 |
& suff, var3Dv, myIter, myThid ) |
641 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJvvel', |
642 |
& var3Dv, dumpAdRecMn, myIter, myThid ) |
643 |
CALL COPY_ADVAR_OUTP( dumRS, wVel%d, var3Du, Nr, 12, myThid ) |
644 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJwvel.', |
645 |
& suff, var3Du, myIter, myThid ) |
646 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJwvel', |
647 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
648 |
CALL COPY_ADVAR_OUTP( dumRS, EtaN%d, var2Du, 1 , 12, myThid ) |
649 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJetan.', |
650 |
& suff, var2Du, myIter, myThid ) |
651 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJetan', |
652 |
& var2Du, dumpAdRecMn, myIter, myThid ) |
653 |
|
654 |
IF ( .NOT. useSEAICE .AND. .NOT. useEXF ) THEN |
655 |
CALL COPY_AD_UV_OUTP( Fu%d, Fv%d, dumRL, dumRL, |
656 |
& var2Du, var2Dv, 1, 33, myThid ) |
657 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJtaux.', |
658 |
& suff,var2Du,myIter,myThid ) |
659 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJtaux', |
660 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
661 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJtauy.', |
662 |
& suff,var2Dv,myIter,myThid ) |
663 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJtauy', |
664 |
& var2Dv,dumpAdRecMn, myIter,myThid ) |
665 |
CALL COPY_ADVAR_OUTP( Qnet%d, dumRL, var2Du, 1, 11, myThid ) |
666 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJqnet.', |
667 |
& suff,var2Du,myIter,myThid ) |
668 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJqnet', |
669 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
670 |
CALL COPY_ADVAR_OUTP( EmPmR%d,dumRL, var2Du, 1, 11, myThid ) |
671 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJempr.', |
672 |
& suff,var2Du,myIter,myThid ) |
673 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJempr', |
674 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
675 |
#ifdef SHORTWAVE_HEATING |
676 |
cc CALL COPY_ADVAR_OUTP( Qsw%d, dumRL, var2Du, 1, 11, myThid ) |
677 |
cc IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJqsw.', |
678 |
cc & suff,var2Du,myIter,myThid ) |
679 |
cc IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJqsw', |
680 |
cc & var2Du,dumpAdRecMn, myIter,myThid ) |
681 |
#endif |
682 |
ENDIF |
683 |
#ifdef ALLOW_GGL90 |
684 |
cc CALL COPY_ADVAR_OUTP( dumRS,GGL90TKE%d,var3Du,Nr, 12,myThid ) |
685 |
cc IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJggl90tke.', |
686 |
cc & suff, var3Du, myIter, myThid ) |
687 |
cc IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJggl90tke', |
688 |
cc & var3Du, dumpAdRecMn, myIter, myThid ) |
689 |
#endif |
690 |
#ifdef ALLOW_DIFFKR_CONTROL |
691 |
CALL COPY_ADVAR_OUTP( dumRS, DiffKr%d,var3Du, Nr, 12,myThid ) |
692 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJdiffkr.', |
693 |
& suff, var3Du, myIter, myThid ) |
694 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJdiffkr', |
695 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
696 |
#endif |
697 |
#ifdef ALLOW_KAPGM_CONTROL |
698 |
CALL COPY_ADVAR_OUTP( dumRS, KapGM%d, var3Du, Nr, 12,myThid ) |
699 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJkapgm.', |
700 |
& suff, var3Du, myIter, myThid ) |
701 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJkapgm', |
702 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
703 |
#endif |
704 |
#ifdef ALLOW_KAPREDI_CONTROL |
705 |
CALL COPY_ADVAR_OUTP( dumRS,KapRedi%d,var3Du, Nr, 12,myThid ) |
706 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJkapredi.', |
707 |
& suff, var3Du, myIter, myThid ) |
708 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJkapredi', |
709 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
710 |
#endif |
711 |
#ifdef ALLOW_EDDYPSI_CONTROL |
712 |
CALL COPY_AD_UV_OUTP( EddyPsiX%d, EddyPsiY%d, dumRL, dumRL, |
713 |
& var3Du, var3Dv, Nr, 33, myThid ) |
714 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJeddypsix.', |
715 |
& suff, var3Du, myIter, myThid ) |
716 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJeddypsix', |
717 |
& var3Du, dumpAdRecMn, myIter, myThid ) |
718 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XYZ_RL( 'ADJeddypsiy.', |
719 |
& suff, var3Dv, myIter, myThid ) |
720 |
IF ( dumpAdByRec ) CALL WRITE_REC_XYZ_RL( 'ADJeddypsiy', |
721 |
& var3Dv, dumpAdRecMn, myIter, myThid ) |
722 |
#endif |
723 |
#ifdef ALLOW_SST0_CONTROL |
724 |
CALL COPY_ADVAR_OUTP( SST%d, dumRL, var2Du, 1, 11, myThid ) |
725 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJsst.', |
726 |
& suff,var2Du,myIter,myThid ) |
727 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJsst', |
728 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
729 |
#endif |
730 |
#ifdef ALLOW_SSS0_CONTROL |
731 |
CALL COPY_ADVAR_OUTP( SSS%d, dumRL, var2Du, 1, 11, myThid ) |
732 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJsss.', |
733 |
& suff,var2Du,myIter,myThid ) |
734 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJsss', |
735 |
& var2Du,dumpAdRecMn, myIter,myThid ) |
736 |
#endif |
737 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
738 |
CALL COPY_ADVAR_OUTP( dumRS, BottomDragFld%d, |
739 |
& var2Du, 1, 12, myThid ) |
740 |
IF (.NOT.dumpAdByRec) CALL WRITE_FLD_XY_RL( 'ADJbottomdrag.', |
741 |
& suff, var2Du, myIter, myThid ) |
742 |
IF ( dumpAdByRec ) CALL WRITE_REC_XY_RL( 'ADJbottomdrag', |
743 |
& var2Du, dumpAdRecMn, myIter, myThid ) |
744 |
#endif |
745 |
|
746 |
C end if dumpAdVarExch = 2 |
747 |
ENDIF |
748 |
|
749 |
C----------------------------------------------------------------------- |
750 |
#endif /* ndef ALLOW_OPENAD */ |
751 |
C----------------------------------------------------------------------- |
752 |
|
753 |
C-- NOW NMC output |
754 |
|
755 |
#ifndef ALLOW_OPENAD |
756 |
#ifdef ALLOW_MNC |
757 |
IF (useMNC .AND. autodiff_mnc) THEN |
758 |
CALL MNC_CW_SET_UDIM('adstate', -1, myThid) |
759 |
CALL MNC_CW_RL_W_S('D','adstate',0,0,'T',myTime,myThid) |
760 |
CALL MNC_CW_SET_UDIM('adstate', 0, myThid) |
761 |
CALL MNC_CW_I_W_S('I','adstate',0,0,'iter',myIter,myThid) |
762 |
CALL MNC_CW_RL_W_S('D','adstate',0,0,'model_time',myTime, |
763 |
& myThid) |
764 |
|
765 |
IF ( dumpAdVarExch.EQ.2 ) THEN |
766 |
CALL COPY_AD_UV_OUTP( dumRS, dumRS, aduVel, advVel, |
767 |
& var3Du, var3Dv, Nr, 34, myThid ) |
768 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adU', var3Du, myThid) |
769 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adV', var3Dv, myThid) |
770 |
CALL COPY_ADVAR_OUTP( dumRS, adTheta,var3Du, Nr, 12, myThid ) |
771 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adT', var3Du, myThid) |
772 |
CALL COPY_ADVAR_OUTP( dumRS, adSalt,var3Du, Nr, 12, myThid ) |
773 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adS', var3Du, myThid) |
774 |
CALL COPY_ADVAR_OUTP( dumRS, adEtaN, var2Du, 1 , 12, myThid ) |
775 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adEta', var2Du, myThid) |
776 |
CALL COPY_ADVAR_OUTP( dumRS, adwVel, var3Du, Nr, 12, myThid ) |
777 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adW', var3Du, myThid) |
778 |
|
779 |
CALL COPY_ADVAR_OUTP( adQnet, dumRL, var2Du, 1, 11, myThid ) |
780 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adQnet', var2Du, myThid) |
781 |
CALL COPY_ADVAR_OUTP( adEmPmR,dumRL, var2Du, 1, 11, myThid ) |
782 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adEmpmr', var2Du, myThid) |
783 |
CALL COPY_AD_UV_OUTP( adFu, adFv, dumRL, dumRL, |
784 |
& var2Du, var2Dv, 1, 33, myThid ) |
785 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adFu', var2Du, myThid) |
786 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adFv', var2Dv, myThid) |
787 |
|
788 |
#ifdef ALLOW_SST0_CONTROL |
789 |
CALL COPY_ADVAR_OUTP( adSST, dumRL, var2Du, 1, 11, myThid ) |
790 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adSST', var2Du, myThid) |
791 |
#endif |
792 |
#ifdef ALLOW_SSS0_CONTROL |
793 |
CALL COPY_ADVAR_OUTP( adSSS, dumRL, var2Du, 1, 11, myThid ) |
794 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adSSS', var2Du, myThid) |
795 |
#endif |
796 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
797 |
CALL COPY_ADVAR_OUTP( dumRS, adBottomDragFld, |
798 |
& var2Du, 1, 12, myThid ) |
799 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
800 |
& 'adBottomDrag', var2Du, myThid) |
801 |
#endif |
802 |
#ifdef ALLOW_DIFFKR_CONTROL |
803 |
CALL COPY_ADVAR_OUTP( dumRS, adDiffKr,var3Du, Nr, 12,myThid ) |
804 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
805 |
& 'adDiffkr', var3Du, myThid) |
806 |
#endif |
807 |
#ifdef ALLOW_KAPGM_CONTROL |
808 |
CALL COPY_ADVAR_OUTP( dumRS, adKapGM, var3Du, Nr, 12,myThid ) |
809 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
810 |
& 'adkapgm', var3Du, myThid) |
811 |
#endif |
812 |
#ifdef ALLOW_KAPREDI_CONTROL |
813 |
CALL COPY_ADVAR_OUTP( dumRS,adKapRedi,var3Du, Nr, 12,myThid ) |
814 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
815 |
& 'adkapredi', var3Du, myThid) |
816 |
#endif |
817 |
ELSE |
818 |
C dumpAdVarExch.NE.2 |
819 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adU', aduVel, myThid) |
820 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adV', advVel, myThid) |
821 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adT', adtheta, myThid) |
822 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adS', adsalt, myThid) |
823 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adEta', adetaN, myThid) |
824 |
CALL MNC_CW_RL_W('D','adstate',0,0,'adW', adwVel, myThid) |
825 |
|
826 |
CALL MNC_CW_RS_W('D','adstate',0,0,'adQnet', adQnet, myThid) |
827 |
CALL MNC_CW_RS_W('D','adstate',0,0,'adEmpmr', adEmpmr, myThid) |
828 |
CALL MNC_CW_RS_W('D','adstate',0,0,'adFu', adfu, myThid) |
829 |
CALL MNC_CW_RS_W('D','adstate',0,0,'adFv', adfv, myThid) |
830 |
|
831 |
#ifdef ALLOW_SST0_CONTROL |
832 |
CALL MNC_CW_RS_W('D','adstate',0,0,'adSST', adsst, myThid) |
833 |
#endif |
834 |
#ifdef ALLOW_SSS0_CONTROL |
835 |
CALL MNC_CW_RS_W('D','adstate',0,0,'adSSS', adsss, myThid) |
836 |
#endif |
837 |
#ifdef ALLOW_BOTTOMDRAG_CONTROL |
838 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
839 |
& 'adBottomDrag', adbottomdragfld, myThid) |
840 |
#endif |
841 |
#ifdef ALLOW_DIFFKR_CONTROL |
842 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
843 |
& 'adDiffkr', addiffkr, myThid) |
844 |
#endif |
845 |
#ifdef ALLOW_KAPGM_CONTROL |
846 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
847 |
& 'adkapgm', adkapgm, myThid) |
848 |
#endif |
849 |
#ifdef ALLOW_KAPREDI_CONTROL |
850 |
CALL MNC_CW_RL_W('D','adstate',0,0, |
851 |
& 'adkapredi', adkapredi, myThid) |
852 |
#endif |
853 |
ENDIF |
854 |
C endif mnc |
855 |
ENDIF |
856 |
#endif /* ALLOW_MNC */ |
857 |
#endif /* ALLOW_OPENAD */ |
858 |
|
859 |
#ifdef ALLOW_EXF |
860 |
cph IF ( useEXF ) CALL EXF_AD_DUMP( myTime, myIter, myThid ) |
861 |
#endif |
862 |
|
863 |
#ifdef ALLOW_SEAICE |
864 |
IF ( useSEAICE ) |
865 |
& CALL SEAICE_AD_DUMP( myTime, myIter, myThid ) |
866 |
#endif |
867 |
|
868 |
#ifdef ALLOW_PTRACERS |
869 |
IF ( usePTRACERS ) |
870 |
& CALL PTRACERS_AD_DUMP( myTime, myIter, myThid ) |
871 |
#endif |
872 |
|
873 |
CALL TIMER_STOP( 'I/O (WRITE) [ADJOINT LOOP]', myThid ) |
874 |
|
875 |
ENDIF |
876 |
|
877 |
#endif /* ALLOW_AUTODIFF_MONITOR */ |
878 |
#endif /* ALLOW_ADJOINT_RUN */ |
879 |
|
880 |
RETURN |
881 |
END |