Вы находитесь на странице: 1из 39

Институт проблем механики

Российской Академии Наук

С. Д. Алгазин

ЧИСЛЕННЫЕ АЛГОРИТМЫ КЛАССИЧЕСКОЙ


МАТФИЗИКИ.

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.

055(02)2  Институт проблем механики РАН 2002

2
Введение.
Это пятый препринт серии, объявленной в [1], предыдущие
препринты [1-4]. Он содержит описание программного комплекса
для решения линеаризированных стационарных уравнений Навье
Стокса во внешности тела вращения при произвольном направлении
вектора скорости относительно оси вращения, т.е. в общем случае
задача трёхмерная. Алгоритм описан в [5], здесь описан
программный комплекс для решения этой проблемы во внешности
шара и эллипсоида вращения. Для шара проводится сравнение с
точным решением [6].

I. Численное исследование уравнений Стокса.

Рассматривается внешняя задача для линеаризованных


стационарных уравнений Навье - Стокса (уравнений Стокса) при
обтекании тела вращения с малыми числами Рейнольдса.
Относительно направления вектора скорости в невозмущенном
потоке не делается никаких предположений. Таким образом, в
общем случае задача трехмерна. В результате численного
исследования этих уравнений установлена их плохая обусло-
вленность. Предложен численный алгоритм решения плохо
обусловленных уравнений Стокса, который не имеет насыщения, т.
е. его точность тем выше, чем большим условиям гладкости
удовлетворяет искомое решение.
1. Постановка задачи и выбор системы координат. В декартовых
координатах (х1, х2, х3) система уравнений Стокса имеет вид
∂p 1
( I .1) = ∆vi , i = 1,2,3;
∂xi Re
∂v1 ∂v 2 ∂v 3
( I .2) + + = 0,
∂x1 ∂x2 ∂x3
3
где Re - число Рейнольдса; (v1, v2, v3) — вектор скорости; р -
давление. Входящие в уравнения (I.1), (I.2) зависимые и
независимые переменные обезразмерены стандартным способом. За
характерные величины принимаются характерный линейный размер
La и модуль вектора скорости потока в бесконечности v∞ тогда,

например, p = ( P − p∞ ) /( ρv∞2 ) (Р — размерное давление, ρ- плотность


жидкости, p∞ - давление в невозмущенном потоке (в
бесконечности)).
Таким образом, для определения параметров потока, вектора
скорости (v1, v2, v3) и давления р требуется найти решение системы
уравнений (I.1), (I.2), удовлетворяющее следующим граничным
условиям:

vi = 0, i = 1,2,3, vi = v∞i , i = 1,2,3, p ∞ = 0.


∂Ω ∞

Здесь Ω - рассматриваемое тело вращения вокруг оси х3; дΩ — его


граница; v∞i (i = 1,2,3) − скорость жидкости в невозмущенном потоке (в
бесконечности).
Следствием уравнений (I.1), (I.2) будет соотношение

(I.3) Δр = 0 ,
т. е. давление является гармонической функцией вне тела вращения.
Это обстоятельство используется ниже.
Введем систему криволинейных координат (r, θ, φ), связанную с
декартовыми координатами (х1,х2,х3) соотношениями

(I.4) x1=v(r,θ)cosφ, x2=v(r,θ)sinφ, x3=u(r, θ).

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

функции u и v известны в аналитическом виде (см. [4]). Поверхность


шара единичного радиуса переходит при отображении (I.4) в
поверхность тела Ω. Тогда краевые условия, заданные на дΩ,
переносятся на поверхность шара, а краевые условия, заданные в
бесконечности, переносятся в центр шара.
Обычно при использовании криволинейных координат
уравнения для векторных величин записываются в проекциях на оси
собственного базиса, координатные векторы которого направлены
по касательным к координатным линиям. Этот базис зависит от
координат точки пространства. В данном случае такой подход
неудобен, так как отображение (I.4) теряет однозначность на оси х3
(если V = 0, то φ любое). Это вызывает появление особенностей в
решении, которые вызваны не существом дела, а «плохой» системой
координат. Отметим, что сферическая система координат обладает
аналогичным «недостатком».
Выход из этого положения следующий: оставим в качестве
искомых функций проекции вектора скорости V
I
(i = 1,2,3) на оси

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 ∂θ

где

α (r ,θ ) = −ruθ / w2 , ( w2 = uθ2 + vθ2 );


β (r ,θ ) = (1 + ruθ vr / w2 ) / vθ ;
(I.10) fi = −rv∞i (1 + rvr / v) / w2 (i = 1,2,3);
f 4 = v∞1 α cos ϕ + v∞2 α sin ϕ + v∞3 rvθ / w2 ;
vi = (1 − r )v∞i + V i (i = 1,2,3).

Замена искомых функций vi на Vi (i = 1,2,3) по формуле (I.10) про-


изведена для того, чтобы сделать краевые условия для скорости
однородными:

(I.11) V i|r=0 = V i|r=1 =0, i =1,2,3.


Это требуется для более удобной дискретизации лапласиана. Для
давления имеем краевое условие

(I.12) p|r=0 =0.

Лапласиан от функций 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

Здесь штрих означает, что слагаемое при k=0 берется с


коэффициентом 1/2; знак ⊗ кронекерово произведение матриц; h -
матрица размера L х L с элементами

2π (i − j )
hkij = cos k , (i, j = 1,2,..., L);
L

Λk матрица дискретного оператора, соответствующего дифференци-


альному оператору

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)).

Первую и вторую производные по θ, входящие в соотношения


(I.15), получим дифференцированием интерполяционной формулы
(I.17).
По r выберем сетку, состоящую из m узлов:

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 χν

Первую и вторую производные по r, входящие в выражение (I.15),


найдем дифференцированием интерполяционной формулы (I.18).
Дифференцированием интерполяционных формул (I.17), (I.18)
получим значения производных по θ и r, входящих в левую часть
уравнения неразрывности (I.9).
Для дискретизации производных от давления по r используем интер-
поляционную формулу


m
Tm (r )rqν
(I.19) q(r ) = .
(−1)ν −1
ν =1 m rν ( z − zν )
sin χν

Величины, входящие в формулу (I.19), определены выше. Значения


первой производной от давления по r, входящие в левую часть
8
соотношений (I.6)-(I.8), получим дифференцированием
интерполяционной формулы (I.19).
Для построения формулы численного дифференцирования по φ
рассмотрим интерполяционную формулу


2l
2
s (ϕ ) = Dl (ϕ − ϕ k ) s k , L = 2l + 1, s k = s (ϕ k ),
L
k =0

(I.20) ϕ k = 2πk / L (k = 0,1,...,2l );


l

Dl (ϕ − ϕ k ) = 0,5 + cos j (ϕ − ϕ k ).
j =1

Значения производных по φ определим дифференцированием


формулы (I.20).
Для получения дискретных уравнений Стокса нужно в
уравнениях (I.6)-(I.9) заменить производные дискретными
производными, найденными дифференцированием
соответствующих интерполяционных формул (I.17)-(I.20); лапласиан
заменяется на матрицу Н. Вместо функций V1, V2, V3 и р в
дискретные уравнения Стокса войдут значения этих функций в
узлах сетки (θ ν , rµ , ϕ k ), ν = 1,2,..., n; µ = 1,2,..., m; k = 0,1,...,2l. В результате
имеем систему из 4тпL линейных уравнений. В явном виде система
дискретных уравнений не выписывается из-за ее громоздкости.
Например, при т = п = 10, L = 9 порядок системы уравнений 3600.
Для исследования числа обусловленности этой системы
линейных уравнений вычислялись собственные значения оператора
Лапласа с однородными краевыми условиями (I.11). Для этого
достаточно вычислить собственные значения матриц Λk, k=0,1,…,l.
Вычислительные эксперименты показали, что собственные значения
оператора Лапласа имеют две точки сгущения: 0 и − ∞ . Таким

9
образом, нормы матриц H и Н-1 имеют большие значения, которые
быстро растут с увеличением числа узлов сетки. В этом состоит
отличие внешних задач по сравнению с внутренними.

Матрица дискретных уравнений Стокса имеет блочный вид


H 0 0 P1
0 H 0 P2
A= ,
0 0 H P3
u1 u 2 u 3 0

где H - дискретный лапласиан; Рi, (i = 1,2,3) - матрицы, получаемые


при дискретизации членов с давлением; ui (i = 1,2,3) - матрицы,
получаемые при дискретизации уравнения неразрывности. Все эти
матрицы размера R х R (R = тпL - число узлов сетки). Обозначим
H 0 0
An −1 = 0 H 0 , vn = (u1 , u 2 , u 3 ), u n = ( P1 , P2 , P3 )′
0 0H

и будем разыскивать матрицу, обратную матрице А, в виде


Pn −1 rn
A−1 = .
qn α n−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

( α n = −u1 H −1 p1 − u 2 H −1 p 2 − u 3 H −1 p3 - матрица размера R x R).


Таким образом, легко видеть, что из-за описанных выше свойств
матриц H и Н-1 норма матриц А и А-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

(эта формула проверяется непосредственным умножением) и


вычислить произведение полученной матрицы на некоторые
векторы. Теперь осталось подобрать константу с так, чтобы
выполнялось уравнение неразрывности. Подставим в уравнение
12
неразрывности найденные компоненты скорости и получим для
определения константы с R= тпL уравнений, т. е.
переопределенную систему линейных уравнений, которая служит
для отбраковки «лишних» решений и нахождения константы с. Для
искомого решения константы с, определяемые из дискретного
уравнения неразрывности, обязательно должны быть примерно
равными, и за искомую константу с можно принять любую из них
или среднее арифметическое всех полученных констант. Для
посторонних решений константы с сильно отличаются, и такие
решения должны быть отброшены.
Заметим, что вычисление собственных значений и собственных
векторов h-матрицы сводится к вычислению собственных значений
и собственных векторов матриц Λk, k = 0,1,... ,l меньшего размера.
Таким образом, удается определить все собственные значения и
собственные векторы h-матрицы размера 900 x 900.
4. Результаты численных экспериментов. Численные расчеты
проводились для шара с а = b = 1 и эллипсоида вращения с а = 1, b=
0,5; 0,95 (см. (I.5)) на сетке, состоящей из 225 узлов (m = п = 5, L =
9), 900 узлов (m = п = 10, L = 9) и 2025 узлов (m = п = 15, L = 9). В
качестве граничного условия по скорости в невозмущенном потоке
(в бесконечности) рассматривалось течение с параметрами
v∞1 = 1, v∞2 = v∞3 = 0. Во всех расчетах принималось Rе = 0,01.

Вначале обсудим результаты расчетов для шара. На сетке из


225 узлов (m = п = 5, L = 9) у матрицы Λ0 определены два близких к
нулю собственных значения: λ24 =-0,3 10-5 и λ23 = -0,7 10-18, остальные
собственные значения имели порядок от 10-2 до 102. У матрицы Λ1
определено одно собственное значение, близкое к нулю: λ24 =-0,5 10-
5
. Остальные собственные значения порядка 10-2 - 103. Матрицы Λ2,

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

- собственному значению λ99 матрицы Λ0. Точнее говоря, одно из


инвариантных подпространств оператора Лапласа (I.21), отвечающее
нулевому собственному значению, имеет вид (I.24), т. е. двумерно. В
расчетах получается два близких к нулю собственных значения
матрицы Λ0 размера 100 x 100 (λ100 и λ99). Как уже говорилось выше,
собственному значению λ100 соответствует собственная функция
вида (I.23) (это подтверждается численными расчетами), а
собственному значению λ99 - некоторая собственная функция из
семейства (I.24).
Собственные векторы h-матрицы, отвечающие
действительному близкому к нулю собственному значению λ100
матрицы Λ1, дают два семейства собственных функций, зависящих
от φ.

(I.25) p3 = c3 r 2 sin θ cos ϕ ;

(I.26) p 4 = c 4 r 2 sin θ sin ϕ .

Семейство собственных функций (I.25) соответствует решению,


приведенному в [6] для шара. Семейства (I.23), (I.24), (I.26) дают
посторонние решения, не удовлетворяющие уравнению
неразрывности (см. п. 3).
Далее проводилось вычисление константы с3 из уравнения
неразрывности (см. п. 3). За искомую константу принималось
среднее арифметическое близких друг к другу констант,
определяемых из дискретного уравнения неразрывности. Получено
значение с3= 144,09 (собственный вектор матрицы Λ1, отвечающий
собственному значению λ100, нормировался по максимуму модуля).
Найденное приближенное решение сравнивалось с точным [6].
15
Вычисления показывают, что максимальная относительная
погрешность составляет 0,26 %.
Второй расчет проводился для эллипсоида с полуосями а = 1,
b= 0,5. На сетке из 225 узлов (m = n = 5, L = 9) получено, что у
матрицы Λ0 есть одно собственное значение, близкое к нулю: λ25 =-
0,3 10-5. Остальные собственные значения были порядка 10-2-102.
Собственные значения матриц Λ1, Λ2, Λ3, Λ4 имели порядок 10-2 - 103,
10-2 - 104, 10-1 - 104, 10-1-105. Таким образом, число узлов сетки явно
недостаточно. На сетке из 900 узлов (m = n = 10, L = 9) матрица Λ0
имеет два близких к нулю собственных значения: λ99= 0,4 10-6,
λ100=0,2 10-9, остальные собственные значения порядка 10-3-104.
Матрица Λ1 имеет одно собственное значение, близкое к нулю:
λ94=0,3 10-5, остальные собственные значения порядка 10-3 -104.
Матрицы Λ2, Λ3, Λ4 имеют собственные значения порядка 10-3- 105,
10-3- 105, 10-2 - 106.
Далее проводились расчеты на сетке из 2025 узлов (m = n = 15, L
= 9). Вычислялись собственные значения матриц Λ0 и Λ1. Матрица Λ0
имеет два близких к нулю собственных значения: λ224= - 0,1 10-9,
λ225= -0,2 10-13. Остальные собственные значения порядка 10-5 - 104.
Матрица Λ1 имеет одно собственное значение, близкое к нулю: λ221=
-0,1 10-8. Остальные собственные значения порядка 10-4 - 105. Таким
образом, h-матрица для эллипсоида также имеет четыре семейства
собственных векторов, соответствующих близким к нулю
собственным значениям матриц Λ0 и Λ1. Нас интересует четная по φ
собственная функция, отвечающая близкому к нулю собственному
значению матрицы Λ1 (возмущение соответствующей собственной
функции для шара). Приближенное вычисление этой собственной
функции проводилось на сетке из 900 узлов (m = n = 10, L = 9).

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
числах Рейнольдса, потоком вязкой несжимаемой жидкости. Для
изучения обтекания тел сложной формы необходимо использовать
более мощную ЭВМ.

II. Описание программного комплекса.

Решает задачу (I.3), (I.12) программа LNS5.

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

SUBROUTINE MLKG7 (A,K,DL1,DL2,DB1,DB2,M,N,NT,EPS)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION
A(NT,NT),DL1(M,M),DL2(M,M),DB1(N,N),DB2(N,N)
23
DIMENSION DL(100)
PI=3.141592653589D0
CALL DIFR22 (DL1,M,0.D0,EPS,DL)
CALL DDR2 (DL2,M)
CALL DIFT1 (DB1,N)
CALL DIFT2 (DB2,N)
C
DO 2 I=1,NT
DO 2 J=1,NT
2 A(I,J)=0.D0
I1=0
DO 1 NU=1,N
XN=COS((2.*NU-1)*PI/2./N)
TN=PI*(XN+1.)/2.
DO 1 MU=1,M
XN=COS((2.*MU-1)*PI/2./M)
RM=0.5*(XN+1.)
I1=I1+1
I2=0
DO 1 NU1=1,N
DO 1 MU1=1,M
I2=I2+1
IF(NU.EQ.NU1) DN=1.D0
IF(NU.NE.NU1) DN=0.D0
IF(MU.EQ.MU1) DM=1.D0
IF(MU.NE.MU1) DM=0.D0
A(I1,I2)=(V(RM,TN)+RM*VR(RM,TN))*DL1(MU,MU1)*DN+
+RM*V(RM,TN)*DL2(MU,MU1)*DN+
+(VT(RM,TN)/RM)*DB1(NU,NU1)*DM+
+(V(RM,TN)/RM)*DB2(NU,NU1)*DM
A(I1,I2)=RM*A(I1,I2)/W2(RM,TN)/V(RM,TN)
IF(I1.EQ.I2) A(I1,I2)=A(I1,I2)-K**2/V(RM,TN)**2
1 CONTINUE
RETURN
END
В программе задаётся M=10, N=10 – параметры сетки по r и θ
(переменные), L=9 – фиксировано, 9=32 – число точек поφ; A=1.,
B=1. (полуоси эллипса – шар); RLA=A – характерный линейный
размер. Считывается VB1 x – компонента скорости потока
(VB2=VB3=0.). VB=SQRT(VB1**2+VB2**2+VB3**2) – характерная
24
скорость. Задаётся вязкость RNU=1.373E-5 м2/сек. Вычисляется
Re=VB*RLA/RNU – число Рейнольдса. Затем это число печатается.
Вызываемые подпрограммы и подпрограмм функции:
V, W2, VT, VR, NORM, NMATR, MLKG7.
V, W2, VT, VR – функции v, w2, vθ, vr (см. (I.4), (I.10)).
SUBROUTINE NORM(N,Y,RNORM)
RNORM – чебышёвская норма вектора Y длины N.
SUBROUTINE NMATR (N,A,BNORM)
BNORM – чебышёвская норма матрицы A(N,N).

SUBROUTINE MLKG7 (A,K,DL1,DL2,DB1,DB2,M,N,NT,EPS)


Вычисляет K – ую (K=0,1,2,3,4) клетку h-матрицы размера NT
x NT, NT=M*N для давления, EPS=0., DL1(M,M), DL2(M,M),
DB1(N,N), DB2(N,N) – рабочие массивы.
Вызываемые подпрограммы:
DIFR22, DDR2, DIFT1, DIFT2.

SUBROUTINE DIFR22 (DR,M,UM1,EPS,DL)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DR(M,M),DL(M)
PI=3.141592653589D0
DO 1 MU=1,M
TM=(2.*MU-1.)*PI/2./M
RM=0.5*(EPS+1.)+COS(TM)*0.5*(1.-EPS)
DL(MU)=(-1)**(M+MU+1)*M*2.*UM1/SIN(TM)/(1.-EPS)
DO 1 NU=1,M
TN=(2.*NU-1.)*PI/2./M
RN=0.5*(EPS+1.)+COS(TN)*0.5*(1.-EPS)
P=1.D0/(RN-EPS)/M
DO 2 L=1,M-1
2 P=P+4.*COS(L*TN)*L*SIN(L*TM)*(RM-EPS)/
/(1.-EPS)/SIN(TM)/(RN-
EPS)/M+2.*COS(L*TN)*COS(L*TM)/(RN-

25
- EPS)/M
1 DR(MU,NU)=P
RETURN
END

Первое дифференцирование по r на отрезке [0,1]


удовлетворяющее однородному краевому условию при r=0 (UM1=0.,
EPS=0., DL – не используется).
SUBROUTINE DDR2 (DR,M)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION DR(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
TM=(2.D0*MU-1.D0)*PI/2.D0/M
XM=COS(TM)
RM=0.5D0*(1.D0+XM)
DO 1 NU=1,M
TN=(2.D0*NU-1.D0)*PI/2.D0/M
XN=COS(TN)
RN=0.5D0*(1.D0+XN)
P=0.D0
DO 2 L=1,M-1
TL1=L*SIN(L*TM)/SIN(TM)
TL2=-L*L*COS(L*TM)/SIN(TM)**2+L*SIN(L*TM)*COS(TM)/
/SIN(TM)**3
2 P=P+COS(L*TN)*(4.D0*TL2*RM+4.D0*TL1)/RN
P=2.D0*P/M
1 DR(MU,NU)=P
RETURN
END

Второе дифференцирование по r на отрезке [0,1]


удовлетворяющее однородному краевому условию при r=0.

SUBROUTINE DIFT1 (D1,N)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D1(N,N)
PI=3.141592653589D0
DO 1 MU=1,N
PM=(2.*MU-1.)*PI/2./N
26
DO 1 NU=1,N
PN=(2.*NU-1.)*PI/2./N
P=0.
DO 2 L=1,N-1
2 P=P+L*COS(L*PN)*SIN(L*PM)/SIN(PM)
1 D1(MU,NU)=4.*P/PI/N
RETURN
END

SUBROUTINE DIFT2 (D2,N)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D2(N,N)
PI=3.141592653589D0
DO 1 MU=1,N
PM=(2.*MU-1.)*PI/2./N
DO 1 NU=1,N
PN=(2.*NU-1.)*PI/2./N
P=0.
DO 2 L=1,N-1
2 P=P+COS(L*PN)*
*(- L**2*COS(L*PM)/SIN(PM)**2+L*COS(PM)*SIN(L*PM)/
/SIN(PM)**3)
1 D2(MU,NU)=8.*P/PI**2/N
RETURN
END

Первое и второе дифференцирование поθ на отрезке [0,π] без


удовлетворения краевым условиям.
Итак, программа LNS5 вычисляет собственные значения клеток h-
матрицы для давления. Для клетки C0 для собственных значений I1=99, I2=100
вычисляются и нормируются собственные векторы. Проводится сравнение с
точным решением. Затем векторы записываются в файл EIGC0. Для другой
области (не для шара) и других параметров сетки I1, I2 нужно изменить. Для
клетки C1 вычисляется и нормируется собственный вектор соответствующий
собственному значению I3=100. Проводится сравнение с аналитическим
решением. Для другой области (не для шара) и других параметров сетки I3
нужно изменить. Собственный вектор записывается в файл EIGC1. Затем нужно

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

Вызываемые подпрограммы и подпрограмм функции:


MLKG6, DIFR22, DIFF, DIVH, DMINV, IND, V, W2, VT, ALFA,
BETA, NORM, NMATR.
DIFR22 – описана выше; DIVH – описана в [4]; DMINV –
вариант с двойной точностью подпрограммы MINV [11]; V, W2, VT,

36
ALFA, BETA – подпрограмм функции для v, w2, vθ, vr, α, β (см. (I.4),
(I.10)); NORM, NMATR – описаны выше.

SUBROUTINE MLKG6 (A,K,DL1,DL2,DB1,DB2,M,N,NT,EPS)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION
A(NT,NT),DL1(M,M),DL2(M,M),DB1(N,N),DB2(N,N)
PI=3.141592653589D0
CALL DIFR1 (DL1,M,EPS)
CALL DIFR2 (DL2,M,EPS)
CALL DIFT1 (DB1,N)
CALL DIFT2 (DB2,N)
C
DO 2 I=1,NT
DO 2 J=1,NT
2 A(I,J)=0.D0
I1=0
DO 1 NU=1,N
XN=COS((2.*NU-1)*PI/2./N)
TN=PI*(XN+1.)/2.
DO 1 MU=1,M
XN=COS((2.*MU-1)*PI/2./M)
RM=0.5*(XN+1.)
I1=I1+1
I2=0
DO 1 NU1=1,N
DO 1 MU1=1,M
I2=I2+1
IF(NU.EQ.NU1) DN=1.D0
IF(NU.NE.NU1) DN=0.D0
IF(MU.EQ.MU1) DM=1.D0
IF(MU.NE.MU1) DM=0.D0
A(I1,I2)=(V(RM,TN)+RM*VR(RM,TN))*DL1(MU,MU1)*DN+
+RM*V(RM,TN)*DL2(MU,MU1)*DN+
+(VT(RM,TN)/RM)*DB1(NU,NU1)*DM+
+(V(RM,TN)/RM)*DB2(NU,NU1)*DM
A(I1,I2)=RM*A(I1,I2)/W2(RM,TN)/V(RM,TN)
IF(I1.EQ.I2) A(I1,I2)=A(I1,I2)-K**2/V(RM,TN)**2
1 CONTINUE
RETURN
END
37
Вызываемые подпрограмм:
DIFR1, DIFR2 (описаны в [4]), DIFT1, DIFT2 – описаны выше.
MLKG6 аналогична программе MLKG7, но вычисляет клетки
h-матрицы для скорости, т.е. по r удовлетворяет однородным
краевым условиям (DIFR1, DIFR2).
SUBROUTINE DIFF(DF,L)
IMPLICIT REAL*8 (A-H,O-Z)
INTEGER P
DIMENSION DF(0:L,0:L)
PI=3.141592653589D0
LB=L+1
LM=L/2
DO 1 M=0,L
FM=2.*M*PI/LB
DO 1 K=0,L
FK=2.*K*PI/LB
S=0.D0
DO 2 P=1,LM
2 S=S-P*SIN(P*(FM-FK))
1 DF(M,K)=2.*S/LB
RETURN
END

Дифференцирование по φ; DF(0:L,0:L), L=2l (2l+1 – число узлов


интерполяции по φ).
FUNCTION IND(NU,MU,K,M,L)
IND=(NU-1)*M*(L+1)+(MU-1)*(L+1)+K+1
RETURN
END

NU, MU, K – параметры тройного индекса (μ изменяется от 1


до M, K изменяется от 0 до L, L=2l (2l+1 – число узлов
интерполяции по φ)).
Примечание. Все действительные параметры, в описанных
программах – двойной точности.

38
III. Заключение. По поводу получения полных версий описанных
программ обращайтесь по электронному адресу: algazinsd@mail.ru или
на адрес Института проблем механики РАН, 117525, Москва,
проспект Вернадского д.101, к.1.

Алгазин Сергей Дмитриевич

Численные алгоритмы классической матфизики.


V. Уравнения Стокса.

Подписано к печати 21.03.2002. Заказ № 14-2002. Тираж 50 экз.


________________________________________________________

Отпечатано на ризографе Института проблем механики РАН


117526, Москва, пр-т Вернадского, 101

39