ReadVector Subroutine

public subroutine ReadVector(Nx, x, Description, Units)

Arguments

Type IntentOptional Attributes Name
integer, intent(out) :: Nx
real, intent(out), ALLOCATABLE :: x(:)
character(len=1), intent(in) :: Description*(*)
character(len=1), intent(in) :: Units*(*)

Calls

proc~~readvector~~CallsGraph proc~readvector ReadVector interface~sort Sort proc~readvector->interface~sort interface~subtab SubTab proc~readvector->interface~subtab proc~errout ERROUT proc~readvector->proc~errout proc~sort_cmplx Sort_cmplx interface~sort->proc~sort_cmplx proc~sort_dble Sort_dble interface~sort->proc~sort_dble proc~sort_sngl Sort_sngl interface~sort->proc~sort_sngl proc~subtab_dble SubTab_dble interface~subtab->proc~subtab_dble proc~subtab_sngl SubTab_sngl interface~subtab->proc~subtab_sngl

Called by

proc~~readvector~~CalledByGraph proc~readvector ReadVector proc~readrcvrbearings ReadRcvrBearings proc~readrcvrbearings->proc~readvector proc~readrcvrranges ReadRcvrRanges proc~readrcvrranges->proc~readvector proc~readsxsy ReadSxSy proc~readsxsy->proc~readvector proc~readszrz ReadSzRz proc~readszrz->proc~readvector proc~readenvironment ReadEnvironment proc~readenvironment->proc~readrcvrbearings proc~readenvironment->proc~readrcvrranges proc~readenvironment->proc~readsxsy proc~readenvironment->proc~readszrz program~bellhop BELLHOP program~bellhop->proc~readenvironment program~bellhop3d BELLHOP3D program~bellhop3d->proc~readenvironment

Source Code

  SUBROUTINE ReadVector( Nx, x, Description, Units )

    ! Read a vector x
    ! Description is something like 'receiver ranges'
    ! Units       is something like 'km'

    INTEGER,   INTENT( OUT ) :: Nx
    REAL,      ALLOCATABLE, INTENT( OUT ) :: x( : )
    CHARACTER, INTENT( IN  ) :: Description*( * ), Units*( * )
    INTEGER                  :: ix

    WRITE( PRTFile, * )
    WRITE( PRTFile, * ) '__________________________________________________________________________'
    WRITE( PRTFile, * )

    READ(  ENVFile, * ) Nx
    WRITE( PRTFile, * ) '   Number of ' // Description // ' = ', Nx

    IF ( Nx <= 0 ) CALL ERROUT( 'ReadVector', 'Number of ' // Description // 'must be positive'  )

    IF ( ALLOCATED( x ) ) DEALLOCATE( x )
    ALLOCATE( x( MAX( 3, Nx ) ), Stat = IAllocStat )
    IF ( IAllocStat /= 0 ) CALL ERROUT( 'ReadVector', 'Too many ' // Description )

    WRITE( PRTFile, * ) '   ', Description // ' (' // Units // ')'
    x( 3 ) = -999.9
    READ( ENVFile, * ) x( 1 : Nx )

    CALL SubTab( x, Nx )
    CALL Sort(   x, Nx )

    WRITE( PRTFile, "( 5G14.6 )" ) '   ', ( x( ix ), ix = 1, MIN( Nx, Number_to_Echo ) )
    IF ( Nx > Number_to_Echo ) WRITE( PRTFile, "( G14.6 )" ) ' ... ', x( Nx )

    WRITE( PRTFile, * )

    ! Vectors in km should be converted to m for internal use
    IF ( LEN_TRIM( Units ) >= 2 ) THEN
       IF ( Units( 1 : 2 ) == 'km' ) x = 1000.0 * x
    END IF

  END SUBROUTINE ReadVector