Подпрограмма FCNJ. Вычисление якобиана правых частей неявной СДУ

Обращение к пп FCNJ описано в п. 1.7.1. Программа IVPAG (DIVPAG) сама вызывает подпрограмму FCNJ. Если при вызове IVPAG в исходных данных задан PARAM(13)=1 (в файле данных это miter=l; см. п. 1.9.1.), то пользователь должен заполнить двумерный массив PDG численными значениями элементов якобиана правых частей решаемых ДУ.

Якобиан, он же - определитель Якоби, - функциональный определитель, составленный из частных производных 1-го порядка. Если имеется п функций У/(^1’>’2’•••’»?)’ от п переменных и существуют частные первые

производные от этих функций по каждой переменной, то якобиан имеет вид

При моделировании ИДМ в качестве функций У/ (>?j, У2 ’***’ У/г) ПРИ отсутствии движения диска выступают правые части трёх (п=3) ДУ (1.62), (1.73), а в качестве переменных У,У2*Уз “ соответственно При

движении диска функциями //(>’i,>’2»-">>’/i) являются правые части пяти (п=5) ДУ (см. 1.63), а переменными - /|, /2, ис, v,x.

На этапе трогания для правой части ДУ (1.62) якобиан имеет вид

а при движении диска (см. 1.63) вид

где z Z, если ход диска осуществляется в пределах первого участка механической характеристики, и z = z2> если ход диска - в пределах второго участка механической характеристики (см. рис. 1.7, рис. 1.33, формулы (1.54), (1.55)).

В тексте пп FCNJ показано как заполняется массив PDG для случая трёх ДУ (см. условие nl==3) и для случая пяти ДУ (см. условие nl==5)

!Программа вычисления якобиана для неявной СДУ:

SUBROUTINE FCNJfnl, tl, Yl, PDG)

USE DESCRIBE; IMPLICIT NONE REAL(8):: tl,Yl(nl), PDG(nl,nl), zo INTEGER:: nl, nrazl=0, nraz2=0 SAVE nrazl, nraz2

if(nrazl==0) then; PDG=0d0; nrazl=l; endif if(nraz2==0.AND.dvigen) then; PDG=0d0; nraz2=l; endif if(nl==3) then

PDG(1,1)=-R1; PDG(l,3)=-ldO; PDG(2,2)=-SoprD; PDG(3,l)=ldO/emk endif

if(nl==5) then; il=Yl(l); i2=Yl(2); uc=Yl(3); vd=Yl(4) x=Yl(5); CALL CalculatingSpline

PDG(l,l)=-Rl-vd*dLldx; PDG(2,l)=-vd*dvzdx; PDG(3,l)=ldO/emk PDG(4/l)=i2*dvzdx

PDG(l,2)=-vd*dvzdx; PDG(2/2)=-SoprD-vd*dL2dx; PDG(4,2)=il*dvzdx PDG(l#3)=-ldO

PDG(l/4)=-il*dLldx-i2*dvzdx; PDG(2,4)=-il*dvzdx-i2*dL2dx;PDG(5/4)=ld0 PDG(l;5)=-il*(dRldx+vd*d2Lldx2)-i2*vd*d2Mdx2; PDG(2/5)=-i2*(dR2dx+vd*d2L2dx2)-il*vd*d2Mdx2; if(uch==l) zo=zl; if(uch==2) zo=z2;

PDG(4/5)=il*i2*d2Mdx2-zo

endif

END

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ     След >