/[MITgcm]/MITgcm_contrib/heimbach/OpenAD/code_shallow_openad3/ad_inline.f
ViewVC logotype

Annotation of /MITgcm_contrib/heimbach/OpenAD/code_shallow_openad3/ad_inline.f

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


Revision 1.3 - (hide annotations) (download)
Wed Jan 10 23:57:33 2007 UTC (19 years, 10 months ago) by utke
Branch: MAIN
Changes since 1.2: +113 -0 lines
additional push variants for different variable types related to simple loop logic

1 utke 1.1 C taping --------------------------------------------
2    
3    
4     subroutine push(x)
5     C $OpenAD$ INLINE DECLS
6     double precision :: x
7     C $OpenAD$ END DECLS
8     if(double_tape_size .lt. double_tape_pointer) then
9     print *, "DT+ ", double_tape_size*2
10     allocate(double_tmp_tape(double_tape_size),
11     +STAT=cp_loop_variable_1)
12     if (cp_loop_variable_1 .gt. 0 ) then
13     print *,'allocation (1)failed with', cp_loop_variable_1
14     stop
15     end if
16     double_tmp_tape=double_tape
17     deallocate(double_tape)
18     allocate(double_tape(double_tape_size*2),
19     +STAT=cp_loop_variable_1)
20     if (cp_loop_variable_1 .gt. 0 ) then
21     print *,'allocation (2)failed with', cp_loop_variable_1
22     stop
23     end if
24     double_tape(1:double_tape_size) = double_tmp_tape
25     deallocate(double_tmp_tape)
26     double_tape_size=double_tape_size*2
27     end if
28     double_tape(double_tape_pointer)=x
29     double_tape_pointer=double_tape_pointer+1
30     end subroutine
31    
32    
33     subroutine pop(x)
34     C $OpenAD$ INLINE DECLS
35     double precision :: x
36     C $OpenAD$ END DECLS
37     double_tape_pointer=double_tape_pointer-1
38     x=double_tape(double_tape_pointer)
39     end subroutine
40    
41 utke 1.3 subroutine apush(x)
42     C $OpenAD$ INLINE DECLS
43     type(active):: x
44     C $OpenAD$ END DECLS
45     if(double_tape_size .lt. double_tape_pointer) then
46     print *, "DT+ ", double_tape_size*2
47     allocate(double_tmp_tape(double_tape_size),
48     +STAT=cp_loop_variable_1)
49     if (cp_loop_variable_1 .gt. 0 ) then
50     print *,'allocation (1)failed with', cp_loop_variable_1
51     stop
52     end if
53     double_tmp_tape=double_tape
54     deallocate(double_tape)
55     allocate(double_tape(double_tape_size*2),
56     +STAT=cp_loop_variable_1)
57     if (cp_loop_variable_1 .gt. 0 ) then
58     print *,'allocation (2)failed with', cp_loop_variable_1
59     stop
60     end if
61     double_tape(1:double_tape_size) = double_tmp_tape
62     deallocate(double_tmp_tape)
63     double_tape_size=double_tape_size*2
64     end if
65     double_tape(double_tape_pointer)=x%v
66     double_tape_pointer=double_tape_pointer+1
67     end subroutine
68    
69    
70     subroutine apop(x)
71     C $OpenAD$ INLINE DECLS
72     type(active):: x
73     C $OpenAD$ END DECLS
74     double_tape_pointer=double_tape_pointer-1
75     x%v=double_tape(double_tape_pointer)
76     end subroutine
77    
78 utke 1.1
79     subroutine push_i(x)
80     C $OpenAD$ INLINE DECLS
81     integer :: x
82     C $OpenAD$ END DECLS
83     if(integer_tape_size .lt. integer_tape_pointer) then
84     print *, "IT+ ", integer_tape_size*2
85     allocate(integer_tmp_tape(integer_tape_size),
86     +STAT=cp_loop_variable_1)
87     if (cp_loop_variable_1 .gt. 0 ) then
88     print *,'allocation (1)failed with', cp_loop_variable_1
89     stop
90     end if
91     integer_tmp_tape=integer_tape
92     deallocate(integer_tape)
93     allocate(integer_tape(integer_tape_size*2),
94     +STAT=cp_loop_variable_1)
95     if (cp_loop_variable_1 .gt. 0 ) then
96     print *,'allocation (2)failed with', cp_loop_variable_1
97     stop
98     end if
99     integer_tape(1:integer_tape_size) = integer_tmp_tape
100     deallocate(integer_tmp_tape)
101     integer_tape_size=integer_tape_size*2
102     end if
103     integer_tape(integer_tape_pointer)=x
104     integer_tape_pointer=integer_tape_pointer+1
105     end subroutine
106    
107     subroutine pop_i(x)
108     C $OpenAD$ INLINE DECLS
109     use OpenAD_tape
110     implicit none
111     integer :: x
112     C $OpenAD$ END DECLS
113     integer_tape_pointer=integer_tape_pointer-1
114     x=integer_tape(integer_tape_pointer)
115     end subroutine
116 utke 1.3
117     subroutine push_b(x)
118     C $OpenAD$ INLINE DECLS
119     logical :: x
120     C $OpenAD$ END DECLS
121     if(logical_tape_size .lt. logical_tape_pointer) then
122     print *, "IT+ ", logical_tape_size*2
123     allocate(logical_tmp_tape(logical_tape_size),
124     +STAT=cp_loop_variable_1)
125     if (cp_loop_variable_1 .gt. 0 ) then
126     print *,'allocation (1)failed with', cp_loop_variable_1
127     stop
128     end if
129     logical_tmp_tape=logical_tape
130     deallocate(logical_tape)
131     allocate(logical_tape(logical_tape_size*2),
132     +STAT=cp_loop_variable_1)
133     if (cp_loop_variable_1 .gt. 0 ) then
134     print *,'allocation (2)failed with', cp_loop_variable_1
135     stop
136     end if
137     logical_tape(1:logical_tape_size) = logical_tmp_tape
138     deallocate(logical_tmp_tape)
139     logical_tape_size=logical_tape_size*2
140     end if
141     logical_tape(logical_tape_pointer)=x
142     logical_tape_pointer=logical_tape_pointer+1
143     end subroutine
144    
145     subroutine pop_b(x)
146     C $OpenAD$ INLINE DECLS
147     use OpenAD_tape
148     implicit none
149     logical :: x
150     C $OpenAD$ END DECLS
151     logical_tape_pointer=logical_tape_pointer-1
152     x=logical_tape(logical_tape_pointer)
153     end subroutine
154    
155     subroutine push_s(x)
156     C $OpenAD$ INLINE DECLS
157     character*(80) :: x
158     C $OpenAD$ END DECLS
159     if(string_tape_size .lt. string_tape_pointer) then
160     print *, "IT+ ", string_tape_size*2
161     allocate(string_tmp_tape(string_tape_size),
162     +STAT=cp_loop_variable_1)
163     if (cp_loop_variable_1 .gt. 0 ) then
164     print *,'allocation (1)failed with', cp_loop_variable_1
165     stop
166     end if
167     string_tmp_tape=string_tape
168     deallocate(string_tape)
169     allocate(string_tape(string_tape_size*2),
170     +STAT=cp_loop_variable_1)
171     if (cp_loop_variable_1 .gt. 0 ) then
172     print *,'allocation (2)failed with', cp_loop_variable_1
173     stop
174     end if
175     string_tape(1:string_tape_size) = string_tmp_tape
176     deallocate(string_tmp_tape)
177     string_tape_size=string_tape_size*2
178     end if
179     string_tape(string_tape_pointer)=x
180     string_tape_pointer=string_tape_pointer+1
181     end subroutine
182    
183     subroutine pop_s(x)
184     C $OpenAD$ INLINE DECLS
185     use OpenAD_tape
186     implicit none
187     character*(80) :: x
188     C $OpenAD$ END DECLS
189     string_tape_pointer=string_tape_pointer-1
190     x=string_tape(string_tape_pointer)
191     end subroutine
192 utke 1.1
193     subroutine saxpy(a,x,y)
194     C $OpenAD$ INLINE DECLS
195     double precision, intent(in) :: a
196     type(active), intent(in) :: x
197     type(active), intent(inout) :: y
198     C $OpenAD$ END DECLS
199     y%d=y%d+x%d*a
200     end subroutine
201    
202     subroutine zeroderiv(x)
203     C $OpenAD$ INLINE DECLS
204     type(active), intent(out) :: x
205     C $OpenAD$ END DECLS
206     x%d=0.0d0
207     end subroutine
208    
209     subroutine setderiv(y,x)
210     C $OpenAD$ INLINE DECLS
211     type(active), intent(out) :: x
212     type(active), intent(in) :: y
213     C $OpenAD$ END DECLS
214     x%d=y%d
215     end subroutine
216    
217    
218     subroutine incderiv(y,x)
219     C $OpenAD$ INLINE DECLS
220     type(active), intent(out) :: x
221     type(active), intent(in) :: y
222     C $OpenAD$ END DECLS
223     x%d=x%d+y%d
224     end subroutine
225    
226     subroutine condinczeroderiv(y,x)
227     C $OpenAD$ INLINE DECLS
228     type(active), intent(out) :: x
229     type(active), intent(in) :: y
230     C $OpenAD$ END DECLS
231     if (iaddr(y).ne.iaddr(x)) then
232     x%d=x%d+y%d
233     y%d=0
234     end if
235     end subroutine
236    
237     C Checkpointing stuff ---------------------------------------
238    
239     C reals -----------------------------------------------------
240     subroutine cp_arg_store_real_scalar(x)
241     C $OpenAD$ INLINE DECLS
242     double precision :: x
243     C $OpenAD$ END DECLS
244     if(cp_double_size .lt. cp_double_pointer+1) then
245     allocate(cp_double_tmp(cp_double_size))
246     cp_double_tmp=cp_double
247     deallocate(cp_double)
248     allocate(cp_double(cp_double_size*2))
249 utke 1.2 print *,'CPD+ ', cp_double_size*2
250 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
251     deallocate(cp_double_tmp)
252     cp_double_size=cp_double_size*2
253     end if
254     cp_double_pointer=cp_double_pointer+1
255     cp_double(cp_double_pointer)=x
256     end subroutine
257    
258     subroutine cp_arg_restore_real_scalar(x)
259     C $OpenAD$ INLINE DECLS
260     implicit none
261     double precision :: x
262     C $OpenAD$ END DECLS
263     x=cp_double(cp_double_pointer)
264     cp_double_pointer=cp_double_pointer-1
265     end subroutine
266    
267     subroutine cp_arg_store_real_scalar_a(x)
268     C $OpenAD$ INLINE DECLS
269     double precision :: x
270     C $OpenAD$ END DECLS
271     if(cp_double_size .lt. cp_double_pointer+1) then
272     allocate(cp_double_tmp(cp_double_size))
273     cp_double_tmp=cp_double
274     deallocate(cp_double)
275     allocate(cp_double(cp_double_size*2))
276 utke 1.2 print *,'CPD+', cp_double_size*2
277 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
278     deallocate(cp_double_tmp)
279     cp_double_size=cp_double_size*2
280     end if
281     cp_double_pointer=cp_double_pointer+1
282     cp_double(cp_double_pointer)=x%v
283     end subroutine
284    
285     subroutine cp_arg_restore_real_scalar_a(x)
286     C $OpenAD$ INLINE DECLS
287     implicit none
288     double precision :: x
289     C $OpenAD$ END DECLS
290     x%v=cp_double(cp_double_pointer)
291     cp_double_pointer=cp_double_pointer-1
292     end subroutine
293    
294     subroutine cp_arg_store_real_vector(x,cp_loop_variable_1)
295     C $OpenAD$ INLINE DECLS
296     implicit none
297     double precision, dimension(:) :: x
298     C $OpenAD$ END DECLS
299     do while (cp_double_size .lt.
300     +cp_double_pointer+ubound(x,1)-lbound(x,1))
301     allocate(cp_double_tmp(cp_double_size))
302     cp_double_tmp=cp_double
303     deallocate(cp_double)
304     allocate(cp_double(cp_double_size*2))
305 utke 1.2 print *,'CPD+ ', cp_double_size*2
306 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
307     deallocate(cp_double_tmp)
308     cp_double_size=cp_double_size*2
309     end do
310     do cp_loop_variable_1=lbound(x,1), ubound(x,1), 1
311     cp_double_pointer=cp_double_pointer+1
312     cp_double(cp_double_pointer)=
313     +x(cp_loop_variable_1)
314     end do
315     end subroutine
316    
317     subroutine cp_arg_restore_real_vector(x,cp_loop_variable_1)
318     C $OpenAD$ INLINE DECLS
319     implicit none
320     double precision, dimension(:) :: x
321     C $OpenAD$ END DECLS
322     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
323     x(cp_loop_variable_1)=cp_double(cp_double_pointer)
324     cp_double_pointer=cp_double_pointer-1
325     C write(*,'(A,EN26.16E3)') "restore(v) ",
326     C +x(cp_loop_variable_1)%v
327     end do
328     end subroutine
329    
330     subroutine cp_arg_store_real_vector_a(x,cp_loop_variable_1)
331     C $OpenAD$ INLINE DECLS
332     implicit none
333     double precision, dimension(:) :: x
334     C $OpenAD$ END DECLS
335     do while (cp_double_size .lt.
336     +cp_double_pointer+ubound(x,1)-lbound(x,1))
337     allocate(cp_double_tmp(cp_double_size))
338     cp_double_tmp=cp_double
339     deallocate(cp_double)
340     allocate(cp_double(cp_double_size*2))
341 utke 1.2 print *,'CPD+ ', cp_double_size*2
342 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
343     deallocate(cp_double_tmp)
344     cp_double_size=cp_double_size*2
345     end do
346     do cp_loop_variable_1=lbound(x,1), ubound(x,1), 1
347     cp_double_pointer=cp_double_pointer+1
348     cp_double(cp_double_pointer)=
349     +x(cp_loop_variable_1)%v
350     end do
351     end subroutine
352    
353     subroutine cp_arg_restore_real_vector_a(x,cp_loop_variable_1)
354     C $OpenAD$ INLINE DECLS
355     implicit none
356     double precision, dimension(:) :: x
357     C $OpenAD$ END DECLS
358     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
359     x(cp_loop_variable_1)%v=cp_double(cp_double_pointer)
360     cp_double_pointer=cp_double_pointer-1
361     C write(*,'(A,EN26.16E3)') "restore(v) ",
362     C +x(cp_loop_variable_1)%v
363     end do
364     end subroutine
365    
366     subroutine cp_arg_store_real_matrix(x,cp_loop_variable_1,
367     +cp_loop_variable_2)
368     C $OpenAD$ INLINE DECLS
369     implicit none
370     double precision, dimension(::) :: x
371     C $OpenAD$ END DECLS
372     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
373     do while (cp_double_size .lt.
374     +cp_double_pointer+ubound(x,2)-lbound(x,2))
375     allocate(cp_double_tmp(cp_double_size))
376     cp_double_tmp=cp_double
377     deallocate(cp_double)
378     allocate(cp_double(cp_double_size*2))
379 utke 1.2 print *,'CPD+ ', cp_double_size*2
380 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
381     deallocate(cp_double_tmp)
382     cp_double_size=cp_double_size*2
383     end do
384     do cp_loop_variable_2=lbound(x,2), ubound(x,2), 1
385     cp_double_pointer=cp_double_pointer+1
386     cp_double(cp_double_pointer)=
387     +x(cp_loop_variable_1,cp_loop_variable_2)
388     end do
389     end do
390     end subroutine
391    
392     subroutine cp_arg_restore_real_matrix(x,cp_loop_variable_1,
393     +cp_loop_variable_2)
394     C $OpenAD$ INLINE DECLS
395     implicit none
396     double precision, dimension(::) :: x
397     C $OpenAD$ END DECLS
398     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
399     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
400     x(cp_loop_variable_1,cp_loop_variable_2)=
401     +cp_double(cp_double_pointer)
402     cp_double_pointer=cp_double_pointer-1
403     end do
404     end do
405     end subroutine
406    
407     subroutine cp_arg_store_real_matrix_a(x,cp_loop_variable_1,
408     +cp_loop_variable_2)
409     C $OpenAD$ INLINE DECLS
410     implicit none
411     double precision, dimension(::) :: x
412     C $OpenAD$ END DECLS
413     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
414     do while (cp_double_size .lt.
415     +cp_double_pointer+ubound(x,2)-lbound(x,2))
416     allocate(cp_double_tmp(cp_double_size))
417     cp_double_tmp=cp_double
418     deallocate(cp_double)
419     allocate(cp_double(cp_double_size*2))
420 utke 1.2 print *,'CPD+ ', cp_double_size*2
421 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
422     deallocate(cp_double_tmp)
423     cp_double_size=cp_double_size*2
424     end do
425     do cp_loop_variable_2=lbound(x,2), ubound(x,2), 1
426     cp_double_pointer=cp_double_pointer+1
427     cp_double(cp_double_pointer)=
428     +x(cp_loop_variable_1,cp_loop_variable_2)%v
429     end do
430     end do
431     end subroutine
432    
433     subroutine cp_arg_restore_real_matrix_a(x,cp_loop_variable_1,
434     +cp_loop_variable_2)
435     C $OpenAD$ INLINE DECLS
436     implicit none
437     double precision, dimension(::) :: x
438     C $OpenAD$ END DECLS
439     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
440     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
441     x(cp_loop_variable_1,cp_loop_variable_2)%v=
442     +cp_double(cp_double_pointer)
443     cp_double_pointer=cp_double_pointer-1
444     end do
445     end do
446     end subroutine
447    
448     subroutine cp_arg_store_real_three_tensor(x,
449     +cp_loop_variable_1,
450     +cp_loop_variable_2,
451     +cp_loop_variable_3
452     +)
453     C $OpenAD$ INLINE DECLS
454     implicit none
455     double precision, dimension(::) :: x
456     C $OpenAD$ END DECLS
457     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
458     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
459     do while (cp_double_size .lt.
460     +cp_double_pointer+ubound(x,3)-lbound(x,3))
461     allocate(cp_double_tmp(cp_double_size))
462     cp_double_tmp=cp_double
463     deallocate(cp_double)
464     allocate(cp_double(cp_double_size*2))
465 utke 1.2 print *,'CPD+ ', cp_double_size*2
466 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
467     deallocate(cp_double_tmp)
468     cp_double_size=cp_double_size*2
469     end do
470     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
471     cp_double_pointer=cp_double_pointer+1
472     cp_double(cp_double_pointer)=
473     +x(
474     + cp_loop_variable_1,
475     + cp_loop_variable_2,
476     + cp_loop_variable_3
477     + )
478     end do
479     end do
480     end do
481     end subroutine
482    
483     subroutine cp_arg_store_real_three_tensor_a(x,
484     +cp_loop_variable_1,
485     +cp_loop_variable_2,
486     +cp_loop_variable_3
487     +)
488     C $OpenAD$ INLINE DECLS
489     implicit none
490     double precision, dimension(::) :: x
491     C $OpenAD$ END DECLS
492     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
493     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
494     do while (cp_double_size .lt.
495     +cp_double_pointer+ubound(x,3)-lbound(x,3))
496     allocate(cp_double_tmp(cp_double_size))
497     cp_double_tmp=cp_double
498     deallocate(cp_double)
499     allocate(cp_double(cp_double_size*2))
500 utke 1.2 print *,'CPD+ ', cp_double_size*2
501 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
502     deallocate(cp_double_tmp)
503     cp_double_size=cp_double_size*2
504     end do
505     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
506     cp_double_pointer=cp_double_pointer+1
507     cp_double(cp_double_pointer)=
508     +x(
509     + cp_loop_variable_1,
510     + cp_loop_variable_2,
511     + cp_loop_variable_3
512     + )%v
513     end do
514     end do
515     end do
516     end subroutine
517    
518     subroutine cp_arg_restore_real_three_tensor(x,
519     +cp_loop_variable_1,
520     +cp_loop_variable_2,
521     +cp_loop_variable_3
522     +)
523     C $OpenAD$ INLINE DECLS
524     implicit none
525     double precision, dimension(::) :: x
526     C $OpenAD$ END DECLS
527     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
528     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
529     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
530     x(
531     + cp_loop_variable_1,
532     + cp_loop_variable_2,
533     + cp_loop_variable_3
534     + )=
535     +cp_double(cp_double_pointer)
536     cp_double_pointer=cp_double_pointer-1
537     end do
538     end do
539     end do
540     end subroutine
541    
542     subroutine cp_arg_restore_real_three_tensor_a(x,
543     +cp_loop_variable_1,
544     +cp_loop_variable_2,
545     +cp_loop_variable_3
546     +)
547     C $OpenAD$ INLINE DECLS
548     implicit none
549     double precision, dimension(::) :: x
550     C $OpenAD$ END DECLS
551     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
552     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
553     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
554     x(
555     + cp_loop_variable_1,
556     + cp_loop_variable_2,
557     + cp_loop_variable_3
558     + )%v=
559     +cp_double(cp_double_pointer)
560     cp_double_pointer=cp_double_pointer-1
561     end do
562     end do
563     end do
564     end subroutine
565    
566     subroutine cp_arg_store_real_four_tensor(x,
567     +cp_loop_variable_1,
568     +cp_loop_variable_2,
569     +cp_loop_variable_3,
570     +cp_loop_variable_4
571     +)
572     C $OpenAD$ INLINE DECLS
573     implicit none
574     double precision, dimension(::) :: x
575     C $OpenAD$ END DECLS
576     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
577     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
578     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
579     do while (cp_double_size .lt.
580     +cp_double_pointer+ubound(x,4)-lbound(x,4))
581     allocate(cp_double_tmp(cp_double_size))
582     cp_double_tmp=cp_double
583     deallocate(cp_double)
584     allocate(cp_double(cp_double_size*2))
585 utke 1.2 print *,'CPD+ ', cp_double_size*2
586 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
587     deallocate(cp_double_tmp)
588     cp_double_size=cp_double_size*2
589     end do
590     do cp_loop_variable_4=lbound(x,4),ubound(x,4)
591     cp_double_pointer=cp_double_pointer+1
592     cp_double(cp_double_pointer)=
593     +x(
594     + cp_loop_variable_1,
595     + cp_loop_variable_2,
596     + cp_loop_variable_3,
597     + cp_loop_variable_4
598     + )
599     end do
600     end do
601     end do
602     end do
603     end subroutine
604    
605     subroutine cp_arg_store_real_four_tensor_a(x,
606     +cp_loop_variable_1,
607     +cp_loop_variable_2,
608     +cp_loop_variable_3,
609     +cp_loop_variable_4
610     +)
611     C $OpenAD$ INLINE DECLS
612     implicit none
613     double precision, dimension(::) :: x
614     C $OpenAD$ END DECLS
615     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
616     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
617     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
618     do while (cp_double_size .lt.
619     +cp_double_pointer+ubound(x,4)-lbound(x,4))
620     allocate(cp_double_tmp(cp_double_size))
621     cp_double_tmp=cp_double
622     deallocate(cp_double)
623     allocate(cp_double(cp_double_size*2))
624 utke 1.2 print *,'CPD+ ', cp_double_size*2
625 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
626     deallocate(cp_double_tmp)
627     cp_double_size=cp_double_size*2
628     end do
629     do cp_loop_variable_4=lbound(x,4),ubound(x,4)
630     cp_double_pointer=cp_double_pointer+1
631     cp_double(cp_double_pointer)=
632     +x(
633     + cp_loop_variable_1,
634     + cp_loop_variable_2,
635     + cp_loop_variable_3,
636     + cp_loop_variable_4
637     + )%v
638     end do
639     end do
640     end do
641     end do
642     end subroutine
643    
644     subroutine cp_arg_restore_real_four_tensor(x,
645     +cp_loop_variable_1,
646     +cp_loop_variable_2,
647     +cp_loop_variable_3,
648     +cp_loop_variable_4
649     +)
650     C $OpenAD$ INLINE DECLS
651     implicit none
652     double precision, dimension(::) :: x
653     C $OpenAD$ END DECLS
654     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
655     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
656     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
657     do cp_loop_variable_4=ubound(x,4),lbound(x,4),-1
658     x(
659     + cp_loop_variable_1,
660     + cp_loop_variable_2,
661     + cp_loop_variable_3,
662     + cp_loop_variable_4
663     + )=
664     +cp_double(cp_double_pointer)
665     cp_double_pointer=cp_double_pointer-1
666     end do
667     end do
668     end do
669     end do
670     end subroutine
671    
672     subroutine cp_arg_restore_real_four_tensor_a(x,
673     +cp_loop_variable_1,
674     +cp_loop_variable_2,
675     +cp_loop_variable_3,
676     +cp_loop_variable_4
677     +)
678     C $OpenAD$ INLINE DECLS
679     implicit none
680     double precision, dimension(::) :: x
681     C $OpenAD$ END DECLS
682     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
683     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
684     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
685     do cp_loop_variable_4=ubound(x,4),lbound(x,4),-1
686     x(
687     + cp_loop_variable_1,
688     + cp_loop_variable_2,
689     + cp_loop_variable_3,
690     + cp_loop_variable_4
691     + )%v=
692     +cp_double(cp_double_pointer)
693     cp_double_pointer=cp_double_pointer-1
694     end do
695     end do
696     end do
697     end do
698     end subroutine
699    
700     subroutine cp_arg_store_real_five_tensor(x,
701     +cp_loop_variable_1,
702     +cp_loop_variable_2,
703     +cp_loop_variable_3,
704     +cp_loop_variable_4,
705     +cp_loop_variable_5
706     +)
707     C $OpenAD$ INLINE DECLS
708     implicit none
709     double precision, dimension(::) :: x
710     C $OpenAD$ END DECLS
711     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
712     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
713     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
714     do cp_loop_variable_4=lbound(x,4),ubound(x,4)
715     do while (cp_double_size .lt.
716     +cp_double_pointer+ubound(x,5)-lbound(x,5))
717     allocate(cp_double_tmp(cp_double_size))
718     cp_double_tmp=cp_double
719     deallocate(cp_double)
720     allocate(cp_double(cp_double_size*2))
721 utke 1.2 print *,'CPD+ ', cp_double_size*2
722 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
723     deallocate(cp_double_tmp)
724     cp_double_size=cp_double_size*2
725     end do
726     do cp_loop_variable_5=lbound(x,5),ubound(x,5)
727     cp_double_pointer=cp_double_pointer+1
728     cp_double(cp_double_pointer)=
729     +x(
730     + cp_loop_variable_1,
731     + cp_loop_variable_2,
732     + cp_loop_variable_3,
733     + cp_loop_variable_4,
734     + cp_loop_variable_5
735     + )
736     end do
737     end do
738     end do
739     end do
740     end do
741     end subroutine
742    
743     subroutine cp_arg_store_real_five_tensor_a(x,
744     +cp_loop_variable_1,
745     +cp_loop_variable_2,
746     +cp_loop_variable_3,
747     +cp_loop_variable_4,
748     +cp_loop_variable_5
749     +)
750     C $OpenAD$ INLINE DECLS
751     implicit none
752     double precision, dimension(::) :: x
753     C $OpenAD$ END DECLS
754     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
755     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
756     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
757     do cp_loop_variable_4=lbound(x,4),ubound(x,4)
758     do while (cp_double_size .lt.
759     +cp_double_pointer+ubound(x,5)-lbound(x,5))
760     allocate(cp_double_tmp(cp_double_size))
761     cp_double_tmp=cp_double
762     deallocate(cp_double)
763     allocate(cp_double(cp_double_size*2))
764 utke 1.2 print *,'CPD+ ', cp_double_size*2
765 utke 1.1 cp_double(1:cp_double_size) = cp_double_tmp
766     deallocate(cp_double_tmp)
767     cp_double_size=cp_double_size*2
768     end do
769     do cp_loop_variable_5=lbound(x,5),ubound(x,5)
770     cp_double_pointer=cp_double_pointer+1
771     cp_double(cp_double_pointer)=
772     +x(
773     + cp_loop_variable_1,
774     + cp_loop_variable_2,
775     + cp_loop_variable_3,
776     + cp_loop_variable_4,
777     + cp_loop_variable_5
778     + )%v
779     end do
780     end do
781     end do
782     end do
783     end do
784     end subroutine
785    
786     subroutine cp_arg_restore_real_five_tensor(x,
787     +cp_loop_variable_1,
788     +cp_loop_variable_2,
789     +cp_loop_variable_3,
790     +cp_loop_variable_4,
791     +cp_loop_variable_5
792     +)
793     C $OpenAD$ INLINE DECLS
794     implicit none
795     double precision, dimension(::) :: x
796     C $OpenAD$ END DECLS
797     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
798     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
799     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
800     do cp_loop_variable_4=ubound(x,4),lbound(x,4),-1
801     do cp_loop_variable_5=ubound(x,5),lbound(x,5),-1
802     x(
803     + cp_loop_variable_1,
804     + cp_loop_variable_2,
805     + cp_loop_variable_3,
806     + cp_loop_variable_4,
807     + cp_loop_variable_5
808     + )=
809     +cp_double(cp_double_pointer)
810     cp_double_pointer=cp_double_pointer-1
811     end do
812     end do
813     end do
814     end do
815     end do
816     end subroutine
817    
818     subroutine cp_arg_restore_real_five_tensor_a(x,
819     +cp_loop_variable_1,
820     +cp_loop_variable_2,
821     +cp_loop_variable_3,
822     +cp_loop_variable_4,
823     +cp_loop_variable_5
824     +)
825     C $OpenAD$ INLINE DECLS
826     implicit none
827     double precision, dimension(::) :: x
828     C $OpenAD$ END DECLS
829     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
830     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
831     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
832     do cp_loop_variable_4=ubound(x,4),lbound(x,4),-1
833     do cp_loop_variable_5=ubound(x,5),lbound(x,5),-1
834     x(
835     + cp_loop_variable_1,
836     + cp_loop_variable_2,
837     + cp_loop_variable_3,
838     + cp_loop_variable_4,
839     + cp_loop_variable_5
840     + )%v=
841     +cp_double(cp_double_pointer)
842     cp_double_pointer=cp_double_pointer-1
843     end do
844     end do
845     end do
846     end do
847     end do
848     end subroutine
849    
850    
851     C integers -----------------------------------------------------
852     subroutine cp_arg_store_integer_scalar(i)
853     C $OpenAD$ INLINE DECLS
854     implicit none
855     integer :: i
856     C $OpenAD$ END DECLS
857     if(cp_integer_size .lt. cp_integer_pointer+1) then
858     allocate(cp_integer_tmp(cp_integer_size))
859     cp_integer_tmp=cp_integer
860     deallocate(cp_integer)
861     allocate(cp_integer(cp_integer_size*2))
862 utke 1.2 print *,'CPI+ ', cp_integer_size*2
863 utke 1.1 cp_integer(1:cp_integer_size) = cp_integer_tmp
864     deallocate(cp_integer_tmp)
865     cp_integer_size=cp_integer_size*2
866     end if
867     cp_integer_pointer=cp_integer_pointer+1
868     cp_integer(cp_integer_pointer)=i
869     end subroutine
870    
871     subroutine cp_arg_restore_integer_scalar(i)
872     C $OpenAD$ INLINE DECLS
873     implicit none
874     integer :: i
875     C $OpenAD$ END DECLS
876     i=cp_integer(cp_integer_pointer)
877     cp_integer_pointer=cp_integer_pointer-1
878     end subroutine
879    
880     subroutine cp_arg_store_integer_vector(x,cp_loop_variable_1)
881     C $OpenAD$ INLINE DECLS
882     implicit none
883     integer, dimension(:) :: x
884     C $OpenAD$ END DECLS
885     do while (cp_integer_size .lt.
886     +cp_integer_pointer+ubound(x,1)-lbound(x,1))
887     allocate(cp_integer_tmp(cp_integer_size))
888     cp_integer_tmp=cp_integer
889     deallocate(cp_integer)
890     allocate(cp_integer(cp_integer_size*2))
891 utke 1.2 print *,'CPI+', cp_integer_size*2
892 utke 1.1 cp_integer(1:cp_integer_size) = cp_integer_tmp
893     deallocate(cp_integer_tmp)
894     cp_integer_size=cp_integer_size*2
895     end do
896     do cp_loop_variable_1=lbound(x,1), ubound(x,1), 1
897     cp_integer_pointer=cp_integer_pointer+1
898     cp_integer(cp_integer_pointer)=
899     +x(cp_loop_variable_1)
900     end do
901     end subroutine
902    
903     subroutine cp_arg_restore_integer_vector(x,cp_loop_variable_1)
904     C $OpenAD$ INLINE DECLS
905     implicit none
906     integer, dimension(:) :: x
907     C $OpenAD$ END DECLS
908     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
909     x(cp_loop_variable_1)=cp_integer(cp_integer_pointer)
910     cp_integer_pointer=cp_integer_pointer-1
911     end do
912     end subroutine
913    
914     subroutine cp_arg_store_integer_three_tensor(x,
915     +cp_loop_variable_1,
916     +cp_loop_variable_2,
917     +cp_loop_variable_3
918     +)
919     C $OpenAD$ INLINE DECLS
920     implicit none
921     integer, dimension(::) :: x
922     C $OpenAD$ END DECLS
923     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
924     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
925     do while (cp_integer_size .lt.
926     +cp_integer_pointer+ubound(x,3)-lbound(x,3))
927     allocate(cp_integer_tmp(cp_integer_size))
928     cp_integer_tmp=cp_integer
929     deallocate(cp_integer)
930     allocate(cp_integer(cp_integer_size*2))
931 utke 1.2 print *,'CPI+ ', cp_integer_size*2
932 utke 1.1 cp_integer(1:cp_integer_size) = cp_integer_tmp
933     deallocate(cp_integer_tmp)
934     cp_integer_size=cp_integer_size*2
935     end do
936     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
937     cp_integer_pointer=cp_integer_pointer+1
938     cp_integer(cp_integer_pointer)=
939     +x(
940     + cp_loop_variable_1,
941     + cp_loop_variable_2,
942     + cp_loop_variable_3
943     + )
944     end do
945     end do
946     end do
947     end subroutine
948    
949     subroutine cp_arg_restore_integer_three_tensor(x,
950     +cp_loop_variable_1,
951     +cp_loop_variable_2,
952     +cp_loop_variable_3
953     +)
954     C $OpenAD$ INLINE DECLS
955     implicit none
956     integer, dimension(::) :: x
957     C $OpenAD$ END DECLS
958     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
959     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
960     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
961     x(
962     + cp_loop_variable_1,
963     + cp_loop_variable_2,
964     + cp_loop_variable_3
965     + )=
966     +cp_integer(cp_integer_pointer)
967     cp_integer_pointer=cp_integer_pointer-1
968     end do
969     end do
970     end do
971     end subroutine
972    
973     subroutine cp_arg_store_integer_four_tensor(x,
974     +cp_loop_variable_1,
975     +cp_loop_variable_2,
976     +cp_loop_variable_3,
977     +cp_loop_variable_4
978     +)
979     C $OpenAD$ INLINE DECLS
980     implicit none
981     integer, dimension(::) :: x
982     C $OpenAD$ END DECLS
983     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
984     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
985     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
986     do while (cp_integer_size .lt.
987     +cp_integer_pointer+ubound(x,4)-lbound(x,4))
988     allocate(cp_integer_tmp(cp_integer_size))
989     cp_integer_tmp=cp_integer
990     deallocate(cp_integer)
991     allocate(cp_integer(cp_integer_size*2))
992 utke 1.2 print *,'CPI+ ', cp_integer_size*2
993 utke 1.1 cp_integer(1:cp_integer_size) = cp_integer_tmp
994     deallocate(cp_integer_tmp)
995     cp_integer_size=cp_integer_size*2
996     end do
997     do cp_loop_variable_4=lbound(x,4),ubound(x,4)
998     cp_integer_pointer=cp_integer_pointer+1
999     cp_integer(cp_integer_pointer)=
1000     +x(
1001     + cp_loop_variable_1,
1002     + cp_loop_variable_2,
1003     + cp_loop_variable_3,
1004     + cp_loop_variable_4
1005     + )
1006     end do
1007     end do
1008     end do
1009     end do
1010     end subroutine
1011    
1012     subroutine cp_arg_restore_integer_four_tensor(x,
1013     +cp_loop_variable_1,
1014     +cp_loop_variable_2,
1015     +cp_loop_variable_3,
1016     +cp_loop_variable_4
1017     +)
1018     C $OpenAD$ INLINE DECLS
1019     implicit none
1020     integer, dimension(::) :: x
1021     C $OpenAD$ END DECLS
1022     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
1023     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
1024     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
1025     do cp_loop_variable_4=ubound(x,4),lbound(x,4),-1
1026     x(
1027     + cp_loop_variable_1,
1028     + cp_loop_variable_2,
1029     + cp_loop_variable_3,
1030     + cp_loop_variable_4
1031     + )=
1032     +cp_integer(cp_integer_pointer)
1033     cp_integer_pointer=cp_integer_pointer-1
1034     end do
1035     end do
1036     end do
1037     end do
1038     end subroutine
1039    
1040     subroutine cp_arg_store_integer_five_tensor(x,
1041     +cp_loop_variable_1,
1042     +cp_loop_variable_2,
1043     +cp_loop_variable_3,
1044     +cp_loop_variable_4,
1045     +cp_loop_variable_5
1046     +)
1047     C $OpenAD$ INLINE DECLS
1048     implicit none
1049     integer, dimension(::) :: x
1050     C $OpenAD$ END DECLS
1051     do cp_loop_variable_1=lbound(x,1),ubound(x,1)
1052     do cp_loop_variable_2=lbound(x,2),ubound(x,2)
1053     do cp_loop_variable_3=lbound(x,3),ubound(x,3)
1054     do cp_loop_variable_4=lbound(x,4),ubound(x,4)
1055     do while (cp_integer_size .lt.
1056     +cp_integer_pointer+ubound(x,5)-lbound(x,5))
1057     allocate(cp_integer_tmp(cp_integer_size))
1058     cp_integer_tmp=cp_integer
1059     deallocate(cp_integer)
1060     allocate(cp_integer(cp_integer_size*2))
1061 utke 1.2 print *,'CPI+ ', cp_integer_size*2
1062 utke 1.1 cp_integer(1:cp_integer_size) = cp_integer_tmp
1063     deallocate(cp_integer_tmp)
1064     cp_integer_size=cp_integer_size*2
1065     end do
1066     do cp_loop_variable_5=lbound(x,5),ubound(x,5)
1067     cp_integer_pointer=cp_integer_pointer+1
1068     cp_integer(cp_integer_pointer)=
1069     +x(
1070     + cp_loop_variable_1,
1071     + cp_loop_variable_2,
1072     + cp_loop_variable_3,
1073     + cp_loop_variable_4,
1074     + cp_loop_variable_5
1075     + )
1076     end do
1077     end do
1078     end do
1079     end do
1080     end do
1081     end subroutine
1082    
1083     subroutine cp_arg_restore_integer_five_tensor(x,
1084     +cp_loop_variable_1,
1085     +cp_loop_variable_2,
1086     +cp_loop_variable_3,
1087     +cp_loop_variable_4,
1088     +cp_loop_variable_5
1089     +)
1090     C $OpenAD$ INLINE DECLS
1091     implicit none
1092     integer, dimension(::) :: x
1093     C $OpenAD$ END DECLS
1094     do cp_loop_variable_1=ubound(x,1),lbound(x,1),-1
1095     do cp_loop_variable_2=ubound(x,2),lbound(x,2),-1
1096     do cp_loop_variable_3=ubound(x,3),lbound(x,3),-1
1097     do cp_loop_variable_4=ubound(x,4),lbound(x,4),-1
1098     do cp_loop_variable_5=ubound(x,5),lbound(x,5),-1
1099     x(
1100     + cp_loop_variable_1,
1101     + cp_loop_variable_2,
1102     + cp_loop_variable_3,
1103     + cp_loop_variable_4,
1104     + cp_loop_variable_5
1105     + )=
1106     +cp_integer(cp_integer_pointer)
1107     cp_integer_pointer=cp_integer_pointer-1
1108     end do
1109     end do
1110     end do
1111     end do
1112     end do
1113     end subroutine
1114    
1115     C strings -----------------------------------------------------
1116     subroutine cp_arg_store_string_scalar(s)
1117     C $OpenAD$ INLINE DECLS
1118     implicit none
1119     character*(80) :: s
1120     C $OpenAD$ END DECLS
1121     if(cp_string_size .lt. cp_string_pointer+1) then
1122     allocate(cp_string_tmp(cp_string_size))
1123     cp_string_tmp=cp_string
1124     deallocate(cp_string)
1125     allocate(cp_string(cp_string_size*2))
1126     print *,'CPS+'
1127     cp_string(1:cp_string_size) = cp_string_tmp
1128     deallocate(cp_string_tmp)
1129     cp_string_size=cp_string_size*2
1130     end if
1131     cp_string_pointer=cp_string_pointer+1
1132     cp_string(cp_string_pointer)=s
1133     end subroutine
1134    
1135     subroutine cp_arg_restore_string_scalar(s)
1136     C $OpenAD$ INLINE DECLS
1137     implicit none
1138     character*(80) :: s
1139     C $OpenAD$ END DECLS
1140     s=cp_string(cp_string_pointer)
1141     cp_string_pointer=cp_string_pointer-1
1142     end subroutine
1143    
1144     C bools -----------------------------------------------------
1145     subroutine cp_arg_store_bool_scalar(b)
1146     C $OpenAD$ INLINE DECLS
1147     implicit none
1148     logical :: b
1149     C $OpenAD$ END DECLS
1150     if(cp_boolean_size .lt. cp_boolean_pointer+1) then
1151     allocate(cp_boolean_tmp(cp_boolean_size))
1152     cp_boolean_tmp=cp_boolean
1153     deallocate(cp_boolean)
1154     allocate(cp_boolean(cp_boolean_size*2))
1155     print *,'CPB+'
1156     cp_boolean(1:cp_boolean_size) = cp_boolean_tmp
1157     deallocate(cp_boolean_tmp)
1158     cp_boolean_size=cp_boolean_size*2
1159     end if
1160     cp_boolean_pointer=cp_boolean_pointer+1
1161     cp_boolean(cp_boolean_pointer)=b
1162     end subroutine
1163    
1164     subroutine cp_arg_restore_bool_scalar(b)
1165     C $OpenAD$ INLINE DECLS
1166     implicit none
1167     logical :: b
1168     C $OpenAD$ END DECLS
1169     b=cp_boolean(cp_boolean_pointer)
1170     cp_boolean_pointer=cp_boolean_pointer-1
1171     end subroutine

  ViewVC Help
Powered by ViewVC 1.1.22