SND@LHC Software
Loading...
Searching...
No Matches
mpdalc.f90
Go to the documentation of this file.
1
22
24MODULE mpdalc
25 USE mpdef
26 IMPLICIT NONE
27 SAVE
28 ! variables
29 INTEGER(mpl) :: numwordsalloc = 0
30 INTEGER(mpl) :: maxwordsalloc = 0
31 INTEGER(mpi) :: nummpalloc = 0
32 INTEGER(mpi) :: nummpdealloc = 0
33 INTEGER(mpi) :: printflagalloc = 0
34
39 END INTERFACE mpalloc
44 END INTERFACE mpdealloc
45
46CONTAINS
47 ! allocate dynamic vector or array
49 SUBROUTINE mpallocdvec(array,length,text)
50 REAL(mpd), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
51 INTEGER(mpl), INTENT(IN) :: length
52 CHARACTER (LEN=*), INTENT(IN) :: text
53
54 INTEGER(mpi) :: ifail
55 ALLOCATE (array(length),stat=ifail)
56 CALL mpalloccheck(ifail,(mpd*length)/mpi,text)
57 END SUBROUTINE mpallocdvec
58
60 SUBROUTINE mpallocfvec(array,length,text)
61 REAL(mps), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
62 INTEGER(mpl), INTENT(IN) :: length
63 CHARACTER (LEN=*), INTENT(IN) :: text
64
65 INTEGER(mpi) :: ifail
66 ALLOCATE (array(length),stat=ifail)
67 CALL mpalloccheck(ifail,(mps*length)/mpi,text)
68 END SUBROUTINE mpallocfvec
69
71 SUBROUTINE mpallocivec(array,length,text)
72 INTEGER(mpi), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
73 INTEGER(mpl), INTENT(IN) :: length
74 CHARACTER (LEN=*), INTENT(IN) :: text
75
76 INTEGER(mpi) :: ifail
77 ALLOCATE (array(length),stat=ifail)
78 CALL mpalloccheck(ifail,length,text)
79 END SUBROUTINE mpallocivec
80
82 SUBROUTINE mpallocfarr(array,rows,cols,text)
83 REAL(mps), DIMENSION(:,:), INTENT(IN OUT), ALLOCATABLE :: array
84 INTEGER(mpl), INTENT(IN) :: rows
85 INTEGER(mpl), INTENT(IN) :: cols
86 CHARACTER (LEN=*), INTENT(IN) :: text
87
88 INTEGER(mpi) :: ifail
89 ALLOCATE (array(rows,cols),stat=ifail)
90 CALL mpalloccheck(ifail,(mps*rows*cols)/mpi,text)
91 END SUBROUTINE mpallocfarr
92
94 SUBROUTINE mpallociarr(array,rows,cols,text)
95 INTEGER(mpi), DIMENSION(:,:), INTENT(IN OUT), ALLOCATABLE :: array
96 INTEGER(mpl), INTENT(IN) :: rows
97 INTEGER(mpl), INTENT(IN) :: cols
98 CHARACTER (LEN=*), INTENT(IN) :: text
99
100 INTEGER(mpi) :: ifail
101 ALLOCATE (array(rows,cols),stat=ifail)
102 CALL mpalloccheck(ifail,rows*cols,text)
103 END SUBROUTINE mpallociarr
104
106 SUBROUTINE mpalloclarr(array,rows,cols,text)
107 INTEGER(mpl), DIMENSION(:,:), INTENT(IN OUT), ALLOCATABLE :: array
108 INTEGER(mpl), INTENT(IN) :: rows
109 INTEGER(mpl), INTENT(IN) :: cols
110 CHARACTER (LEN=*), INTENT(IN) :: text
111
112 INTEGER(mpi) :: ifail
113 ALLOCATE (array(rows,cols),stat=ifail)
114 CALL mpalloccheck(ifail,(mpl*rows*cols)/mpi,text)
115 END SUBROUTINE mpalloclarr
116
118 SUBROUTINE mpalloclist(array,length,text)
119 TYPE(listitem), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
120 INTEGER(mpl), INTENT(IN) :: length
121 CHARACTER (LEN=*), INTENT(IN) :: text
122
123 INTEGER(mpi) :: ifail
124 ALLOCATE (array(length),stat=ifail)
125 CALL mpalloccheck(ifail,((mps+mpi)*length)/mpi,text)
126 END SUBROUTINE mpalloclist
127
129 SUBROUTINE mpalloccvec(array,length,text)
130 CHARACTER, DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
131 INTEGER(mpl), INTENT(IN) :: length
132 CHARACTER (LEN=*), INTENT(IN) :: text
133
134 INTEGER(mpi) :: ifail
135 ALLOCATE (array(length),stat=ifail)
136 CALL mpalloccheck(ifail,(length+mpi-1)/mpi,text)
137 END SUBROUTINE mpalloccvec
138
140 SUBROUTINE mpalloccheck(ifail,numwords,text)
141 INTEGER(mpi), INTENT(IN) :: ifail
142 INTEGER(mpl), INTENT(IN) :: numwords
143 CHARACTER (LEN=*), INTENT(IN) :: text
144 IF (ifail == 0) THEN
146 numwordsalloc = numwordsalloc + numwords
148 IF (printflagalloc /= 0) THEN
149 print *, ' MPALLOC allocated ', numwords, ' words for : ', text
150 print *, ' words used ', numwordsalloc, maxwordsalloc
151 ENDIF
152 ELSE
153 print *, ' MPALLOC failed to allocate ', numwords, ' words for : ', text
154 print *, ' MPALLOC words used ', numwordsalloc, maxwordsalloc
155 print *, ' MPALLOC stat = ', ifail
156 CALL peend(30,'Aborted, memory allocation failed')
157 stop
158 ENDIF
159 END SUBROUTINE mpalloccheck
160 ! deallocate dynamic vector or array
162 SUBROUTINE mpdeallocdvec(array)
163 REAL(mpd), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
164
165 INTEGER(mpi) :: ifail
166 INTEGER(mpl) :: isize
167 isize = (mpd*size(array,kind=mpl))/mpi
168 DEALLOCATE (array,stat=ifail)
169 CALL mpdealloccheck(ifail,isize)
170 END SUBROUTINE mpdeallocdvec
171
173 SUBROUTINE mpdeallocfvec(array)
174 REAL(mps), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
175
176 INTEGER(mpi) :: ifail
177 INTEGER(mpl) :: isize
178 isize = (mps*size(array,kind=mpl))/mpi
179 DEALLOCATE (array,stat=ifail)
180 CALL mpdealloccheck(ifail,isize)
181 END SUBROUTINE mpdeallocfvec
182
184 SUBROUTINE mpdeallocivec(array)
185 INTEGER(mpi), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
186
187 INTEGER(mpi) :: ifail
188 INTEGER(mpl) :: isize
189 isize = size(array,kind=mpl)
190 DEALLOCATE (array,stat=ifail)
191 CALL mpdealloccheck(ifail,isize)
192 END SUBROUTINE mpdeallocivec
193
195 SUBROUTINE mpdeallocfarr(array)
196 REAL(mps), DIMENSION(:,:), INTENT(IN OUT), ALLOCATABLE :: array
197
198 INTEGER(mpi) :: ifail
199 INTEGER(mpl) :: isize
200 isize = (mps*size(array,kind=mpl))/mpi
201 DEALLOCATE (array,stat=ifail)
202 CALL mpdealloccheck(ifail,isize)
203 END SUBROUTINE mpdeallocfarr
204
206 SUBROUTINE mpdeallociarr(array)
207 INTEGER(mpi), DIMENSION(:,:), INTENT(IN OUT), ALLOCATABLE :: array
208
209 INTEGER(mpi) :: ifail
210 INTEGER(mpl) :: isize
211 isize = size(array,kind=mpl)
212 DEALLOCATE (array,stat=ifail)
213 CALL mpdealloccheck(ifail,isize)
214 END SUBROUTINE mpdeallociarr
215
217 SUBROUTINE mpdealloclarr(array)
218 INTEGER(mpl), DIMENSION(:,:), INTENT(IN OUT), ALLOCATABLE :: array
219
220 INTEGER(mpi) :: ifail
221 INTEGER(mpl) :: isize
222 isize = (mpl*size(array,kind=mpl))/mpi
223 DEALLOCATE (array,stat=ifail)
224 CALL mpdealloccheck(ifail,isize)
225 END SUBROUTINE mpdealloclarr
226
228 SUBROUTINE mpdealloclist(array)
229 TYPE(listitem), DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
230
231 INTEGER(mpi) :: ifail
232 INTEGER(mpl) :: isize
233 isize = ((mpi+mps)*size(array,kind=mpl))/mpi
234 DEALLOCATE (array,stat=ifail)
235 CALL mpdealloccheck(ifail,isize)
236 END SUBROUTINE mpdealloclist
237
239 SUBROUTINE mpdealloccvec(array)
240 CHARACTER, DIMENSION(:), INTENT(IN OUT), ALLOCATABLE :: array
241
242 INTEGER(mpi) :: ifail
243 INTEGER(mpl) :: isize
244 isize = (size(array,kind=mpl)+mpi-1)/mpi
245 DEALLOCATE (array,stat=ifail)
246 CALL mpdealloccheck(ifail,isize)
247 END SUBROUTINE mpdealloccvec
248
250 SUBROUTINE mpdealloccheck(ifail,numwords)
251 INTEGER(mpi), INTENT(IN) :: ifail
252 INTEGER(mpl), INTENT(IN) :: numwords
253 IF (ifail == 0) THEN
254 numwordsalloc = numwordsalloc - numwords
256 IF (printflagalloc /= 0) THEN
257 print *, ' MPDEALLOC deallocated ', numwords, ' words '
258 print *, ' words used ', numwordsalloc, maxwordsalloc
259 ENDIF
260 ELSE
261 print *, ' MPDEALLOC failed to deallocate ', numwords, ' words'
262 print *, ' MPDEALLOC words used ', numwordsalloc, maxwordsalloc
263 print *, ' MPDEALLOC stat = ', ifail
264 CALL peend(31,'Aborted, memory deallocation failed')
265 stop
266 ENDIF
267 END SUBROUTINE mpdealloccheck
268
269END MODULE mpdalc
allocate array
Definition mpdalc.f90:36
deallocate array
Definition mpdalc.f90:41
(De)Allocate vectors and arrays.
Definition mpdalc.f90:24
subroutine mpdeallocfvec(array)
deallocate (1D) single precision array
Definition mpdalc.f90:174
subroutine mpalloclist(array, length, text)
allocate (1D) list item array
Definition mpdalc.f90:119
subroutine mpallocivec(array, length, text)
allocate (1D) integer array
Definition mpdalc.f90:72
subroutine mpalloclarr(array, rows, cols, text)
allocate (2D) large integer array
Definition mpdalc.f90:107
subroutine mpdealloccvec(array)
deallocate (1D) character array
Definition mpdalc.f90:240
subroutine mpallocfvec(array, length, text)
allocate (1D) single precision array
Definition mpdalc.f90:61
subroutine mpalloccvec(array, length, text)
allocate (1D) character array
Definition mpdalc.f90:130
integer(mpl) maxwordsalloc
peak dynamic memory allocation (words)
Definition mpdalc.f90:30
integer(mpi) nummpdealloc
number of dynamic deallocations
Definition mpdalc.f90:32
integer(mpi) printflagalloc
print flag for dynamic allocations
Definition mpdalc.f90:33
subroutine mpdeallocdvec(array)
deallocate (1D) double precision array
Definition mpdalc.f90:163
subroutine mpdealloccheck(ifail, numwords)
check deallocation
Definition mpdalc.f90:251
subroutine mpdealloclarr(array)
deallocate (2D) large integer array
Definition mpdalc.f90:218
subroutine mpalloccheck(ifail, numwords, text)
check allocation
Definition mpdalc.f90:141
subroutine mpallocfarr(array, rows, cols, text)
allocate (2D) single precision array
Definition mpdalc.f90:83
integer(mpl) numwordsalloc
current dynamic memory allocation (words)
Definition mpdalc.f90:29
subroutine mpdeallocivec(array)
deallocate (1D) integer array
Definition mpdalc.f90:185
integer(mpi) nummpalloc
number of dynamic allocations
Definition mpdalc.f90:31
subroutine mpallociarr(array, rows, cols, text)
allocate (2D) INTEGER(mpi) array
Definition mpdalc.f90:95
subroutine mpdealloclist(array)
deallocate (1D) list item array
Definition mpdalc.f90:229
subroutine mpallocdvec(array, length, text)
allocate (1D) double precision array
Definition mpdalc.f90:50
subroutine mpdeallociarr(array)
allocate (2D) integer array
Definition mpdalc.f90:207
subroutine mpdeallocfarr(array)
allocate (2D) single precision array
Definition mpdalc.f90:196
Definition of constants.
Definition mpdef.f90:24
integer, parameter mpi
Definition mpdef.f90:34
integer, parameter mpl
Definition mpdef.f90:36
integer, parameter mps
Definition mpdef.f90:37
subroutine peend(icode, cmessage)
Print exit code.
Definition pede.f90:8890
list items from steering file
Definition mpdef.f90:40