REGRIDDING OF MODIS MOD10A1-v4 DAILY SNOW AND CLOUD COVER
FRACTION TO ARCTIC-RIMS GRID (Serreze).
Author: J.L. McCreight
(e-mail: mccreigh the-at-symbol nsidc the-dot-symbol org)
Data Set Attributes:
*****************************************************************
(Original Data Source: MODIS MOD10A1-v4)
Grid: Standard RIMS grid.
Data: Snow and cloud cover fractions (of grid cell area)
values from 0 to 100 percent ([0,100]).
Missing value: -9999.0
Filenames: snow_percent_MODIS.YYYY.MM.txt
cloud_percent_MODIS.YYYY.MM.txt
where:
YYYY is the 4 digit year [2001,2006]
MM is the 2 digit year [01,12]
Data format:
These may be taken as space separated values. (The FORTRAN-
style format statement is: '(I6,2F9.4,31F8.1)'.)
Line 1: Year and month identifiers followed by product, units
and author identifiers.
Line 2: Colunm headers for following 39926 lines identifying
grid cell index, latitude, longitude, and day of month
(from 1-31).
Line 3-39928: Index, latititude, longitude, % (*31 columns
for each day of the month.)
Notes:
*****************************************************************
1. General Overview
The RIMS grid is a subset of the EASE northern hemisphere, 25km,
equal-area grid. Regridding of Modis MOD10A1-v4 ISIN 500m grid
data to EASE 25km is done via the Modis Reprojection Tool
(version 3.1 on linux).
2. Fraction Rules
The following is the IDL code used to determine what MOD10A1-v4
values are used in computing the snow and cloud fractions and how
the fractions are actually found. The variable 'b' is the subpixel
(less than EASE 25km) data. The following shows which MODIS values
are considered missing, how water is treated, and how the snow and
cloud fractions are actually computed. Cloud fraction is the
fraction of non-missing land pixels which contain cloud (the
denominator is expressed below as the sum of all cloudy,
snow-covered and snow-free pixels). Snow fraction is assumed to be
the fraction of non-missing, cloud-free, snow-covered pixels to
the total of snow-free and snow-covered pixels.
Code:
***********************************************************************
;find number of 1.25k grids that are missing or masked
;Pixel values (version 4):
;0: Missing
;1: No decision
;3: Scan angle limit exceeded
;4: Erroneous data
;5: Non-production mask
;7: Tile fill
;8: No input tile expected
;11: Night
;25: Snow-free land
;37: Lake or inland water
;39: Open water (ocean)
;50: Cloud obscured
;100: Snow-covered lake ice
;200: Snow
;254: Detector saturated
;255: Fill
miss = where(b EQ 0 OR b EQ 1 OR $
b EQ 3 OR b EQ 4 OR $
b EQ 5 OR b EQ 7 OR $
b EQ 8 OR b EQ 11 OR $
b eq 254 OR b eq 255, num_miss)
cloud = where(b eq 50,num_cloud) ; cloud cover code
;turns out that water is time invariant, it is a mask applied to all pixels
;where water is known to be. it does not enter in to our equations.
;for example, there is NEVER cloud over water.
; water = where(b EQ 37 OR b EQ 39 OR b EQ 100,num_water)
;find number of grids that are snow cover
snow = where(b eq 200,num_snow)
nosnow = where(b eq 25,num_nosnow)
;compute % cloud in the 25^2km grid
;if more than half of the 25k grid is missing/masked, then consider it all junk
IF num_miss lt (nn^2)/2 THEN $
pcloud[i,k] = $
100.*float(num_cloud)/float(num_cloud+num_nosnow+num_snow)
;compute % snow over ONLY land, this is not % per pixel, you need the % land
;per pixel in E25 cell to get that number - which we have....
;if more than half of the 25k grid is missing/masked, then consider it all junk
IF num_miss lt (nn^2)/2 THEN $
psnow[i,k] = $
100.*float(num_snow)/float(num_nosnow+num_snow)