237 lines
8.3 KiB
Plaintext
237 lines
8.3 KiB
Plaintext
;
|
|
; Check that the *_b values are the same between the mapping files
|
|
; at the same output resolution.
|
|
;
|
|
; Erik Kluzek
|
|
; Nov/18/2011
|
|
; $Id$
|
|
; $HeadURL;
|
|
;
|
|
|
|
print( "Check that datm mapping files are consistent" );
|
|
resolutions = (/ "128x256", "64x128", "48x96", "32x64", "8x16", "94x192", "0.23x0.31", "0.47x0.63", "0.9x1.25", "1.9x2.5", "2.5x3.33", "4x5", "10x15", "5x5_amazon", "1x1_camdenNJ", "1x1_vancouverCAN", "1x1_mexicocityMEX", "1x1_asphaltjungleNJ", "1x1_brazil", "1x1_urbanc_alpha", "1x1_numaIA", "1x1_smallvilleIA", "ne4np4", "ne16np4", "ne30np4", "ne60np4", "ne120np4", "ne240np4" /);
|
|
|
|
space = " ";
|
|
badres = 0
|
|
badresolutions = new( (/ 1000 /), string )
|
|
chkres = 0
|
|
chkresolutions = new( (/ 1000 /), string )
|
|
|
|
procedure checkit( desc:string, maxdiff:numeric, res:string, lmask:string, eps:numeric )
|
|
;
|
|
; check that difference is within reasonable tolerance...
|
|
;
|
|
begin
|
|
reso = res+"_"+lmask;
|
|
if ( maxdiff .gt. eps )then
|
|
print( space+space+space+desc+" are off by more than tolerance for "+reso+" resolution" );
|
|
print( space+space+space+"maximum difference = "+maxdiff );
|
|
if ( .not. any(badresolutions .eq. reso ) )then
|
|
badresolutions(badres) = reso;
|
|
badres = badres + 1
|
|
end if
|
|
else
|
|
print( space+space+space+"File OK for "+desc+"!" );
|
|
end if
|
|
if ( .not. any(chkresolutions .eq. reso ) )then
|
|
chkresolutions(chkres) = reso;
|
|
chkres = chkres + 1
|
|
end if
|
|
end
|
|
|
|
|
|
function checkdims( desc:string, dsizefile1 [*]:integer, dsizefile2 [*]:integer, res:string, lmask:string )
|
|
;
|
|
; check that dimensions are the same between the file variables
|
|
;
|
|
begin
|
|
reso = res+"_"+lmask;
|
|
if ( any( dsizefile1 .ne. dsizefile2) )then
|
|
print( space+space+space+desc+" dimensions are different for "+reso+" resolution" );
|
|
print( space+space+space+"dim first file "+dsizefile1 );
|
|
print( space+space+space+"dim second file "+dsizefile2 );
|
|
if ( .not. any(badresolutions .eq. reso ) )then
|
|
badresolutions(badres) = reso;
|
|
badres = badres + 1
|
|
end if
|
|
return( False );
|
|
else
|
|
print( space+space+space+"File dims OK for "+desc+"!" );
|
|
return( True );
|
|
end if
|
|
if ( .not. any(chkresolutions .eq. reso ) )then
|
|
chkresolutions(chkres) = reso;
|
|
chkres = chkres + 1
|
|
end if
|
|
end
|
|
|
|
begin
|
|
|
|
csmdata = getenv("CSMDATA");
|
|
clmroot = getenv("CLM_ROOT");
|
|
querynml = "bld/queryDefaultNamelist.pl -silent -justvalue -namelist clmexp";
|
|
if ( .not. ismissing(csmdata) )then
|
|
querynml = querynml+" -csmdata "+csmdata;
|
|
end if
|
|
if ( ismissing(clmroot) )then
|
|
querynml = "../../"+querynml;
|
|
else
|
|
querynml = clmroot+"/components/clm/"+querynml;
|
|
end if
|
|
|
|
print( "query string="+querynml )
|
|
|
|
|
|
mapgrids = (/"0.5x0.5_MODIS", "0.5x0.5_AVHRR", "0.5x0.5_MODIS", "5x5min_nomask", "5x5min_IGBP-GSDP", "5x5min_ISRIC-WISE", "10x10min_nomask", "3x3min_MODIS", "3x3min_LandScan2004", "3x3min_GLOBE-Gardner", "3x3min_GLOBE-Gardner-mergeGIS", "0.9x1.25_GRDC", "360x720cru_cruncep", "1km-merge-10min_HYDRO1K-merge-nomask"/);
|
|
do i = 0, dimsizes(resolutions)-1
|
|
res = resolutions(i);
|
|
print( "Go through maps for Resolution: "+res );
|
|
do j = 0, dimsizes(mapgrids)-1
|
|
grid = str_get_field( mapgrids(j), 1, "_" );
|
|
lmask = str_get_field( mapgrids(j), 2, "_" );
|
|
print( space+"Look for maps from Grid: "+grid+"_"+lmask);
|
|
|
|
querynmlres = querynml+" -options frm_lmask="+lmask+",frm_hgrid="+grid+",to_hgrid="+res+",to_lmask=nomask";
|
|
;
|
|
; Get map filename and open it
|
|
;
|
|
mapfile = systemfunc( querynmlres+" -var map" );
|
|
if ( systemfunc("test -f "+mapfile+"; echo $?" ) .ne. 0 )then
|
|
delete( mapfile );
|
|
continue;
|
|
end if
|
|
print( space+"Use mapfile: "+mapfile );
|
|
ncm = addfile( mapfile, "r" );
|
|
|
|
if ( .not. isvar("ncm0") )then
|
|
ncm0 = ncm;
|
|
else
|
|
vars = (/"yc_b", "xc_b", "area_b", "xv_b", "yv_b" /);
|
|
k = 0;
|
|
if ( checkdims( vars(k), dimsizes(ncm->$vars(k)$), dimsizes(ncm0->$vars(k)$), res, "nomask" ) )then
|
|
do k = 0, dimsizes(vars)-1
|
|
maxdiff = max( abs(ncm->$vars(k)$ - ncm0->$vars(k)$) );
|
|
checkit( vars(k), maxdiff, res, "nomask", 1.e-12 );
|
|
delete( maxdiff );
|
|
end do
|
|
var = "mask_b"
|
|
imaxdiff = max( abs(ncm->$var$ - ncm0->$var$) );
|
|
checkit( var, imaxdiff, res, "nomask", 1.e-12 );
|
|
delete( imaxdiff );
|
|
end if
|
|
delete( ncm );
|
|
end if
|
|
delete( mapfile );
|
|
|
|
end do
|
|
|
|
delete( grid );
|
|
delete( lmask );
|
|
delete( res );
|
|
if ( isvar("ncm0") )then
|
|
delete( ncm0 );
|
|
end if
|
|
|
|
end do
|
|
;
|
|
; go the other direction now check the _a variables
|
|
;
|
|
mksrf_files = (/"mksrf_fvegtyp", "mksrf_fglacier", "mksrf_furbtopo", "mksrf_flai", "mksrf_fsoitex", "mksrf_fsoicol", "mksrf_ffrac", "mksrf_fmax", "mksrf_ftopo", "mksrf_firrig", "mksrf_forganic", "mksrf_flakwat", "mksrf_fwetlnd", "mksrf_furban", "mksrf_fvocef"/)
|
|
do i = 0, dimsizes(mapgrids)-1
|
|
grid = str_get_field( mapgrids(i), 1, "_" );
|
|
lmask = str_get_field( mapgrids(i), 2, "_" );
|
|
print( "Grid: "+grid);
|
|
print( "Mask: "+lmask);
|
|
do j = 0, dimsizes(resolutions)-1
|
|
res = resolutions(j);
|
|
print( "res: "+res );
|
|
|
|
querynmlres = querynml+" -options frm_lmask="+lmask+",frm_hgrid="+grid+",to_hgrid="+res+",to_lmask=nomask";
|
|
;
|
|
; Get map filename and open it
|
|
;
|
|
mapfile = systemfunc( querynmlres+" -var map" );
|
|
if ( systemfunc("test -f "+mapfile+"; echo $?" ) .ne. 0 )then
|
|
delete( mapfile );
|
|
continue;
|
|
end if
|
|
print( space+"Use mapfile: "+mapfile );
|
|
ncm = addfile( mapfile, "r" );
|
|
|
|
if ( .not. isvar("ncm0") )then
|
|
ncm0 = ncm;
|
|
else
|
|
vars = (/"yc_a", "xc_a", "area_a", "xv_a", "yv_a" /);
|
|
vars2 = (/"LATIXY", "LONGXY", "AREA" /);
|
|
k = 0;
|
|
if ( checkdims( vars(k), dimsizes(ncm->$vars(k)$), dimsizes(ncm0->$vars(k)$), res, "nomask" ) )then
|
|
do k = 0, dimsizes(vars)-1
|
|
maxdiff = max( abs(ncm->$vars(k)$ - ncm0->$vars(k)$) );
|
|
checkit( vars(k), maxdiff, res, "nomask", 1.e-12 );
|
|
delete( maxdiff );
|
|
end do
|
|
end if
|
|
var = "mask_a"
|
|
imaxdiff = max( abs(ncm->$var$ - ncm0->$var$) );
|
|
checkit( var, imaxdiff, res, "nomask", 1.e-12 );
|
|
delete( imaxdiff );
|
|
;
|
|
; Get mksurfdata input datasets
|
|
;
|
|
do k = 0, dimsizes(mksrf_files)-1
|
|
srffile = systemfunc( querynmlres+" -var "+mksrf_files(k) );
|
|
if ( systemfunc("test -f "+srffile+"; echo $?" ) .ne. 0 )then
|
|
delete( srffile );
|
|
continue;
|
|
end if
|
|
print( space+"Use srffile: "+srffile );
|
|
ncs = addfile( srffile, "r" );
|
|
n = 0;
|
|
if ( checkdims( vars(n), dimsizes(ncm->$vars(n)$), ndtooned(dimsizes(ncs->$vars2(n)$)), res, "nomask" ) )then
|
|
do n = 0, dimsizes(vars2)-1
|
|
maxdiff = max( abs(ncm->$vars(n)$ - ndtooned(ncs->$vars2(n)$)) );
|
|
checkit( vars(n), maxdiff, res, "nomask", 1.e-12 );
|
|
delete( maxdiff );
|
|
end do
|
|
var = "mask_a"
|
|
var2 = "LANDMASK"
|
|
imaxdiff = max( abs(ncm->$var$ - ndtooned(ncs->$var2$)) );
|
|
checkit( var, imaxdiff, res, "nomask", 1.e-12 );
|
|
end if
|
|
delete( ncs );
|
|
end do
|
|
delete( ncm );
|
|
end if
|
|
delete( mapfile );
|
|
|
|
end do
|
|
|
|
if ( isvar("vars") )then
|
|
delete( vars )
|
|
end if
|
|
if ( isvar("vars2") )then
|
|
delete( vars2 )
|
|
end if
|
|
delete( grid );
|
|
delete( lmask );
|
|
delete( res );
|
|
if ( isvar("ncm0") )then
|
|
delete( ncm0 );
|
|
end if
|
|
|
|
end do
|
|
if ( chkres .gt. 0 )then
|
|
print( "resolutions checked = " );
|
|
print( chkresolutions(0:chkres-1) );
|
|
end if
|
|
if ( badres .gt. 0 )then
|
|
print( "badresolutions = " );
|
|
print( badresolutions(0:badres-1) );
|
|
end if
|
|
|
|
print( "===============================" );
|
|
print( "Successfully went through files" );
|
|
|
|
end
|
|
|