; --------------------------------------------------------------------------- ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Program Name: rh_correction_narr_double.ncl ; ; ; ; National Water Model (NWM) WRF-hydro forcing engine is developed by ; ; National Center for Atmospheric Research (NCAR), under the sponsorship ; ; of National Water Center (NWC). ; ; ; ; Team Members: ; ; NCAR Staff: Linlin Pan, Wei Yu, and David Gochis ; ; NWC/OWP Staff: Brian Cosgrove, Zhengtao Cui, Cham Pham, and James Taft ; ; ; ; This is a ncl program to perform height adjustment. ; ; ; ; Input: height file1, height file2, variable file, output file ; ; ; ; Output: height adjusted file ; ; ; ; For non-fatal errors output is witten to $DATA/logs ; ; ; ; Author(s)/Contact(s): Linlin Pan, lpan@ucar.edu ; ; Origination June, 2015 ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;---------------------------------------------------------------------- load "$USHnwm/scale/set_scale_factor.ncl" begin inputFile1 = getenv("inputFile1") ; GFS data inputFile2 = getenv("inputFile2") ; GFS data inputFile3 = getenv("inputFile3") ; GFS data outFile = getenv("outFile") ; outFile data ; input files f1 = addfile(inputFile1,"r") f2 = addfile(inputFile2,"r") f3 = addfile(inputFile3,"r") ; out files if(isfilepresent(outFile))then system("rm -f " + outFile) end if fout = addfile(outFile,"c") ; if(.not. isfilevar(fout,"U2D")) then fout->U2D=f3->U2D fout->V2D=f3->V2D fout->LWDOWN=f3->LWDOWN fout->RAINRATE=f3->RAINRATE fout@model_output_valid_time = f3@model_output_valid_time fout@model_initialization_time = f3@model_initialization_time fout@model_output_type="forcing" fout@model_configuration=f3@model_configuration fout@model_total_valid_times=f3@model_total_valid_times fout@NWM_version_number = nwm_version if( isfilevar(f3,"time") ) then fout->time=f3->time end if if( isfilevar(f3,"time_bounds") ) then ; fout->time_bounds=f3->time_bounds end if if( isfilevar(f3,"reference_time") ) then fout->reference_time=f3->reference_time end if ; end if dd = dimsizes(f3->T2D) ndd=dimsizes(dd) print("dd="+dd) dimlat = dd(ndd-2) dimlon = dd(ndd-1) ; dimNames = (/"time", "y", "x","reference_time","nv"/) ; dimSizes = (/ -1 , dimlat, dimlon , 1, 2/) ; dimUnlim = (/ True , False, False, False,False/) dimNames = (/"time", "y", "x","reference_time"/) dimSizes = (/ -1 , dimlat, dimlon , 1/) dimUnlim = (/ True , False, False, False/) filedimdef(fout,dimNames,dimSizes,dimUnlim) ; if( isfilepresent("lapse.nc") )then ff = addfile("lapse.nc","r") lapse = ff->lapse print("Using narr lapse rate") else lapse = 6.49 print("Using constant lapse rate") end if ; if( isfilepresent("domain_xy.nc") )then fxy = addfile("domain_xy.nc","r") fout->x = fxy->x fout->y = fxy->y fout->ProjectionCoordinateSystem = fxy->ProjectionCoordinateSystem esri_pe_string=fxy->ProjectionCoordinateSystem@esri_pe_string else print("domain_xy.nc file is missing") end if ; input variables T2D = new((/1,dimlat,dimlon/),integer) Q2D = new((/1,dimlat,dimlon/),integer) PSFC = new((/1,dimlat,dimlon/),integer) T2D0 = new((/1,dimlat,dimlon/),float) Q2D0 = new((/1,dimlat,dimlon/),float) PSFC0 = new((/1,dimlat,dimlon/),float) HGT1 = new((/1,dimlat,dimlon/),float) HGT2 = new((/1,dimlat,dimlon/),float) HGT1(0,:,:) = f1->HGT HGT2(0,:,:) = f2->HGT_M(0,:,:) T2D0(0,:,:) = f3->T2D Q2D0(0,:,:) = f3->Q2D PSFC0(0,:,:) = f3->PSFC ; calculation W2D = Q2D0/(1-Q2D0) RH = relhum(T2D0,W2D,PSFC0) delete(W2D) RH = RH < 100 DHGT = HGT1-HGT2 delete(HGT1) delete(HGT2) T2D0(0,:,:)=T2D0(0,:,:)+DHGT(0,:,:)*lapse/1000. PSFC0 = PSFC0+DHGT*PSFC0/287.05/T2D0*9.8 Q2D0 = mixhum_ptrh (PSFC0/100., T2D0, RH, 2) ; output T2D(0,:,:)=floattointeger(getDataScaled(T2D0,t2d_scale_f,t2d_offset)) T2D@_FillValue = floattointeger(t2d_missing) T2D@units="K" T2D@long_name="2-m Air Temperature" T2D@standard_name = "air_temperature" ; T2D@scale_factor = t2d_scale_fd; T2D@add_offset = t2d_offsetd ; T2D@valid_range = t2d_valid_range ; T2D@missing_value = floattointeger(t2d_missing) ; T2D@proj4=proj4 T2D@grid_mapping=grid_mapping T2D@esri_pe_string=esri_pe_string T2D@remap=remap ; T2D@cell_methods=cell_methods T2D!0="time" T2D!1="y" T2D!2="x" filevardef(fout, "T2D" ,typeof(T2D) ,getvardims(T2D)) filevarattdef(fout,"T2D" ,T2D) fout->T2D = (/T2D/) delete(T2D0) delete(T2D) Q2D(0,:,:)=floattointeger(getDataScaled(Q2D0,q2d_scale_f,q2d_offset)) Q2D@_FillValue=floattointeger(q2d_missing) Q2D@units="kg kg-1" Q2D@long_name="2-m Specific Humidity, the dimensionless ratio of the mass of water vapor (kg) to the total mass of the system (kg)" Q2D@standard_name = "surface_specific_humidity" ; Q2D@scale_factor = q2d_scale_fd; Q2D@add_offset = q2d_offsetd ; Q2D@valid_range = q2d_valid_range ; Q2D@missing_value = floattointeger(q2d_missing) ; Q2D@proj4=proj4 Q2D@grid_mapping=grid_mapping Q2D@esri_pe_string=esri_pe_string Q2D@remap=remap ; Q2D@cell_methods=cell_methods Q2D!0="time" Q2D!1="y" Q2D!2="x" filevardef(fout, "Q2D" ,typeof(Q2D) ,getvardims(Q2D)) filevarattdef(fout,"Q2D" ,Q2D) fout->Q2D = (/Q2D/) delete(Q2D0) delete(Q2D) PSFC(0,:,:)=floattointeger(getDataScaled(PSFC0,psfc_scale_f,psfc_offset)) PSFC@_FillValue=floattointeger(psfc_missing) PSFC@units="Pa" PSFC@long_name = "Surface Pressure" PSFC@standard_name = "air_pressure" ; PSFC@scale_factor = psfc_scale_fd; PSFC@add_offset = psfc_offsetd ; PSFC@valid_range = psfc_valid_range ; PSFC@missing_value = floattointeger(psfc_missing) ; PSFC@proj4=proj4 PSFC@grid_mapping=grid_mapping PSFC@esri_pe_string=esri_pe_string PSFC@remap=remap ; PSFC@cell_methods=cell_methods PSFC!0="time" PSFC!1="y" PSFC!2="x" delete(PSFC0) filevardef(fout, "PSFC" ,typeof(PSFC) ,getvardims(PSFC)) filevarattdef(fout,"PSFC" ,PSFC) fout->PSFC = (/PSFC/) ; exit end status_exit(1)