MODULE wrfsi_static 2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CONTAINS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE open_wrfsi_static(dataroot,cdfid) 2 IMPLICIT NONE INCLUDE "netcdf.inc" CHARACTER(LEN=*), INTENT(IN) :: dataroot INTEGER, INTENT(OUT) :: cdfid CHARACTER(LEN=255) :: staticfile LOGICAL :: static_exists INTEGER :: status staticfile = TRIM(dataroot) // '/static/static.wrfsi' INQUIRE(FILE=staticfile, EXIST=static_exists) IF (static_exists) THEN status = NF_OPEN(TRIM(staticfile),NF_NOWRITE,cdfid) IF (status .NE. NF_NOERR) THEN PRINT '(A,I5)', 'NetCDF error opening WRF static file: ',status STOP 'open_wrfsi_static' END IF ELSE !mp ! search for rotlat version?? ! PRINT '(A)', 'Static file not found ', staticfile ! PRINT '(A)', 'Look for NMM version' staticfile = TRIM(dataroot) // '/static/static.wrfsi.rotlat' INQUIRE(FILE=staticfile, EXIST=static_exists) IF (static_exists) THEN status = NF_OPEN(TRIM(staticfile),NF_NOWRITE,cdfid) IF (status .NE. NF_NOERR) THEN PRINT '(A,I5)', 'NetCDF error opening WRF static file: ',status STOP 'open_wrfsi_static' END IF ELSE PRINT '(A)', 'rotlat Static file not found, either: ', staticfile STOP 'open_wrfsi_static' ENDIF ENDIF RETURN END SUBROUTINE open_wrfsi_static !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE get_wrfsi_static_dims(dataroot, nx, ny) 1,1 ! Subroutine to return the horizontal dimensions of WRF static file ! contained in the input dataroot IMPLICIT NONE INCLUDE "netcdf.inc" CHARACTER(LEN=*), INTENT(IN) :: dataroot INTEGER , INTENT(OUT) :: nx INTEGER , INTENT(OUT) :: ny INTEGER :: cdfid,vid, status CALL open_wrfsi_static(dataroot,cdfid) status = NF_INQ_DIMID(cdfid, 'x', vid) status = NF_INQ_DIMLEN(cdfid, vid, nx) status = NF_INQ_DIMID(cdfid, 'y', vid) status = NF_INQ_DIMLEN(cdfid, vid, ny) PRINT '(A,I5,A,I5)', 'WRF X-dimension = ',nx, & ' WRF Y-dimension = ',ny status = NF_CLOSE(cdfid) RETURN END SUBROUTINE get_wrfsi_static_dims !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE get_wrfsi_static_2d(dataroot, varname, data) 4,1 IMPLICIT NONE INCLUDE "netcdf.inc" ! Gets any 2D variable from the static file CHARACTER(LEN=*), INTENT(IN) :: dataroot CHARACTER(LEN=*), INTENT(IN) :: varname REAL, INTENT(OUT) :: data(:,:) INTEGER :: cdfid, vid, status CALL open_wrfsi_static(dataroot,cdfid) status = NF_INQ_VARID(cdfid,varname,vid) status = NF_GET_VAR_REAL(cdfid,vid,data) IF (status .NE. NF_NOERR) THEN PRINT '(A)', 'Problem getting 2D data.' ENDIF status = NF_CLOSE(cdfid) RETURN END SUBROUTINE get_wrfsi_static_2d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! END MODULE wrfsi_static