-
Notifications
You must be signed in to change notification settings - Fork 69
Expand file tree
/
Copy pathMOD_READ_BINARY_ARRAYS.F90
More file actions
143 lines (124 loc) · 5.96 KB
/
MOD_READ_BINARY_ARRAYS.F90
File metadata and controls
143 lines (124 loc) · 5.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
!==========================================================
!
!------------------------------------------------------------------------------------------
! useful interface (read_bin_array) for reading arbitary binary arrays into an opened file
MODULE MOD_READ_BINARY_ARRAYS
use o_PARAM
private
public :: read_bin_array, read1d_int_static
INTERFACE read_bin_array
MODULE PROCEDURE read1d_real, read1d_int, read1d_char, read2d_real, read2d_int, read3d_real, read3d_int, read4d_real, read4d_int
END INTERFACE
contains
subroutine read1d_real(arr, unit, iostat, iomsg)
real(kind=WP), intent(inout), allocatable :: arr(:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1
read(unit, iostat=iostat, iomsg=iomsg) s1
if (s1==0) return
if (.not. allocated(arr)) allocate(arr(s1))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1)
end subroutine read1d_real
subroutine read1d_int(arr, unit, iostat, iomsg)
integer, intent(inout), allocatable :: arr(:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1
read(unit, iostat=iostat, iomsg=iomsg) s1
if (s1==0) return
if (.not. allocated(arr)) allocate(arr(s1))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1)
end subroutine read1d_int
subroutine read1d_char(arr, unit, iostat, iomsg)
character, intent(inout), allocatable :: arr(:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1
read(unit, iostat=iostat, iomsg=iomsg) s1
if (s1==0) return
if (.not. allocated(arr)) allocate(arr(s1))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1)
end subroutine read1d_char
subroutine read1d_int_static(arr, unit, iostat, iomsg)
IMPLICIT NONE
integer, intent(inout) :: arr(:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1
read(unit, iostat=iostat, iomsg=iomsg) s1
if (s1==0) return
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1)
end subroutine read1d_int_static
subroutine read2d_real(arr, unit, iostat, iomsg)
real(kind=WP), intent(inout), allocatable :: arr(:,:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1, s2
read(unit, iostat=iostat, iomsg=iomsg) s1, s2
if ((s1==0) .or. (s2==0)) return
if (.not. allocated(arr)) allocate(arr(s1, s2))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1, 1:s2)
end subroutine read2d_real
subroutine read2d_int(arr, unit, iostat, iomsg)
integer, intent(inout), allocatable :: arr(:,:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1, s2
read(unit, iostat=iostat, iomsg=iomsg) s1, s2
if ((s1==0) .or. (s2==0)) return
if (.not. allocated(arr)) allocate(arr(s1, s2))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1, 1:s2)
end subroutine read2d_int
subroutine read3d_real(arr, unit, iostat, iomsg)
real(kind=WP), intent(inout), allocatable :: arr(:,:,:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1, s2, s3
read(unit, iostat=iostat, iomsg=iomsg) s1, s2, s3
if ((s1==0) .or. (s2==0) .or. (s3==0)) return
if (.not. allocated(arr)) allocate(arr(s1,s2,s3))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1, 1:s2, 1:s3)
end subroutine read3d_real
subroutine read3d_int(arr, unit, iostat, iomsg)
integer, intent(inout), allocatable :: arr(:,:,:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1, s2, s3
read(unit, iostat=iostat, iomsg=iomsg) s1, s2, s3
if ((s1==0) .or. (s2==0) .or. (s3==0)) return
if (.not. allocated(arr)) allocate(arr(s1,s2,s3))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1, 1:s2, 1:s3)
end subroutine read3d_int
subroutine read4d_real(arr, unit, iostat, iomsg)
real(kind=WP), intent(inout), allocatable :: arr(:,:,:,:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1, s2, s3, s4
read(unit, iostat=iostat, iomsg=iomsg) s1, s2, s3, s4
if ((s1==0) .or. (s2==0) .or. (s3==0) .or. (s4==0)) return
if (.not. allocated(arr)) allocate(arr(s1,s2,s3,s4))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1, 1:s2, 1:s3, 1:s4)
end subroutine read4d_real
subroutine read4d_int(arr, unit, iostat, iomsg)
integer, intent(inout), allocatable :: arr(:,:,:,:)
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: s1, s2, s3, s4
read(unit, iostat=iostat, iomsg=iomsg) s1, s2, s3, s4
if ((s1==0) .or. (s2==0) .or. (s3==0) .or. (s4==0)) return
if (.not. allocated(arr)) allocate(arr(s1,s2,s3,s4))
read(unit, iostat=iostat, iomsg=iomsg) arr(1:s1, 1:s2, 1:s3, 1:s4)
end subroutine read4d_int
end module MOD_READ_BINARY_ARRAYS
!==========================================================