DataImport_Irstea2010.R 4.79 KiB
DataImport_Irstea2010 <- function(DIR_DATA_INPUT,BasinCode,BasinCharactFile,HypsoDataFile){
    ##File_check
    DataImportFile <- paste(DIR_DATA_INPUT,BasinCode,"_BV.txt",sep="");
    FileExists <- file.exists(DataImportFile); if(FileExists==FALSE){ print("Error: DataImportFile not found",quote=FALSE); stop("EXECUTION STOPPED",call.=FALSE); }
    ##Object_initialisation
    BasinData <- list();
    BasinData$BasinCode <- BasinCode;
    ##_Basin_Characteristics
      ### BasinData$BasinName     <- as.character(read.csv2(file=DataImportFile,skip=19,nrows=1,header=FALSE,stringsAsFactors=FALSE)[1,1]);
      ### BasinData$BasinArea_km2 <- as.numeric(  read.csv2(file=DataImportFile,skip=24,nrows=1,header=FALSE,stringsAsFactors=FALSE)[1,3]);
      Bool <- FALSE;
      if(exists("BasinCharactFile")){ FileExists <- file.exists(BasinCharactFile); if(FileExists){ Bool <- TRUE; } }
      if(!Bool){ cat("Warning: BasinCharact file not found \n"); }
      if( Bool){ 
        TAB_CHARACT <- read.csv2(file=BasinCharactFile,header=TRUE,skip=0,stringsAsFactors=FALSE);
        IndBasin <- which(TAB_CHARACT$Code  == BasinCode);
        if(length(IndBasin)!=1){ print("Error: Basin not found in BasinInfoFile",quote=FALSE); stop("EXECUTION STOPPED",call.=FALSE); }
        if(length(IndBasin)==1){ 
        BasinData$StationX_l2e   <- as.numeric(TAB_CHARACT$iX_CEM[IndBasin]);
        BasinData$StationY_l2e   <- as.numeric(TAB_CHARACT$iY_CEM[IndBasin]);
        BasinData$StationZ_l2e   <- as.numeric(TAB_CHARACT$iZ_CEM[IndBasin]);
        BasinData$BasinArea_km2  <- as.numeric(TAB_CHARACT$S_CEM[IndBasin]);
        BasinData$BasinName      <- TAB_CHARACT$Nom[IndBasin]; 
                                    for(iChar in 1:nchar(BasinData$BasinName)){
                                      BasinData$BasinName <- gsub(pattern="^* ",replacement="",BasinData$BasinName);
                                      BasinData$BasinName <- gsub(pattern=" *$",replacement="",BasinData$BasinName); }
        rm(TAB_CHARACT); } ### memory clear
    ##DataSeries
    Format <- c("A8","X1","I8","X1","A5","X1","A7","X1","F5.0","X1","F5.0","X1","F5.0","X1","F5.0","X1","F5.0");
    TAB_DATA <- read.fortran(file=DataImportFile,skip=51,header=FALSE,Format);
    BasinData$TabDatesT <- as.character(TAB_DATA[,1]);
    BasinData$TabDatesR <- as.POSIXlt(strptime(TAB_DATA[,1],format="%Y%m%d",tz="UTC"));
    BasinData$TabObsQm3s <- TAB_DATA[,2]/1000;         ### observed runoff (in m3/s)
    BasinData$TabObsQmm  <- BasinData$TabObsQm3s*86.4/BasinData$BasinArea_km2;  ### observed runoff (in mm/d)
    BasinData$TabObsP <- TAB_DATA[,5];   ### precipitation (catchment average in mm)
    BasinData$TabObsF <- TAB_DATA[,6];   ### solid fraction precipitation
    BasinData$TabObsT <- TAB_DATA[,7];   ### air temp (catchment average in degre C)
    BasinData$TabObsE <- TAB_DATA[,8];   ### potential evap (catchment average in mm/d)
    BasinData$TabObsTmin <- NULL; ### min air temp (catchment average in degre C)
    BasinData$TabObsTmax <- NULL; ### max air temp (catchment average in degre C)
    # BasinData$TabObsEou <- TAB_DATA[,8];   ### potential evap oudin (catchment average in mm/d)
    # BasinData$TabObsEpm <- TAB_DATA[,9];   ### potential evap penman (catchment average in mm/d)
    # BasinData$TabObsFsafran <- TAB_DATA[,6];
    # USACE_Tmin <- -1.0; USACE_Tmax <-  3.0;
    # SolidFraction <- 1- (BasinData$TabObsT - USACE_Tmin)/(USACE_Tmax - USACE_Tmin);
    # SolidFraction[BasinData$TabObsT > USACE_Tmax] <- 0;
    # SolidFraction[BasinData$TabObsT < USACE_Tmin] <- 1;
    # BasinData$TabObsFusace <- SolidFraction;
    rm(TAB_DATA); ### memory clear
    ##Missing_values
    for(iList in 1:length(BasinData)){ if(is.numeric(BasinData[[iList]])){
      if(names(BasinData)[iList] %in% c("TabObsTmin","TabObsT","TabObsTmax")){
7172737475767778798081828384858687888990919293949596979899100101102103104105106
BasinData[[iList]][ BasinData[[iList]]<(-100) ] <- NA; } else { BasinData[[iList]][ BasinData[[iList]]<0 ] <- NA; } } } ##Constant_values if("TabObsQmm" %in% names(BasinData)){ if(sd(BasinData$TabObsQmm[!is.na(BasinData$TabObsQmm)])==0){ cat("Error: runoff values are constant \n"); stop("EXECUTION STOPPED",call.=FALSE); } } ##Hypso_Curve Bool <- FALSE; if(exists("HypsoDataFile")){ FileExists <- file.exists(HypsoDataFile); if(FileExists){ Bool <- TRUE; } } if(Bool){ TAB_HYPSO <- read.csv2(file=HypsoDataFile,header=TRUE,skip=0,stringsAsFactors=FALSE); iR <- which(formatC(TAB_HYPSO$CODE,format="d",width=8,flag="0")==BasinData$BasinCode); iC <- which(colnames(TAB_HYPSO)=="Zmin"):which(colnames(TAB_HYPSO)=="Zmax"); BasinData$HypsoData <- as.numeric(TAB_HYPSO[iR,iC]); ### min, q01, q02, ... , q98, q99, max rm(TAB_HYPSO); ### memory clear } else { cat("Warning: Hypso file not found \n"); } ##END return(BasinData); }