      implicit real*8(a-h,o-z)
      parameter(mxtotv=10,mxvfix=5)

      dimension lpamc(mxtotv),rgmat((mxtotv*(mxtotv+1))/2),
     .          gload(mxtotv),xdisp(mxtotv),resdl(mxtotv)

      dimension ngfix(mxvfix),presc(mxvfix),treac(mxvfix)
      dimension wrksp(3*mxtotv)

      logical cnvgc

      ntotv=5

      lpamc(1)= 1
      lpamc(2)= 3
      lpamc(3)= 6
      lpamc(4)=10
      lpamc(5)=15

      rgmat( 1)=   80.d+00
      rgmat( 2)=   42.d+00
      rgmat( 3)=   90.d+00
      rgmat( 4)=   20.d+00
      rgmat( 5)=   49.d+00
      rgmat( 6)=  100.d+00
      rgmat( 7)=    6.d+00
      rgmat( 8)=   25.d+00
      rgmat( 9)=   63.d+00
      rgmat(10)=  120.d+00
      rgmat(11)=    2.d+00
      rgmat(12)=    7.d+00
      rgmat(13)=   10.d+00
      rgmat(14)=   56.d+00
      rgmat(15)=  150.d+00

      gload(1)=   146.d+07
      gload(2)= -1567.d+07
      gload(3)= - 737.d+07
      gload(4)= - 484.d+07
      gload(5)=  8303.d+07

      nvfix= 2

      ngfix(1)= 3
      ngfix(2)= 4
      presc(1)= 0.288434016d+09
      presc(2)=-0.409236010d+09

      kplibre=1
      call DimensionamientoDinamico(3*mxtotv,kplibre,ntotv,kpw)
      call DimensionamientoDinamico(3*mxtotv,kplibre,ntotv,kps)
      call DimensionamientoDinamico(3*mxtotv,kplibre,ntotv,kpz)
      
      niter=ntotv+5
      nactu=100

      epslx=1.d-12
      rltvx=1.d-08     
      epslr=1.d-12
      rltvr=1.d-08

      do itotv=1,ntotv
        xdisp(itotv)=0.d+00
      enddo

      call SLE$Solver_PCG_CP(ntotv,lpamc,rgmat,gload,
     .                      nvfix,ngfix,presc,
     .                      niter,nactu,epslx,rltvx,epslr,rltvr,
     .                      wrksp(kpw),wrksp(kps),wrksp(kpz),
     .                      xdisp,resdl,treac,
     .                      rnorm,kiter,cnvgc)

      print*, ' CNVGC=',cnvgc
      print*, ' RNORM=',rnorm
      print*, ' KITER=',kiter
      do itotv=1,ntotv
        print*, ' ITOTV=',itotv,'     XDISP=',xdisp(itotv)
      enddo
      do ivfix=1,nvfix
        print*, ' IVFIX=',ivfix,'     TREAC=',treac(ivfix)
      enddo

      end
     
c_______________________________________________________DimensionamientoDinamico
      Subroutine DimensionamientoDinamico(MXKP,kplibre,ncomponentes,kp)

      kp=kplibre
      kplibre=kplibre+ncomponentes
      if (kplibre.gt.MXKP+1) call ErrorFatal('Memoria insuficiente')

      return
      end

c_____________________________________________________________________ErrorFatal
      Subroutine ErrorFatal(mensaje)
      character*(*) mensaje

      write(6,100) mensaje
  100 format(' Error: ',a)

      stop
      end
