С. Д. Алгазин
V. Уравнения Стокса.
Препринт №700
Москва 2002 г.
Аннотация.
Рассматриваются линеаризированные, стационарные уравнения
Навье Стокса (уравнения Стокса) во внешности тела вращения,
когда вектор скорости ориентирован произвольно по отношению к
оси вращения, т.е. в общем случае задача – трёхмерная. Приводятся
программы на Фортране.
The summary.
The fixed linearizid Navier-Stokes equations (equations Stokes) in
appearance of a body of rotation are considered, when the vector of speed
is guided arbitrary in relation to rotation axis, i.e. generally problem -
three-dimensional. The programs on a Fortran are resulted.
2
Введение.
Это пятый препринт серии, объявленной в [1], предыдущие
препринты [1-4]. Он содержит описание программного комплекса
для решения линеаризированных стационарных уравнений Навье
Стокса во внешности тела вращения при произвольном направлении
вектора скорости относительно оси вращения, т.е. в общем случае
задача трёхмерная. Алгоритм описан в [5], здесь описан
программный комплекс для решения этой проблемы во внешности
шара и эллипсоида вращения. Для шара проводится сравнение с
точным решением [6].
(I.3) Δр = 0 ,
т. е. давление является гармонической функцией вне тела вращения.
Это обстоятельство используется ниже.
Введем систему криволинейных координат (r, θ, φ), связанную с
декартовыми координатами (х1,х2,х3) соотношениями
4
Обозначим G область, получаемую меридиональным сечением тела
Ω, и выберем функции и и v следующим образом. Пусть ψ=ψ(z),
ψ=u+iv, z=r exp (iθ) - конформное отображение круга |z| ≤ 1 на
внешность области G, причем центр круга переходит в бесконечно
удаленную точку. Удобно считать (r, θ, φ) сферическими
координатами, тогда соотношения (I.4) задают отображение шара
единичного радиуса на внешность тела Ω.
Для эллипсоида вращения вокруг оси х3
x12 x22 x32
+ + −1 = 0
b2 b2 a 2
5
декартовой системы координат, а независимые переменные х1,х2,х3
заменим подстановкой (I.4) на r, θ, φ. Тогда получаем
∂p ∂p 1 ∂p 1
( I .6) α cos ϕ + β cos ϕ − sin ϕ = (∆V 1 + f1 );
∂r ∂θ v ∂ϕ Re
∂p ∂p 1 ∂p 1
( I .7) α sin ϕ + β sin ϕ + cos ϕ = (∆V 2 + f 2 );
∂r ∂θ v ∂ϕ Re
rv ∂p rvr ∂p 1
( I .8) θ2 − 2 = (∆V 3 + f 3 );
w ∂r w ∂θ Re
∂V 1 ∂V 1 1 ∂V 1 ∂V 2 ∂V 2
( I .9) α cos ϕ + β cos ϕ − sin ϕ + α sin ϕ + β sin ϕ +
∂r ∂θ v ∂ϕ ∂r ∂θ
1 ∂V 2 rv ∂p rvr ∂p
+ cos ϕ + + θ2 − = f4 ,
v ∂ϕ w ∂r w2 ∂θ
где
Лапласиан от функций V i
(i = 1,2,3) в переменных (r, θ, φ)
принимает вид
r ∂ ∂V i ∂ v ∂V i 1 ∂ 2V i
(I.13) ∆V i = rv + + 2 .
vw2 ∂r ∂r ∂θ r ∂θ ∂ϕ 2
v
6
Итак, требуется решить уравнения (I.6)-(I.9) в шаре единичного
радиуса с краевыми условиями (I.11), (I.12).
2. Дискретный лапласиан и дискретные уравнения Стокса.
Для дискретизации лапласиана (I.13) с однородными краевыми
условиями (6.11) применим методику, описанную в [7].
Таким образом, получаем дискретный лапласиан в виде h-
матрицы:
∑
l '
2
(I.14) H= Λ k ⊗ hk , L = 2l + 1.
L
k =0
2π (i − j )
hkij = cos k , (i, j = 1,2,..., L);
L
r ∂ ∂Φ ∂ v ∂Φ k 2
(I.15) rv + − 2 Φ , k = 0,1,..., l
∂θ v
vw2 ∂r ∂r r ∂θ
с краевыми условиями
(I.16) Ф|r=0 = Ф|r=1 =0.
Для дискретизации дифференциального оператора (I.15),(I.16)
выберем по θ сетку, состоящую из n узлов:
π (2ν − 1)π
θν = ( yν + 1), yν = cos ε ν , ε ν = , ν = 1,2,..., n,
2 2n
7
∑
n
Tn ( x) gν 1
g (θ ) = , y= (2θ − π ),
(I.17) (−1) ν −1
π
ν =1 n ( y − yν )
sin ε ν
gν = g (θ ν ),ν = 1,2,..., n; Tn ( x) = cos (narccos( x)).
1 (2ν − 1)π
rν = ( zν + 1), zν = cos χν , χν = , ν = 1,2,..., m,
2 2m
∑
m
Tm (r )(r − 1)rq k
(I.18) q(r ) = , qν = q (rν ), z = 2r − 1.
(−1)ν −1
ν =1 m (rν − 1)rν ( z − zν )
sin χν
∑
m
Tm (r )rqν
(I.19) q(r ) = .
(−1)ν −1
ν =1 m rν ( z − zν )
sin χν
∑
2l
2
s (ϕ ) = Dl (ϕ − ϕ k ) s k , L = 2l + 1, s k = s (ϕ k ),
L
k =0
∑
l
Dl (ϕ − ϕ k ) = 0,5 + cos j (ϕ − ϕ k ).
j =1
9
образом, нормы матриц H и Н-1 имеют большие значения, которые
быстро растут с увеличением числа узлов сетки. В этом состоит
отличие внешних задач по сравнению с внутренними.
Здесь Рn-1 - матрица размера 3R x 3R; qп = (q1, q2 , q3), где qi, (i = 1,2,3)
- матрицы размера R х R; rп = (r1, r2, r3)', где ri, (i = 1,2,3)- матрицы
размера R x R. Тогда получаем
q n = α n−1vn An−−11 , Pn −1 = An−−11 + An−−11u nα n−1vn An−−11 , rn = − An−−11u nα n−1
10
следствием плохой обусловленности дифференциальных уравнений
Стокса в неограниченной области (внешности тела вращения) и
вызвано строением спектра оператора Лапласа в данной области.
Ниже будет рассмотрен приближенный метод решения плохо
обусловленных дискретных уравнений Стокса, а сейчас обсудим
свойства проведенной дискретизации. Классический подход к
дискретизации уравнений математической физики состоит в замене
производных конечными разностями. Этот подход обладает
существенным недостатком: он не реагирует на гладкость решения
рассматриваемой задачи математической физики, т. е. погрешность
дискретизации не зависит от гладкости разыскиваемого решения.
Другими словами, разностные алгоритмы приводят к численным
методам с насыщением [8]. Поэтому выше для дискретизации
уравнений Стокса применялась интерполяция решения
многочленами (алгебраическими или тригонометрическими).
Производные от искомых функций, входящие в уравнения Стокса,
вычислялись дифференцированием интерполяционных формул.
Данный метод дискретизации не имеет насыщения, поскольку
интерполяционный многочлен приближает искомую функцию тем
точнее, чем большим условиям гладкости она удовлетворяет [8].
Такое свойство алгоритма позволяет вести расчеты на достаточно
редкой сетке, когда число обусловленности дискретных уравнений
Стокса не очень велико.
3. Определение давления. Выше указывалось (см. (I.3)), что да-
вление - гармоническая функция. Рассмотрим более общую задачу
на собственные значения для оператора Лапласа в проколотом в
центре шаре единичного радиуса:
(I.21) ∆p = λp, p r =0 = 0.
11
При этом нас интересуют собственные функции краевой задачи
(I.21), соответствующие нулевому собственному значению λ = 0.
Замена соотношения (I.3) на более общую задачу (I.21) объясняется
тем, что методы решения конечномерных задач на собственные
значения хорошо разработаны [9], так же как и методы
дискретизации лапласиана [10].
В дискретном виде краевая задача (I.21) сводится к
вычислению собственных значений h-матрицы, т. е. к решению
алгебраической проблемы собственных значений:
(I.22) Hp=λp
(р — вектор длины птL, компоненты которого содержат значения
искомого давления в узлах сетки). Матрица Н строится по формуле
(I.14). Однако для численного дифференцирования по r применяется
интерполяционная формула (I.19), удовлетворяющая краевому
условию (см. (I.21)). Решая конечномерную задачу (I.22),
определяем собственные значения, близкие к нулю.
Соответствующий собственный вектор определяется с точностью до
постоянного множителя с. Подставив найденное давление в
дискретные уравнения Стокса, легко определим из уравнений
движения компоненты скорости. Для этого требуется обратить h-
матрицу по формуле
∑
l '
2
H −1 = Λ−1 k ⊗ hk , L = 2l + 1,
L
k =0
13
Λ3, Λ4 имеют собственные значения порядка 10-2 -103, 10-1 - 104, 10-1 -
104 соответственно, и, следовательно, у них нет собственных
значений, которые можно интерпретировать как близкие к нулю.
Второй расчет проводился на сетке из 900 узлов (m = п =10, L=9).
Матрица Λ0 имеет два действительных собственных значения,
близких к нулю: λ99 = 0,2 10-11 и λ100 = -0,4 10-18. Кроме того, имелась
также комплексная пара собственных значений, близкая к нулю, с
действительными частями собственных значений λ97 =λ98 =-0,5 10-7.
Остальные собственные значения имели порядок 10-3 - 103. Матрица
Λ1 имеет близкое к нулю действительное собственное значение λ100 =
-0,2 10-12. Кроме того, есть близкая к нулю комплексная пара с
действительными частями собственных значений λ98 = λ99 =-0,2 10-8.
Остальные собственные значения порядка 10-4 - 104. Собственные
значения матриц Λ2, Λ3, Λ4 имели порядок 10-6 – 105; 10-4 – 105; 10-3 –
105; соответственно. Итак, проведенные расчеты показывают, что
для шара единичного радиуса у h-матрицы четыре семейства
собственных векторов, дающих близкие к нулю собственные зна-
чения (заметим, что собственное значение матрицы Λ1) двукратное.
Вычисление собственных векторов h-матрицы для шара
проводилось на сетке из 900 узлов (m = п =10, L=9). Искомые четыре
семейства собственных функций задачи (I.21) для шара единичного
радиуса легко угадываются. Собственные векторы h-матрицы,
отвечающие близким к нулю действительным собственным
значениям матрицы Λ0, дают два семейства собственных функций,
не зависящих от φ.
(I.23) p1=cr
соответствует собственному значению λ100 матрицы Λ0, а
14
(I.24) p 2 = c1 r ln((1 − cosθ ) /(1 + cosθ )) + c 2 r
16
Результаты расчета показывают, что константы сi , (i = 1,2,...,
900) достаточно сильно отличаются друг от друга со средним
значением 318,31. Очевидно, что 900 узлов недостаточно для
нахождения этой собственной функции (напомним, что собственное
значение матрицы Λ1, отвечающее искомому собственному вектору,
имеет порядок 10-5, т. е. недостаточно близко к нулю). Для проверки
этой гипотезы были проведены расчеты для эллипсоида с
полуосями, а = 1, b= 0,95 на сетке из 900 узлов. Вычислялись
собственные значения матриц Λ0 и Λ1. Оказалось, что матрица Λ0
имеет два близких к нулю собственных значения: λ99 = 0,2 10-11 и λ100
= 0,1 10-16. Кроме того, имелась близкая к нулю комплексная пара
собственных значений с действительными частями собственных
значений λ97= λ98 = - 0,6 10-7. Остальные собственные значения были
порядка 10-3 - 103. Матрица Λ1 имеет одно действительное близкое к
нулю собственное значение λ100 = 0,2 10-12 и комплексную пару с
действительными частями собственных значений λ98= λ99 = - 0,2 10-8.
Вычисление собственного вектора проводилось для собственного
значения λ100 матрицы Λ1. Разброс сi , (i = 1,2,..., 900) составил от
147,85 до 160,57 со средним значением с = 152,36. Максимальная
относительная погрешность отличия полученного решения от
решения в шаре 6 %. Таким образом, для применения этого
приближенного решения дискретных уравнений Стокса расчетная
сетка должна быть такова, чтобы близкие к нулю собственные
значения h-матрицы (I.22) были порядка 10-12.
Расчеты проводились на ПЭВМ типа АТ-386 с тактовой
частотой 25 МГц и объемом оперативной памяти 640 килобайт. Как
видно из описанных выше расчетов, для численного исследования
доступны задачи об обтекании тел, близких к шару при малых
17
числах Рейнольдса, потоком вязкой несжимаемой жидкости. Для
изучения обтекания тел сложной формы необходимо использовать
более мощную ЭВМ.
PROGRAM LNS5
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION C0(10000),C1(10000),C2(10000),C3(10000),C4(10000)
DIMENSION DL1(10,10),DL2(10,10),DB1(10,10),DB2(10,10)
DIMENSION X(100),Y(100),AB(10000),IANA(100),P(100)
DIMENSION X1(100),Y1(100)
DIMENSION P1(100),P2(100)
DIMENSION Y2(100),Y3(100)
COMMON /EL/ A,B,RLA
PI=3.141592653589D0
M=5
N=5
M=10
N=10
L=9
L2=L-1
NT=M*N
NG=NT*L
A=1.D0
B=1.D0
RLA=A
VB1=1.D0
WRITE (*,*) 'VB1 = ?'
READ (*,*) VB1
VB2=0.D0
VB3=0.D0
VB=SQRT(VB1**2+VB2**2+VB3**2)
VB1=VB1/VB
VB2=VB2/VB
VB2=VB2/VB
RNU=1.373D-5
C M**2/CEK
RE=VB*RLA/RNU
18
WRITE(*,*) ' RE = ',RE
EPS0=0.D0
CALL MLKG7 (C0,0,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
CALL NMATR(NT,C0,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG7 (C1,1,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
CALL NMATR(NT,C1,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG7 (C2,2,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
CALL NMATR(NT,C2,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG7 (C3,3,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
CALL NMATR(NT,C3,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG7 (C4,4,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
CALL NMATR(NT,C4,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
C0
CALL ELMHES (NT,NT,1,NT,C0,IANA)
WRITE(*,*) 'ELMHES'
CALL ELTRAN (NT,NT,1,NT,C0,IANA,AB)
WRITE(*,*) 'ELTRAN'
CALL HQR2 (NT,NT,1,NT,C0,X,Y,AB,IERR)
WRITE(*,*) 'HQR2'
NOUT=5
OPEN (NOUT,FILE='NOUT')
WRITE (NOUT,*) ' IERR = ', IERR
13 FORMAT (13I5)
12 FORMAT (10E8.1)
WRITE(*,*) 'СОБСТВЕHHЫЕ ЗHАЧЕHИЯ МАТРИЦЫ C0'
WRITE(*,12) (X(I),I=1,NT)
OPEN (4,FILE='EIGC0')
I1=99
I2=100
DO 1 I=1,NT
N1=(I1-1)*NT
1 X1(I)=AB(N1+I)
DO 2 I=1,NT
N2=(I2-1)*NT
2 Y1(I)=AB(N2+I)
CALL NORM (NT,X1,RNORM1)
CALL NORM (NT,Y1,RNORM2)
19
DO 5 I=1,NT
X1(I)=X1(I)/RNORM1
5 Y1(I)=Y1(I)/RNORM2
WRITE(4,*) X1
WRITE(4,*) Y1
PI=3.141592653589D0
I=0
DO 49 NU=1,N
PSIN=(2.D0*NU-1.D0)*PI/2.D0/N
XN=COS(PSIN)
TN=PI*(XN+1.D0)/2.D0
DO 49 MU=1,M
XIM=(2.D0*MU-1.D0)*PI/2.D0/M
YM=COS(XIM)
RM=0.5D0*(1.D0+YM)
I=I+1
P1(I)=RM*DLOG((1.D0-COS(TN))/(1.D0+COS(TN)))
49 P2(I)=RM
DO 40 I=1,NT
Y2(I)=X1(I)/P1(I)
40 Y3(I)=Y1(I)/P2(I)
WRITE(*,*) 'ПРОВЕРКА ПРОПОРЦИОHАЛЬHОСТИ'
OPEN (1,FILE='PROV1')
OPEN (2,FILE='PROV2')
WRITE(1,*) Y2
WRITE(2,*) Y3
WRITE(*,*) (Y2(I),I=1,NT,10)
WRITE(*,*) (Y3(I),I=1,NT,10)
PAUSE
WRITE(*,12) (Y(I),I=1,NT)
PAUSE
C1
CALL ELMHES (NT,NT,1,NT,C1,IANA)
WRITE(*,*) 'ELMHES'
CALL ELTRAN (NT,NT,1,NT,C1,IANA,AB)
WRITE(*,*) 'ELTRAN'
CALL HQR2 (NT,NT,1,NT,C1,X,Y,AB,IERR)
WRITE(*,*) 'HQR2'
NOUT=5
WRITE (NOUT,*) ' IERR = ', IERR
WRITE(*,*) 'СОБСТВЕHHЫЕ ЗHАЧЕHИЯ МАТРИЦЫ C1'
WRITE(*,12) (X(I),I=1,NT)
20
OPEN (3,FILE='EIGC1')
I3=100
DO 3 I=1,NT
N3=(I3-1)*NT
3 X1(I)=AB(N3+I)
CALL NORM (NT,X1,RNORM3)
DO 6 I=1,NT
6 X1(I)=X1(I)/RNORM3
WRITE(3,*) X1
I=0
DO 48 NU=1,N
PSIN=(2.D0*NU-1.D0)*PI/2.D0/N
XN=COS(PSIN)
TN=PI*(XN+1.D0)/2.D0
DO 48 MU=1,M
XIM=(2.D0*MU-1.D0)*PI/2.D0/M
YM=COS(XIM)
RM=0.5D0*(1.D0+YM)
I=I+1
48 P(I)=+1.5D0*RM**2*SIN(TN)/RE
DO 4 I=1,NT
4 Y1(I)=X1(I)/P(I)
WRITE(*,*) 'ПРОВЕРКА ПРОПОРЦИОHАЛЬHОСТИ'
OPEN (8,FILE='PROV')
WRITE(8,*) Y1
WRITE(*,*) (Y1(I),I=1,NT,10)
PAUSE
WRITE(*,12) (Y(I),I=1,NT)
PAUSE
C2
CALL ELMHES (NT,NT,1,NT,C2,IANA)
WRITE(*,*) 'ELMHES'
CALL ELTRAN (NT,NT,1,NT,C2,IANA,AB)
WRITE(*,*) 'ELTRAN'
CALL HQR2 (NT,NT,1,NT,C2,X,Y,AB,IERR)
WRITE(*,*) 'HQR2'
NOUT=5
WRITE (NOUT,*) ' IERR = ', IERR
WRITE(*,*) 'СОБСТВЕHHЫЕ ЗHАЧЕHИЯ МАТРИЦЫ C2'
WRITE(*,12) (X(I),I=1,NT)
PAUSE
WRITE(*,12) (Y(I),I=1,NT)
21
PAUSE
C3
CALL ELMHES (NT,NT,1,NT,C3,IANA)
WRITE(*,*) 'ELMHES'
CALL ELTRAN (NT,NT,1,NT,C3,IANA,AB)
WRITE(*,*) 'ELTRAN'
CALL HQR2 (NT,NT,1,NT,C3,X,Y,AB,IERR)
WRITE(*,*) 'HQR2'
NOUT=5
WRITE (NOUT,*) ' IERR = ', IERR
WRITE(*,*) 'СОБСТВЕHHЫЕ ЗHАЧЕHИЯ МАТРИЦЫ C3'
WRITE(*,12) (X(I),I=1,NT)
PAUSE
WRITE(*,12) (Y(I),I=1,NT)
PAUSE
C4
CALL ELMHES (NT,NT,1,NT,C4,IANA)
WRITE(*,*) 'ELMHES'
CALL ELTRAN (NT,NT,1,NT,C4,IANA,AB)
WRITE(*,*) 'ELTRAN'
CALL HQR2 (NT,NT,1,NT,C4,X,Y,AB,IERR)
WRITE(*,*) 'HQR2'
NOUT=5
WRITE (NOUT,*) ' IERR = ', IERR
WRITE(*,*) 'СОБСТВЕHHЫЕ ЗHАЧЕHИЯ МАТРИЦЫ C4'
WRITE(*,12) (X(I),I=1,NT)
PAUSE
WRITE(*,12) (Y(I),I=1,NT)
STOP
END
FUNCTION V(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
V=0.5D0*((A-B)*R - (A+B)/R)*SIN(T)
V =V /RLA
RETURN
END
FUNCTION W2(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
W2=0.25D0*((A-B)*R+(A+B)/R)**2*SIN(T)**2+ +0.25D0*((A-
B)*R--(A+B)/R)**2*COS(T)**2
22
W2=W2/RLA**2
RETURN
END
FUNCTION VT(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
VT=0.5D0*((A-B)*R - (A+B)/R)*COS(T)
VT=VT/RLA
RETURN
END
FUNCTION VR(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
VR=0.5D0*( A-B + (A+B)/R**2)*SIN(T)
RETURN
END
SUBROUTINE NORM(N,Y,RNORM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION Y(1)
RNORM=0.D0
DO 1 J=1,N
IF(ABS(Y(J)).GT.RNORM) RNORM=ABS(Y(J))
1 CONTINUE
RETURN
END
SUBROUTINE NMATR (N,A,BNORM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(N,N)
BNORM = 0.D0
DO 1 I=1,N
C=0.D0
DO 2 J=1,N
2 C=C+ABS(A(I,J))
IF (C.GT.BNORM) BNORM=C
1 CONTINUE
RETURN
END
25
- EPS)/M
1 DR(MU,NU)=P
RETURN
END
27
собственный вектор из этого файла переписать в файл EIGVEC и запустить
программу LNS6, которая решает уравнения Стокса по известному давлению.
Примечание. Программа использует для решения
алгебраической проблемы собственных значений подпрограммы
пакета EISPACK: ELMHES, ELTRAN, HQR2. Тексты этих
подпрограмм доступны в Интернет по адресу:
htpp://www.netlib.org/eispack/.
PROGRAM LNS6
C 11.06.93
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION
C0(100,100),C1(100,100),C2(100,100),C3(100,100)
DIMENSION C4(100,100)
DIMENSION DL1(10,10),DL2(10,10),DB1(10,10),DB2(10,10)
DIMENSION P(100),X(0:8),PB(900),DB1R(10,10),DBF(0:8,0:8)
DIMENSION XL(100),YL(100),DL(10)
DIMENSION F1(900),F2(900),F3(900),F4(900)
DIMENSION P1(900),P2(900),P3(900)
DIMENSION Q1(900),Q2(900),Q3(900)
DIMENSION FB1(900),FB2(900),FB3(900)
DIMENSION C(900)
EQUIVALENCE (C0(1),C(1)),(FB1(1),XL(1)),(FB2(1),YL(1))
EQUIVALENCE (P1(1),DL(1)),(P2(1),X(0))
EQUIVALENCE (C1(1),F4(1))
COMMON /EL/ A,B,RLA
PI=3.141592653589D0
M=10
N=10
L=9
L2=L-1
NT=M*N
NG=NT*L
A=1.D0
B=1.D0
WRITE (*,*) 'B = ?'
READ (*,*) B
RLA=A
28
VB1=1.D0
VB2=0.D0
VB3=0.D0
RE=0.01D0
WRITE(*,*) ' RE = ',RE
EPS0=0.D0
C1A
OPEN (4,FILE='EIGVEC')
READ(4,*) P
C1B
WRITE(*,*) 'IPR = ?'
READ(*,*) IPR
IF (IPR.EQ.1) THEN
DO 1 K=0,L2
1 X(K)=1.D0
ENDIF
IF (IPR.EQ.2) THEN
DO 2 K=0,L2
FK=2.D0*PI*K/FLOAT(L)
2 X(K)=COS(FK)
ENDIF
IF (IPR.EQ.3) THEN
DO 3 K=0,L2
FK=2.D0*PI*K/FLOAT(L)
3 X(K)=SIN(FK)
ENDIF
J=0
DO 4 I=1,NT
DO 4 K=0,L2
J=J+1
4 PB(J)=P(I)*X(K)
C2
CALL MLKG6 (C0,0,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
DO 100 I=1,NT
DO 100 J=1,NT
100 C0(I,J)=C0(I,J)/RE
CALL DMINV (C0,NT,DET,XL,YL)
CALL NMATR(NT,C0,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG6 (C1,1,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
DO 101 I=1,NT
DO 101 J=1,NT
29
101 C1(I,J)=C1(I,J)/RE
CALL DMINV (C1,NT,DET,XL,YL)
CALL NMATR(NT,C1,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG6 (C2,2,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
DO 102 I=1,NT
DO 102 J=1,NT
102 C2(I,J)=C2(I,J)/RE
CALL DMINV (C2,NT,DET,XL,YL)
CALL NMATR(NT,C2,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG6 (C3,3,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
DO 103 I=1,NT
DO 103 J=1,NT
103 C3(I,J)=C3(I,J)/RE
CALL DMINV (C3,NT,DET,XL,YL)
CALL NMATR(NT,C3,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
CALL MLKG6 (C4,4,DL1,DL2,DB1,DB2,M,N,NT,EPS0)
DO 104 I=1,NT
DO 104 J=1,NT
104 C4(I,J)=C4(I,J)/RE
CALL DMINV (C4,NT,DET,XL,YL)
CALL NMATR(NT,C4,BNORM)
WRITE (*,*) 'BNORM = ',BNORM
C3
J=0
DO 5 NU=1,N
PSIN=(2.D0*NU-1.D0)*PI/2.D0/N
XN=COS(PSIN)
TN=PI*(XN+1.D0)/2.D0
DO 5 MU=1,M
XIM=(2.D0*MU-1.D0)*PI/2.D0/M
YM=COS(XIM)
RM=0.5D0*(1.D0+YM)
DO 5 K=0,L2
FK=2.D0*PI*K/L
J=J+1
F1(J)=-
RM*(1.D0+RM*VR(RM,TN)/V(RM,TN))*VB1/W2(RM,TN)
F2(J)=-
RM*(1.D0+RM*VR(RM,TN)/V(RM,TN))*VB2/W2(RM,TN)
30
5 F3(J)=-RM*(1.D0+RM*VR(RM,TN)/V(RM,TN))*VB3/W2(RM,TN)
DO 55 J=1,NG
F1(J)=F1(J)/RE
F2(J)=F2(J)/RE
55 F3(J)=F3(J)/RE
C4
CALL DIFR22 (DB1R,M,0.D0,EPS0,DL)
CALL DIFF (DBF,L2)
I=0
DO 90 NU=1,N
PSIN=(2.D0*NU-1.D0)*PI/2.D0/N
XN=COS(PSIN)
TN=PI*(XN+1.D0)/2.D0
DO 90 MU=1,M
XIM=(2.D0*MU-1.D0)*PI/2.D0/M
YM=COS(XIM)
RM=0.5D0*(1.D0+YM)
DO 90 K=0,L2
FK=2.D0*PI*K/L
I=I+1
DV1DR=0.D0
DO 230 MU2=1,M
IJ=IND(NU,MU2,K,M,L2)
230 DV1DR=DV1DR+DB1R(MU,MU2)*PB(IJ)
DV1DT=0.D0
DO 240 NU2=1,N
IJ=IND(NU2,MU,K,M,L2)
240 DV1DT=DV1DT+DB1(NU,NU2)*PB(IJ)
DV1DF=0.D0
DO 250 K2=0,L2
IJ=IND(NU,MU,K2,M,L2)
250 DV1DF=DV1DF+DBF(K,K2)*PB(IJ)
P1(I)=(ALFA(RM,TN)*COS(FK)*DV1DR+
+BETA(RM,TN)*COS(FK)*DV1DT-
SIN(FK)*DV1DF/V(RM,TN))
P2(I)=(ALFA(RM,TN)*SIN(FK)*DV1DR+
+BETA(RM,TN)*SIN(FK)*DV1DT+COS(FK)*DV1DF/V(RM,TN))
P3(I)=RM*VT(RM,TN)*DV1DR/W2(RM,TN)-
-RM*VR(RM,TN)*DV1DT/W2(RM,TN)
90 CONTINUE
C5
CALL DIVH (NT,2,C0,C1,C2,C3,C4,P1,Q1)
31
CALL DIVH (NT,2,C0,C1,C2,C3,C4,P2,Q2)
CALL DIVH (NT,2,C0,C1,C2,C3,C4,P3,Q3)
CALL DIVH (NT,2,C0,C1,C2,C3,C4,F1,FB1)
CALL DIVH (NT,2,C0,C1,C2,C3,C4,F2,FB2)
CALL DIVH (NT,2,C0,C1,C2,C3,C4,F3,FB3)
C6
J=0
DO 56 NU=1,N
PSIN=(2.D0*NU-1.D0)*PI/2.D0/N
XN=COS(PSIN)
TN=PI*(XN+1.D0)/2.D0
DO 56 MU=1,M
XIM=(2.D0*MU-1.D0)*PI/2.D0/M
YM=COS(XIM)
RM=0.5D0*(1.D0+YM)
DO 56 K=0,L2
FK=2.D0*PI*K/L
J=J+1
56 F4(J)=VB1*ALFA(RM,TN)*COS(FK)+VB2*ALFA(RM,TN)*
*SIN(FK)+VB3*RM*VT(RM,TN)/W2(RM,TN)
I=0
CC=0.D0
DO 80 NU=1,N
PSIN=(2.D0*NU-1.D0)*PI/2.D0/N
XN=COS(PSIN)
TN=PI*(XN+1.D0)/2.D0
DO 80 MU=1,M
XIM=(2.D0*MU-1.D0)*PI/2.D0/M
YM=COS(XIM)
RM=0.5D0*(1.D0+YM)
DO 80 K=0,L2
FK=2.D0*PI*K/L
I=I+1
DQ1DR=0.D0
DQ2DR=0.D0
DQ3DR=0.D0
DF1DR=0.D0
DF2DR=0.D0
DF3DR=0.D0
DO 130 MU2=1,M
IJ=IND(NU,MU2,K,M,L2)
DQ1DR=DQ1DR+DL1(MU,MU2)*Q1(IJ)
32
DQ2DR=DQ2DR+DL1(MU,MU2)*Q2(IJ)
DQ3DR=DQ3DR+DL1(MU,MU2)*Q3(IJ)
DF1DR=DF1DR+DL1(MU,MU2)*FB1(IJ)
DF2DR=DF2DR+DL1(MU,MU2)*FB2(IJ)
130 DF3DR=DF3DR+DL1(MU,MU2)*FB3(IJ)
DQ1DT=0.D0
DQ2DT=0.D0
DQ3DT=0.D0
DF1DT=0.D0
DF2DT=0.D0
DF3DT=0.D0
DO 140 NU2=1,N
IJ=IND(NU2,MU,K,M,L2)
DQ1DT=DQ1DT+DB1(NU,NU2)*Q1(IJ)
DQ2DT=DQ2DT+DB1(NU,NU2)*Q2(IJ)
DQ3DT=DQ3DT+DB1(NU,NU2)*Q3(IJ)
DF1DT=DF1DT+DB1(NU,NU2)*FB1(IJ)
DF2DT=DF2DT+DB1(NU,NU2)*FB2(IJ)
140 DF3DT=DF3DT+DB1(NU,NU2)*FB3(IJ)
DQ1DF=0.D0
DQ2DF=0.D0
DF1DF=0.D0
DF2DF=0.D0
DO 150 K2=0,L2
IJ=IND(NU,MU,K2,M,L2)
DQ1DF=DQ1DF+DBF(K,K2)*Q1(IJ)
DQ2DF=DQ2DF+DBF(K,K2)*Q2(IJ)
DF1DF=DF1DF+DBF(K,K2)*FB1(IJ)
150 DF2DF=DF2DF+DBF(K,K2)*FB2(IJ)
G1Q1=(ALFA(RM,TN)*COS(FK)*DQ1DR+
+BETA(RM,TN)*COS(FK)*DQ1DT-
SIN(FK)*DQ1DF/V(RM,TN))
G2Q2=(ALFA(RM,TN)*SIN(FK)*DQ2DR+
+BETA(RM,TN)*SIN(FK)*DQ2DT+COS(FK)*DQ2DF/V(RM,T
N))
G3Q3=RM*VT(RM,TN)*DQ3DR/W2(RM,TN)-
-RM*VR(RM,TN)*DQ3DT/W2(RM,TN)
G1F1=(ALFA(RM,TN)*COS(FK)*DF1DR+
+BETA(RM,TN)*COS(FK)*DF1DT-
SIN(FK)*DF1DF/V(RM,TN))
33
G2F2=(ALFA(RM,TN)*SIN(FK)*DF2DR+
+BETA(RM,TN)*SIN(FK)*DF2DT+COS(FK)*DF2DF/V(RM,TN
))
G3F3=RM*VT(RM,TN)*DF3DR/W2(RM,TN)-
-RM*VR(RM,TN)*DF3DT/W2(RM,TN)
C(I)=(F4(I)+G1F1+G2F2+G3F3)/(G1Q1+G2Q2+G3Q3)
WRITE(*,*) 'I = ',I,'C = ',C(I)
CC=CC+C(I)/NG
80 CONTINUE
WRITE(*,*) (C(I),I=1,NG,NT)
OPEN (3,FILE='C')
WRITE(3,*) C
WRITE(*,*) 'CC = ',CC
WRITE(3,*) 'CC = ',CC
DO 99 I=1,NG
99 PB(I)=CC*PB(I)
WRITE(3,*) 'ПРИБЛИЖЕHHОЕ РЕШЕHИЕ'
WRITE(3,*) PB
WRITE(*,*) 'ПРИБЛИЖЕHHОЕ РЕШЕHИЕ'
WRITE(*,*) (PB(I),I=1,NG,NT)
I=0
DO 48 NU=1,N
PSIN=(2.D0*NU-1.D0)*PI/2.D0/N
XN=COS(PSIN)
TN=PI*(XN+1.D0)/2.D0
DO 48 MU=1,M
XIM=(2.D0*MU-1.D0)*PI/2.D0/M
YM=COS(XIM)
RM=0.5D0*(1.D0+YM)
DO 48 K=0,L2
FK=2.D0*PI*K/L
I=I+1
48 C(I)=+1.5D0*RM**2*SIN(TN)*COS(FK)/RE
WRITE(3,*) 'ТОЧHОЕ РЕШЕHИЕ'
WRITE(3,*) C
WRITE(*,*) 'ТОЧHОЕ РЕШЕHИЕ'
WRITE(*,*) (C(I),I=1,NG,NT)
EP=0.D0
DO 49 I=1,NG
IF((PB(I)-C(I)).GT.EP) THEN
EP=PB(I)-C(I)
IJ=I
34
ENDIF
49 CONTINUE
EP1=(EP/C(IJ))*100.D0
WRITE (3,*) 'МАКСИМАЛЬHАЯ ОШИБКА
1В ПРОЦЕHТАХ = ',EP1
WRITE (*,*) 'МАКСИМАЛЬHАЯ ОШИБКА
1В ПРОЦЕHТАХ = ',EP1
STOP
END
FUNCTION V(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
V=0.5D0*((A-B)*R - (A+B)/R)*SIN(T)
V =V /RLA
RETURN
END
FUNCTION W2(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
W2=0.25D0*((A-B)*R+(A+B)/R)**2*SIN(T)**2+
+0.25D0*((A-B)*R-(A+B)/R)**2*COS(T)**2
W2=W2/RLA**2
RETURN
END
FUNCTION VT(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
VT=0.5D0*((A-B)*R - (A+B)/R)*COS(T)
VT=VT/RLA
RETURN
END
FUNCTION VR(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
VR=0.5D0*( A-B + (A+B)/R**2)*SIN(T)
RETURN
END
FUNCTION UT(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON /EL/ A,B,RLA
UT=-0.5D0*((A-B)*R + (A+B)/R)*SIN(T)
UT=UT/RLA
35
RETURN
END
FUNCTION ALFA(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
ALFA=-R*UT(R,T)/W2(R,T)
RETURN
END
FUNCTION BETA(R,T)
IMPLICIT REAL*8 (A-H,O-Z)
BETA=1./VT(R,T)+R*UT(R,T)*VR(R,T)/VT(R,T)/W2(R,T)
RETURN
END
SUBROUTINE NORM(N,Y,RNORM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION Y(1)
RNORM=0.D0
DO 1 J=1,N
IF(ABS(Y(J)).GT.RNORM) RNORM=ABS(Y(J))
1 CONTINUE
RETURN
END
SUBROUTINE NMATR (N,A,BNORM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(N,N)
BNORM = 0.D0
DO 1 I=1,N
C=0.D0
DO 2 J=1,N
2 C=C+ABS(A(I,J))
IF (C.GT.BNORM) BNORM=C
1 CONTINUE
RETURN
END
36
ALFA, BETA – подпрограмм функции для v, w2, vθ, vr, α, β (см. (I.4),
(I.10)); NORM, NMATR – описаны выше.
38
III. Заключение. По поводу получения полных версий описанных
программ обращайтесь по электронному адресу: algazinsd@mail.ru или
на адрес Института проблем механики РАН, 117525, Москва,
проспект Вернадского д.101, к.1.
39