/[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.46 - (show annotations) (download)
Thu May 20 03:00:06 2010 UTC (13 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62n, checkpoint62m, checkpoint62l
Changes since 1.45: +5 -8 lines
with ALLOW_BULK_OFFLINE, avoid calling AD exch S/R (adexch_xyz_rl &
  adexch_uv_xyz_rl) that TAF did not generate.

1 C $Header: /u/gcmpack/MITgcm/pkg/autodiff/addummy_in_stepping.F,v 1.45 2008/06/20 21:43:19 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_DIFFKR_CONTROL
179 CALL WRITE_FLD_XYZ_RL ( 'ADJdiffkr.',suff, addiffkr,
180 & myIter, myThid)
181 #endif
182 #ifdef ALLOW_KAPGM_CONTROL
183 CALL WRITE_FLD_XYZ_RL ( 'ADJkapgm.',suff, adkapgm,
184 & myIter, myThid)
185 #endif
186 #ifdef ALLOW_KAPREDI_CONTROL
187 CALL WRITE_FLD_XYZ_RL ( 'ADJkapredi.',suff, adkapredi,
188 & myIter, myThid)
189 #endif
190 #ifdef ALLOW_EDDYPSI_CONTROL
191 CALL WRITE_FLD_XYZ_RL(
192 & 'ADJeddypsix. ',suff, adeddypsix, myIter, myThid)
193 CALL WRITE_FLD_XYZ_RL(
194 & 'ADJeddypsiy. ',suff, adeddypsiy, myIter, myThid)
195 #endif
196 #ifdef ALLOW_SST0_CONTROL
197 CALL WRITE_FLD_XY_RL( 'ADJsst.',suff, adsst, myIter, myThid)
198 #endif
199 #ifdef ALLOW_SSS0_CONTROL
200 CALL WRITE_FLD_XY_RL( 'ADJsss.',suff, adsss, myIter, myThid)
201 #endif
202 #ifdef ALLOW_BOTTOMDRAG_CONTROL
203 CALL WRITE_FLD_XY_RL ( 'ADJbottomdrag.',suff,
204 & adbottomdragfld, myIter, myThid)
205 #endif
206
207 #ifdef ALLOW_EXF
208 cph IF ( useEXF ) CALL EXF_AD_DUMP( mytime, myiter, myThid )
209 #endif
210
211 #ifdef ALLOW_SEAICE
212 IF ( useSEAICE ) CALL SEAICE_AD_DUMP( mytime, myiter, myThid )
213 #endif
214
215 #ifdef ALLOW_MNC
216 IF (useMNC .AND. autodiff_mnc) THEN
217 c
218 CALL MNC_CW_SET_UDIM('adstate', -1, myThid)
219 CALL MNC_CW_RL_W_S('D','adstate',0,0,'T',myTime,myThid)
220 CALL MNC_CW_SET_UDIM('adstate', 0, myThid)
221 CALL MNC_CW_I_W_S('I','adstate',0,0,'iter',myIter,myThid)
222 CALL MNC_CW_RL_W_S('D','adstate',0,0,'model_time',myTime,
223 & myThid)
224 c
225 CALL MNC_CW_RL_W('D','adstate',0,0,'adU', aduVel, myThid)
226 CALL MNC_CW_RL_W('D','adstate',0,0,'adV', advVel, myThid)
227 CALL MNC_CW_RL_W('D','adstate',0,0,'adT', adtheta, myThid)
228 CALL MNC_CW_RL_W('D','adstate',0,0,'adS', adsalt, myThid)
229 CALL MNC_CW_RL_W('D','adstate',0,0,'adEta', adetaN, myThid)
230 CALL MNC_CW_RL_W('D','adstate',0,0,'adW', adwVel, myThid)
231
232 CALL MNC_CW_RL_W('D','adstate',0,0,'adQnet', adQnet, myThid)
233 CALL MNC_CW_RL_W('D','adstate',0,0,'adEmpmr', adEmpmr, myThid)
234 CALL MNC_CW_RL_W('D','adstate',0,0,'adFu', adfu, myThid)
235 CALL MNC_CW_RL_W('D','adstate',0,0,'adFv', adfv, myThid)
236
237 #ifdef ALLOW_SST0_CONTROL
238 CALL MNC_CW_RL_W('D','adstate',0,0,'adSST', adsst, myThid)
239 #endif
240 #ifdef ALLOW_SSS0_CONTROL
241 CALL MNC_CW_RL_W('D','adstate',0,0,'adSSS', adsss, myThid)
242 #endif
243 #ifdef ALLOW_DIFFKR_CONTROL
244 CALL MNC_CW_RL_W('D','adstate',0,0,
245 & 'adDiffkr', addiffkr, myThid)
246 #endif
247 #ifdef ALLOW_KAPGM_CONTROL
248 CALL MNC_CW_RL_W('D','adstate',0,0,
249 & 'adkapgm', adkapgm, myThid)
250 #endif
251 #ifdef ALLOW_KAPREDI_CONTROL
252 CALL MNC_CW_RL_W('D','adstate',0,0,
253 & 'adkapredi', adkapredi, myThid)
254 #endif
255
256 ENDIF
257 #endif /* ALLOW_MNC */
258
259 ENDIF
260
261 call TIMER_STOP( 'I/O (WRITE) [ADJOINT LOOP]', myThid )
262
263 #endif /* ALLOW_AUTODIFF_MONITOR */
264 #endif /* ALLOW_ADJOINT_RUN */
265
266 RETURN
267 END
268
269
270
271
272
273
274
275
276

  ViewVC Help
Powered by ViewVC 1.1.22