13integer,
parameter,
private ::
maxrec=32768
19 integer(4),
allocatable :: dat(:)
24 character(len=:),
allocatable :: fname
25 type(
rec_t),
allocatable :: rec(:)
42if (
allocated(
file))
return
53character(*),
intent(in) :: fname
54integer,
intent(out) :: fnum
57if (.not.
allocated(
file))
then
59 write(*,
'("Error(findfile): RAM disk not initialised")')
65 if (
file(i)%fname == fname)
then
75character(*),
intent(in) :: fname
76integer,
intent(out) :: fnum
84 if (
file(i)%fname ==
'')
then
94write(*,
'("Error(openfile): too many RAM disk files open : ",I8)')
maxfiles
103character(*),
intent(in) :: fname
114 if (
allocated(
file(fnum)%rec(i)%dat))
deallocate(
file(fnum)%rec(i)%dat)
116deallocate(
file(fnum)%rec)
119subroutine putrd(fname,irec,n1,n2,n3,v1,v2,nrv,rva,nzv,zva)
123character(*),
intent(in) :: fname
124integer,
intent(in) :: irec
125integer,
optional,
intent(in) :: n1,n2,n3
126real(8),
optional,
intent(in) :: v1(3),v2(3)
127integer,
optional,
intent(in) :: nrv
128real(8),
optional,
intent(in) :: rva(*)
129integer,
optional,
intent(in) :: nzv
130complex(8),
optional,
intent(in) :: zva(*)
141if (
present(n1)) n=n+1
142if (
present(n2)) n=n+1
143if (
present(n3)) n=n+1
144if (
present(v1)) n=n+6
145if (
present(v2)) n=n+6
146if (
present(rva))
then
147 if (
present(nrv))
then
151 write(*,
'("Error(putrd): missing argument nrv")')
156if (
present(zva))
then
157 if (
present(nzv))
then
161 write(*,
'("Error(putrd): missing argument nzv")')
169if (
allocated(
file(fnum)%rec(irec)%dat))
then
170 if (
size(
file(fnum)%rec(irec)%dat) < n)
then
171 deallocate(
file(fnum)%rec(irec)%dat)
174if (.not.
allocated(
file(fnum)%rec(irec)%dat))
then
175 allocate(
file(fnum)%rec(irec)%dat(n))
179 file(fnum)%rec(irec)%dat(i)=n1
183 file(fnum)%rec(irec)%dat(i)=n2
187 file(fnum)%rec(irec)%dat(i)=n3
192 file(fnum)%rec(irec)%dat(i:j)=transfer(v1(1:3),
file(fnum)%rec(irec)%dat(i:j))
197 file(fnum)%rec(irec)%dat(i:j)=transfer(v2(1:3),
file(fnum)%rec(irec)%dat(i:j))
200if (
present(rva))
then
202 file(fnum)%rec(irec)%dat(i:j)=transfer(rva(1:nrv), &
203 file(fnum)%rec(irec)%dat(i:j))
206if (
present(zva))
then
208 file(fnum)%rec(irec)%dat(i:j)=transfer(zva(1:nzv), &
209 file(fnum)%rec(irec)%dat(i:j))
213subroutine getrd(fname,irec,tgs,n1,n2,n3,v1,v2,nrv,rva,nzv,zva)
216character(*),
intent(in) :: fname
217integer,
intent(in) :: irec
218logical,
intent(out) :: tgs
219integer,
optional,
intent(out) :: n1,n2,n3
220real(8),
optional,
intent(out) :: v1(3),v2(3)
221integer,
optional,
intent(in) :: nrv
222real(8),
optional,
intent(out) :: rva(*)
223integer,
optional,
intent(in) :: nzv
224complex(8),
optional,
intent(out) :: zva(*)
227if (
present(rva))
then
228 if (.not.
present(nrv))
then
230 write(*,
'("Error(getrd): missing argument nrv")')
235if (
present(zva))
then
236 if (.not.
present(nzv))
then
238 write(*,
'("Error(getrd): missing argument nzv")')
249if (.not.
allocated(
file(fnum)%rec(irec)%dat))
return
250n=
size(
file(fnum)%rec(irec)%dat)
254 n1=
file(fnum)%rec(irec)%dat(i)
260 n2=
file(fnum)%rec(irec)%dat(i)
266 n3=
file(fnum)%rec(irec)%dat(i)
272 v1(1:3)=transfer(
file(fnum)%rec(irec)%dat(i:i+5),v1(1:3))
278 v2(1:3)=transfer(
file(fnum)%rec(irec)%dat(i:i+5),v2(1:3))
282if (
present(rva))
then
283 if (n < 2*nrv)
return
284 rva(1:nrv)=transfer(
file(fnum)%rec(irec)%dat(i:i+2*nrv-1),rva(1:nrv))
288if (
present(zva))
then
289 if (n < 4*nzv)
return
290 zva(1:nzv)=transfer(
file(fnum)%rec(irec)%dat(i:i+4*nzv-1),zva(1:nzv))
303write(*,
'("Info(rdstatus):")')
304if (.not.
allocated(
file))
then
305 write(*,
'(" RAM disk not initialised")')
311 if (
file(i)%fname /=
'')
then
313 write(*,
'(" Filename : ",A)')
file(i)%fname
318 if (
allocated(
file(i)%rec(j)%dat))
then
320 m=m+
size(
file(i)%rec(j)%dat)
324 write(*,
'(" number of records : ",I8)') nr
325 write(*,
'(" total number of bytes : ",I14)') 4*m
329write(*,
'(" Number of files on RAM disk : ",I4)') nf
330write(*,
'(" Total number of bytes used by RAM disk : ",I14)') 4*n
type(file_t), dimension(:), allocatable, private file
subroutine putrd(fname, irec, n1, n2, n3, v1, v2, nrv, rva, nzv, zva)
subroutine getrd(fname, irec, tgs, n1, n2, n3, v1, v2, nrv, rva, nzv, zva)
integer, parameter, private maxfiles
integer, parameter, private maxrec
subroutine, private findfile(fname, fnum)
subroutine, private openfile(fname, fnum)