;$Id$ ;----------------------------------------------------------------------------------------------------------- ; Read and Interpolate the Prior Cloud Fraction Maps ;----------------------------------------------------------------------------------------------------------- pro get_prior_map, prior_map_name ;--- do I need to do this to keep tables in memory? COMMON PRIOR_MAP, Is_Prior_Read, nlon_prior, nlat_prior, nmonths_prior, ndiurnal_prior, $ lon_min_prior, lon_max_prior, dlon_prior, lat_min_prior, lat_max_prior, dlat_prior, $ Cld_Frac_Table, Ice_Cld_Frac_Table, Water_Cld_Frac_Table, Sc_Cld_Frac_Table, missing_prior missing_prior = -999.0 Is_Prior_Read = 0 ;--- Read prior map table if (Is_Prior_Read eq 0) then begin success_flag = file_test(prior_map_name) if (success_flag ne 1) then begin print, 'failed read for prior map ', prior_map_name success_flag = 0 return endif ;--- open table sd_id = ncdf_open(prior_map_name) ;--- read global attributes tables ncdf_attget, sd_id, /global, 'number_longitudes', nlon_prior ncdf_attget, sd_id, /global, 'number_latitudes', nlat_prior ncdf_attget, sd_id, /global, 'number_months', nmonths_prior ncdf_attget, sd_id, /global, 'number_times', ndiurnal_prior ncdf_attget, sd_id, /global, 'longitude_spacing', dlon_prior ncdf_attget, sd_id, /global, 'latitude_spacing', dlat_prior ncdf_attget, sd_id, /global, 'longitude_min', lon_min_prior ncdf_attget, sd_id, /global, 'longitude_max', lon_max_prior ncdf_attget, sd_id, /global, 'latitude_min', lat_min_prior ncdf_attget, sd_id, /global, 'latitude_max', lat_max_prior ;--- allocate memory for tables cld_frac_table = make_array(nlon_prior,nlat_prior,nmonths_prior,ndiurnal_prior,/FLOAT,VALUE=missing_prior) ice_cld_frac_table = make_array(nlon_prior,nlat_prior,nmonths_prior,ndiurnal_prior,/FLOAT,VALUE=missing_prior) water_cld_frac_table = make_array(nlon_prior,nlat_prior,nmonths_prior,ndiurnal_prior,/FLOAT,VALUE=missing_prior) sc_cld_frac_table = make_array(nlon_prior,nlat_prior,nmonths_prior,ndiurnal_prior,/FLOAT,VALUE=missing_prior) ;--- read tables sds_id = ncdf_varid(sd_id,'cloud_fraction_table') ncdf_varget, sd_id, sds_id, cld_frac_table sds_id = ncdf_varid(sd_id,'ice_cloud_fraction_table') ncdf_varget, sd_id, sds_id, ice_cld_frac_table sds_id = ncdf_varid(sd_id,'water_cloud_fraction_table') ncdf_varget, sd_id, sds_id, water_cld_frac_table sds_id = ncdf_varid(sd_id,'sc_cloud_fraction_table') ncdf_varget, sd_id, sds_id, sc_cld_frac_table ;--- close the netcdf file ncdf_close, sd_id ;--- set flag so we don't read again Is_Prior_Read = 1 endif end ;------------------------------------------------------------------------------ ; ;------------------------------------------------------------------------------ pro get_prior_values, lon, lat, imonth, idiurnal, $ prior_prob_clear, prior_prob_ice, prior_prob_water, prior_prob_sc COMMON PRIOR_MAP, Is_Prior_Read, nlon_prior, nlat_prior, nmonths_prior, ndiurnal_prior, $ lon_min_prior, lon_max_prior, dlon_prior, lat_min_prior, lat_max_prior, dlat_prior, $ Cld_Frac_Table, Ice_Cld_Frac_Table, Water_Cld_Frac_Table, Sc_Cld_Frac_Table, missing_prior ;---- extract values from prior map ilon = min([nlon_prior -1,max([0,fix((lon - lon_min_prior) / dlon_prior)])]) ilat = min([nlat_prior -1,max([0,fix((lat - lat_min_prior) / dlat_prior)])]) prior_prob_clear = 1.0 - cld_frac_table[ilon,ilat,imonth,idiurnal] prior_prob_ice = ice_cld_frac_table[ilon,ilat,imonth,idiurnal] prior_prob_water = water_cld_frac_table[ilon,ilat,imonth,idiurnal] prior_prob_sc = sc_cld_frac_table[ilon,ilat,imonth,idiurnal] end