1 |
heimbach |
1.1 |
#include "PACKAGES_CONFIG.h" |
2 |
|
|
#include "OPENAD_OPTIONS.h" |
3 |
|
|
|
4 |
|
|
subroutine template() |
5 |
|
|
#ifdef ALLOW_OPENAD_DIVA |
6 |
|
|
use OAD_regular_cp |
7 |
|
|
use OAD_tape |
8 |
|
|
use OAD_rev |
9 |
|
|
|
10 |
|
|
c we may need these for the checkpointing |
11 |
|
|
use SIZE_mod |
12 |
|
|
use EEPARAMS_mod |
13 |
|
|
use PARAMS_mod |
14 |
|
|
use BAR2_mod |
15 |
|
|
use BARRIER_mod |
16 |
|
|
#ifdef ALLOW_CD_CODE |
17 |
|
|
use CD_CODE_VARS_mod |
18 |
|
|
#endif |
19 |
|
|
use CG2D_mod |
20 |
|
|
use CG3D_mod |
21 |
|
|
use DYNVARS_mod |
22 |
|
|
use EESUPPORT_mod |
23 |
|
|
use EOS_mod |
24 |
|
|
use EXCH_mod |
25 |
|
|
use FC_NAMEMANGLE_mod |
26 |
|
|
use FFIELDS_mod |
27 |
|
|
#ifdef ALLOW_GENERIC_ADVDIFF |
28 |
|
|
use GAD_mod |
29 |
|
|
#endif |
30 |
|
|
use GLOBAL_MAX_mod |
31 |
|
|
use GLOBAL_SUM_mod |
32 |
|
|
#ifdef ALLOW_GMREDI |
33 |
|
|
use GMREDI_mod |
34 |
|
|
use GMREDI_TAVE_mod |
35 |
|
|
#endif |
36 |
|
|
use GRID_mod |
37 |
|
|
#ifdef ALLOW_MOM_COMMON |
38 |
|
|
use MOM_VISC_mod |
39 |
|
|
#endif |
40 |
|
|
use MPI_INFO_mod |
41 |
|
|
#ifdef ALLOW_SHAP_FILT |
42 |
|
|
use SHAP_FILT_mod |
43 |
|
|
#endif |
44 |
|
|
#ifdef ALLOW_STREAMICE |
45 |
|
|
use STREAMICE_mod |
46 |
|
|
use STREAMICE_ADV_mod |
47 |
|
|
use STREAMICE_BDRY_mod |
48 |
|
|
use STREAMICE_CG_mod |
49 |
|
|
#endif |
50 |
|
|
use SOLVE_FOR_PRESSURE3D_mod |
51 |
|
|
use SOLVE_FOR_PRESSURE_mod |
52 |
|
|
use SURFACE_mod |
53 |
|
|
use tamc_mod |
54 |
|
|
use tamc_keys_mod |
55 |
|
|
use cost_mod |
56 |
|
|
use g_cost_mod |
57 |
|
|
use ctrl_mod |
58 |
|
|
use ctrl_dummy_mod |
59 |
|
|
use ctrl_weights_mod |
60 |
|
|
use optim_mod |
61 |
|
|
use grdchk_mod |
62 |
|
|
|
63 |
|
|
!$TEMPLATE_PRAGMA_DECLARATIONS |
64 |
|
|
integer, save :: currcp, curradjointcp |
65 |
|
|
integer :: cp_loop_variable_1,cp_loop_variable_2, |
66 |
|
|
+ cp_loop_variable_3,cp_loop_variable_4,cp_loop_variable_5 |
67 |
|
|
|
68 |
|
|
double precision, dimension(:), allocatable, save :: theArgFStack |
69 |
|
|
integer, save :: theArgFStackoffset=0, theArgFStackSize=0 |
70 |
|
|
integer, dimension(:), allocatable, save :: theArgIStack |
71 |
|
|
integer, save :: theArgIStackoffset=0, theArgIStackSize=0 |
72 |
|
|
type(modeType) :: our_orig_mode |
73 |
|
|
integer nt |
74 |
|
|
|
75 |
|
|
integer iaddr |
76 |
|
|
external iaddr |
77 |
|
|
if (our_rev_mode%arg_store) then |
78 |
|
|
call cp_write_open() |
79 |
|
|
!$PLACEHOLDER_PRAGMA$ id=8 |
80 |
|
|
call cp_close() |
81 |
|
|
end if |
82 |
|
|
if (our_rev_mode%arg_restore) then |
83 |
|
|
call cp_read_open() |
84 |
|
|
!$PLACEHOLDER_PRAGMA$ id=9 |
85 |
|
|
call cp_close() |
86 |
|
|
end if |
87 |
|
|
if (our_rev_mode%plain) then |
88 |
|
|
do nt=1,nTimeSteps_l2 |
89 |
|
|
CALL OpenAD_inner_do_loop(nt, MYTIME, MYITER, MYTHID) |
90 |
|
|
enddo |
91 |
|
|
end if |
92 |
|
|
if (our_rev_mode%tape) then |
93 |
|
|
print *, 'DIVA Running Regular Plain nTimeSteps_l2 ', nTimeSteps |
94 |
|
|
+_l2 |
95 |
|
|
currcp = 0 |
96 |
|
|
do nt=1,nTimeSteps_l2 |
97 |
|
|
print *, 'DIVA Checkpointing currcp and running plain', currc |
98 |
|
|
+p |
99 |
|
|
call cp_write_open(currcp) |
100 |
|
|
!$PLACEHOLDER_PRAGMA$ id=8 |
101 |
|
|
call cp_close |
102 |
|
|
currcp=currcp+1 |
103 |
|
|
call OAD_revPlain |
104 |
|
|
CALL OpenAD_inner_do_loop(nt, MYTIME, MYITER, MYTHID) |
105 |
|
|
call OAD_revTape |
106 |
|
|
end do |
107 |
|
|
currcp = currcp -1 |
108 |
|
|
end if |
109 |
|
|
if (our_rev_mode%adjoint) then |
110 |
|
|
curradjointcp = currcp |
111 |
|
|
print *, 'DIVA Reading plain checkpoint currcp ', currcp |
112 |
|
|
call cp_read_open(currcp) |
113 |
|
|
!$PLACEHOLDER_PRAGMA$ id=9 |
114 |
|
|
call cp_close |
115 |
|
|
call OAD_revTape |
116 |
|
|
print *, 'DIVA Running First Tape' |
117 |
|
|
CALL OpenAD_inner_do_loop(nTimeSteps_l2, MYTIME, MYITER, MYTHID) |
118 |
|
|
print *, 'DIVA Running First Adjoint ' |
119 |
|
|
call OAD_revAdjoint |
120 |
|
|
CALL OpenAD_inner_do_loop(nTimeSteps_l2, MYTIME, MYITER, MYTHID) |
121 |
|
|
print *, 'DIVA Writing adjoint checkpoint curradjointcp ', curra |
122 |
|
|
+djointcp |
123 |
|
|
call cp_write_open(curradjointcp) |
124 |
|
|
!$PLACEHOLDER_PRAGMA$ id=12 |
125 |
|
|
call cp_close |
126 |
|
|
do nt=nTimeSteps_l2-1,1,-1 |
127 |
|
|
currcp = currcp -1 |
128 |
|
|
print *, 'DIVA Running TA pairs' |
129 |
|
|
print *, 'DIVA Reading plain checkpoint currcp ', currcp |
130 |
|
|
call cp_read_open(currcp) |
131 |
|
|
!$PLACEHOLDER_PRAGMA$ id=9 |
132 |
|
|
call cp_close |
133 |
|
|
call OAD_revTape |
134 |
|
|
print *, 'DIVA Running Tape' |
135 |
|
|
CALL OpenAD_inner_do_loop(nt, MYTIME, MYITER, MYTHID) |
136 |
|
|
print *, 'DIVA Reading adjoint checkpoint curradjointcp ', cur |
137 |
|
|
+radjointcp |
138 |
|
|
call cp_read_open(curradjointcp) |
139 |
|
|
!$PLACEHOLDER_PRAGMA$ id=13 |
140 |
|
|
call cp_close |
141 |
|
|
print *, 'DIVA Running adjoint ' |
142 |
|
|
call OAD_revAdjoint |
143 |
|
|
CALL OpenAD_inner_do_loop(nt, MYTIME, MYITER, MYTHID) |
144 |
|
|
print *, 'DIVA Writing adjoint checkpoint curradjointcp ', cur |
145 |
|
|
+radjointcp-1 |
146 |
|
|
call cp_write_open(curradjointcp-1) |
147 |
|
|
!$PLACEHOLDER_PRAGMA$ id=12 |
148 |
|
|
curradjointcp = curradjointcp-1 |
149 |
|
|
call cp_close |
150 |
|
|
end do |
151 |
|
|
end if |
152 |
|
|
#endif |
153 |
|
|
end subroutine template |