NASA Logo
Ocean Color Science Software

ocssw V2022
set_quality_data_module.f90
Go to the documentation of this file.
2 
3  implicit none
4 
5  contains
6 
7  subroutine set_quality_data(xsize, ysize)
8 
9  use core_arrays
11  use ch_xfr, only: c2_sensor_id, oci_id, ocis_id
12 
13  integer , intent(in) :: xsize, ysize
14 
15  integer :: i, j
16 
17  integer, parameter :: marginal = 1, good = 2, very_good = 3, no_confidence = 0
18 
19  integer*1, parameter :: no_cloud_mask = 0, no_cloud = 1, liquid = 2, &
20  ice = 3, unknown = 4, good_retrieval = 8
21 
22  do i = 1, xsize
23  do j = 1, ysize
24 
25  if (cloudsummary(i,j)%cloudmask_determined) then
26 
27  processing_information(i,j)%path_and_outcome = no_cloud
28  processing_information(i,j)%path_and_outcome_PCL = no_cloud
29  processing_information(i,j)%path_and_outcome_16 = no_cloud
30  processing_information(i,j)%path_and_outcome_16_PCL = no_cloud
31  processing_information(i,j)%path_and_outcome_37 = no_cloud
32  processing_information(i,j)%path_and_outcome_37_PCL = no_cloud
33  processing_information(i,j)%path_and_outcome_22 = no_cloud
34  processing_information(i,j)%path_and_outcome_22_PCL = no_cloud
35 
36  if(cloudsummary(i,j)%watercloud) then
37  processing_information(i,j)%path_and_outcome = liquid
38  processing_information(i,j)%path_and_outcome_PCL = liquid
39  processing_information(i,j)%path_and_outcome_16 = liquid
40  processing_information(i,j)%path_and_outcome_16_PCL = liquid
41  processing_information(i,j)%path_and_outcome_37 = liquid
42  processing_information(i,j)%path_and_outcome_37_PCL = liquid
43  processing_information(i,j)%path_and_outcome_22 = liquid
44  processing_information(i,j)%path_and_outcome_22_PCL = liquid
45  elseif(cloudsummary(i,j)%icecloud) then
46  processing_information(i,j)%path_and_outcome = ice
47  processing_information(i,j)%path_and_outcome_PCL = ice
48  processing_information(i,j)%path_and_outcome_16 = ice
49  processing_information(i,j)%path_and_outcome_16_PCL = ice
50  processing_information(i,j)%path_and_outcome_37 = ice
51  processing_information(i,j)%path_and_outcome_37_PCL = ice
52  processing_information(i,j)%path_and_outcome_22 = ice
53  processing_information(i,j)%path_and_outcome_22_PCL = ice
54  elseif(cloudsummary(i,j)%unknowncloud) then
55  processing_information(i,j)%path_and_outcome = unknown
56  processing_information(i,j)%path_and_outcome_PCL = unknown
57  processing_information(i,j)%path_and_outcome_16 = unknown
58  processing_information(i,j)%path_and_outcome_16_PCL = unknown
59  processing_information(i,j)%path_and_outcome_37 = unknown
60  processing_information(i,j)%path_and_outcome_37_PCL = unknown
61  processing_information(i,j)%path_and_outcome_22 = unknown
62  processing_information(i,j)%path_and_outcome_22_PCL = unknown
63  endif
64  else
65  processing_information(i,j)%path_and_outcome = no_cloud_mask
66  processing_information(i,j)%path_and_outcome_PCL = no_cloud_mask
67  processing_information(i,j)%path_and_outcome_16 = no_cloud_mask
68  processing_information(i,j)%path_and_outcome_16_PCL = no_cloud_mask
69  processing_information(i,j)%path_and_outcome_37 = no_cloud_mask
70  processing_information(i,j)%path_and_outcome_37_PCL = no_cloud_mask
71  processing_information(i,j)%path_and_outcome_22 = no_cloud_mask
72  processing_information(i,j)%path_and_outcome_22_PCL = no_cloud_mask
73 
74  endif
75 
76  if (cloudsummary(i,j)%cloudmask_determined .and. &
77  ( cloudsummary(i,j)%ocean_surface .or. &
78  cloudsummary(i,j)%snowice_surface) ) then
79 
80  processing_information(i,j)%path_and_outcome_1621 = no_cloud
81  processing_information(i,j)%path_and_outcome_1621_PCL = no_cloud
82 
83  if(cloudsummary(i,j)%watercloud) then
84  processing_information(i,j)%path_and_outcome_1621 = liquid
85  processing_information(i,j)%path_and_outcome_1621_PCL = liquid
86  elseif(cloudsummary(i,j)%icecloud) then
87  processing_information(i,j)%path_and_outcome_1621 = ice
88  processing_information(i,j)%path_and_outcome_1621_PCL = ice
89  elseif(cloudsummary(i,j)%unknowncloud) then
90  processing_information(i,j)%path_and_outcome_1621 = unknown
91  processing_information(i,j)%path_and_outcome_1621_PCL = unknown
92  endif
93 
94  else
95  processing_information(i,j)%path_and_outcome_1621 = no_cloud_mask
96  processing_information(i,j)%path_and_outcome_1621_PCL = no_cloud_mask
97  endif
98 
99 #ifdef VIIRS_INST
100  if (processing_information(i,j)%spectral_VNSWIR_21 == 0) &
101  processing_information(i,j)%path_and_outcome = no_cloud_mask
102 #endif
103 
104  ! confidence = 11, usefulness = 1
105  if (optical_thickness_final(i,j) > 0. .and. effective_radius_21_final(i,j) > 0.) then
106  processing_information(i,j)%optical_thickness_GC = 7
107  processing_information(i,j)%effective_radius_GC = 7
108  processing_information(i,j)%water_path_GC = 7
109 
110  processing_information(i,j)%path_and_outcome = &
111  processing_information(i,j)%path_and_outcome + good_retrieval
112 
113  else
114  processing_information(i,j)%optical_thickness_GC = 0
115  processing_information(i,j)%effective_radius_GC = 0
116  processing_information(i,j)%water_path_GC = 0
117  endif
118 
119  ! confidence = 11, usefulness = 1
120  if (optical_thickness_final_pcl(i,j) > 0. .and. effective_radius_21_final_pcl(i,j) > 0.) then
121  processing_information(i,j)%optical_thickness_GC = 7
122  processing_information(i,j)%effective_radius_GC = 7
123  processing_information(i,j)%water_path_GC = 7
124 
125  processing_information(i,j)%path_and_outcome_PCL = &
126  processing_information(i,j)%path_and_outcome_PCL + good_retrieval
127  endif
128 
129 
130  ! confidence = 11, usefulness = 1
131  if (optical_thickness_1621_final(i,j) > 0. .and. effective_radius_1621_final(i,j) > 0.) then
132  processing_information(i,j)%optical_thickness_1621_GC = 7
133  processing_information(i,j)%effective_radius_1621_GC = 7
134  processing_information(i,j)%water_path_1621_GC = 7
135 
136  processing_information(i,j)%path_and_outcome_1621 = &
137  processing_information(i,j)%path_and_outcome_1621 + good_retrieval
138  else
139  processing_information(i,j)%optical_thickness_1621_GC = 0
140  processing_information(i,j)%effective_radius_1621_GC = 0
141  processing_information(i,j)%water_path_1621_GC = 0
142  endif
143 
144  ! confidence = 11, usefulness = 1
145  if (optical_thickness_1621_final_pcl(i,j) > 0. .and. effective_radius_1621_final_pcl(i,j) > 0.) then
146  processing_information(i,j)%optical_thickness_1621_GC = 7
147  processing_information(i,j)%effective_radius_1621_GC = 7
148  processing_information(i,j)%water_path_1621_GC = 7
149 
150  processing_information(i,j)%path_and_outcome_1621_PCL = &
151  processing_information(i,j)%path_and_outcome_1621_PCL + good_retrieval
152  endif
153 
154  if (optical_thickness_16_final_pcl(i,j) > 0. .and. effective_radius_16_final_pcl(i,j) > 0.) &
155  processing_information(i,j)%path_and_outcome_16_PCL = &
156  processing_information(i,j)%path_and_outcome_16_PCL + good_retrieval
157  if (optical_thickness_16_final(i,j) > 0. .and. effective_radius_16_final(i,j) > 0.) &
158  processing_information(i,j)%path_and_outcome_16 = &
159  processing_information(i,j)%path_and_outcome_16 + good_retrieval
160 
161  if( ( c2_sensor_id == oci_id ) .or. ( c2_sensor_id == ocis_id ) ) then
162  if (optical_thickness_22_final_pcl(i,j) > 0. .and. &
163  effective_radius_22_final_pcl(i,j) > 0.) &
164  processing_information(i,j)%path_and_outcome_22_PCL = &
165  processing_information(i,j)%path_and_outcome_22_PCL + good_retrieval
166  if (optical_thickness_22_final(i,j) > 0. .and. &
167  effective_radius_22_final(i,j) > 0.) &
168  processing_information(i,j)%path_and_outcome_22 = &
169  processing_information(i,j)%path_and_outcome_22 + good_retrieval
170  else
171  if (optical_thickness_37_final_pcl(i,j) > 0. .and. &
172  effective_radius_37_final_pcl(i,j) > 0.) &
173  processing_information(i,j)%path_and_outcome_37_PCL = &
174  processing_information(i,j)%path_and_outcome_37_PCL + good_retrieval
175 
176  if (optical_thickness_37_final(i,j) > 0. .and. &
177  effective_radius_37_final(i,j) > 0.) &
178  processing_information(i,j)%path_and_outcome_37 = &
179  processing_information(i,j)%path_and_outcome_37 + good_retrieval
180  endif
181 
182 
183  if (processing_information(i,j)%optical_thickness_GC /= 0 .and. &
184  processing_information(i,j)%band_used_for_optical_thickness ==1 )then
185  processing_information(i,j)%rayleigh_correction = 1
186  else
187  processing_information(i,j)%rayleigh_correction = 0
188  endif
189 
190 
191 ! initialize the variable first of all. -- GW 4.6.05
192  processing_information(i,j)%multi_layer_cloud = 0
193 
194  if (cloudsummary(i,j)%cloudmask_determined) then
195 
196  if (processing_information(i,j)%path_and_outcome == 1)then ! dec.tree stop
197  processing_information(i,j)%multi_layer_cloud = 1
198 
199  elseif (processing_information(i,j)%path_and_outcome == 2 .or. &
200  processing_information(i,j)%path_and_outcome == 10 ) then ! water cloud
201  if (cloud_layer_flag(i,j) < 2 .or. ml_test_flag(i,j) == 16) then
202  processing_information(i,j)%multi_layer_cloud = 2 ! SL water
203  else
204  processing_information(i,j)%multi_layer_cloud = 3 ! ML water
205  endif
206 
207  elseif(processing_information(i,j)%path_and_outcome == 3 .or. &
208  processing_information(i,j)%path_and_outcome == 11 ) then !ice cloud
209  if (cloud_layer_flag(i,j) < 2 .or. ml_test_flag(i,j) == 16) then
210  processing_information(i,j)%multi_layer_cloud = 4 ! SL ice
211  else
212  processing_information(i,j)%multi_layer_cloud = 5 ! ML ice
213  endif
214 
215  elseif (processing_information(i,j)%path_and_outcome == 4 .or. &
216  processing_information(i,j)%path_and_outcome == 12 ) then ! unknown cloud
217  if (cloud_layer_flag(i,j) < 2 .or. ml_test_flag(i,j) == 16) then
218  processing_information(i,j)%multi_layer_cloud = 6 ! SL unknown
219  else
220  processing_information(i,j)%multi_layer_cloud = 7 ! ML unknown
221  endif
222  endif
223 
224  else
225  processing_information(i,j)%multi_layer_cloud = 0
226  endif
227 
228 ! set the information for CSR QA -- GW. 4.7.05
229  processing_information(i,j)%CSR_flag = 0
230  processing_information(i,j)%CSR_flag = csr_flag_array(i,j)
231 
232 ! set the information for the ML Test QA -- GW. 5.13.09
233  processing_information(i,j)%ml_test_mark = 0
234  processing_information(i,j)%ml_test_mark = ml_test_flag(i,j)
235 
236  enddo
237  enddo
238  end subroutine set_quality_data
239 
240  end module set_quality_data_module
Definition: ch_xfr.f90:1
integer *2, dimension(:,:), allocatable effective_radius_16_final_pcl
Definition: core_arrays.f90:54
integer *2, dimension(:,:), allocatable optical_thickness_22_final_pcl
Definition: core_arrays.f90:50
integer *2, dimension(:,:), allocatable effective_radius_1621_final_pcl
Definition: core_arrays.f90:58
integer(integer_onebyte), dimension(:,:), allocatable cloud_layer_flag
Definition: core_arrays.f90:92
integer ocis_id
Definition: ch_xfr.f90:51
subroutine set_quality_data(xsize, ysize)
real(single), dimension(:,:), allocatable optical_thickness_37_final
Definition: core_arrays.f90:41
integer *2, dimension(:,:), allocatable optical_thickness_37_final_pcl
Definition: core_arrays.f90:52
real(single), dimension(:,:), allocatable effective_radius_37_final
Definition: core_arrays.f90:46
integer *2, dimension(:,:), allocatable effective_radius_21_final_pcl
Definition: core_arrays.f90:55
type(processflag), dimension(:,:), allocatable cloudsummary
real(single), dimension(:), allocatable water_radii
integer *2, dimension(:,:), allocatable optical_thickness_16_final_pcl
Definition: core_arrays.f90:51
integer(integer_onebyte), dimension(:,:), allocatable csr_flag_array
Definition: core_arrays.f90:93
real(single), dimension(:,:), allocatable optical_thickness_final
Definition: core_arrays.f90:38
integer *2, dimension(:,:), allocatable optical_thickness_final_pcl
Definition: core_arrays.f90:49
real(single), dimension(:,:), allocatable optical_thickness_22_final
Definition: core_arrays.f90:39
real(single), dimension(:), allocatable ice_radii
integer *2, dimension(:,:), allocatable effective_radius_37_final_pcl
Definition: core_arrays.f90:57
integer *2, dimension(:,:), allocatable optical_thickness_1621_final_pcl
Definition: core_arrays.f90:53
integer c2_sensor_id
Definition: ch_xfr.f90:50
integer(integer_onebyte), dimension(:,:), allocatable ml_test_flag
Definition: core_arrays.f90:92
integer *2, dimension(:,:), allocatable effective_radius_22_final_pcl
Definition: core_arrays.f90:56
integer number_waterradii
real(single), dimension(:,:), allocatable optical_thickness_1621_final
Definition: core_arrays.f90:42
type(qualityanalysis), dimension(:,:), allocatable processing_information
integer number_iceradii
real(single), dimension(:,:), allocatable effective_radius_22_final
Definition: core_arrays.f90:45
integer oci_id
Definition: ch_xfr.f90:52
real(single), dimension(:,:), allocatable optical_thickness_16_final
Definition: core_arrays.f90:40
real(single), dimension(:,:), allocatable effective_radius_16_final
Definition: core_arrays.f90:43
real(single), dimension(:,:), allocatable effective_radius_1621_final
Definition: core_arrays.f90:47
real(single), dimension(:,:), allocatable effective_radius_21_final
Definition: core_arrays.f90:44