The TELEMAC-MASCARET system  trunk
ad_dco_a1s_ti_marker_module.f
Go to the documentation of this file.
1 !!! module AD_DCO_A1S_TI_MARKER_MODULE
2 !!! A module that allows to store tape indicess for
3 !!! later extraction of intenrmediate adjoints
4 !!!
5 !!! Assumption : contigouous storage
6 !!! JR 2016
7 
8 
9 #if defined COMPAD /* do that only for active compilation */
10 
12  USE dco_a1s_common
13  IMPLICIT NONE
15  INTEGER(DCO_A1S_TAPE_IKND) :: frst, size
16 ! INTEGER :: TSTP
19  TYPE(dco_a1s_ti_marker_list_elem), ALLOCATABLE :: data(:)
21  CONTAINS
22  SUBROUTINE dco_a1s_ti_marker_list_setup( TIM, NIT )
23  TYPE(dco_a1s_ti_marker_list_type) :: tim
24  INTEGER, INTENT(IN) :: NIT
25  print *,'DCO_A1S_TI_MARKER_LIST_SETUP( ', nit,' )'
26  IF ( nit < 0 ) THEN
27  print *,'ERROR: DCO_A1S_TI_MARKER_LIST_SETUP :: NIT (',
28  & nit,') < 0 !!'
29  stop
30  END IF
31  ALLOCATE( tim%DATA(0:nit))
32  tim%DATA = dco_a1s_ti_marker_list_elem(0,0)
33  END SUBROUTINE dco_a1s_ti_marker_list_setup
34  SUBROUTINE dco_a1s_ti_marker_list_clean( TIM )
35  TYPE(dco_a1s_ti_marker_list_type) :: TIM
36  DEALLOCATE( tim%DATA )
37  END SUBROUTINE dco_a1s_ti_marker_list_clean
38  SUBROUTINE dco_a1s_ti_marker_list_store( TIM, TSTP, FRST, SIZE )
39  TYPE(dco_a1s_ti_marker_list_type) :: TIM
40  INTEGER, INTENT(IN) :: TSTP
41  INTEGER(DCO_A1S_TAPE_IKND), INTENT(IN) :: FRST, SIZE
42  tim%DATA(tstp) = dco_a1s_ti_marker_list_elem( frst, SIZE )
43  END SUBROUTINE dco_a1s_ti_marker_list_store
44  SUBROUTINE dco_a1s_ti_marker_list_get( TIM, TSTP, FRST, SIZE )
45  TYPE(dco_a1s_ti_marker_list_type),INTENT(IN) :: TIM
46  INTEGER, INTENT(IN) :: TSTP
47  INTEGER(DCO_A1S_TAPE_IKND), INTENT(OUT) :: FRST, SIZE
48  frst = tim%DATA(tstp)%FRST
49  SIZE = tim%DATA(tstp)%SIZE
50  END SUBROUTINE dco_a1s_ti_marker_list_get
51  SUBROUTINE dco_a1s_ti_marker_list_print( TIM )
52  TYPE(dco_a1s_ti_marker_list_type),INTENT(IN) :: TIM
53  INTEGER :: I
54  print *,'TIMDATA : ',SIZE(tim%DATA,1),' elements'
55  DO i = 0, SIZE(tim%DATA)-1
56  print *,'TIMDATA ',i,' : ', tim%DATA(i)%FRST,
57  & ' -> ',tim%DATA(i)%FRST+tim%DATA(i)%SIZE,
58  & ' ( ',tim%DATA(i)%SIZE,' )'
59  END DO
60  END SUBROUTINE dco_a1s_ti_marker_list_print
62 
65  IMPLICIT NONE
66  PRIVATE
67  PUBLIC :: dco_a1s_ti_marker
72  PUBLIC :: dco_a1s_ti_marker_print
74  & DIMENSION(:), ALLOCATABLE :: dco_a1s_ti_marker
75  CONTAINS
76  SUBROUTINE dco_a1s_ti_marker_setup( NTIM, NIT )
77  INTEGER, INTENT(IN) :: ntim
78  INTEGER, INTENT(IN) :: NIT
79  INTEGER :: I
80  print *,'Called : DCO_A1S_TI_MARKER_SETUP(',ntim,',',nit,')'
81  IF ( ntim < 1 ) THEN
82  print *,'ERROR: DCO_A1S_TI_MARKER_SETUP :: NTIM (',
83  & ntim,') < 1 !!'
84  stop
85  END IF
86  IF ( nit < 0 ) THEN
87  print *,'ERROR: DCO_A1S_TI_MARKER_SETUP :: NIT (',
88  & nit,') < 0 !!'
89  stop
90  END IF
91  ALLOCATE( dco_a1s_ti_marker(ntim) )
92  DO i = 1, ntim
94  & nit )
95  END DO
96  END SUBROUTINE dco_a1s_ti_marker_setup
97  SUBROUTINE dco_a1s_ti_marker_clean( )
98  INTEGER :: I
99  print *,'Called : DCO_A1S_TI_MARKER_CLEAN '
100  DO i = 1, SIZE(dco_a1s_ti_marker)
102  END DO
103  IF ( ALLOCATED( dco_a1s_ti_marker ) ) THEN
104  DEALLOCATE( dco_a1s_ti_marker )
105  ENDIF
106  END SUBROUTINE dco_a1s_ti_marker_clean
107  SUBROUTINE arg_check( TIM, TSTP, WHO )
108  INTEGER, INTENT(IN) :: TIM, TSTP
109  CHARACTER(LEN=*), INTENT(IN) :: WHO
110  IF ( tim < 1 .OR. tim > SIZE(dco_a1s_ti_marker,1) ) THEN
111  print *,'ERROR: DCO_A1S_TI_MARKER_'//who
112  & //' :: INVALID TIM NUMBER ', tim, ' !!'
113  stop
114  END IF
115  IF ( tstp < 0 .OR.
116  & tstp > SIZE(dco_a1s_ti_marker(tim)%DATA,1) ) THEN
117  print *,'ERROR: DCO_A1S_TI_MARKER_'//who
118  & //' :: INVALID TSTP NUMBER ',tstp,
119  & ' !!'
120  stop
121  END IF
122  END SUBROUTINE arg_check
123  SUBROUTINE dco_a1s_ti_marker_store( TIM, TSTP, FRST, SZE )
124  INTEGER, INTENT(IN) :: TIM, TSTP
125  TYPE(dco_a1s_type), INTENT(IN) :: FRST
126  INTEGER(DCO_A1S_TAPE_IKND), INTENT(IN) :: SZE
127 ! INTEGER(DCO_A1S_TAPE_IKND), INTENT(IN) :: FRST, sze
128  print *,'Called : DCO_A1S_TI_MARKER_STORE(',tim,',',tstp,
129  & ',',frst,',',sze,')'
130  CALL arg_check( tim, tstp, 'STORE' )
132  & tstp, frst%J, sze )
133  END SUBROUTINE dco_a1s_ti_marker_store
134  SUBROUTINE dco_a1s_ti_marker_get( TIM, TSTP, FRST, SZE )
135  INTEGER, INTENT(IN) :: TIM, TSTP
136  INTEGER(DCO_A1S_TAPE_IKND), INTENT(OUT) :: FRST, SZE
137  CALL arg_check( tim, tstp, 'GET' )
139  & tstp, frst, sze )
140  print *,'Called : DCO_A1S_TI_MARKER_GET(',tim,',',tstp,
141  & ',->',frst,',->',SIZE,')'
142  END SUBROUTINE dco_a1s_ti_marker_get
143  FUNCTION dco_a1s_ti_marker_get_first( TIM, TSTP ) RESULT(RES)
144  INTEGER, INTENT(IN) :: TIM, TSTP
145  INTEGER(DCO_A1S_TAPE_IKND) :: FRST, SZE
146  INTEGER(DCO_A1S_TAPE_IKND) :: RES
147  CALL arg_check( tim, tstp, 'GET_FIRST' )
149  & tstp, frst, sze )
150  res = frst
151  !!PRINT *,'Called : DCO_A1S_TI_MARKER_GET_FIRST(',TIM,',',TSTP,') ->',RES
152  END FUNCTION dco_a1s_ti_marker_get_first
153  FUNCTION dco_a1s_ti_marker_get_size( TIM, TSTP ) RESULT(RES)
154  INTEGER, INTENT(IN) :: TIM, TSTP
155  INTEGER(DCO_A1S_TAPE_IKND) :: FRST, SZE
156  INTEGER(DCO_A1S_TAPE_IKND) :: RES
157  CALL arg_check( tim, tstp, 'GET_SIZE' )
159  & tstp, frst, sze )
160  res = sze
161  !!PRINT *,'Called : DCO_A1S_TI_MARKER_GET_FIRST(',TIM,',',TSTP,') ->',RES
162  END FUNCTION dco_a1s_ti_marker_get_size
163  SUBROUTINE dco_a1s_ti_marker_print( TIM )
164  INTEGER, INTENT(IN) :: TIM
165  IF ( tim < 1 .OR. tim > SIZE(dco_a1s_ti_marker,1) ) THEN
166  print *,
167  & 'ERROR: DCO_A1S_TI_MARKER_PRINT :: INVALID TIM NUMBER ',
168  & tim, ' !!'
169  stop
170  END IF
172  END SUBROUTINE dco_a1s_ti_marker_print
173  END MODULE dco_a1s_ti_marker_module
174 
175 #endif /* COMPAD ! do that only for active compilation */
subroutine dco_a1s_ti_marker_list_store(TIM, TSTP, FRST, SIZE)
subroutine, public dco_a1s_ti_marker_setup(NTIM, NIT)
integer(dco_a1s_tape_iknd) function, public dco_a1s_ti_marker_get_size(TIM, TSTP)
subroutine, public dco_a1s_ti_marker_store(TIM, TSTP, FRST, SZE)
type(dco_a1s_ti_marker_list_type), dimension(:), allocatable, public dco_a1s_ti_marker
subroutine arg_check(TIM, TSTP, WHO)
subroutine, public dco_a1s_ti_marker_print(TIM)
subroutine dco_a1s_ti_marker_list_setup(TIM, NIT)
integer(dco_a1s_tape_iknd) function, public dco_a1s_ti_marker_get_first(TIM, TSTP)
subroutine dco_a1s_ti_marker_list_get(TIM, TSTP, FRST, SIZE)
subroutine, public dco_a1s_ti_marker_get(TIM, TSTP, FRST, SZE)
subroutine, public dco_a1s_ti_marker_clean()