/[MITgcm]/MITgcm/tools/OAD_support/ad_template.revolve.F
ViewVC logotype

Contents of /MITgcm/tools/OAD_support/ad_template.revolve.F

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


Revision 1.5 - (show annotations) (download)
Fri Jan 3 22:54:43 2014 UTC (10 years, 4 months ago) by utke
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64s, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint65
Changes since 1.4: +4 -0 lines
need to filter these by the proper macros

1 #include "PACKAGES_CONFIG.h"
2
3 subroutine template()
4 use OAD_cp
5 use OAD_tape
6 use OAD_rev
7 use revolve
8
9 c we may need these for the checkpointing
10 use SIZE_mod
11 use EEPARAMS_mod
12 use PARAMS_mod
13 use BAR2_mod
14 use BARRIER_mod
15 #ifdef ALLOW_CD_CODE
16 use CD_CODE_VARS_mod
17 #endif
18 use CG2D_mod
19 use CG3D_mod
20 use DYNVARS_mod
21 use EESUPPORT_mod
22 use EOS_mod
23 use EXCH_mod
24 use FC_NAMEMANGLE_mod
25 use FFIELDS_mod
26 #ifdef ALLOW_GENERIC_ADVDIFF
27 use GAD_mod
28 #endif
29 use GLOBAL_MAX_mod
30 use GLOBAL_SUM_mod
31 #ifdef ALLOW_GMREDI
32 use GMREDI_mod
33 use GMREDI_TAVE_mod
34 #endif
35 use GRID_mod
36 #ifdef ALLOW_MOM_COMMON
37 use MOM_VISC_mod
38 #endif
39 use MPI_INFO_mod
40 #ifdef ALLOW_SHAP_FILT
41 use SHAP_FILT_mod
42 #endif
43 #ifdef ALLOW_STREAMICE
44 use STREAMICE_mod
45 use STREAMICE_ADV_mod
46 use STREAMICE_BDRY_mod
47 use STREAMICE_CG_mod
48 #endif
49 use SOLVE_FOR_PRESSURE3D_mod
50 use SOLVE_FOR_PRESSURE_mod
51 use SURFACE_mod
52 use tamc_mod
53 use tamc_keys_mod
54 use cost_mod
55 use g_cost_mod
56 use ctrl_mod
57 use ctrl_dummy_mod
58 use ctrl_weights_mod
59 use optim_mod
60 use grdchk_mod
61
62 !$TEMPLATE_PRAGMA_DECLARATIONS
63 LOGICAL :: initialized=.FALSE.
64 TYPE(rvAction),save :: theAction
65 CHARACTER(80) :: errorMsg
66 integer, save :: jointCPCount
67 integer, save :: currIter
68
69 integer :: cp_loop_variable_1,cp_loop_variable_2,
70 + cp_loop_variable_3,cp_loop_variable_4,cp_loop_variable_5
71
72 type(modeType) :: our_orig_mode
73
74 integer iaddr
75 external iaddr
76
77 #ifdef OAD_DEBUG_JOINT
78 character*(80):: indentation='
79 + '
80 our_indent=our_indent+1
81
82 write(standardmessageunit, '(A,A,A)', ADVANCE='NO')
83 +'OAD:',indentation(1:our_indent), 'enter __SRNAME__:'
84 call oad_dump_revmod(); call oad_dump_tapestats()
85 write(standardmessageunit,*)
86 #endif
87
88 nIter0 = NINT( (startTime-baseTime)/deltaTClock )
89 if (our_rev_mode%arg_store) then
90 call cp_write_open()
91 #ifdef OAD_DEBUG_JOINT
92 write(standardmessageunit,'(A,A,A)')
93 +'OAD:',indentation(1:our_indent),
94 +' __SRNAME__: entering arg store'
95 #endif
96 !$PLACEHOLDER_PRAGMA$ id=8
97 call cp_close()
98 end if
99 if (our_rev_mode%arg_restore) then
100 #ifdef OAD_DEBUG_JOINT
101 write(standardmessageunit,'(A,A,A)')
102 +'OAD:',indentation(1:our_indent),
103 +' __SRNAME__: entering arg restore'
104 #endif
105 call cp_read_open()
106 !$PLACEHOLDER_PRAGMA$ id=9
107 call cp_close()
108 end if
109 if (our_rev_mode%plain) then
110 #ifdef OAD_DEBUG_JOINT
111 write(standardmessageunit,'(A,A,A)')
112 +'OAD:',indentation(1:our_indent),
113 +' __SRNAME__: run plain, down plain'
114 #endif
115 DO iloop = 1, nTimeSteps
116 CALL OpenAD_forward_step( iloop, mytime, myiter, mythid )
117 enddo
118 end if
119 if (our_rev_mode%tape) then
120 #ifdef OAD_DEBUG_JOINT
121 write(standardmessageunit,'(A,A,A)')
122 +'OAD:',indentation(1:our_indent),
123 +' __SRNAME__: run tape, down revolve until first U turn'
124 #endif
125 currIter=0
126 jointCPcount=cp_fNumber()
127 initialized=rvInit(nTimeSteps,120,
128 + errorMsg,theAction)
129 IF (.NOT.initialized) WRITE(*,'(A,A)') 'Error: ', errorMsg
130 do while (theAction%actionFlag/=rvDone)
131 theAction=rvNextAction()
132 select case (theAction%actionFlag)
133 case (rvStore)
134 call cp_write_open(theAction%cpNum+jointCPCount)
135 !$PLACEHOLDER_PRAGMA$ id=8
136 call cp_close
137 case (rvForward)
138 call OAD_revPlain
139 do currIter=currIter,theAction%iteration-1
140 CALL OpenAD_forward_step( currIter+1, mytime,
141 +myiter, mythid )
142 end do
143 call OAD_revTape
144 case (rvFirstUTurn)
145 CALL OpenAD_forward_step( currIter+1, mytime, myiter,
146 +mythid )
147 ! get out now ...
148 exit
149 end select
150 end do
151 end if
152 if (our_rev_mode%adjoint) then
153 IF (.NOT.initialized) WRITE(*,'(A)') 'Error: not initialized'
154 do while (theAction%actionFlag/=rvDone)
155 select case (theAction%actionFlag)
156 case (rvFirstUTurn)
157 !we taped already ... see above
158 CALL OpenAD_forward_step( currIter+1, mytime, myiter,
159 +mythid )
160 case (rvStore)
161 call cp_write_open(theAction%cpNum+jointCPCount)
162 !$PLACEHOLDER_PRAGMA$ id=8
163 call cp_close
164 case (rvRestore)
165 call cp_read_open(theAction%cpNum+jointCPCount)
166 !$PLACEHOLDER_PRAGMA$ id=9
167 currIter=theAction%iteration
168 call cp_close
169 case (rvForward)
170 call OAD_revPlain
171 do currIter=currIter,theAction%iteration-1
172 CALL OpenAD_forward_step( currIter+1, mytime, myiter,
173 + mythid )
174 end do
175 call OAD_revAdjoint
176 case (rvUTurn)
177 call OAD_revTape
178 CALL OpenAD_forward_step( currIter+1, mytime, myiter,
179 +mythid )
180 call OAD_revAdjoint
181 CALL OpenAD_forward_step( currIter+1, mytime, myiter,
182 +mythid )
183 end select
184 theAction=rvNextAction()
185 end do
186 end if
187
188 #ifdef OAD_DEBUG_JOINT
189 write(standardmessageunit,'(A,A,A)', ADVANCE='NO')
190 +'OAD:',indentation(1:our_indent), 'leave __SRNAME__:'
191 call oad_dump_revmod(); call oad_dump_tapestats()
192 write(standardmessageunit,*)
193
194 our_indent=our_indent-1
195 #endif
196
197 end subroutine template

  ViewVC Help
Powered by ViewVC 1.1.22