13.08.2013 Views

?????????????? ?????? ? ????????? ?????????? ??????? ?????

?????????????? ?????? ? ????????? ?????????? ??????? ?????

?????????????? ?????? ? ????????? ?????????? ??????? ?????

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

end program kontur<br />

!********** Подпрограмма расчета топологических матриц ****************<br />

subroutine derevo(yzlov,vetvey,ta,he,C,A)<br />

!ta - массив начальных узлов<br />

!he - массив коненых узлов<br />

real C(vetvey,vetvey),A(vetvey,vetvey)<br />

real workC(vetvey),det(2)<br />

integer ipvtC(vetvey),mderevo(vetvey)<br />

integer yzlov,vetvey,v,ptr,ta(vetvey),he(vetvey)<br />

integer, allocatable::ADJ(:),NEXT(:),VECTOR(:),VISIT(:),LIST(:)<br />

!определение размеров массивов<br />

MAXP1=yzlov+1;IW=MAXP1+2*vetvey<br />

allocate(ADJ(IW),NEXT(IW),VECTOR(MAXP1),VISIT(MAXP1),LIST(MAXP1))<br />

!инициализация переменных<br />

KP=yzlov<br />

ADJ=0;NEXT=0;VECTOR=0;VISIT=0;LIST=0<br />

PTR=0; V=KP; I=KP+1;<br />

do K=1,vetvey<br />

M=ta(K); N=he(K); NEXT(I)=NEXT(M); ADJ(I)=N; NEXT(M)=I;<br />

I=I+1; NEXT(I)=NEXT(N); ADJ(I)=M; NEXT(N)=I; I=I+1;<br />

end do;<br />

LIST(yzlov+1)=0; I=1; N=1; LIST(1)=V; VECTOR(V)=0; VISIT(V)=1;<br />

!поиск узлов ветвей, относящихся к дереву<br />

do while (1==1)<br />

M=LIST(N); PTR=M;<br />

do while (1==1)<br />

NNN=NEXT(PTR); PTR=NNN;<br />

if (PTR==0) exit<br />

J=ADJ(PTR);<br />

if (VISIT(J)==0) then<br />

I=I+1; LIST(I)=J; VISIT(J)=I; VECTOR(J)=M;<br />

end if<br />

end do<br />

N=N+1;<br />

if (LIST(N)==0) exit<br />

end do<br />

!формирование массива с номерами ветвей дерева и хорд<br />

do m=1,vetvey<br />

mderevo(m)=m;<br />

end do;<br />

do k1=1,vetvey<br />

if (VECTOR(k1)/=0) k2=VECTOR(k1)<br />

do m=1,vetvey<br />

if ((ta(m)==k1 .and. he(m)==k2).or.(ta(m)==k2.and.he(m)==k1)) then<br />

mderevo(m)=0;exit<br />

end if<br />

end do<br />

end do<br />

j=yzlov-1<br />

do i=1,vetvey<br />

A(i,ta(i))=1;A(i,he(i))=- 1;<br />

if (ta(i)==yzlov) A(i,ta(i))=0<br />

if (he(i)==yzlov) A(i,he(i))=0<br />

if (mderevo(i)/=0) then<br />

j=j+1;A(i,j)=1<br />

endif<br />

end do<br />

C=transpose(A)<br />

91

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!