OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
atrem_cubeio.f90
Go to the documentation of this file.
1 module cubeio
2 
3  INTEGER, PARAMETER :: INT16 = selected_int_kind(4)
4 
5 contains
6 !***********************************************************************
7 !--- Subroutine to open an input imaging spectrometer data cube ---
8  SUBROUTINE openinfile(LUN_IN, I_RET)
9 
10  INTEGER, intent(in) :: LUN_IN
11  INTEGER, intent(out) :: I_RET
12  CHARACTER (LEN = 1000) :: FINAV
13  COMMON /incube/ finav
14 
15  OPEN(lun_in,file=finav,access='stream',status='old', &
16  & form='unformatted',action='read', iostat=ios)
17  i_ret = ios
18 
19  END SUBROUTINE openinfile
20 !---------------------------------------------------------------------
21 
22 !--- Subroutine to open an output reflectance data cube ---
23  SUBROUTINE openoutfile(LUN_OUT, I_RET)
24 
25  INTEGER, intent(in) :: LUN_OUT
26  INTEGER, intent(out) :: I_RET
27  CHARACTER (LEN = 1000) :: FOCUB
28  COMMON /outcube/ focub
29 
30  OPEN(lun_out,file=focub,access='stream', status='unknown', &
31  & form='unformatted',action='write', iostat=ios)
32  i_ret = ios
33 
34  END SUBROUTINE openoutfile
35 !---------------------------------------------------------------------
36 
37 !--- Subroutine to open an output water vapor image file ---
38  SUBROUTINE openvapfile(LUN_VAP, I_RET)
39 
40  INTEGER, intent(in) :: LUN_VAP
41  INTEGER, intent(out) :: I_RET
42  CHARACTER (LEN = 1000) :: FOH2O
43  COMMON /outh2ovap/ foh2o
44 
45  OPEN(lun_vap,file=foh2o,access='stream',status='unknown', &
46  & form='unformatted',action='write', iostat=ios)
47  i_ret = ios
48 
49  END SUBROUTINE openvapfile
50 !---------------------------------------------------------------------
51 
52 
53 !***********************************************************************
54 !--- Subroutine to read a slice of spatial & spectral data ----
55  SUBROUTINE rd_slice(LUN_IN,NSAMPS,NBANDS,SORDER,BUFFER)
56 
57  INTEGER, intent(in) :: LUN_IN,NSAMPS,NBANDS,SORDER
58  INTEGER(INT16), DIMENSION(NBANDS*NSAMPS), intent(out) :: BUFFER
59 
60  INTEGER(INT16), DIMENSION(NSAMPS,NBANDS) :: BUFFER_BIL
61  INTEGER(INT16), DIMENSION(NBANDS,NSAMPS) :: BUFFER_BIP
62 
63  READ(lun_in) buffer
64 
65  IF(sorder == 2) then
66  buffer_bil = reshape(buffer, (/ nsamps, nbands /) )
67  buffer_bip = transpose(buffer_bil)
68  buffer = reshape(buffer_bip, (/nbands*nsamps/))
69  END IF
70 
71  END SUBROUTINE rd_slice
72 !---------------------------------------------------------------------
73 
74 
75 !--- Subroutine to write a slice of spatial & spectral data ----
76  SUBROUTINE wt_slice(LUN_OUT,NSAMPS,NBANDS,SORDER,BUFFER)
77 
78  INTEGER, intent(in) :: LUN_OUT,NSAMPS,NBANDS,SORDER
79 
80  INTEGER(INT16), DIMENSION(NBANDS*NSAMPS), intent(inout) :: BUFFER
81 
82  INTEGER(INT16), DIMENSION(NBANDS,NSAMPS) :: BUFFER_BIP
83  INTEGER(INT16), DIMENSION(NSAMPS,NBANDS) :: BUFFER_BIL
84 
85  IF(sorder == 1) WRITE(lun_out) buffer
86 
87  IF(sorder == 2) then
88  buffer_bip = reshape(buffer, (/nbands,nsamps/))
89  buffer_bil = transpose(buffer_bip)
90  buffer = reshape(buffer_bil, (/nbands*nsamps/))
91  WRITE(lun_out) buffer
92  END IF
93 
94  END SUBROUTINE wt_slice
95 !---------------------------------------------------------------------
96 
97 
98 !--- Subroutine to write a 'line' of water vapor data ----
99  SUBROUTINE wt_line(LUN_VAP,NSAMPS,H2OBUF)
100 
101  INTEGER, intent(in) :: LUN_VAP,NSAMPS
102 
103  INTEGER(INT16), DIMENSION(NSAMPS), intent(inout) :: H2OBUF
104 
105  WRITE(lun_vap) h2obuf
106 
107  END SUBROUTINE wt_line
108 
109 !***********************************************************************
110 
111 
112 !--- Subroutine to close the input imaging spectrometer data cube ---
113  SUBROUTINE closeinfile(LUN_IN)
114  INTEGER :: LUN_IN
115  CLOSE(lun_in, status='keep')
116  END SUBROUTINE closeinfile
117 !---------------------------------------------------------------------
118 
119 
120 !--- Subroutine to close the output reflectance data cube ---
121  SUBROUTINE closeoutfile(LUN_OUT)
122  INTEGER :: LUN_OUT
123  CLOSE(lun_out, status='keep')
124  END SUBROUTINE closeoutfile
125 
126 
127 !--- Subroutine to close the output water vapor image file ---
128  SUBROUTINE closevapfile(LUN_VAP)
129  INTEGER :: LUN_VAP
130  CLOSE(lun_vap, status='keep')
131  END SUBROUTINE closevapfile
132 
133 !***********************************************************************
134 end module cubeio
subroutine closeoutfile(LUN_OUT)
Definition: cubeio.f90:122
subroutine wt_line(LUN_VAP, NSAMPS, H2OBUF)
Definition: cubeio.f90:100
subroutine openinfile(LUN_IN, I_RET)
Definition: cubeio.f90:9
subroutine rd_slice(LUN_IN, NSAMPS, NBANDS, SORDER, BUFFER)
Definition: cubeio.f90:56
subroutine wt_slice(LUN_OUT, NSAMPS, NBANDS, SORDER, BUFFER)
Definition: cubeio.f90:77
subroutine closevapfile(LUN_VAP)
Definition: cubeio.f90:129
subroutine closeinfile(LUN_IN)
Definition: cubeio.f90:114
subroutine openvapfile(LUN_VAP, I_RET)
Definition: cubeio.f90:39
Definition: cubeio.f90:1
subroutine openoutfile(LUN_OUT, I_RET)
Definition: cubeio.f90:24
void transpose(float *in[], float *out[])
Definition: get_zenaz.c:97