if(mpb<=0) then
write (Msg,'(a,i6,a)') &
'Mатрицы Y многополюсника',NumMPDam,' в банке нет.'
call AbortDlg(Msg)
ier=1
goto 99
endif
По банковскому номеру определим число фаз в неповрежденном многополюснике
kfm=Coctym(mpb,3)
Выделяем память под матрицу узловых проводимостей неповрежденного многополюсника и под матрицу узловых проводимостей поврежденного многополюсника.
Allocate(YMPNonDamaged(kfm*kfm),YMPDamaged(kfm*kfm))
Выделяем память под расчетные и замеренные токи.
Allocate(IEtalon(kfm),I(kfm))
Замеренные токи будем читать из текстового файла Etalon.txt.
Открываем текстовый файл Etalon.txt и читаем из него замеренные токи
open(11,file='C:\Maska\Develop\Etalon.txt')
read(11,*) IEtalon
Читаем матрицу Y неповрежденного многополюсника из Y файла
read (Yfile,rec=Coctym(mpb,2)) YMPNonDamaged
Для нахождения минимума целевой функции двух переменных обращаемся к встроенной фортрановской процедуре ВСРОL. Данная процедура минимизирует целевую функцию при заданной системе ограничений типа неравенств.
Xguess = (0.5, 5.0) – Стартовые значения переменных.
XLB = (0.001, 0.01) Их нижние границы
XUB = (0.999, 100) Их верхние границы
data Xguess/0.5, 5.0/, XLB/0.001, 0.01/, XUB/0.999E0, 100.0E0/
FTol = 1.0E-3 – Требуемая точность поиска.
IBtype = 0 - границы устанавливаются вручную
MAXFCN = 300 - количество итераций (оценок)
FCN – целевая функция (формирование целевой функции приведено ниже)
call BCPOL(FCN,N,Xguess,IBtype,XLB,XUB,FTol,MAXFCN,X,Fvalue)
R=X(2) - Сопротивление КЗ
Вывод полученных результатов в файл результатов расчёта. С новой строки отступаем 7 пробелов и выводим символьную строку "ОПРЕДЕЛЕНИЕ МЕСТА ПОВРЕЖДЕНИЯ", на следующей строке выводим символьную строку:
" Поврежденный МП Вид КЗ Расстояние (о.е.) Сопротивление (Ом) "
write (print,'(/7x,a/a)') &
Выводим номер поврежденного многополюсника, вид короткого замыкания, расстояние до места повреждения (в о.е.), сопротивление короткого замыкания
write (print,'(7x,i6,8x,i2,6x,F4.3,7x,F6.3)') NumMPDam,kindKZ,Distance,R
Если память выделялась, освобождаем ее
99 if (Allocated(YMPNonDamaged)) Deallocate(YMPNonDamaged)
if (Allocated(DiagZ))Deallocate(DiagZ)
if (Allocated(Zn)) Deallocate(Zn)
if (Allocated(Zv)) Deallocate(Zv)
if (Allocated(NextZ))Deallocate(NextZ)
if (Allocated(AnbZ)) Deallocate(AnbZ)
if (Allocated(IbsZ)) Deallocate(IbsZ)
end subroutine
end module
2.3.3 Процедураформированияцелевойфункции FCN
subroutine FCN(N,X,F)
Целевая функция от вектора переменных: расстояния до места повреждения (RelDistan) и сопротивления короткого замыкания (R).
use OMPData
real*4:: F – Целевая функция
integer*4:: N - количество переменных
real*4:: X(N) - массив значений переменных
real*4::RelDistan, R
integer*2::ADDMPFORY,mpb
RelDistan=X(1) - длина до места повреждения в о.е.
R=X(2) - сопротивление КЗ
Формируем матрицу Y поврежденного многополюсника. Для этого обращаемся к процедуре MPDamLine, описание которой приведено в п.2.2.
call MPDamLine (YMPNonDamaged,RelDistan, R,kindKZ,NumMPDam, YMPDamaged)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.