C Блок 4: Расчёт количества линейно независимых узлов (переменная KW);
C создание массива номеров этих узлов (массив NW(KW));
C KW1 - количество линейно независимых узлов схемы минус один;
C (это количество узлов подлежит удалению программой ZHORTKA)
810 KW=0
DO 36 I=1,99
M=0
DO 35 K=1,KH
IF(I.EQ.N1K(K)) GO TO 34
IF(I.NE.N2K(K)) GO TO 35
34 M=1
35 CONTINUE
IF(M.EQ.0) GO TO 36
KW=KW+1
IF(KW.LE.70) GO TO 245
WRITE(5,244)
244 FORMAT(1X,'РАЗМЕРНОСЦЬ МАССИВОВ NW(70),KNNERAD(70),U(70),
*НЕДОСТАТОЧНАЯ ДЛЯ РЕШЕНИЯ ВАШЕЙ ЗАДАЧИ'/1X,'ТРЕБУЕТСЯ УВЕ
*ЛИЧЕНИЕ РАЗМЕРНОСТЕЙ МАССИВОВ В ОПЕРАТОРЕ DIMENSION')
223 WRITE(5,*)' ПРОГРАММА ZORKA НЕ МОЖЕТ ПРОДОЛЖИТЬ ВЫПОЛНЕНИЕ',
*' ВАШЕГО ЗАДАННИЯ И ЗАВЕРШАЕТ РАБОТУ'
STOP
245 NW(KW)=I
36 CONTINUE
KW1=KW-1
IF(NDRUK.EQ.0) GO TO 820
WRITE(3,*)' БЛОК 4',' KW=',KW,' NW(KW)=',(NW(I),I=1,KW)
C Блок 5: Обнуление массивов для падсчёта узловых напряжений
820 DO 50 I=1,KW
50 U(I)=0.
C Блок 6: Засылка номеров узлов в рабочие масiсиы для подпрограммы ZHORTKA
DO 40 I=1,KH
N1K1(I)=N1K(I)
40 N2K1(I)=N2K(I)
C Блок 7: Вызов подпрограммы ZHORTKA (Свёртка)
CALL ZHORTKA(N1K1,N2K1,Y,JY,NW,KW1,KH,KNNE,KNNERAD,YDIAG,JU,
*NSNNE,YNNE,NDRUK)
IF(NDRUK.EQ.0) GO TO 830
WRITE(3,*)' БЛОК 7',' KW=',KW,' KNNERAD(KW),YDIAG(KW),JU(KW)=',
*(KNNERAD(I),YDIAG(I),JU(I),I=1,KW)
WRITE(3,*)' KNNE=',KNNE,' NSNNE(KNNE),YNNE(KNNE)=',
*(NSNNE(I),YNNE(I),I=1,KNNE)
C EREZ - результирующая ЭДС схемы относительно последнего узла, для которого выC полнялась свёртка
C RREZ - результирующее сопротивление схемы относительно последнего узла
830 EREZ=JY(1)/Y(1)
RREZ=1./Y(1)
IF(NDRUK.EQ.0) GO TO 840
WRITE(3,*)' БЛОК 7',' EREZ=',EREZ,' RREZ=',RREZ
C Блок 8: Рассчёт узловых напряжений
840 U(KW)=EREZ
M=KW
C NK-номер конечного элемента i-той строки трыангуляавнай матрицы
NK=KNNE
55 M=M-1
M1=M+1
C NP-номар начального элемента i-той строки трыангуляванай матрицы
NP=NK-KNNERAD(M)
N=NP+1
DO 52 K=M1,KW
DO 51 L=N,NK
IF(NW(K).EQ.NSNNE(L))U(M)=U(M)+U(K)*YNNE(L)
51 CONTINUE
52 CONTINUE
U(M)=(U(M)+JU(M))/YDIAG(M)
NK=NP
IF(M.GT.1)GO TO 55
IF(NDRUK.EQ.0) GO TO 850
WRITE(3,*)' БЛОК 8',' U(KW)=',(U(I),I=1,KW)
C Блок 9: Расчёт токов в ветвях схемы
850 DO 63 I=1,KH
C N1-номер первого конца ветви
C N2- номер второго конца ветви
C U1-узловое напряжение первого конца ветви
C U2- номер второго конца ветви
N1=N1K(I)
N2=N2K(I)
IF(N1.EQ.0)GO TO 60
IF(N2.EQ.0)GO TO 152
GO TO 61
60 U1=0
61 DO 62 K=1,KW
IF(N2.NE.NW(K)) GO TO 62
U2=U(K)
62 CONTINUE
IF(N1.EQ.0)GO TO 155
GO TO 153
152 U2=0
153 DO 154 K=1,KW
IF(N1.NE.NW(K))GO TO 154
U1=U(K)
154 CONTINUE
155 IF(N1.GT.N2)GO TO 156
TOK(I)=(U2-U1-E(I))/R(I)
GO TO 63
156 TOK(I)=(U1-U2-E(I))/R(I)
63 CONTINUE
IF(NDRUK.EQ.0) GO TO 108
WRITE(3,*)' БЛОК 9',' TOK(KH)=',(TOK(I),I=1,KH)
C Блок 10: Запись результатов расчёта в выходной
C файл AAAA.REZ, где AAAA - имя файла входных данных
108 WRITE(3,105)(NW(I),U(I),I=1,KW)
105 FORMAT(/' РЕЗУЛЬТАТЫ РАСЧЁТА:'/'Напряжения:'/
*' Узел Напряжений'/(I8,F14.5))
WRITE(3,201)(N1K(I),N2K(I),TOK(I),I=1,KH)
201 FORMAT('Токи:'/' Ветвь схемы Ток'/
*' (Дополнительным направлением тока в ветви считается направление'/
*' от конца ветви с большим номером к концу с меньшим номером)'/
*(I12,I5,F12.4))
C Блок 11: Закрытие файла выходных данных на диск ЭВМ
CLOSE(UNIT=3)
C Блок 12: Выдача конечного результата на экран дисплея
WRITE(5,390)Z2
390 FORMAT(1X,'Программа ZORKA работу закончила. Рэзультаты расчёта зап
*исаны на диск в файл '1X,A8)
STOP
END
C
C
SUBROUTINE ZHORTKA(N1K,N2K,Y,JY,NW,KW,KH,KNNE,KHMPZWW,YSMPZWW,
* JMPZWW,NWMPZWW,YHMPZWW,NDRUK)
C Подпрограмма ZHORTKA выполняет свёртку схемы к узлу, номер которого
C записан последним в массиве NW(KW+1)
C Входные переменные и массивы подпрограммы:
C N1K(KH) - массив номеров "Первых" концов ветвей схемы
C N2K(KH) - массив номеров "Вторых" концов ветвей схемы
C Y(KH) - массив проводимостей ветвей схемы
C JY(KH) - массив токов источников тока ветвей схемы
C NW(KW+1) - массив номеров линейно независимых узлов схемы; последним в этом
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.