SUBROUTINE OPEN_RESTART() ! UW Land Surface Hydrology Group implementation of SAC/SNOW17 model ! modified from NLDAS implementation ! author: Ted Bohn, tbohn@hydro.washington.edu ! CREATES RESTART FILE ! driverMod contains definitions of all global driver variables USE driverMod IMPLICIT NONE ! Define local variables INTEGER ndims,nvars,ngatts,natts,unlimited INTEGER xdimid,ydimid,leveldimid,banddimid,zsoildimid,zsnowdimid INTEGER rowvarid,colvarid,latvarid,lonvarid,cellidvarid,landmaskvarid,varid CHARACTER*20 name INTEGER xtype, dims2d(2),dimsoil3d(3),dimsnow3d(3) INTEGER I,J,NT ! Create RESTART file ! Data will not be compressed status = NF_CREATE(RESTFILE,0,RESTART_NCID) IF (status .ne. NF_NOERR) THEN WRITE(*,*)'ERROR: cannot open restart file',RESTFILE STOP END IF status = NF_DEF_DIM(RESTART_NCID,'x',xlen,xdimid) status = NF_DEF_DIM(RESTART_NCID,'y',ylen,ydimid) status = NF_DEF_DIM(RESTART_NCID,'zsoil',MAXNSOIL,zsoildimid) status = NF_DEF_DIM(RESTART_NCID,'zsnow',MAXNSNOW,zsnowdimid) ! status = NF_DEF_DIM(RESTART_NCID,'band',NBANDS,banddimid) dims2d(1) = xdimid dims2d(2) = ydimid dimsoil3d(1) = xdimid dimsoil3d(2) = ydimid dimsoil3d(3) = zsoildimid dimsnow3d(1) = xdimid dimsnow3d(2) = ydimid dimsnow3d(3) = zsnowdimid ! dims3d(3) = banddimid ! dims4d(1) = xdimid ! dims4d(2) = ydimid ! dims4d(3) = banddimid ! dims4d(4) = leveldimid status = NF_PUT_ATT_TEXT(RESTART_NCID,NF_GLOBAL,'Conventions',7,'GDT 1.3') status = NF_PUT_ATT_TEXT(RESTART_NCID,NF_GLOBAL,'file_name',31,RESTART) status = NF_DEF_VAR(RESTART_NCID,'col',NF_INT,2,dims2d,colvarid) status = NF_PUT_ATT_TEXT(RESTART_NCID,colvarid,'units',1,'-') status = NF_PUT_ATT_TEXT(RESTART_NCID,colvarid,'long_name',11,'Grid Column') status = NF_PUT_ATT_INT(RESTART_NCID,colvarid,'missing_value',NF_INT,1, NODATA_INT) status = NF_DEF_VAR(RESTART_NCID,'row',NF_INT,2,dims2d,rowvarid) status = NF_PUT_ATT_TEXT(RESTART_NCID,rowvarid,'units',1,'-') status = NF_PUT_ATT_TEXT(RESTART_NCID,rowvarid,'long_name',8,'Grid Row') status = NF_PUT_ATT_INT(RESTART_NCID,rowvarid,'missing_value',NF_INT,1, NODATA_INT) status = NF_DEF_VAR(RESTART_NCID,'lon',NF_REAL,2,dims2d,lonvarid) status = NF_PUT_ATT_TEXT(RESTART_NCID,lonvarid,'units',12,'Degrees East') status = NF_PUT_ATT_REAL(RESTART_NCID,lonvarid,'valid_min',NF_REAL,1,-180.) status = NF_PUT_ATT_REAL(RESTART_NCID,lonvarid,'valid_max',NF_REAL,1,180.) status = NF_PUT_ATT_TEXT(RESTART_NCID,lonvarid,'long_name',9,'Longitude') status = NF_PUT_ATT_REAL(RESTART_NCID,lonvarid,'missing_value',NF_REAL,1, NODATA) status = NF_DEF_VAR(RESTART_NCID,'lat',NF_REAL,2,dims2d,latvarid) status = NF_PUT_ATT_TEXT(RESTART_NCID,latvarid,'units',13,'Degrees North') status = NF_PUT_ATT_REAL(RESTART_NCID,latvarid,'valid_min',NF_REAL,1,-90.) status = NF_PUT_ATT_REAL(RESTART_NCID,latvarid,'valid_max',NF_REAL,1,90.) status = NF_PUT_ATT_TEXT(RESTART_NCID,latvarid,'long_name',8,'Latitude') status = NF_PUT_ATT_REAL(RESTART_NCID,latvarid,'missing_value',NF_REAL,1, NODATA) status = NF_DEF_VAR(RESTART_NCID,'land',NF_INT,2,dims2d,landmaskvarid) status = NF_PUT_ATT_TEXT(RESTART_NCID,landmaskvarid,'units',1,'-') status = NF_PUT_ATT_TEXT(RESTART_NCID,landmaskvarid,'long_name',8,'Landmask') status = NF_PUT_ATT_INT(RESTART_NCID,landmaskvarid,'missing_value',NF_INT,1, NODATA_INT) status = NF_DEF_VAR(RESTART_NCID,'CellID',NF_INT,2,dims2d,cellidvarid) status = NF_PUT_ATT_TEXT(RESTART_NCID,cellidvarid,'units',1,'-') status = NF_PUT_ATT_TEXT(RESTART_NCID,cellidvarid,'long_name',7,'Cell ID') status = NF_PUT_ATT_INT(RESTART_NCID,cellidvarid,'missing_value',NF_INT,1, NODATA_INT) status = NF_DEF_VAR(RESTART_NCID,'ght',NF_REAL,3,dimsoil3d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',1,'K') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',8,'zsoil y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',19,'Ground Heat Content') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',8,'zsoil y x') status = NF_DEF_VAR(RESTART_NCID,'wesn',NF_REAL,3,dimsnow3d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',6,'kg/m^2') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',8,'zsnow y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',21,'Snow Water Equivalent') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',8,'zsnow y x') status = NF_DEF_VAR(RESTART_NCID,'htsn',NF_REAL,3,dimsnow3d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',1,'K') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',8,'zsnow y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',17,'Snow Heat Content') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',8,'zsnow y x') status = NF_DEF_VAR(RESTART_NCID,'sndz',NF_REAL,3,dimsnow3d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',1,'m') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',8,'zsnow y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',16,'Snow Layer Depth') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',8,'zsnow y x') status = NF_DEF_VAR(RESTART_NCID,'tc1',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',1,'K') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',26,'Surface/Canopy Temperature') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'tc2',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',1,'K') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',26,'Surface/Canopy Temperature') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'tc4',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',1,'K') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',26,'Surface/Canopy Temperature') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'qa1',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',5,'kg/kg') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',31,'Specific Humidity in Canopy Air') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'qa2',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',5,'kg/kg') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',31,'Specific Humidity in Canopy Air') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'qa4',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',5,'kg/kg') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',31,'Specific Humidity in Canopy Air') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'capac',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',6,'kg/m^2') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',25,'Canopy Interception Water') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'catdef',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',6,'kg/m^2') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',17,'Catchment Defecit') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'rzexc',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',6,'kg/m^2') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',16,'Root Zone Excess') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_DEF_VAR(RESTART_NCID,'srfexc',NF_REAL,2,dims2d,varid) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'units',6,'kg/m^2') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'axis',3,'y x') status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'long_name',14,'Surface Excess') status = NF_PUT_ATT_REAL(RESTART_NCID,varid,'missing_value',NF_REAL,1, NODATA) status = NF_PUT_ATT_TEXT(RESTART_NCID,varid,'associate',3,'y x') status = NF_ENDDEF(RESTART_NCID) ! Write row, col, etc. status = NF_PUT_VAR_INT(RESTART_NCID,rowvarid,ROW) status = NF_PUT_VAR_INT(RESTART_NCID,colvarid,COL) status = NF_PUT_VAR_REAL(RESTART_NCID,lonvarid,LON) status = NF_PUT_VAR_REAL(RESTART_NCID,latvarid,LAT) status = NF_PUT_VAR_INT(RESTART_NCID,landmaskvarid,LANDMASK) status = NF_PUT_VAR_INT(RESTART_NCID,cellidvarid,CELLID) !END ! ! Define local variables ! INTEGER ndims,nvars,ngatts,natts,unlimited ! INTEGER xdimid,ydimid,banddimid ! INTEGER rowvarid,colvarid,latvarid,lonvarid,cellidvarid,landmaskvarid,varid ! CHARACTER*20 name ! INTEGER xtype, dims2d(2),dims3d(3) ! INTEGER I,J,NT ! ! ! Create RESTART file END SUBROUTINE OPEN_RESTART