1 |
#include "STREAMICE_OPTIONS.h" |
2 |
|
3 |
SUBROUTINE template() |
4 |
use OAD_cp |
5 |
use OAD_tape |
6 |
use OAD_rev |
7 |
|
8 |
!$TEMPLATE_PRAGMA_DECLARATIONS |
9 |
|
10 |
integer :: cp_loop_variable_1,cp_loop_variable_2, |
11 |
+ cp_loop_variable_3,cp_loop_variable_4 |
12 |
|
13 |
type(modeType) :: our_orig_mode |
14 |
|
15 |
integer iaddr |
16 |
external iaddr |
17 |
|
18 |
|
19 |
Real*8 H_p (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
20 |
Real*8 surf_p (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
21 |
Real*8 R_p (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
22 |
Real*8 H_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
23 |
Real*8 surf_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
24 |
Real*8 R_d (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
25 |
|
26 |
C |
27 |
C **** Statements **** |
28 |
C |
29 |
|
30 |
|
31 |
if (our_rev_mode%plain) then |
32 |
#ifdef STREAMICE_ALLOW_DEPTH_CONTROL |
33 |
#ifdef STREAMICE_SMOOTH_FLOATATION |
34 |
|
35 |
H_p = H_streamice%v |
36 |
surf_p = surf_el_streamice%v |
37 |
R_p = R_low_si%v |
38 |
|
39 |
CALL STREAMICE_INVERT_SURF_FORTHICK( |
40 |
O H_p, |
41 |
I surf_p, |
42 |
I R_p, |
43 |
I delta, |
44 |
I myThid) |
45 |
|
46 |
H_streamice%v = H_p |
47 |
#endif |
48 |
#endif |
49 |
end if |
50 |
if (our_rev_mode%tape) then |
51 |
#ifdef STREAMICE_SMOOTH_FLOATATION |
52 |
#ifdef STREAMICE_ALLOW_DEPTH_CONTROL |
53 |
c set up for plain execution |
54 |
our_orig_mode=our_rev_mode |
55 |
our_rev_mode%arg_store=.FALSE. |
56 |
our_rev_mode%arg_restore=.FALSE. |
57 |
our_rev_mode%plain=.TRUE. |
58 |
our_rev_mode%tape=.FALSE. |
59 |
our_rev_mode%adjoint=.FALSE. |
60 |
|
61 |
H_p = H_streamice%v |
62 |
surf_p = surf_el_streamice%v |
63 |
R_p = R_low_si%v |
64 |
|
65 |
call oad_tape_push(surf_p) |
66 |
call oad_tape_push(R_p) |
67 |
call oad_tape_push(delta) |
68 |
call oad_tape_push(myThid) |
69 |
|
70 |
CALL STREAMICE_INVERT_SURF_FORTHICK( |
71 |
O H_p, |
72 |
I surf_p, |
73 |
I R_p, |
74 |
I delta, |
75 |
I myThid) |
76 |
|
77 |
call oad_tape_push(H_p) |
78 |
H_streamice%v = H_p |
79 |
our_rev_mode=our_orig_mode |
80 |
#endif |
81 |
#endif |
82 |
end if |
83 |
if (our_rev_mode%adjoint) then |
84 |
c set up for plain execution |
85 |
#ifdef STREAMICE_ALLOW_DEPTH_CONTROL |
86 |
#ifdef STREAMICE_SMOOTH_FLOATATION |
87 |
our_orig_mode=our_rev_mode |
88 |
our_rev_mode%arg_store=.FALSE. |
89 |
our_rev_mode%arg_restore=.FALSE. |
90 |
our_rev_mode%plain=.TRUE. |
91 |
our_rev_mode%tape=.FALSE. |
92 |
our_rev_mode%adjoint=.FALSE. |
93 |
|
94 |
call oad_tape_pop(H_p) |
95 |
call oad_tape_pop(myThid) |
96 |
call oad_tape_pop(delta) |
97 |
call oad_tape_pop(R_p) |
98 |
call oad_tape_pop(surf_p) |
99 |
|
100 |
H_d = H_streamice%d |
101 |
surf_d = surf_el_streamice%d |
102 |
R_d = R_low_si%d |
103 |
|
104 |
CALL ADSTRMICE_H_INV ( |
105 |
& H_p, |
106 |
& H_d, |
107 |
& Surf_p, |
108 |
& R_p, |
109 |
& R_d, |
110 |
& delta, |
111 |
& mythid) |
112 |
|
113 |
R_low_si%d = R_d |
114 |
|
115 |
our_rev_mode=our_orig_mode |
116 |
#endif |
117 |
#endif |
118 |
end if |
119 |
end subroutine template |