C VECBAS    SOURCE    CHAT      05/01/13    04:04:42     5004
c---------------------------------------------------------------------
c
      SUBROUTINE VECBAS (V1, V2, V3)
c
c=====================================================================
c                                                                    =
c   This routine calculates an orthonormal base from v1.             =
c                                                                    =
c      Input :      v1 (3)           initial vector                  =
c                                                                    =
c      Output:      v1 (3)           unit vector                     =
c                   v2 (3), v3 (3)   unit vectors normal to v1       =
c                                    v1=v2xv3 ; v2=v3xv1 ; v3=v1xv2  =
c                                                                    =
c=====================================================================
      IMPLICIT INTEGER(I-N)
      real*8    v1 (3), v2 (3), v3 (3)
c
      real*8    toler, xn
      parameter (toler = 1.0 d-25)
c
      call vecuni (3, v1, xn)
c
      xn = v1 (1) **2 + v1 (2) **2
      if (xn .gt. toler)  then
          xn = 1.0 d0 / SQRT (xn)
c
          v2 (1) = -v1 (2) * xn
          v2 (2) =  v1 (1) * xn
          v2 (3) =  0.0 d0
          v3 (1) = -v1 (3) * v2 (2)
          v3 (2) =  v1 (3) * v2 (1)
          v3 (3) =  v1 (1) * v2 (2) - v1 (2) * v2(1)
      else
          v2 (1) = 1.0 d0
          v2 (2) = 0.0 d0
          v2 (3) = 0.0 d0
          v3 (1) = 0.0 d0
          v3 (2) = 1.0 d0
          v3 (3) = 0.0 d0
          v1 (1) = 0.0 d0
          v1 (2) = 0.0 d0
          v1 (3) = 1.0 d0
      end if
c
      return
      end


