/[MITgcm]/MITgcm_contrib/heimbach/OpenAD/code_shallow_openad/ad_template.checkpoint.f
ViewVC logotype

Annotation of /MITgcm_contrib/heimbach/OpenAD/code_shallow_openad/ad_template.checkpoint.f

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


Revision 1.2 - (hide annotations) (download)
Tue Jan 3 19:24:05 2006 UTC (20 years, 10 months ago) by utke
Branch: MAIN
Changes since 1.1: +113 -34 lines
reorganize checkpoint logic and fix debug output

1 heimbach 1.1 subroutine template()
2     use OpenAD_checkpoints
3     use OpenAD_tape
4     use OpenAD_rev
5    
6     c we may need these for the checkpointing
7     use SIZE_mod
8     use EEPARAMS_mod
9     use PARAMS_mod
10     use BAR2_mod
11     use BARRIER_mod
12     use CD_CODE_VARS_mod
13     use CG2D_mod
14     use CG3D_mod
15     use DFILE_mod
16     use DYNVARS_mod
17     use EEIO_mod
18     use EESUPPORT_mod
19     use EOS_mod
20     use EXCH_JAM_mod
21     use EXCH_mod
22     use FC_NAMEMANGLE_mod
23     use FFIELDS_mod
24     use GAD_mod
25     use GLOBAL_MAX_mod
26     use GLOBAL_SUM_mod
27     use GRID_mod
28     use MPI_INFO_mod
29     use SOLVE_FOR_PRESSURE3D_mod
30     use SOLVE_FOR_PRESSURE_mod
31     use SURFACE_mod
32     use tamc_mod
33     use tamc_keys_mod
34     use cost_mod
35     use g_cost_mod
36     use ctrl_mod
37     use ctrl_dummy_mod
38     use ctrl_weights_mod
39     use optim_mod
40     use grdchk_mod
41    
42     !$TEMPLATE_PRAGMA_DECLARATIONS
43    
44     integer :: cp_loop_variable_1,cp_loop_variable_2,
45     + cp_loop_variable_3,cp_loop_variable_4,cp_loop_variable_5
46    
47     type(modeType) :: our_orig_mode
48    
49     integer iaddr
50     external iaddr
51    
52     character*(80):: indentation='
53     + '
54    
55     our_indent=our_indent+1
56 utke 1.2 write(*,'(A,A,A,A,L,A,L,A,L,A,L,A,L,A,L)')
57     +'JU:',indentation(1:our_indent), "enter __SRNAME__:",
58     +' As:',our_rev_mode%arg_store,
59     +' Ar:',our_rev_mode%arg_restore,
60     +' Pl:',our_rev_mode%plain,
61     +' Ta:',our_rev_mode%tape,
62     +' Ad:',our_rev_mode%adjoint,
63     +' Sw:',our_rev_mode%switchedToCheckpoint
64 heimbach 1.1
65 utke 1.2 write(*,'(A,A,A,A,I6,A,I6,A,I6,A,I6,A,I8,A,I8)')
66 heimbach 1.1 +'JU:',indentation(1:our_indent), "enter __SRNAME__:",
67 utke 1.2 +" CD:",cp_double_pointer,
68     +" CI:",cp_integer_pointer,
69     +" CB:",cp_boolean_pointer,
70     +" CS:",cp_string_pointer,
71     +" TD:",double_tape_pointer,
72     +" TI:",integer_tape_pointer
73    
74     if (our_rev_mode%switchedToCheckpoint) then
75 heimbach 1.1
76     if (our_rev_mode%arg_store) then
77     write(*,'(A,A,A)')
78     +'JU:',indentation(1:our_indent), " __SRNAME__: entering arg store"
79     !$PLACEHOLDER_PRAGMA$ id=4
80     end if
81     if (our_rev_mode%arg_restore) then
82     write(*,'(A,A,A)')
83     +'JU:',indentation(1:our_indent),
84     +" __SRNAME__: entering arg restore"
85     !$PLACEHOLDER_PRAGMA$ id=6
86     end if
87     if (our_rev_mode%plain) then
88     write(*,'(A,A,A)')
89     +'JU:',indentation(1:our_indent), " __SRNAME__: entering plain"
90     our_orig_mode=our_rev_mode
91     our_rev_mode%arg_store=.FALSE.
92     !$PLACEHOLDER_PRAGMA$ id=1
93     our_rev_mode=our_orig_mode
94     end if
95     if (our_rev_mode%tape) then
96     write(*,'(A,A,A)')
97     +'JU:',indentation(1:our_indent), " __SRNAME__: entering tape"
98     our_orig_mode=our_rev_mode
99     our_rev_mode%arg_store=.TRUE.
100     our_rev_mode%arg_restore=.FALSE.
101     our_rev_mode%plain=.TRUE.
102     our_rev_mode%tape=.FALSE.
103     our_rev_mode%adjoint=.FALSE.
104     !$PLACEHOLDER_PRAGMA$ id=2
105     write(*,'(A,A,A)')
106     +'JU:',indentation(1:our_indent),
107     +" __SRNAME__: following with adjoint"
108     our_rev_mode%arg_store=.FALSE.
109     our_rev_mode%arg_restore=.TRUE.
110     our_rev_mode%plain=.FALSE.
111     our_rev_mode%tape=.TRUE.
112     our_rev_mode%adjoint=.TRUE.
113     !$PLACEHOLDER_PRAGMA$ id=3
114     our_rev_mode=our_orig_mode
115     end if
116    
117 utke 1.2 else
118    
119     our_rev_mode%switchedToCheckpoint = .TRUE.
120    
121     if (our_rev_mode%arg_store) then
122     write(*,'(A,A,A)')
123     +'JU:',indentation(1:our_indent), " __SRNAME__: entering arg store"
124     end if
125     if (our_rev_mode%arg_restore) then
126     write(*,'(A,A,A)')
127     +'JU:',indentation(1:our_indent),
128     +" __SRNAME__: entering arg restore"
129     !$PLACEHOLDER_PRAGMA$ id=6
130     end if
131     if (our_rev_mode%plain) then
132     write(*,'(A,A,A)')
133     +'JU:',indentation(1:our_indent), " __SRNAME__: entering plain"
134     our_orig_mode=our_rev_mode
135     our_rev_mode%arg_store=.FALSE.
136     !$PLACEHOLDER_PRAGMA$ id=1
137     our_rev_mode=our_orig_mode
138     end if
139     if (our_rev_mode%tape) then
140     write(*,'(A,A,A)')
141     +'JU:',indentation(1:our_indent), " __SRNAME__: entering as tape"
142     c we have to switch from split to checkpointing mode
143     c i.e. outside taping means top level checkpointing here
144     write(*,'(A,A,A)')
145     +'JU:',indentation(1:our_indent), " __SRNAME__: write argument cp"
146     !$PLACEHOLDER_PRAGMA$ id=4
147     c now do the forward run down a plain
148     our_orig_mode=our_rev_mode
149     our_rev_mode%arg_store=.FALSE.
150     our_rev_mode%arg_restore=.FALSE.
151     our_rev_mode%plain=.TRUE.
152     our_rev_mode%tape=.FALSE.
153     our_rev_mode%adjoint=.FALSE.
154     write(*,'(A,A,A)')
155     +'JU:',indentation(1:our_indent), " __SRNAME__: run plain"
156     !$PLACEHOLDER_PRAGMA$ id=1
157     our_rev_mode=our_orig_mode
158     end if
159     if (our_rev_mode%adjoint) then
160     write(*,'(A,A,A)')
161     +'JU:',indentation(1:our_indent),
162     +" __SRNAME__: entering as adjoint"
163     c we have to switch from split to checkpointing mode
164     c i.e. outside adjoint means argument restore, taping and then adjoint here
165     c argument restore
166     write(*,'(A,A,A)')
167     +'JU:',indentation(1:our_indent), " __SRNAME__: read argument cp"
168     !$PLACEHOLDER_PRAGMA$ id=6
169     c setup checkpointing downwards
170     our_orig_mode=our_rev_mode
171     our_rev_mode%arg_store=.TRUE.
172     our_rev_mode%arg_restore=.FALSE.
173     our_rev_mode%plain=.TRUE.
174     our_rev_mode%tape=.FALSE.
175     our_rev_mode%adjoint=.FALSE.
176     c taping this level
177     write(*,'(A,A,A,A)')
178     +'JU:',indentation(1:our_indent), " __SRNAME__: run tape,",
179     + " down argumentstore/plain"
180     !$PLACEHOLDER_PRAGMA$ id=2
181     c setting up for taping downwards
182     our_rev_mode%arg_store=.FALSE.
183     our_rev_mode%arg_restore=.TRUE.
184     our_rev_mode%plain=.FALSE.
185     our_rev_mode%tape=.TRUE.
186     our_rev_mode%adjoint=.TRUE.
187     c adjoining this level
188     write(*,'(A,A,A,A)')
189     +'JU:',indentation(1:our_indent), " __SRNAME__: run adjoint,",
190     + " down tape"
191     !$PLACEHOLDER_PRAGMA$ id=3
192     our_rev_mode=our_orig_mode
193     end if
194    
195     our_rev_mode%switchedToCheckpoint=.FALSE.
196 heimbach 1.1
197 utke 1.2 end if
198    
199     write(*,'(A,A,A,A,I6,A,I6,A,I6,A,I6,A,I8,A,I8)')
200 heimbach 1.1 +'JU:',indentation(1:our_indent), "leave __SRNAME__:",
201 utke 1.2 +" CD:",cp_double_pointer,
202     +" CI:",cp_integer_pointer,
203     +" CB:",cp_boolean_pointer,
204     +" CS:",cp_string_pointer,
205     +" TD:",double_tape_pointer,
206     +" TI:",integer_tape_pointer
207 heimbach 1.1
208 utke 1.2 write(*,'(A,A,A,A,L,A,L,A,L,A,L,A,L,A,L)')
209     +'JU:',indentation(1:our_indent), "leave __SRNAME__:",
210     +' As:',our_rev_mode%arg_store,
211     +' Ar:',our_rev_mode%arg_restore,
212     +' Pl:',our_rev_mode%plain,
213     +' Ta:',our_rev_mode%tape,
214     +' Ad:',our_rev_mode%adjoint,
215     +' Sw:',our_rev_mode%switchedToCheckpoint
216 heimbach 1.1 our_indent=our_indent-1
217     end subroutine template

  ViewVC Help
Powered by ViewVC 1.1.22