      subroutine dfault (iparm,rparm)
c
c ... dfault sets the default values of iparm and rparm.
c
c ... parameters -- 
c
c          iparm
c           and
c          rparm  arrays specifying options and tolerances
c
c
c ... specifications for parameters
c
      integer   iparm(30)
      dimension rparm(30)
c
c *** begin -- package common 
c
      common / itcom4 / keygs, srelpr, keyzer
c
c *** end   -- package common 
c
c     description of variables in common blocks in main routine
c
c     srelpr  - computer precision (approx.)
c     if installer of package does not know srelpr value,
c     an approximate value can be determined from a simple
c     fortran program such as 
c
c     srelpr = 1.0
c  2  srelpr = 0.5*srelpr
c     temp = srelpr + 1.0
c     if (temp .gt. 1.0) go to 2
c     srelpr = 2.0*srelpr
c     write (6,3) srelpr
c  3  format (1x,'srelpr = ',e20.10)
c     stop
c     end 
c
c
c     some values are-
c
c     srelpr = 7.1e-15   for cray x-mp  (approx.) 2**-47
c            = 1.49e-8   for dec 10  (approx.) 2**-26
c            = 1.192e-7  for vax 11/780 (approx) 2**-23
c            = 4.768e-7  for ibm 370/158
c
c             *** should be changed for other machines ***
c
c     to facilitate convergence, rparm(1) should be set to
c          500.*srelpr or larger
c
c
      srelpr = 7.1e-15
c
c ... keygs is a flag to specify how gather/scatter operations
c     are performed.
c       = 1    gather explicitly into a workspace vector
c       = 2    gather implicitly using indirect addressing
c
c
      keygs = 1
c
c ... keyzer is a flag to specify if memory has been zeroed out.
c     i.e., is the operation  0.0 * indefinite = 0.0  legal 
c       = 0    not legal
c       = 1    legal
c
      keyzer = 0
c
c
      iparm(1)  =      2
      iparm(2)  =    100
      iparm(3)  =      0
      iparm(4)  =      6
      iparm(5)  =      0
      iparm(6)  =      1
      iparm(7)  =      1
      iparm(8)  =      1
      iparm(9)  =      5
      iparm(10) = 100000
      iparm(11) =      0
      iparm(12) =      2
      iparm(13) =      0
      iparm(14) =      0
      iparm(15) =      1
      iparm(16) =      0
      iparm(17) =      0
      iparm(18) =      2
      iparm(19) =     -1
      iparm(20) =     -1
      iparm(21) =      1
      iparm(22) =      1
      iparm(23) =      2
      iparm(24) =      0
      iparm(25) =      1
c
      rparm(1)  = 1.e-6
      rparm(2)  = 2.0
      rparm(3)  = 1.0
      rparm(4)  = 0.75
      rparm(5)  = 0.75
      rparm(6)  = 0.0
      rparm(7)  = 0.0
      rparm(8)  = 0.0
      rparm(9)  = 1.0
      rparm(10) = 0.0
      rparm(11) = 0.25
      rparm(12) = 0.0
      rparm(13) = 0.0
      rparm(14) = 0.0
      rparm(15) = 500.0*srelpr
      rparm(16) = 0.0
c
      return
      end 
      function timer (timdmy) 
c
c ... timer is a routine to return the execution time in
c ... seconds.  timer uses the fortran timing routine second.
c
c ... parameters -- 
c
c          timdmy   dummy argument
c
c
c     note -- on many computer systems there is a cpu-time subprogram 
c             which is more accurate than the fortran routine second. 
c
c
c     use the following when using second
c
c     timer = second (0.0)
c
c
c *********************************************
c **                                         **
c **   this routine is not portable.         **
c **                                         **
c *********************************************
c
c ... specifications for parameters
c
c
      timer = second ()
c
c     real tarray(2)
c     call etime (tarray)
c     timer = tarray(1)
c
      return
      end 
