Умножение профильной несимметричной матрицы на вектор (Лабораторная работа № 3), страница 2

!------------------------------------------------------------------------------------------------------------

!подпрограмма проверки данных на корректность; параметры: isignal- !флаг-результат, А - масссив для данных, ir- его размерность, kv-!размерность вектора

!---------------------------------------------------------------------------------------------------     

subroutine proverka(isignal,ir)

      common/m/ka,kia

      common/v/kv

      isignal=1

      if(kv.lt.1.or.(kia-1).lt.1.or.kv.ne.(kia-1))then!размервектораилиматрицыменьше 1

      print *,'nevernie dannie'      ! или не равны друг другу

      isignal=0

      else   

      if((2*ka+4*kia-3).gt.ir)then !недостаточно места для всех данных и результатов

      print *,'nehvatka pamyati'

      isignal=0

      end if

      end if

      end

!------------------------------------------------------------------------------------------------------------

!подпрограмма скалярного произведения матрицы на вектор; параметры: !А-массив исходных данных, ir-его размерность

!------------------------------------------------------------------------------------------------------------

      subroutine mult(ai,di,al,au,vec,rez)

common/m/ka,kia

      dimension Ai(kia)

      dimension di(kia-1)

      dimension Al(ka)

      dimension Au(ka)

      dimension vec(kia-1)

      dimension rez(kia-1)

      do i=1,kia-1,1

      rez(i)=di(i)*vec(i)

      k=i-ai(i+1)+ai(i)

      l=ai(i+1)-ai(i)

      do j=1,l,1

      ij=ai(i)+j-1

      rez(i)=rez(i)+al(ij)*vec(k)

      rez(k)=rez(k)+au(ij)*vec(i)

      k=k+1     

      end do

      end do 

      end

!------------------------------------------------------------------------------------------------------------

! подпрограмма перевода текстовых файлов в файлы прямого доступа; !параметры: !А-массив исходных данных

!------------------------------------------------------------------------------------------------------------

      subroutine convertor(a)

   common/m/ka,kia

      common/v/kv

      dimension a(*)

      read (11,*)kv

      read (10,*)kia

      kia=kia+1

      read(10,*)(a(i),i=1,kia,1)                     !ai()

      ka=a(kia)-1

      read(10,*)(a(i),i=kia+1,2*kia-1,1)                                  !di()

      read(10,*)(a(i),i=2*kia,2*kia+ka-1,1)                                                        !au()

      read(10,*)(a(i),i=2*kia+ka,2*ka+2*kia-1,1)                               !al()

      do i=1,2*ka+2*kia-1,1

      write(13,rec=i)a(i)

      end do

      read(11,*)(a(i),i=2*ka+2*kia,2*ka+3*kia-2,1)                                         !vec()

      do i=2*ka+2*kia,2*ka+3*kia-2,1

      write(14,rec=i-2*ka-2*kia+1)a(i)

      end do

      end

!------------------------------------------------------------------------------------------------------------

! подпрограмма генерации матрицы размерности n*n и вектора размерности n

!параметры: n –размерность матрицы

!------------------------------------------------------------------------------------------------------------

subroutine generator(n)

      common/m/ka,kia

      common/v/kv

      kia=n+1

      ka=n-1

      kv=n

      write(13,rec=1)1.0

      do i=2,kia,1                                            !write ia()

      a=i-1

      write(13,rec=i)a

      end do

      do i=kia+1,2*kia-1,1                              !write di()

      a=i-kia

      write(13,rec=i)a

      end do

      do i=2*kia,2*kia+ka-1                 !write al()

      a=i-2*kia+1

      write(13,rec=i)a

      end do

      do i=2*kia+ka,2*ka+2*kia-1,1                 !write au()

      a=3*kia+ka-i-2

      write(13,rec=i)a

      end do

      do i=1,kia-1,1                 !write vec()

      a=i

      write(14,rec=i)a

      end do

       end

!------------------------------------------------------------------------------------------------------------

! – подпрограмма вычисления скалярного произведения для сгенерированной !матрицы; параметры: n –размерность матрицы,rez массив для хранения !вектора-результата

!------------------------------------------------------------------------------------------------------------

subroutine rezult(n,rez)

      dimension rez(n)