/[MITgcm]/MITgcm/pkg/autodiff/addummy_in_stepping.F
ViewVC logotype

Contents of /MITgcm/pkg/autodiff/addummy_in_stepping.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.53 - (show annotations) (download)
Thu Aug 18 09:10:26 2011 UTC (12 years, 10 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint63g, checkpoint63p, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63b, checkpoint63c
Changes since 1.52: +1 -4 lines
Make adjoint dump more modular.

1 C $Header: /u/gcmpack/MITgcm/pkg/autodiff/addummy_in_stepping.F,v 1.52 2011/08/17 18:02:42 heimbach Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "AUTODIFF_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: addummy_in_stepping
9 C !INTERFACE:
10 subroutine addummy_in_stepping( mytime, myiter, myThid )
11
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | SUBROUTINE addummy_in_stepping |
15 C *==========================================================*
16 C Extract adjoint variable from TAMC/TAF-generated
17 C adjoint common blocks, contained in adcommon.h
18 C and write fields to file;
19 C Make sure common blocks in adcommon.h are up-to-date
20 C w.r.t. current adjoint code.
21 C *==========================================================*
22 C | SUBROUTINE addummy_in_stepping |
23 C *==========================================================*
24 C \ev
25
26 C !USES:
27 IMPLICIT NONE
28
29 C == Global variables ===
30 #include "SIZE.h"
31 #include "EEPARAMS.h"
32 #include "PARAMS.h"
33 #ifdef ALLOW_MNC
34 #include "MNC_PARAMS.h"
35 #endif
36 #include "GRID.h"
37 #ifdef ALLOW_AUTODIFF_MONITOR
38 # include "adcommon.h"
39 #endif
40
41 LOGICAL DIFFERENT_MULTIPLE
42 EXTERNAL DIFFERENT_MULTIPLE
43 INTEGER IO_ERRCOUNT
44 EXTERNAL IO_ERRCOUNT
45
46 C !INPUT/OUTPUT PARAMETERS:
47 C == Routine arguments ==
48 C myIter - iteration counter for this thread
49 C myTime - time counter for this thread
50 C myThid - Thread number for this instance of the routine.
51 integer myThid
52 integer myiter
53 _RL mytime
54
55 #if (defined (ALLOW_ADJOINT_RUN) || defined (ALLOW_ADMTLM))
56 #ifdef ALLOW_AUTODIFF_MONITOR
57
58 C !LOCAL VARIABLES:
59 c == local variables ==
60 C suff - Hold suffix part of a filename
61 C beginIOErrCount - Begin and end IO error counts
62 C endIOErrCount
63 C msgBuf - Error message buffer
64 CHARACTER*(MAX_LEN_FNAM) suff
65 INTEGER beginIOErrCount
66 INTEGER endIOErrCount
67 CHARACTER*(MAX_LEN_MBUF) msgBuf
68
69 c == end of interface ==
70 CEOP
71
72 call TIMER_START('I/O (WRITE) [ADJOINT LOOP]', myThid )
73
74 IF (
75 & DIFFERENT_MULTIPLE(adjDumpFreq,mytime,deltaTClock)
76 & ) THEN
77
78 #ifdef AUTODIFF_TAMC_COMPATIBILITY
79 call adexch_xy_rl( mythid,adetan)
80 call adexch_xyz_rl( mythid,adtheta)
81 call adexch_xyz_rl( mythid,adsalt)
82 call adexch_xyz_rl( mythid,adwvel )
83 call adexch_uv_xyz_rl( .true. ,mythid,aduvel,advvel )
84 c
85 call adexch_xy_rl( mythid,adfu )
86 call adexch_xy_rl( mythid,adfv )
87 call adexch_xy_rl( mythid,adqnet )
88 call adexch_xy_rl( mythid,adempmr )
89 # ifdef ALLOW_EDDYPSI_CONTROL
90 call adexch_xyz_rl( mythid,adeddypsix )
91 call adexch_xyz_rl( mythid,adeddypsiy )
92 # endif
93 # ifdef ALLOW_DIFFKR_CONTROL
94 call adexch_xyz_rl( mythid,addiffkr )
95 # endif
96 # ifdef ALLOW_KAPGM_CONTROL
97 call adexch_xyz_rl( mythid,adkapgm )
98 # endif
99 # ifdef ALLOW_KAPREDI_CONTROL
100 call adexch_xyz_rl( mythid,adkapredi )
101 # endif
102 # ifdef ALLOW_SST0_CONTROL
103 call adexch_xy_rl( mythid,adsst )
104 # endif
105 # ifdef ALLOW_SSS0_CONTROL
106 call adexch_xy_rl( mythid,adsss )
107 # endif
108 # ifdef ALLOW_BOTTOMDRAG_CONTROL
109 call adexch_xy_rl( mythid,adbottomdragfld)
110 # endif
111 # else /* ndfef AUTODIFF_TAMC_COMPATIBILITY */
112 call adexch_xy_rl( adetan, mythid )
113 # ifndef ALLOW_BULK_OFFLINE
114 call adexch_xyz_rl( adtheta, mythid )
115 call adexch_xyz_rl( adsalt, mythid )
116 call adexch_xyz_rl( adwvel, mythid )
117 call adexch_uv_xyz_rl( aduvel,advvel, .true. ,mythid )
118 # endif
119 c
120 call adexch_xy_rl( adfu, mythid )
121 call adexch_xy_rl( adfv, mythid )
122 call adexch_xy_rl( adqnet, mythid )
123 call adexch_xy_rl( adempmr, mythid )
124 # ifdef ALLOW_EDDYPSI_CONTROL
125 call adexch_xyz_rl( adeddypsix, mythid )
126 call adexch_xyz_rl( adeddypsiy, mythid )
127 # endif
128 # ifdef ALLOW_DIFFKR_CONTROL
129 call adexch_xyz_rl( addiffkr, mythid )
130 # endif
131 # ifdef ALLOW_KAPGM_CONTROL
132 call adexch_xyz_rl( adkapgm, mythid )
133 # endif
134 # ifdef ALLOW_KAPREDI_CONTROL
135 call adexch_xyz_rl( adkapredi, mythid )
136 # endif
137 # ifdef ALLOW_SST0_CONTROL
138 call adexch_xy_rl( adsst, mythid )
139 # endif
140 # ifdef ALLOW_SSS0_CONTROL
141 call adexch_xy_rl( adsss, mythid )
142 # endif
143 # ifdef ALLOW_BOTTOMDRAG_CONTROL
144 call adexch_xy_rl( adbottomdragfld, mythid )
145 # endif
146 #endif /* AUTODIFF_TAMC_COMPATIBILITY */
147
148 C-- Set suffix for this set of data files.
149 WRITE(suff,'(I10.10)') myIter
150 writeBinaryPrec = writeStatePrec
151
152 C-- Read IO error counter
153 beginIOErrCount = IO_ERRCOUNT(myThid)
154
155 CALL WRITE_FLD_XYZ_RL(
156 & 'ADJtheta.',suff, adtheta, myIter, myThid)
157 CALL WRITE_FLD_XYZ_RL(
158 & 'ADJsalt.',suff, adsalt, myIter, myThid)
159 CALL WRITE_FLD_XYZ_RL(
160 & 'ADJuvel.',suff, aduvel, myIter, myThid)
161 CALL WRITE_FLD_XYZ_RL(
162 & 'ADJvvel.',suff, advvel, myIter, myThid)
163 CALL WRITE_FLD_XYZ_RL(
164 & 'ADJwvel.',suff, adwvel, myIter, myThid)
165 CALL WRITE_FLD_XY_RL(
166 & 'ADJetan.',suff, adetan, myIter, myThid)
167
168 if ( .NOT. useSEAICE .AND. .NOT. useEXF ) then
169 CALL WRITE_FLD_XY_RL ( 'ADJtaux.',suff, adfu, myIter, myThid)
170 CALL WRITE_FLD_XY_RL ( 'ADJtauy.',suff, adfv, myIter, myThid)
171 CALL WRITE_FLD_XY_RL ( 'ADJqnet.',suff, adqnet, myIter, myThid)
172 CALL WRITE_FLD_XY_RL ( 'ADJempr.',suff, adempmr, myIter, myThid)
173 #ifdef SHORTWAVE_HEATING
174 CALL WRITE_FLD_XY_RL ( 'ADJqsw.',suff, adqsw, myIter, myThid)
175 #endif
176 endif
177
178 #ifdef ALLOW_GGL90
179 c CALL WRITE_FLD_XYZ_RL ( 'ADJggl90diffkr.',suff, adggl90diffkr,
180 c & myIter, myThid)
181 CALL WRITE_FLD_XYZ_RL ( 'ADJggl90tke.',suff, adggl90tke,
182 & myIter, myThid)
183 #endif
184 #ifdef ALLOW_DIFFKR_CONTROL
185 CALL WRITE_FLD_XYZ_RL ( 'ADJdiffkr.',suff, addiffkr,
186 & myIter, myThid)
187 #endif
188 #ifdef ALLOW_KAPGM_CONTROL
189 CALL WRITE_FLD_XYZ_RL ( 'ADJkapgm.',suff, adkapgm,
190 & myIter, myThid)
191 #endif
192 #ifdef ALLOW_KAPREDI_CONTROL
193 CALL WRITE_FLD_XYZ_RL ( 'ADJkapredi.',suff, adkapredi,
194 & myIter, myThid)
195 #endif
196 #ifdef ALLOW_EDDYPSI_CONTROL
197 CALL WRITE_FLD_XYZ_RL(
198 & 'ADJeddypsix. ',suff, adeddypsix, myIter, myThid)
199 CALL WRITE_FLD_XYZ_RL(
200 & 'ADJeddypsiy. ',suff, adeddypsiy, myIter, myThid)
201 #endif
202 #ifdef ALLOW_SST0_CONTROL
203 CALL WRITE_FLD_XY_RL( 'ADJsst.',suff, adsst, myIter, myThid)
204 #endif
205 #ifdef ALLOW_SSS0_CONTROL
206 CALL WRITE_FLD_XY_RL( 'ADJsss.',suff, adsss, myIter, myThid)
207 #endif
208 #ifdef ALLOW_BOTTOMDRAG_CONTROL
209 CALL WRITE_FLD_XY_RL ( 'ADJbottomdrag.',suff,
210 & adbottomdragfld, myIter, myThid)
211 #endif
212
213 #ifdef ALLOW_EXF
214 cph IF ( useEXF ) CALL EXF_AD_DUMP( mytime, myiter, myThid )
215 #endif
216
217 #ifdef ALLOW_SEAICE
218 IF ( useSEAICE )
219 & CALL SEAICE_AD_DUMP( mytime, myiter, myThid )
220 #endif
221
222 #ifdef ALLOW_PTRACERS
223 IF ( usePTRACERS )
224 & CALL PTRACERS_AD_DUMP( mytime, myiter, myThid )
225 #endif
226
227 #ifdef ALLOW_MNC
228 IF (useMNC .AND. autodiff_mnc) THEN
229 c
230 CALL MNC_CW_SET_UDIM('adstate', -1, myThid)
231 CALL MNC_CW_RL_W_S('D','adstate',0,0,'T',myTime,myThid)
232 CALL MNC_CW_SET_UDIM('adstate', 0, myThid)
233 CALL MNC_CW_I_W_S('I','adstate',0,0,'iter',myIter,myThid)
234 CALL MNC_CW_RL_W_S('D','adstate',0,0,'model_time',myTime,
235 & myThid)
236 c
237 CALL MNC_CW_RL_W('D','adstate',0,0,'adU', aduVel, myThid)
238 CALL MNC_CW_RL_W('D','adstate',0,0,'adV', advVel, myThid)
239 CALL MNC_CW_RL_W('D','adstate',0,0,'adT', adtheta, myThid)
240 CALL MNC_CW_RL_W('D','adstate',0,0,'adS', adsalt, myThid)
241 CALL MNC_CW_RL_W('D','adstate',0,0,'adEta', adetaN, myThid)
242 CALL MNC_CW_RL_W('D','adstate',0,0,'adW', adwVel, myThid)
243
244 CALL MNC_CW_RL_W('D','adstate',0,0,'adQnet', adQnet, myThid)
245 CALL MNC_CW_RL_W('D','adstate',0,0,'adEmpmr', adEmpmr, myThid)
246 CALL MNC_CW_RL_W('D','adstate',0,0,'adFu', adfu, myThid)
247 CALL MNC_CW_RL_W('D','adstate',0,0,'adFv', adfv, myThid)
248
249 #ifdef ALLOW_SST0_CONTROL
250 CALL MNC_CW_RL_W('D','adstate',0,0,'adSST', adsst, myThid)
251 #endif
252 #ifdef ALLOW_SSS0_CONTROL
253 CALL MNC_CW_RL_W('D','adstate',0,0,'adSSS', adsss, myThid)
254 #endif
255 #ifdef ALLOW_BOTTOMDRAG_CONTROL
256 CALL MNC_CW_RL_W('D','adstate',0,0,'adBottomDrag',
257 & adbottomdragfld, myThid)
258 #endif
259 #ifdef ALLOW_DIFFKR_CONTROL
260 CALL MNC_CW_RL_W('D','adstate',0,0,
261 & 'adDiffkr', addiffkr, myThid)
262 #endif
263 #ifdef ALLOW_KAPGM_CONTROL
264 CALL MNC_CW_RL_W('D','adstate',0,0,
265 & 'adkapgm', adkapgm, myThid)
266 #endif
267 #ifdef ALLOW_KAPREDI_CONTROL
268 CALL MNC_CW_RL_W('D','adstate',0,0,
269 & 'adkapredi', adkapredi, myThid)
270 #endif
271
272 ENDIF
273 #endif /* ALLOW_MNC */
274
275 ENDIF
276
277 call TIMER_STOP( 'I/O (WRITE) [ADJOINT LOOP]', myThid )
278
279 #endif /* ALLOW_AUTODIFF_MONITOR */
280 #endif /* ALLOW_ADJOINT_RUN */
281
282 RETURN
283 END
284
285
286
287
288
289
290
291
292

  ViewVC Help
Powered by ViewVC 1.1.22