utils.f 6.89 KiB
C**********************************************************************
      SUBROUTINE HU1(XV,C,D)
C Computation of ordinates of GR unit hydrograph HU1 using successives differences on the S curve SS1
C Inputs:
C    C: time constant
C    D: exponent
C Outputs:
C    XV(3*NPX+1) to XV(3*NPX+NH): NH ordinates of discrete hydrograph
C**********************************************************************
      Implicit None
      INTEGER NPX,NH
      PARAMETER (NPX=14,NH=20)
      DOUBLEPRECISION XV(3*NPX+5*NH)
      DOUBLEPRECISION C,D,SS1
      INTEGER I
      DO I=1,NH
      XV(3*NPX+I)=SS1(I,C,D)-SS1(I-1,C,D)
      ENDDO
      ENDSUBROUTINE
C**********************************************************************
      SUBROUTINE HU2(XV,C,D)
C Computation of ordinates of GR unit hydrograph HU2 using successives differences on the S curve SS2
C Inputs:
C    C: time constant
C    D: exponent
C Outputs:
C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
C**********************************************************************
      Implicit None
      INTEGER NPX,NH
      PARAMETER (NPX=14,NH=20)
      DOUBLEPRECISION XV(3*NPX+5*NH)
      DOUBLEPRECISION C,D,SS2
      INTEGER I
      DO I =1,2*NH
      XV(3*NPX+NH+I)=SS2(I,C,D)-SS2(I-1,C,D)
      ENDDO
      ENDSUBROUTINE
C**********************************************************************
      SUBROUTINE HU4(XV,ALPHA,BETA)
C Computation of ordinates of MOHYSE unit hydrograph
C Inputs:
C    Alpha: parameter
C    Beta:  parameter
C Outputs:
C    XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph
C**********************************************************************
      Implicit None
      INTEGER NPX,NH
      PARAMETER (NPX=14,NH=20)
      DOUBLEPRECISION XV(3*NPX+5*NH),U(3*NH)
      DOUBLEPRECISION ALPHA,BETA,SU
      INTEGER K
      SU=0.
c      IF(ALPHA.LT.1.)THEN  
c      WRITE(*,*)' Pb ALPHA'
c      STOP                 
c      ENDIF                
      IF(ALPHA.EQ.1.)THEN
      U(1)=1.
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
SU=1. DO 1 K=2,3*NH U(K)=0. 1 CONTINUE ELSE DO 11 K=1,3*NH U(K)=FLOAT(K)*(ALPHA-1.)*EXP(-FLOAT(K)/BETA) SU=SU+U(K) 11 CONTINUE ENDIF c IF(SU.LT.0.0000000001)THEN c WRITE(*,*)' Pb HU4',ALPHA, BETA c STOP c ENDIF DO 2 K=1,3*NH XV(3*NPX+K)=U(K)/SU 2 CONTINUE ENDSUBROUTINE C********************************************************************** SUBROUTINE HU(XV,C) C Computation of ordinates of GRP unit hydrograph C Inputs: C C: time constant C Alpha: parameter C Beta: parameter C Outputs: C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph C********************************************************************** Implicit None INTEGER NPX,NH PARAMETER (NPX=14,NH=20) DOUBLEPRECISION XV(3*NPX+5*NH) DOUBLEPRECISION C DOUBLEPRECISION SH INTEGER I DO 10 I=1,2*NH XV(3*NPX+NH+I)=SH(I,C)-SH(I-1,C) 10 CONTINUE RETURN ENDSUBROUTINE C********************************************************************** FUNCTION SH(I,C) C Values of the S curve (cumulative HU curve) of GRP unit hydrograph HU C Inputs: C C: time constant C I: time-step C Outputs: C SH: Values of the S curve for I C********************************************************************** Implicit None INTEGER NPX,NH PARAMETER (NPX=14,NH=20) DOUBLEPRECISION C DOUBLEPRECISION SH,FI INTEGER I FI=I IF(FI.LE.0.)THEN SH=0. RETURN ENDIF IF(FI.GE.C)THEN SH=1.
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
RETURN ENDIF SH=FI**2.5/(FI**2.5+(C-FI)**2.5) RETURN ENDFUNCTION C********************************************************************** FUNCTION SS1(I,C,D) C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU1 C Inputs: C C: time constant C D: exponent C I: time-step C Outputs: C SS1: Values of the S curve for I C********************************************************************** Implicit None DOUBLEPRECISION C,D,SS1 INTEGER I,FI FI=I IF(FI.LE.0.) THEN SS1=0. RETURN ENDIF IF(FI.LT.C) THEN SS1=(FI/C)**D RETURN ENDIF SS1=1. ENDFUNCTION C********************************************************************** FUNCTION SS2(I,C,D) C Values of the S curve (cumulative HU curve) of GR unit hydrograph HU2 C Inputs: C C: time constant C D: exponent C I: time-step C Outputs: C SS2: Values of the S curve for I C********************************************************************** Implicit None DOUBLEPRECISION C,D,SS2 INTEGER I,FI FI=I IF(FI.LE.0.) THEN SS2=0. RETURN ENDIF IF(FI.LE.C) THEN SS2=0.5*(FI/C)**D RETURN ENDIF IF(FI.LT.2.*C) THEN SS2=1.-0.5*(2.-FI/C)**D RETURN ENDIF SS2=1. ENDFUNCTION C********************************************************************** SUBROUTINE DEL(XV,C) C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps C (all ordinates are nul except 2 at max)
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
C Inputs: C C: time constant C Outputs: C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): 2*NH ordinates of discrete hydrograph C********************************************************************** Implicit None INTEGER NPX,NH PARAMETER (NPX=14,NH=20) DOUBLEPRECISION XV(3*NPX+5*NH) DOUBLEPRECISION C,F INTEGER I,K I=INT(C) F=C-INT(C) DO 1 K=3*NPX+1,3*NPX+3*NH XV(K)=0. 1 CONTINUE XV(3*NPX+I)=1.-F XV(3*NPX+I+1)=F ENDSUBROUTINE C********************************************************************** SUBROUTINE DEL2(XV,C) C Computation of HU ordinates corresponding to a time lag of a given number (possibly non-integer) of time-steps C (all ordinates are nul except 2 at max) C Inputs: C C: time constant C Outputs: C XV(3*NPX+NH+1) to XV(3*NPX+3*NH): NH ordinates of discrete hydrograph C********************************************************************** Implicit None INTEGER NPX,NH PARAMETER (NPX=14,NH=20) DOUBLEPRECISION XV(3*NPX+5*NH) DOUBLEPRECISION C,F INTEGER K,I IF(C.GT.FLOAT(NH)) C=FLOAT(NH) I=INT(C) F=C-INT(C) DO 1 K=3*NPX+1,3*NPX+NH XV(K)=0. 1 CONTINUE XV(3*NPX+I)=1.-F XV(3*NPX+I+1)=F ENDSUBROUTINE C********************************************************************** FUNCTION tanHyp(Val) C Computation of hyperbolic tangent C********************************************************************** Implicit None DOUBLEPRECISION Val,ValExp,tanHyp ValExp=EXP(Val) tanHyp=(ValExp - 1./ValExp)/(ValExp + 1./ValExp) RETURN ENDFUNCTION