;---------------------------------------------------------------------- ; Noel Aloysius, 2013 ; ; For more information about ESMF: ; ; http://www.earthsystemmodeling.org/ ; ;---------------------------------------------------------------------- load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl" begin diro = "~/" ; output location ; input files srcDir = "~/" srcFile = (/ "MOD17A3_Science_GPP_2000.nc","MOD17A3_Science_GPP_2001.nc", \ "MOD17A3_Science_GPP_2002.nc","MOD17A3_Science_GPP_2003.nc", \ "MOD17A3_Science_GPP_2004.nc","MOD17A3_Science_GPP_2005.nc", \ "MOD17A3_Science_GPP_2006.nc","MOD17A3_Science_GPP_2007.nc", \ "MOD17A3_Science_GPP_2008.nc","MOD17A3_Science_GPP_2009.nc", \ "MOD17A3_Science_GPP_2010.nc","MOD17A3_Science_GPP_2011.nc", \ "MOD17A3_Science_GPP_2012.nc" /) varName = (/ "MOD17A3_Science_GPP_2000","MOD17A3_Science_GPP_2001", \ "MOD17A3_Science_GPP_2002","MOD17A3_Science_GPP_2003", \ "MOD17A3_Science_GPP_2004","MOD17A3_Science_GPP_2005", \ "MOD17A3_Science_GPP_2006","MOD17A3_Science_GPP_2007", \ "MOD17A3_Science_GPP_2008","MOD17A3_Science_GPP_2009", \ "MOD17A3_Science_GPP_2010","MOD17A3_Science_GPP_2011", \ "MOD17A3_Science_GPP_2012" /) outFile = (/ "MOD17A3_Science_GPP_2000_Congo.bin","MOD17A3_Science_GPP_2001_Congo.bin", \ "MOD17A3_Science_GPP_2002_Congo.bin","MOD17A3_Science_GPP_2003_Congo.bin", \ "MOD17A3_Science_GPP_2004_Congo.bin","MOD17A3_Science_GPP_2005_Congo.bin", \ "MOD17A3_Science_GPP_2006_Congo.bin","MOD17A3_Science_GPP_2007_Congo.bin", \ "MOD17A3_Science_GPP_2008_Congo.bin","MOD17A3_Science_GPP_2009_Congo.bin", \ "MOD17A3_Science_GPP_2010_Congo.bin","MOD17A3_Science_GPP_2011_Congo.bin", \ "MOD17A3_Science_GPP_2012_Congo.bin" /) ;do i=0,dimsizes(srcFile) - 1 ; loop through each year i = 0 srcFileName = str_concat((/srcDir,srcFile(i)/)) sfile = addfile(srcFileName,"r") ; source grid xgpp = sfile->$varName(i)$ ; read variable ; No Data values: 65535 for annual GPP, 32767 for annual NPP and 255 for QC. Read the readme_more.txt ; Multiply by 0.1 to get valid values (gC/m^2/yr) xgpp@_FillValue = 65535 gpp = int2flt(xgpp) gpp = gpp * 0.1 ; valid values gpp@_FillValue = 1e+20 ; reassign the fill value for consistency gpp@gpp_unit = "gC/m^2/yr" gpp = gpp(::-1,:) ; South -> North delete(xgpp) ; global coverage spans these lat/lon region regRng = (/-59.5,79.5,-179.5,179.5/) ; (/latS,latN,lonW,lonE/), global coverage ; GPP subset. required if subset of the dataset is used ;inds = (/ max(ind(gpp&lat .le. regRng(0))), min(ind(gpp&lat .gt. regRng(1))), \ ; max(ind(gpp&lon .le. regRng(2))), min(ind(gpp&lon .gt. regRng(3))) /) ;gpp_sub = gpp(inds(0):inds(1),inds(2):inds(3)) ;delete(gpp) ; delete global array Opt = True Opt@SrcTitle = "MODIS GPP 1km to 0.5 deg Grid" Opt@SrcLargeFile = True ; as per Mary's suggestion. Opt@DstLargeFile = True Opt@SrcFileName = srcDir + "GPP_src_SCRIP.nc" Opt@DstFileName = srcDir + "GPP_dst_SCRIP.nc" Opt@WgtFileName = srcDir + "GPP1km_2_05x05.nc" Opt@ForceOverwrite = True Opt@DstGridType = "0.5deg" Opt@DstTitle = "Global GPP at 0.5x0.5 deg. resolution" Opt@DstLLCorner = (/ regRng(0),regRng(2) /) Opt@DstURCorner = (/ regRng(1),regRng(3) /) ;Opt@SrcRegional = True ; These are necessary. Enable if subset is used ;Opt@DstRegional = True Opt@InterpMethod = "conserve" ; Default is bilinear gpp_halfdeg = ESMF_regrid(gpp,Opt) printVarSummary(gpp_halfdeg) fout = srcDir + outFile(i) ; output file system("rm -rf " + fout) ; remove existing file fbindirwrite(fout,gpp_halfdeg) ; write binary of array size delete([/gpp,gpp_halfdeg,fout/]) ;end do end