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" begin ; Define NARR files to process and time variables system ("date") dir = "/home/smo/NARR" wind_mdb = "/home/smo/WEPS/src/wind_gen/src/bin/wind_mdb" begYr = 1979 endYr = 1981 begMonth = 1 endMonth = 12 hrs_3 = (/"00", "03", "06", "09", "12", "15", "18", "21"/) ; Define Montana domain: rows 128 - 139, cols 154 - 180 (12 x 27 = 324 grids) row_min = 128 row_max = 139 col_min = 154 col_max = 180 ; calculate loop controls numYrs = endYr - begYr + 1 numMonths = endMonth - begMonth + 1 numDays_year = 365 numHrs_day = dimsizes (hrs_3) ; numRec = number of hourly records to be processed numRec = numYrs*numDays_year*numHrs_day ; using this calc assumes minimum of 1 yr of data do y = begYr, endYr if ( isleapyear (y) .eq. True ) then numRec = numRec + numHrs_day print ("year = " + y + " adding one day of records to numRec for leap year") end if end do ; define arrays yyyymmddhh = new ((/numRec/),"string") yyyymmdd = new ((/numRec/),"string") ; remove existing narr_*.dat and narr_*.wdb files - don't want to append new run to them system ( "rm narr_row*.dat narr_row*.wdb" ) irec = 0 ; zero the record counter do y = 0, numYrs - 1 cyr = begYr + y do m = 1, numMonths if ( m .lt. 10 ) then cmon = "0" + m else cmon = m end if numDays = days_in_month ( stringtointeger (cyr), stringtointeger (cmon) ) ; Do system calls to un-tar the files for the month system ( "tar -xf " + dir + "/NARR_" + cyr + "/" + cyr + cmon + "/NARRflx_" + \ cyr + cmon + "_01*.tar -C "+dir+"/NARR_"+cyr+"/"+cyr+cmon+"/" ) system ( "tar -xf " + dir + "/NARR_" + cyr + "/" + cyr + cmon + "/NARRflx_" + \ cyr + cmon + "_09*.tar -C "+dir+"/NARR_"+cyr+"/"+cyr+cmon+"/" ) system ( "tar -xf " + dir + "/NARR_" + cyr + "/" + cyr + cmon + "/NARRflx_" + \ cyr + cmon + "_17*.tar -C "+dir+"/NARR_"+cyr+"/"+cyr+cmon+"/" ) system ( "tar -xf " + dir + "/NARR_" + cyr + "/" + cyr + cmon + "/NARRflx_" + \ cyr + cmon + "_25*.tar -C "+dir+"/NARR_"+cyr+"/"+cyr+cmon+"/" ) do d = 1, numDays if ( d .lt. 10 ) then cday = "0"+d else cday = d end if do h = 0, numHrs_day - 1 chour = hrs_3(h) ; ASSIGN FILENAMES TO VARIABLES narrinfileFlx = dir+"/NARR_"+cyr+"/"+cyr+cmon+"/merged_AWIP32."+cyr+cmon+cday+chour+".RS.flx" ; PRINT TO SCREEN TO MAKE SURE THE STRING IS CORRECT AND TO TRACK print("FileFlx="+narrinfileFlx) if (isfilepresent (narrinfileFlx) .eq. True) then ; NEED TO APPEND THE '.grb' TO VARIABLE STRING SO NCL KNOWS FILE TYPE narrinfileFlx = narrinfileFlx+".grb" ; OPEN THE FILES narrinFlx = addfile (narrinfileFlx,"r") ; print(narrinFlx) ; 'ncdump -h' type output ; print("getfilevarnames = "+getfilevarnames(narrinFlx)) ; VARIABLE NAMES ONLY, NO METADATA dSizes = getfiledimsizes (narrinFlx) if ( irec .eq. 0 ) then lat = narrinFlx->gridlat_221 lon = narrinFlx->gridlon_221 ugrd = new((/dSizes(0),dSizes(1)/),float) vgrd = new((/dSizes(0),dSizes(1)/),float) tgrd = new((/dSizes(0),dSizes(1)/),float) end if ; [U|V]_GRD_221_HTGL (0,:,:) = UV at 10m ; [U|V]_GRD_221_HTGL (1,:,:) = UV at 30m ugrd (:,:) = narrinFlx->U_GRD_221_HTGL(0,:,:) vgrd (:,:) = narrinFlx->V_GRD_221_HTGL(0,:,:) ; TMP_GRD_221_HTGL (0,:,:) = temperature at 2m ; TMP_GRD_221_HTGL (1,:,:) = temperature at 10m ; TMP_GRD_221_HTGL (2,:,:) = temperature at 30m tgrd (:,:) = narrinFlx->TMP_221_HTGL(1,:,:) yyyymmddhh (irec) = cyr+cmon+cday+chour yyyymmdd (irec) = cyr+cmon+cday ; write the date info and uv components to the grid file do r = row_min, row_max do c = col_min, col_max gridfilename = "narr_row" + r + "_col" + c + ".dat" system ( "echo " + cyr + " " + cmon + " " + cday + " " + chour + " " + \ ugrd (r, c) + " " + vgrd (r, c) + ">> " + gridfilename ) end do end do irec = irec + 1 end if end do ; hour end do ; day ; remove files for the month system ( "rm "+dir+"/NARR_"+cyr+"/"+cyr+cmon+"/merged_AWIP32."+cyr+cmon+"*.RS.flx" ) end do ; month end do ; year ; For each grid write and run the wind_mdb cmd. do r = row_min, row_max do c = col_min, col_max gridfilename = "narr_row" + r + "_col" + c + ".dat" wdbfilename = "narr_row" + r + "_col" + c + ".wdb" ; convert lat/lon from decimal to deg/min for the wind_mdb program cmd line lat_deg = floattointeger ( lat (r, c) ) lon_deg = floattointeger ( abs (lon (r, c)) ) lat_min = round ( (lat (r, c) - lat_deg) * 60, 3 ) lon_min = round ( ( abs(lon (r, c)) - lon_deg) * 60, 3 ) ; print ( "lat = " + lat (r, c) + " lat_deg = " + lat_deg + " lat_min = " + lat_min) ; print ( "lon = " + lon (r, c) + " lon_deg = " + lon_deg + " lon_min = " + lon_min) ; print the wind_mdb cmdline to the screen print ( wind_mdb + \ " -i " + gridfilename + \ " -o " + wdbfilename + \ " -l '" + lat_deg + " " + lat_min + " N'" + \ " -L '" + lon_deg + " " + lon_min + " W'" + \ " -S " + yyyymmdd (0) + \ " -E " + yyyymmdd (irec-1) + \ " -w r" + r + "c" + c + \ " -H 10" + \ " -s MT" + \ " -n 'narr row " + r + " narr col " + c + "'" + \ " -c US" + \ " -x" + \ " -C2" + \ " -t3" ) ; create and run the wind_mdb cmd line to process gridfilename into a wdb file system ( wind_mdb + \ " -i " + gridfilename + \ " -o " + wdbfilename + \ " -l '" + lat_deg + " " + lat_min + " N'" + \ " -L '" + lon_deg + " " + lon_min + " W'" + \ " -S " + yyyymmdd (0) + \ " -E " + yyyymmdd (irec-1) + \ " -w r" + r + "c" + c + \ " -H 10" + \ " -s MT" + \ " -n 'narr row " + r + " narr col " + c + "'" + \ " -c US" + \ " -x" + \ " -C2" + \ " -t3" ) end do end do system ("date") end