OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
corescience_module.f90
Go to the documentation of this file.
2 
3  implicit none
4  private
5 
6  public :: corescience
7 
8  contains
9 
10 
11 subroutine corescience(xpoint,ypoint,process,measurements, Tc_liquid, &
12  Tc_ice, debug, na_band_used, nearest_liq, nearest_ice, RSS_liq, RSS_ice, &
13  alt_ray_liq, alt_ray_ice, do_retrievals_liq, do_retrievals_ice, status)
14 
15 ! Arguments
16 ! xpoint IN pixel location in radiance chunk array
17 ! ypoint IN line location in radiance chunk array
18 ! process IN structure of pixel's cloud status, type processflag
19 ! measurements IN vector of top of cloud reflectances
20 ! Tc_liquid IN/OUT cloud temperature for liquid cloud gotten from
21 ! cloud_top_temperature (IN) and may be re-calculated (OUT) - only
22 ! used for 3.7 um band
23 ! Tc_ice IN/OUT cloud temperature for ice cloud - same in/out as above
24 ! - only for 3.7 um band
25 ! debug IN debugging switch USED?
26 ! na_band_used OUT non-absorbing band used, 650 (land), 860 (water), or
27 ! 1240 (snow)
28 ! nearest_liq OUT size 4 array of 1 - nearest used, 0 - not used
29 ! for use of absorbing band: 1 - 1.6 um, 2 - 2.1 um, 3 - 3.7 um,
30 ! 4 - 1.6 / 2.1 um bands
31 ! nearest_ice OUT size 4 array of 1 - nearest used, 0 - not used
32 ! RSS_liq IN?OUT size 4 array of some root sum square uncertainty for
33 ! each of the abs bands - liquid --OR-- a distance away from
34 ! the closest solution in the alternate solution subplot/logic
35 ! RSS_ice IN?OUT size 4 array of some root sum square uncertainty for
36 ! each of the abs bands - ice
37 ! --- WDR lets try understanding std algorithm before alternate one (ASL)
38 ! alt_ray_liq
39 ! alt_ray_ice
40 ! do_retrievals_liq
41 ! do_retrievals_ice
42 ! status
43 
44  use generalauxtype
45  use core_arrays
46  use libraryarrays
56 
57  use specific_other
58  ! WDR for output of the some diagnostics
59  use ch_xfr, only: prd_out_refl_loc_2100, &
64 
65  implicit none
66 
67  logical, intent(in) :: debug
68  type(processflag), intent(in) :: process
69  real, dimension(:), intent(in) :: measurements
70  logical, dimension(:), intent(in) :: do_retrievals_liq, do_retrievals_ice
71  real, intent(inout) :: tc_liquid, tc_ice, alt_ray_liq, alt_ray_ice
72  integer, intent(in) :: xpoint,ypoint
73  integer, intent(out) :: status
74  integer, intent(out) :: na_band_used
75 
76  integer, dimension(:), intent(inout) :: nearest_liq, nearest_ice
77  real, dimension(:), intent(inout) :: rss_liq, rss_ice
78 
79  type(cloudphase) :: local_process
80  integer :: nonabsorbingband_index, absorbingband_index, maxradii, &
81  lib_vnir_index
82  real :: thermal_trans_1way, thermal_trans_2way
83  real, allocatable :: optical_thickness_vector(:), residual(:)
84  real :: retrievalopticalthickness, retrievalopticalthickness16, &
85  retrievalopticalthickness37, retrievalopticalthickness1621,&
86  retrievalradius21, retrievalradius16, retrievalradius37, &
87  retrievalradius1621
88 
89  integer :: idx16, idx21, idx37, channel_37, idx11, i, idx_alb37, &
90  idx_alb16, quality_in
91  real :: curtc, newtc, ray_temp
92  logical :: prn, use_nearest
93  integer :: iii, idx1621(2)
94 
95  status = 0
96 
97  thermal_trans_1way = thermal_correction_oneway(1) ! only the 3.7um is used
98  thermal_trans_2way = thermal_correction_twoway(1) ! only the 3.7um is used
99 
100  ! local band naming - var names are mostly obvious, more || less
101  call get_band_idx(idx16, idx21, idx37, channel_37, idx11, idx_alb37, &
102  idx_alb16)
103 
104  nonabsorbingband_index = band_0065
105  processing_information(xpoint, ypoint)%band_used_for_optical_thickness = 0
106  !
107  ! set non-absorbing band based on the surface type
108  !
109  if (process%ocean_surface .or. process%coastal_surface) then!{
110  nonabsorbingband_index = band_0086
111  endif!}
112 
113  if (process%land_surface .or. process%desert_surface) then!{
114  nonabsorbingband_index = band_0065
115  endif!}
116  if (process%snowice_surface) then!{
117  ! 1.2 um
118  nonabsorbingband_index = band_0124
119  endif!}
120 
121  if (platform_name == "AVIRIS") then
122  if (nonabsorbingband_index == 4) &
123  processing_information(xpoint, ypoint)%band_used_for_optical_thickness = 3
124  if (nonabsorbingband_index == 3) &
125  processing_information(xpoint, ypoint)%band_used_for_optical_thickness = 2
126  if (nonabsorbingband_index == 1) &
127  processing_information(xpoint, ypoint)%band_used_for_optical_thickness = 1
128  else
129  if (nonabsorbingband_index > 3) then
130  processing_information(xpoint, ypoint)%band_used_for_optical_thickness &
131  = nonabsorbingband_index-1
132  else
133  processing_information(xpoint, ypoint)%band_used_for_optical_thickness &
134  = nonabsorbingband_index
135  endif
136  endif
137 
138  na_band_used = nonabsorbingband_index
139 
140  local_process%watercloud = 0
141  local_process%icecloud = 0
142 
143  ! initialize all retrievals to fillvalue
144  retrievalopticalthickness = fillvalue_real
145  retrievalopticalthickness1621 = fillvalue_real
146  retrievalopticalthickness16 = fillvalue_real
147  retrievalopticalthickness37 = fillvalue_real
148  retrievalradius16 = fillvalue_real
149  retrievalradius21 = fillvalue_real
150  retrievalradius1621 = fillvalue_real
151  retrievalradius37 = fillvalue_real
152 
153  nearest_liq = 0
154  nearest_ice = 0
155 
156  local_process%watercloud = 1
157 
158  ! set surface QA
159 
160  ! if the measured surface reflectance in the non absorbing bands is
161  ! greater than the surface albedo , and we have a cloudy pixel then
162  ! we can try a retrieval
163 
164  if (process%cloudobserved ) then!{
165 
166  ! check for .86um saturation
167  ! if the .86um saturates (wisconsin reader sets band_meas to neg.
168  ! if saturation) or there can be bad noisy neg. reflectance on low end,
169  ! try the other .65um band (and change the QA flag)
170  if (nonabsorbingband_index == band_0086 .and. &
171  measurements(nonabsorbingband_index) < 0.) then!{
172  if (measurements(band_0065) > 0.) nonabsorbingband_index = band_0065
173  na_band_used = nonabsorbingband_index
174  processing_information(xpoint, ypoint)%band_used_for_optical_thickness &
175  = nonabsorbingband_index
176  endif!}
177 
178  nonabsorbingband_index = na_band_used
179 
180  ! WDR save the used reflectance - we still need the table ranges found
181  prd_out_refl_loc_2100(xpoint,ypoint,refl_nabs) = &
182  measurements(nonabsorbingband_index)
183  prd_out_refl_loc_1600(xpoint,ypoint,refl_nabs) = &
184  measurements(nonabsorbingband_index)
185  prd_out_refl_loc_1621(xpoint,ypoint,refl_nabs) = &
186  measurements(band_0163)
187 !
188  prd_out_refl_loc_2100(xpoint,ypoint,refl_abs) = &
189  measurements(band_0213)
190  prd_out_refl_loc_1600(xpoint,ypoint,refl_abs) = &
191  measurements(band_0163)
192  prd_out_refl_loc_1621(xpoint,ypoint,refl_abs) = &
193  measurements(band_0213)
194 
195  ! this is for rotten snow albedoes
196  if (albedo_real4( nonabsorbingband_index) < 0. .or. &
197  albedo_real4( band_0163) < 0. .or. &
198  albedo_real4( band_0213) < 0.) return
199 
200  ! if the shortwave saturates, try the other shortwave band
201  allocate(optical_thickness_vector(number_waterradii))
202  allocate(residual(number_waterradii))
203 
204  allocate(refliba(number_taus+1, number_waterradii), &
206  refliba = 0 ! WDR-UIV
207  reflibb = 0 ! WDR-UIV
209 
210  rad37lib = -999.0
211 
212  lib_vnir_index = nonabsorbingband_index
213  !
214  ! For water clouds, for the non-absorbing reflectance, find the
215  ! tau (optical thickness) values in the table for every eff. radius
216  !
217  call vis_nonabsorbing_science(measurements(nonabsorbingband_index), &
218  lib_vnir_index, albedo_real4(nonabsorbingband_index), &
221  int_reflectance_water, sensor_zenith_angle(xpoint,ypoint), &
222  solar_zenith_angle(xpoint,ypoint), &
223  relative_azimuth_angle(xpoint,ypoint), &
224  cloud_top_pressure(xpoint,ypoint), local_process, &
225  optical_thickness_vector)
226 
227  ! an option to knock out the SWIR channels completely so that we only
228  ! do optical thickness retrieval assuming an effective radius
229  ! This appears to handle the other COT band values too
230 #if NOSWIR
231  ! Retrieval using assumed effective radius
232  retrievalradius16 = 14.0
233  call solve_retrieval_noswir(optical_thickness_vector, water_radii, &
234  retrievalradius16, retrievalopticalthickness16)
235 
236  retrievalopticalthickness = retrievalopticalthickness16
237  retrievalradius21 = retrievalradius16
238 
239  ! Retrieval using assumed effective radius, minus 1-sigma CER
240  retrievalradius16 = 6.0
241  call solve_retrieval_noswir(optical_thickness_vector, water_radii, &
242  retrievalradius16, retrievalopticalthickness16)
243 
244  optical_thickness_37_final(xpoint,ypoint) = &
245  abs(retrievalopticalthickness-retrievalopticalthickness16)
246 
247  ! Retrieval using assumed effective radius, plus 1-sigma CER
248  retrievalradius16 = 22.0
249  call solve_retrieval_noswir(optical_thickness_vector, water_radii, &
250  retrievalradius16, retrievalopticalthickness16)
251 
252  optical_thickness_37_final(xpoint,ypoint) = &
253  optical_thickness_37_final(xpoint,ypoint) + &
254  abs(retrievalopticalthickness-retrievalopticalthickness16)
255 
256  ! Calculate mean COT error due to unknown CER
257  optical_thickness_37_final(xpoint,ypoint) = &
258  optical_thickness_37_final(xpoint,ypoint) / 2.0
259 
260  retrievalopticalthickness1621 = fillvalue_real
261  retrievalradius1621 = fillvalue_real
262 
263 #else
264  ! below is with SWIR
265  !
266  ! For 1.6 um, continue and find the re, tau using the absorbing
267  ! band reflectance for water clouds
268  !
269  if (do_retrievals_liq(1)) then
270  absorbingband_index = band_0163 ! 1.6um band
271  if(measurements(absorbingband_index) > 0. ) then!{
272 
273  call vis_absorbing_science(optical_thickness_vector, &
274  measurements(absorbingband_index), idx16, &
275  albedo_real4(idx_alb16), library_taus, water_radii, &
278  residual,maxradii, debug)
279 
280  if (maxradii > 2) then!{
281  call solveretrieval(residual(1:maxradii), &
282  optical_thickness_vector(1:maxradii), &
283  water_radii(1:maxradii), retrievalradius16, &
284  retrievalopticalthickness16, debug, use_nearest, quality_in)
285  if (use_nearest) then
286  nearest_liq(1) = 1
287  call solveretrieval_nearest(xpoint,ypoint, &
288  measurements(nonabsorbingband_index), &
289  measurements(absorbingband_index), &
290  (/nonabsorbingband_index, absorbingband_index/), &
291  water_radii, retrievalopticalthickness16, &
292  retrievalradius16, rss_liq(re16), &
293  .true., ray_temp, quality_in )
294  endif
295 
296  else!}{
297  retrievalradius16 = fillvalue_real
298  retrievalopticalthickness16 = fillvalue_real
299  endif!}
300 
301  else!}{
302  retrievalradius16 = fillvalue_real
303  retrievalopticalthickness16 = fillvalue_real
304  endif!}
305  else
306  retrievalradius16 = fillvalue_real
307  retrievalopticalthickness16 = fillvalue_real
308  endif
309  !
310  ! WDR get the table range
311  prd_out_refl_loc_1600(xpoint,ypoint,tbl_lo_nabs) = minval(refliba)
312  prd_out_refl_loc_1600(xpoint,ypoint,tbl_hi_nabs) = maxval(refliba)
313  prd_out_refl_loc_1600(xpoint,ypoint,tbl_lo_abs) = minval(reflibb)
314  prd_out_refl_loc_1600(xpoint,ypoint,tbl_hi_abs) = maxval(reflibb)
315  !
316  ! For 2.1 um, continue and find the re, tau using the absorbing
317  ! band reflectance for water clouds
318  !
319 
320  if (do_retrievals_liq(2) ) then
321  absorbingband_index = band_0213 ! 2.1um
322 
323  call vis_absorbing_science(optical_thickness_vector, &
324  measurements(absorbingband_index), idx21, &
325  albedo_real4(absorbingband_index), library_taus, water_radii, &
328  residual, maxradii, debug)
329 
330  if (maxradii > 2) then!{
331  call solveretrieval(residual(1:maxradii), &
332  optical_thickness_vector(1:maxradii), water_radii(1:maxradii), &
333  retrievalradius21, retrievalopticalthickness, &
334  debug, use_nearest, quality_in)
335 
336  if (use_nearest) then
337  nearest_liq(2) = 1
338  call solveretrieval_nearest(xpoint,ypoint, &
339  measurements(nonabsorbingband_index), &
340  measurements(absorbingband_index), &
341  (/nonabsorbingband_index, absorbingband_index/), &
342  water_radii, retrievalopticalthickness, retrievalradius21, &
343  rss_liq(re21), .true., alt_ray_liq, quality_in)
344  endif
345 
346  else!}{
347  retrievalradius21 = fillvalue_real
348  retrievalopticalthickness = fillvalue_real
349  endif!}
350  else
351  retrievalradius21 = fillvalue_real
352  retrievalopticalthickness = fillvalue_real
353  endif
354  !
355  ! WDR get the table range
356  prd_out_refl_loc_2100(xpoint,ypoint,tbl_lo_nabs) = minval(refliba)
357  prd_out_refl_loc_2100(xpoint,ypoint,tbl_hi_nabs) = maxval(refliba)
358  prd_out_refl_loc_2100(xpoint,ypoint,tbl_lo_abs) = minval(reflibb)
359  prd_out_refl_loc_2100(xpoint,ypoint,tbl_hi_abs) = maxval(reflibb)
360  !
361 
362 #endif
363  !
364  ! For 3.7 um, continue and find the re, tau using the absorbing
365  ! band reflectance for water clouds
366  !
367  if (do_retrievals_liq(3)) then
368  absorbingband_index = band_0370 ! 3.7um
369 
370  ! sep, 4 May: absorbingband_index - 1 being passed in for all libarary
371  ! indices because
372  ! band_0370 = 7 and library index corresponding to this band
373  ! is 6. In the libraries, band_0935 is index 7.
374  ! wind, 7 Dec: absorbingband_index - 1 has to be passed
375  !in for albedo as well.
376 
377  call nir_absorbing_science(platform_name, optical_thickness_vector, &
378  measurements(absorbingband_index), idx37, albedo_real4( idx_alb37), &
379  xpoint, ypoint, cloud_top_temperature(xpoint, ypoint), &
380  thermal_trans_1way, thermal_trans_2way, library_taus, &
384  int_surface_emissivity_water, residual, maxradii, channel_37, &
386  sigma_r37_pw_liq,debug)
387 
388  if ( maxradii > 2 ) then!{
389  call solveretrieval(residual(1:maxradii), &
390  optical_thickness_vector(1:maxradii), &
391  water_radii(1:maxradii), retrievalradius37, &
392  retrievalopticalthickness37, debug, use_nearest, quality_in)
393 
394  if (use_nearest) then
395  nearest_liq(3) = 1
396  call solveretrieval_nearest(xpoint,ypoint, &
397  measurements(nonabsorbingband_index), &
398  measurements(absorbingband_index), &
399  (/nonabsorbingband_index, absorbingband_index/), &
400  water_radii, retrievalopticalthickness37, retrievalradius37, &
401  rss_liq(re37), .true., ray_temp, quality_in, &
402  ch37_idx = idx37, ctopt = cloud_top_temperature(xpoint, ypoint), &
403  ch37_num =channel_37 , platformname= platform_name)
404  endif
405 
406  else!}{
407  retrievalradius37 = fillvalue_real
408  retrievalopticalthickness37 = fillvalue_real
409  endif!}
410  !
411  ! now we iterate the retrieval. I believe the emission in 3.7 is
412  ! enough to require this iteration
413  !
414 #if !AMS_INST
415 
416  ! if the cloud too thick, don't bother, the iteration will not
417  ! accomplish absolutely anything
418  if ( retrievalopticalthickness37 > 0. &
419  .and. retrievalradius37 > 0. .and. &
420  irw_temperature(xpoint, ypoint) > 0. .and. nearest_liq(3) == 0 ) then
421 
422  ! if the cloud is too thick, then don't bother doing anything, but
423  ! still set the temperature
424  if (retrievalopticalthickness37 >= 10.) then
425  tc_liquid = cloud_top_temperature(xpoint, ypoint)
426  else
427  curtc = irw_temperature(xpoint, ypoint)
428 
429  do i=1, 5
430  if (retrievalopticalthickness37 < 0. .or. &
431  retrievalradius37 < 0. ) then
432  retrievalradius37 = fillvalue_real
433  retrievalopticalthickness37 = fillvalue_real
434  tc_liquid = curtc
435  exit
436  endif
437 
439  irw_temperature(xpoint, ypoint), &
440  surface_temperature(xpoint, ypoint), &
441  1.- surface_emissivity_land(xpoint, ypoint, 2), idx11, &
442  retrievalopticalthickness37, retrievalradius37, library_taus, &
445  int_surface_emissivity_water, newtc, .false.)
446 
447  if (newtc < 0.) then
448  tc_liquid = curtc
449  exit
450  endif
451 
453  optical_thickness_vector, &
454  measurements(absorbingband_index), idx37, &
455  albedo_real4( idx_alb37), &
456  xpoint, ypoint, newtc, thermal_trans_1way, thermal_trans_2way, &
461  residual, maxradii, channel_37, emission_uncertainty_pw_liq, &
463 
464  if ( maxradii > 2 ) then!{
465  call solveretrieval(residual(1:maxradii), &
466  optical_thickness_vector(1:maxradii), water_radii(1:maxradii), &
467  retrievalradius37, retrievalopticalthickness37, &
468  debug, use_nearest, quality_in)
469  if (use_nearest) then
470  nearest_liq(3) = 1
471  call solveretrieval_nearest(xpoint,ypoint, &
472  measurements(nonabsorbingband_index), &
473  measurements(absorbingband_index), &
474  (/nonabsorbingband_index, absorbingband_index/), &
475  water_radii, retrievalopticalthickness37, retrievalradius37, &
476  rss_liq(re37), .true., ray_temp, quality_in, &
477  ch37_idx = idx37, &
478  ctopt = cloud_top_temperature(xpoint, ypoint), &
479  ch37_num =channel_37 , platformname= platform_name)
480 
481  endif
482  else!}{
483  retrievalradius37 = fillvalue_real
484  retrievalopticalthickness37 = fillvalue_real
485  exit
486  endif!}
487 
488  if ( abs(curtc - newtc) < 0.01 .or. retrievalradius37 < 0.) then
489  tc_liquid = newtc
490  exit
491  endif
492 
493  curtc = newtc
494  end do
495  endif
496 
497  endif
498 #endif
499  else
500  retrievalradius37 = fillvalue_real
501  retrievalopticalthickness37 = fillvalue_real
502  endif
503 
504 #if NOSWIR
505  retrievalradius1621 = fillvalue_real
506  retrievalopticalthickness1621 = fillvalue_real
507 #else
508  !
509  ! For 1.6 and 2.1 um, continue and find the re, tau using the absorbing
510  ! band reflectance for water clouds
511  !
512  if (do_retrievals_liq(4)) then
513  retrievalradius1621 = fillvalue_real
514  retrievalopticalthickness1621 = fillvalue_real
515 
516  if( (process%ocean_surface .or. process%snowice_surface) .and. &
517  measurements(band_0163) > 0. ) then!{
518  nonabsorbingband_index = band_0163
519  absorbingband_index = band_0213
520 
521  ! get the COT for all radii that gives the non-abs refl at this point
522  call vis_nonabsorbing_science(measurements(nonabsorbingband_index), &
523  idx16, albedo_real4(nonabsorbingband_index), library_taus, &
526  sensor_zenith_angle(xpoint,ypoint), &
527  solar_zenith_angle(xpoint,ypoint), &
528  relative_azimuth_angle(xpoint,ypoint), &
529  cloud_top_pressure(xpoint,ypoint), local_process, &
530  optical_thickness_vector)
531 
532  call vis_absorbing_science(optical_thickness_vector, &
533  measurements(absorbingband_index), idx21, &
534  albedo_real4(absorbingband_index), library_taus, water_radii, &
537  residual,maxradii, debug)
538  if (maxradii > 2) then!{
539  call solveretrieval(residual(1:maxradii), &
540  optical_thickness_vector(1:maxradii), water_radii(1:maxradii), &
541  retrievalradius1621, retrievalopticalthickness1621, debug, &
542  use_nearest, quality_in)
543  if (use_nearest) then
544  nearest_liq(4) = 1
545 
546  call solveretrieval_nearest(xpoint,ypoint, &
547  measurements(nonabsorbingband_index), &
548  measurements(absorbingband_index), &
549  (/nonabsorbingband_index, absorbingband_index/), &
550  water_radii, retrievalopticalthickness1621, &
551  retrievalradius1621, rss_liq(re1621), &
552  .true., ray_temp, quality_in)
553  endif
554  endif!}
555 
556  endif!}
557  else
558  retrievalradius1621 = fillvalue_real
559  retrievalopticalthickness1621 = fillvalue_real
560  endif
561  !
562  ! WDR get the table range
563  prd_out_refl_loc_1621(xpoint,ypoint,tbl_lo_nabs) = minval(refliba)
564  prd_out_refl_loc_1621(xpoint,ypoint,tbl_hi_nabs) = maxval(refliba)
565  prd_out_refl_loc_1621(xpoint,ypoint,tbl_lo_abs) = minval(reflibb)
566  prd_out_refl_loc_1621(xpoint,ypoint,tbl_hi_abs) = maxval(reflibb)
567  !
568 #endif
569  !
570  ! End setting of water path for water phase clouds
571  ! Repeat entire process for ice clouds
572  !
573  deallocate(rad37lib)
574 
575  deallocate(optical_thickness_vector, residual, refliba, reflibb)
576 
577  optical_thickness_liquid = retrievalopticalthickness
578  optical_thickness_1621_liquid = retrievalopticalthickness1621
579  optical_thickness_16_liquid = retrievalopticalthickness16
580  optical_thickness_37_liquid = retrievalopticalthickness37
581  effective_radius_16_liquid = retrievalradius16
582  effective_radius_21_liquid = retrievalradius21
583  effective_radius_1621_liquid = retrievalradius1621
584  effective_radius_37_liquid = retrievalradius37
585 
586  ! This was commented out in initiall chimaera code
587  ! if (nearest_liq(1) == 1) effective_radius_16_liquid(xpoint, ypoint) = &
588  ! fillvalue_real
589  ! if (nearest_liq(2) == 1) then
590  ! effective_radius_21_liquid(xpoint, ypoint) = fillvalue_real
591  ! optical_thickness_liquid(xpoint, ypoint) = fillvalue_real
592  ! endif
593  ! if (nearest_liq(3) == 1) effective_radius_37_liquid(xpoint, ypoint) = &
594  ! fillvalue_real
595  ! if (nearest_liq(4) == 1) then
596  ! effective_radius_1621_liquid(xpoint, ypoint) = fillvalue_real
597  ! optical_thickness_1621_liquid(xpoint, ypoint) = fillvalue_real
598  ! endif
599  !
600  !
601  ! now reset everything so the ice cloud can be processed
602  !
603  local_process%watercloud = 0
604  local_process%icecloud = 1
605 
606  nonabsorbingband_index = na_band_used
607  absorbingband_index = band_0163
608 
609  allocate(optical_thickness_vector(number_iceradii))
610  allocate(residual(number_iceradii))
611  allocate(refliba(number_taus+1, number_iceradii), &
613  allocate(rad37lib(number_taus+1, number_iceradii))
614 
615  rad37lib = -999.0
616 
617  ! initialize all retrievals to fillvalue
618  retrievalopticalthickness = fillvalue_real
619  retrievalopticalthickness1621 = fillvalue_real
620  retrievalopticalthickness16 = fillvalue_real
621  retrievalopticalthickness37 = fillvalue_real
622  retrievalradius16 = fillvalue_real
623  retrievalradius21 = fillvalue_real
624  retrievalradius1621 = fillvalue_real
625  retrievalradius37 = fillvalue_real
626 
627  lib_vnir_index = nonabsorbingband_index
628  !
629  ! For ice clouds, find the tau (optical thickness) values in the
630  ! table for the non-absorbing reflectance
631  !
632  call vis_nonabsorbing_science(measurements(nonabsorbingband_index), &
633  lib_vnir_index, albedo_real4(nonabsorbingband_index), &
636  sensor_zenith_angle(xpoint,ypoint), &
637  solar_zenith_angle(xpoint,ypoint), &
638  relative_azimuth_angle(xpoint,ypoint), &
639  cloud_top_pressure(xpoint,ypoint), &
640  local_process, optical_thickness_vector)
641 
642  ! code for work without SWIR bands
643 #if NOSWIR
644  ! Retrieval using assumed effective radius
645  retrievalradius16 = 30.0
646  call solve_retrieval_noswir(optical_thickness_vector, ice_radii, &
647  retrievalradius16, retrievalopticalthickness16)
648 
649  retrievalopticalthickness = retrievalopticalthickness16
650  retrievalradius21 = retrievalradius16
651 
652  ! Retrieval using assumed effective radius, minus 1-sigma CER
653  retrievalradius16 = 13.0
654  call solve_retrieval_noswir(optical_thickness_vector, ice_radii, &
655  retrievalradius16, retrievalopticalthickness16)
656 
657  optical_thickness_1621_final(xpoint,ypoint) = &
658  abs(retrievalopticalthickness-retrievalopticalthickness16)
659 
660  ! Retrieval using assumed effective radius, plus 1-sigma CER
661  retrievalradius16 = 37.0
662  call solve_retrieval_noswir(optical_thickness_vector, ice_radii, &
663  retrievalradius16, retrievalopticalthickness16)
664 
665  optical_thickness_1621_final(xpoint,ypoint) = &
666  optical_thickness_1621_final(xpoint,ypoint) + &
667  abs(retrievalopticalthickness-retrievalopticalthickness16)
668 
669  ! Calculate mean COT error due to unknown CER
670  optical_thickness_1621_final(xpoint,ypoint) = &
671  optical_thickness_1621_final(xpoint,ypoint) / 2.0
672 
673  retrievalopticalthickness1621 = fillvalue_real
674  retrievalradius1621 = fillvalue_real
675 #else
676  !
677  ! For 1.6 um, continue and find the re, tau using the absorbing
678  ! band reflectance for ice clouds
679  !
680  if (do_retrievals_ice(1)) then
681  if (measurements(absorbingband_index) > 0.) then!{
682  call vis_absorbing_science(optical_thickness_vector, &
683  measurements(absorbingband_index), idx16, albedo_real4(idx_alb16), &
686  int_reflectance_ice, residual,maxradii, debug)
687  if ( maxradii > 2) then!{
688  call solveretrieval(residual(1:maxradii), &
689  optical_thickness_vector(1:maxradii), &
690  ice_radii(1:maxradii), retrievalradius16, &
691  retrievalopticalthickness16, debug, use_nearest, quality_in)
692  if (use_nearest) then
693  nearest_ice(1) = 1
694 
695  call solveretrieval_nearest(xpoint,ypoint, &
696  measurements(nonabsorbingband_index), &
697  measurements(absorbingband_index), &
698  (/nonabsorbingband_index, absorbingband_index/), &
699  ice_radii, retrievalopticalthickness16, retrievalradius16, &
700  rss_ice(re16), .false., ray_temp, quality_in)
701  endif
702  else!}{
703  retrievalradius16 = fillvalue_real
704  retrievalopticalthickness16 = fillvalue_real
705  endif!}
706 
707  else!}{
708  retrievalradius16 = fillvalue_real
709  retrievalopticalthickness16 = fillvalue_real
710  endif!}
711  else
712  retrievalradius16 = fillvalue_real
713  retrievalopticalthickness16 = fillvalue_real
714  endif
715  !
716  ! WDR get the table range
717  prd_out_refl_loc_1600(xpoint,ypoint,tbl_lo_nabs_ice) = minval(refliba)
718  prd_out_refl_loc_1600(xpoint,ypoint,tbl_hi_nabs_ice) = maxval(refliba)
719  prd_out_refl_loc_1600(xpoint,ypoint,tbl_lo_abs_ice) = minval(reflibb)
720  prd_out_refl_loc_1600(xpoint,ypoint,tbl_hi_abs_ice) = maxval(reflibb)
721  !
722  !
723  ! For 2.1 um, continue and find the re, tau using the absorbing
724  ! band reflectance
725  !
726  if (do_retrievals_ice(2)) then
727  absorbingband_index = band_0213
728  call vis_absorbing_science(optical_thickness_vector, &
729  measurements(absorbingband_index), idx21, &
730  albedo_real4(absorbingband_index), library_taus, ice_radii, &
732  int_reflectance_ice, residual,maxradii, debug)
733 
734  if ( maxradii > 2) then!{
735  call solveretrieval(residual(1:maxradii), &
736  optical_thickness_vector(1:maxradii), ice_radii(1:maxradii), &
737  retrievalradius21, retrievalopticalthickness, &
738  debug, use_nearest, quality_in)
739 
740  if (use_nearest) then
741  nearest_ice(2) = 1
742  call solveretrieval_nearest(xpoint,ypoint, &
743  measurements(nonabsorbingband_index), &
744  measurements(absorbingband_index), &
745  (/nonabsorbingband_index, absorbingband_index/), ice_radii, &
746  retrievalopticalthickness, retrievalradius21, rss_ice(re21), &
747  .false., alt_ray_ice, quality_in)
748  endif
749  else!}{
750  retrievalradius21 = fillvalue_real
751  retrievalopticalthickness = fillvalue_real
752  endif!}
753  else
754  retrievalradius21 = fillvalue_real
755  retrievalopticalthickness = fillvalue_real
756  endif
757  !
758  ! WDR get the table range
759  prd_out_refl_loc_2100(xpoint,ypoint,tbl_lo_nabs_ice) = minval(refliba)
760  prd_out_refl_loc_2100(xpoint,ypoint,tbl_hi_nabs_ice) = maxval(refliba)
761  prd_out_refl_loc_2100(xpoint,ypoint,tbl_lo_abs_ice) = minval(reflibb)
762  prd_out_refl_loc_2100(xpoint,ypoint,tbl_hi_abs_ice) = maxval(reflibb)
763  !
764 #endif
765  !
766  ! For 3.7 um, continue and find the re, tau using the absorbing
767  ! band reflectance for ice clouds
768  !
769  if (do_retrievals_ice(3)) then
770  absorbingband_index = band_0370
771 
772  ! sep, 4 May: absorbingband_index - 1 being passed in for all
773  ! libarary indices because
774  ! band_0370 = 7 and library index corresponding to this band
775  ! is 6. In the
776  ! libraries, band_0935 is index 7.
777  !
778  ! wind, 7 Dec: absorbingband_index - 1 has to be passed in for
779  ! albedo as well.
780  !
781  call nir_absorbing_science(platform_name, optical_thickness_vector, &
782  measurements(absorbingband_index), idx37, albedo_real4( idx_alb37), &
783  xpoint, ypoint, cloud_top_temperature(xpoint, ypoint), &
784  thermal_trans_1way, thermal_trans_2way, library_taus, &
788  residual, maxradii, channel_37, emission_uncertainty_pw_ice, &
790 
791  if ( maxradii > 2 ) then!{
792  call solveretrieval(residual(1:maxradii), &
793  optical_thickness_vector(1:maxradii), ice_radii(1:maxradii), &
794  retrievalradius37, retrievalopticalthickness37, debug, use_nearest, &
795  quality_in)
796  if (use_nearest) then
797  nearest_ice(3) = 1
798 
799  call solveretrieval_nearest(xpoint,ypoint, &
800  measurements(nonabsorbingband_index), &
801  measurements(absorbingband_index), &
802  (/nonabsorbingband_index, absorbingband_index/), &
803  ice_radii, retrievalopticalthickness37, &
804  retrievalradius37, rss_ice(re37), .false., ray_temp, quality_in, &
805  ch37_idx = idx37, ctopt = cloud_top_temperature(xpoint, ypoint), &
806  ch37_num =channel_37 , platformname= platform_name)
807  endif
808 
809  else!}{
810  retrievalradius37 = fillvalue_real
811  retrievalopticalthickness37 = fillvalue_real
812  endif!}
813 
814  ! now we iterate the retrieval. I believe the emission in 3.7 is
815  ! enough to require this iteration
816 #if !AMS_INST
817  if ( retrievalopticalthickness37 > 0. &
818  .and. retrievalradius37 > 0. .and. &
819  irw_temperature(xpoint, ypoint) > 0. .and. nearest_ice(3) == 0 ) then
820 
821  ! if the cloud is too thick, then don't bother doing anything,
822  ! 1 but still set the temperature
823  if (retrievalopticalthickness37 > 10.) then
824  tc_ice = cloud_top_temperature(xpoint, ypoint)
825  else
826  curtc = irw_temperature(xpoint, ypoint)
827 
828  do i=1, 5
829 
830  if (retrievalopticalthickness37 < 0. .or. &
831  retrievalradius37 < 0. ) then
832  retrievalradius37 = fillvalue_real
833  retrievalopticalthickness37 = fillvalue_real
834  tc_ice = curtc
835  exit
836  endif
837 
839  irw_temperature(xpoint, ypoint), &
840  surface_temperature(xpoint, ypoint), &
841  1.- surface_emissivity_land(xpoint, ypoint, 2), &
842  idx11, retrievalopticalthickness37, retrievalradius37, &
846  newtc, .false.)
847 
848  if (newtc < 0.) then
849  tc_ice = curtc
850  exit
851  endif
852 
854  optical_thickness_vector, measurements(absorbingband_index), &
855  idx37, albedo_real4( idx_alb37), xpoint, ypoint, &
856  newtc, thermal_trans_1way, thermal_trans_2way, &
861  residual, maxradii, channel_37, emission_uncertainty_pw_ice, &
863 
864  if ( maxradii > 2 ) then!{
865  call solveretrieval(residual(1:maxradii), &
866  optical_thickness_vector(1:maxradii), &
867  ice_radii(1:maxradii), retrievalradius37, &
868  retrievalopticalthickness37, &
869  debug, use_nearest, quality_in)
870  if (use_nearest) then
871  nearest_ice(3) = 1
872 
873  call solveretrieval_nearest(xpoint,ypoint, &
874  measurements(nonabsorbingband_index), &
875  measurements(absorbingband_index), &
876  (/nonabsorbingband_index, absorbingband_index/), &
877  ice_radii, retrievalopticalthickness37, retrievalradius37, &
878  rss_ice(re37), .false., ray_temp, quality_in, &
879  ch37_idx = idx37, &
880  ctopt = cloud_top_temperature(xpoint, ypoint), &
881  ch37_num =channel_37 , platformname= platform_name)
882  endif
883 
884  else!}{
885  retrievalradius37 = fillvalue_real
886  retrievalopticalthickness37 = fillvalue_real
887  endif!}
888 
889  if ( abs(curtc - newtc) < 0.01 .or. retrievalradius37 < 0.) then
890  tc_ice = newtc
891  exit
892  endif
893  curtc = newtc
894  end do
895 
896  endif
897  endif
898 #endif
899 
900  else
901  retrievalradius37 = fillvalue_real
902  retrievalopticalthickness37 = fillvalue_real
903  endif
904 
905 #if NOSWIR
906  retrievalradius1621 = fillvalue_real
907  retrievalopticalthickness1621 = fillvalue_real
908 #else
909  !
910  ! For 1.6, 2.1 um, continue and find the re, tau using the absorbing
911  ! band reflectance for ice clouds
912  !
913  if (do_retrievals_ice(4)) then
914  retrievalradius1621 = fillvalue_real
915  retrievalopticalthickness1621 = fillvalue_real
916 
917  if( (process%ocean_surface .or. process%snowice_surface) .and. &
918  measurements(band_0163) > 0. ) then!{
919 
920  nonabsorbingband_index = band_0163
921  absorbingband_index = band_0213
922  idx1621(1) = idx16
923  idx1621(2) = idx21
924 
925  ! the Nakajima-King space for VIIRS (and AHI) 1.6-2.2 um ice
926  ! retrieval appears to be reversed
927  ! where the 2.2um channel contains the tau information and the
928  ! 1.6um channel contains the
929  ! re information. So we play along and reverse the channels.
930 #ifdef VIIRS_INST
931  if ( .not. modis_mode ) then
932  nonabsorbingband_index = band_0213
933  absorbingband_index = band_0163
934  idx1621(1) = idx21
935  idx1621(2) = idx16
936  endif
937 #endif
938 #if AHI_INST | AMS_INST
939  nonabsorbingband_index = band_0213
940  absorbingband_index = band_0163
941  idx1621(1) = idx21
942  idx1621(2) = idx16
943 #endif
944 #if AVIRIS_INST
945  if (set_bands(absorbingband_index) == 14) then
946  nonabsorbingband_index = band_0213
947  absorbingband_index = band_0163
948  idx1621(1) = idx21
949  idx1621(2) = idx16
950  endif
951 #endif
952  call vis_nonabsorbing_science(measurements(nonabsorbingband_index), &
953  idx1621(1), albedo_real4(nonabsorbingband_index), library_taus, &
956  sensor_zenith_angle(xpoint,ypoint), &
957  solar_zenith_angle(xpoint,ypoint), &
958  relative_azimuth_angle(xpoint,ypoint), &
959  cloud_top_pressure(xpoint,ypoint), &
960  local_process, optical_thickness_vector)
961 
962  call vis_absorbing_science(optical_thickness_vector, &
963  measurements(absorbingband_index), idx1621(2), &
964  albedo_real4(absorbingband_index), library_taus, ice_radii, &
967  residual,maxradii,debug)
968 
969  if (maxradii > 2 ) then!{
970  call solveretrieval(residual(1:maxradii), &
971  optical_thickness_vector(1:maxradii), ice_radii(1:maxradii), &
972  retrievalradius1621, retrievalopticalthickness1621, &
973  debug, use_nearest, quality_in)
974  if (use_nearest) then
975  nearest_ice(4) = 1
976  call solveretrieval_nearest(xpoint,ypoint, &
977  measurements(nonabsorbingband_index), &
978  measurements(absorbingband_index), &
979  (/nonabsorbingband_index, absorbingband_index/), ice_radii, &
980  retrievalopticalthickness1621, retrievalradius1621, &
981  rss_ice(re1621), .false., ray_temp, quality_in)
982 
983  endif
984  endif!}
985  endif!}
986  else
987  retrievalradius1621 = fillvalue_real
988  retrievalopticalthickness1621 = fillvalue_real
989  endif
990  !
991  ! WDR get the table range
992  prd_out_refl_loc_1621(xpoint,ypoint,tbl_lo_nabs_ice) = minval(refliba)
993  prd_out_refl_loc_1621(xpoint,ypoint,tbl_hi_nabs_ice) = maxval(refliba)
994  prd_out_refl_loc_1621(xpoint,ypoint,tbl_lo_abs_ice) = minval(reflibb)
995  prd_out_refl_loc_1621(xpoint,ypoint,tbl_hi_abs_ice) = maxval(reflibb)
996  !
997 #endif
998  !
999  ! end of ice cloud processing
1000  !
1001  deallocate(rad37lib)
1002  deallocate(optical_thickness_vector, residual, refliba, reflibb)
1003 
1004  else!}{
1005  ! there is no cloud
1006  retrievalopticalthickness = fillvalue_real
1007  retrievalopticalthickness1621 = fillvalue_real
1008  retrievalopticalthickness16 = fillvalue_real
1009  retrievalopticalthickness37 = fillvalue_real
1010  retrievalradius16 = fillvalue_real
1011  retrievalradius1621 = fillvalue_real
1012  retrievalradius37 = fillvalue_real
1013  cloud_layer_flag(xpoint, ypoint) = 0
1014  status = 1
1015  endif!}
1016 
1017  ! so the statistics are computed properly. The retrieval is only
1018  ! successful for statistical purposes if the main
1019  ! re retrieval is successful.
1020  if (retrievalradius21 /= fillvalue_real) then
1021  status = 1
1022  endif
1023 
1024  !assign the retrievals to the relevant arrays
1025  optical_thickness_ice = retrievalopticalthickness
1026  optical_thickness_1621_ice = retrievalopticalthickness1621
1027  optical_thickness_16_ice = retrievalopticalthickness16
1028  optical_thickness_37_ice = retrievalopticalthickness37
1029  effective_radius_16_ice = retrievalradius16
1030  effective_radius_21_ice = retrievalradius21
1031  effective_radius_1621_ice = retrievalradius1621
1032  effective_radius_37_ice = retrievalradius37
1033 
1034  ! reset the extra retrievals for now.
1035  ! if (nearest_ice(1) == 1) effective_radius_16_ice(xpoint, ypoint) = &
1036  ! fillvalue_real
1037  ! if (nearest_ice(2) == 1) then
1038  ! effective_radius_21_ice(xpoint, ypoint) = fillvalue_real
1039  ! optical_thickness_ice(xpoint, ypoint) = fillvalue_real
1040  ! endif
1041  ! if (nearest_ice(3) == 1) effective_radius_37_ice(xpoint, ypoint) = &
1042  ! fillvalue_real
1043  ! if (nearest_ice(4) == 1) then
1044  ! effective_radius_1621_ice(xpoint, ypoint) = fillvalue_real
1045  ! optical_thickness_1621_ice(xpoint, ypoint) = fillvalue_real
1046  ! endif
1047 
1048 end subroutine corescience
1049 
1050 end module corescience_module
Definition: ch_xfr.f90:1
integer, parameter re21
real optical_thickness_16_liquid
Definition: core_arrays.f90:24
integer, parameter band_0124
integer refl_abs
Definition: ch_xfr.f90:62
subroutine vis_nonabsorbing_science(reflectance_nonabsorbing, nonabsorbing_index, nonabsorbing_albedo, library_taus, library_radii, sfr, fti1, fti0, rfi, theta, theta0, phi, cloudtop_pressure, process, optical_thickness_vector)
integer(integer_onebyte), dimension(:,:), allocatable cloud_layer_flag
Definition: core_arrays.f90:79
real, dimension(set_number_of_bands) thermal_correction_oneway
real, dimension(:,:), allocatable rad37lib
subroutine solveretrieval(residual, optical_thickness_vector, library_radii, effective_radius, optical_thickness, debug, use_nearest, quality_out)
real, dimension(20) sigma_r37_pw_liq
real optical_thickness_1621_ice
Definition: core_arrays.f90:26
real(single), dimension(:,:), allocatable optical_thickness_37_final
Definition: core_arrays.f90:36
subroutine nir_absorbing_science(platform_name, optical_thickness_vector, reflectance_absorbing, absorbing_index, absorbing_albedo, xpoint, ypoint, CTT, thermal_trans_1way, thermal_trans_2way, library_taus, library_radii, sfr, fti1, fti0, fri1, rfi, cl_emis, sf_emis, residual, maxradii, channel_number_37, emission_uncertainty_pw, emission_uncertainty_Tc, sigma_R37_PW, debug)
real, dimension(20) sigma_r37_pw_ice
real(single), dimension(:,:), allocatable cloud_top_pressure
real effective_radius_21_ice
Definition: core_arrays.f90:27
integer, parameter re37
real function, public linearinterpolation(X, Y, XX)
real(single), dimension(:,:,:), allocatable int_reflectance_ice
subroutine solve_retrieval_noswir(optical_thickness_vector, library_radii, effective_radius, optical_thickness)
real, dimension(:,:), allocatable irw_temperature
integer tbl_lo_nabs_ice
Definition: ch_xfr.f90:62
real optical_thickness_ice
Definition: core_arrays.f90:23
real effective_radius_21_liquid
Definition: core_arrays.f90:27
real, dimension(:,:,:), allocatable prd_out_refl_loc_1600
Definition: ch_xfr.f90:60
real(single), dimension(:,:,:), allocatable int_fluxdownwater_solar
character *15 platform_name
integer, parameter band_0370
real optical_thickness_16_ice
Definition: core_arrays.f90:24
real, dimension(set_number_of_bands) thermal_correction_twoway
real effective_radius_1621_ice
Definition: core_arrays.f90:29
integer, parameter band_0086
real(single), dimension(:,:,:), allocatable int_cloud_emissivity_ice
integer, parameter band_0213
real(single), dimension(:,:,:), allocatable int_cloud_emissivity_water
real effective_radius_37_liquid
Definition: core_arrays.f90:30
real(single), dimension(:), allocatable water_radii
real(single), dimension(:), allocatable library_taus
real, dimension(:,:), allocatable refliba
real, dimension(20) emission_uncertainty_tc_liq
real optical_thickness_37_liquid
Definition: core_arrays.f90:25
subroutine vis_absorbing_science(optical_thickness_vector, reflectance_absorbing, absorbing_index, absorbing_albedo, library_taus, library_radii, sfr, fti1, fti0, rfi, residual, maxradii, debug)
real optical_thickness_1621_liquid
Definition: core_arrays.f90:26
real(single), dimension(:,:,:), allocatable spherical_albedo_water
integer tbl_hi_nabs_ice
Definition: ch_xfr.f90:62
real, dimension(:,:), allocatable solar_zenith_angle
Definition: core_arrays.f90:6
integer refl_nabs
Definition: ch_xfr.f90:62
real(single), dimension(:,:,:), allocatable int_surface_emissivity_ice
real(single), dimension(:,:,:), allocatable int_fluxdownice_solar
real(single), dimension(:,:,:), allocatable int_surface_emissivity_water
real(single), dimension(:,:,:), allocatable spherical_albedo_ice
real optical_thickness_37_ice
Definition: core_arrays.f90:25
endif() set(LIBS $
Definition: CMakeLists.txt:6
real optical_thickness_liquid
Definition: core_arrays.f90:23
real(single), dimension(:), allocatable ice_radii
real, dimension(:,:), allocatable reflibb
real, dimension(20) emission_uncertainty_pw_liq
integer, parameter band_0163
real effective_radius_37_ice
Definition: core_arrays.f90:30
integer tbl_hi_abs_ice
Definition: ch_xfr.f90:62
real(single), dimension(:,:), allocatable cloud_top_temperature
real(single), dimension(:,:,:), allocatable surface_emissivity_land
real, dimension(:,:,:), allocatable prd_out_refl_loc_1621
Definition: ch_xfr.f90:61
integer, dimension(set_number_of_bands), parameter set_bands
real effective_radius_16_liquid
Definition: core_arrays.f90:28
real, dimension(:,:), allocatable sensor_zenith_angle
real(single), dimension(:,:), allocatable relative_azimuth_angle
real(single), dimension(:,:,:), allocatable int_fluxupice_sensor
real(single), dimension(:,:), allocatable surface_temperature
integer tbl_lo_abs_ice
Definition: ch_xfr.f90:62
subroutine calculate_new_tc(platform_name, Tc, Tg, galbedo, wlen, tau, re, lib_taus, lib_res, sph_albedo, down_flux_sensor, up_flux_sensor, cloud_emiss, surface_emiss, newTc, PRN)
real(single), dimension(:,:,:), allocatable int_reflectance_water
integer, parameter band_0065
integer number_waterradii
real(single), dimension(:,:), allocatable optical_thickness_1621_final
Definition: core_arrays.f90:37
subroutine solveretrieval_nearest(xx_pt, yy_pt, Ram, Rbm, twobands, radii, tau, re, lib_dist, phase_liquid, Ram_corr, quality_in, CH37_IDX, CTopT, CH37_NUM, platFormName)
subroutine, public corescience(xpoint, ypoint, process, measurements, Tc_liquid, Tc_ice, debug, na_band_used, nearest_liq, nearest_ice, RSS_liq, RSS_ice, alt_ray_liq, alt_ray_ice, do_retrievals_liq, do_retrievals_ice, status)
real effective_radius_16_ice
Definition: core_arrays.f90:28
type(qualityanalysis), dimension(:,:), allocatable processing_information
integer tbl_lo_nabs
Definition: ch_xfr.f90:62
real(single), dimension(:,:,:), allocatable int_fluxdownwater_sensor
integer number_iceradii
real, dimension(20) emission_uncertainty_pw_ice
subroutine get_band_idx(idx16, idx21, idx37, channel_37, idx_11, idx_alb37, idx_alb16)
integer tbl_hi_nabs
Definition: ch_xfr.f90:62
integer tbl_lo_abs
Definition: ch_xfr.f90:62
real(single), dimension(:,:,:), allocatable int_fluxdownice_sensor
integer tbl_hi_abs
Definition: ch_xfr.f90:62
real, dimension(:,:,:), allocatable prd_out_refl_loc_2100
Definition: ch_xfr.f90:59
real, dimension(set_albedo_bands) albedo_real4
#define abs(a)
Definition: misc.h:90
integer, parameter re1621
real, dimension(20) emission_uncertainty_tc_ice
real(single), dimension(:,:,:), allocatable int_fluxupwater_sensor
integer, parameter re16
real effective_radius_1621_liquid
Definition: core_arrays.f90:29
integer number_taus