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

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

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

С. Д. Алгазин, М.В. Грошев

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


МАТФИЗИКИ.

VI. Потенциальное обтекание тела вращения потоком


несжимаемой жидкости.

Препринт № 706

Москва 2002 г.
Аннотация.
Рассматривается задача о потенциальном обтекании тела
вращения потоком несжимаемой жидкости. Оказывается, что задача
плохо обусловлена. Приводится численный алгоритм и программы
на Фортране.

The summary.
The problem about potential flow of a body of rotation by a flow of
incompressible fluid is considered. It appears, that the problem is badly
caused. The numerical algorithm and programs on a Fortran is resulted.

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

2
Введение.

Это шестой препринтт серии объявленной в [1]. Предыдущие


препринты этой серии [1-5]. Препринт посвящён описанию
програмного комплекса решения задачи об обтекании тела
вращения потенциальным потоком несжимаемой жидкости.

I. Численное исследование задачи об обтекании под углом атаки


тела вращения потенциальным потоком идеальной
несжимаемой жидкости.

Численное исследование устойчивости движения автомобиля


при боковом ветре имеет важное значение для безопасности его
движения. В настоящее время такие исследования проводятся в
аэродинамической трубе обдуванием готового автомобиля или его
модели. Натурные эксперименты дороги, кроме того, требуют
изготовления опытного экземпляра модели или целого автомобиля.
Представляется перспективным заменить натурный эксперимент
численным и исследовать аэродинамику автомобиля на стадии
проектирования. Для этого требуется выбрать математическую
модель и решить численно выписанные уравнения. Поскольку
скорости движения автомобиля невысоки по сравнению со
скоростью звука и составляют примерно третью его часть, то обычно
выбирается модель несжимаемой жидкости. Кроме того, обычно
предполагается, что жидкость идеальная и течение является
потенциальным. В такой постановке рассматриваемая задача
решается панельным методом [6]. Недостатком этого метода

3
является его насыщаемость, т. е. он не использует информацию о
гладкости решаемого уравнения Лапласа. В настоящей работе
отрабатывается методика построения алгоритма без насыщения на
примере тела вращения, обтекаемого потенциальным потоком
идеальной несжимаемой жидкости. Построенный алгоритм
использует априорную информацию о гладкости решения уравнения
Лапласа. Проведенные расчеты показывают перспективность его
применения в задаче об обтекании автомобиля потенциальным
потоком идеальной несжимаемой жидкости. Количество узлов сетки
по сравнению с методом конечных элементов может быть
уменьшено в 10 раз при получении в результате такой же точности.
Осесимметричная задача, т.е. обтекание тела вращения под
нулевым углом атаки, решалась в [7] методом конечных элементов.
Точность полученного решения невысока. В настоящей работе
исследуется более общее течение под ненулевыми углами атаки.
Предложенный численный алгоритм не имеет насыщения [7] ,т.е.
его точность автоматически реагирует на гладкость решения. Это
позволяет проводить расчеты с высокой точностью на редкой сетке.
Задача обтекания тела Т потенциальным потоком идеальной
несжимаемой жидкости сводится к отысканию потенциала скорости
Ф=Ф(х1,х2,х3) - функции гармонической вне обтекаемого тела Т:
(1) ∆Φ = 0,
∂Φ
(2) = 0,
∂n ∂T

(3) grad Φ → V∞ при x → ∞,

где n - внутренняя нормаль к телу, дT - граница тела Т, V∞ - скорость


потока в бесконечности, |х| - длина вектора (х1,х2,х3).

4
Без ограничения общности можно принять, что скорость на

бесконечности V∞ = (1,0,0). В случае шара Т = {х:|х| ≤ 1} потенциал
имеет вид Ф = х1 + х1 /(2|х|3).

Как окончательный выход алгоритма интересен не только


потенциал скорости, но и давление и вектор скорости, особенно на
поверхности обтекаемого тела. Давление вычисляется по формуле,
вытекающей из интеграла Бернулли:

1 1 
pρ −1 + V 2 = p ∞ ρ −1 + V 2 , V = gradΦ,
2 2

где р - давление на бесконечности, ρ- плотность, V, V∞ - модули


скорости.

Если в соотношениях (1)-(3) произвести замену Ф=х1 - Ф1


то Ф гармонична в области Ω=R3\T:
∂Φ1
(4) = cos(n, x1 ),
∂n
(5) Φ1 → 0 при | x |→ ∞.

Введем криволинейную систему координат (r, θ, φ), связанную


с декартовыми координатами (х1,х2,х3) соотношениями:
(6) x1=v(r,θ)cosφ, x2=v(r,θ)sinφ, x3=u(r, θ).

Если выполняются условия Коши-Римана:

∂v 1 ∂u ∂u 1 ∂v
=− , = ,
∂r r ∂θ ∂r r ∂θ

то система координат (r, θ, φ) ортогональна, и в этой системе


координат Лапласиан скалярной функции имеет вид

r  ∂  ∂Φ  ∂  v ∂Φ  1 ∂ 2 Φ
∆Φ =  ∂r  rv ∂r  + ∂θ  r ∂θ  + v 2 ∂ϕ 2 , ω = (∂v / ∂θ ) + (∂u / ∂θ ) .
2 2 2

vω 2     

5
Обозначим G область, получаемую меридиональным сечением
тела вращения Т. Пусть ψ=ψ(ξ), ψ=u+iv, ξ=r exp (iθ) - конформное
отображение круга | ξ| ≤ 1 на внешность области G, причем центр
круга переходит в бесконечность, тогда ω = r | ψ ′(ξ ) | .
Удобно считать, что (r, θ, φ) - сферические координаты, тогда
соотношения (6) задают отображение проколотого в центре шара
единичного радиуса на внешность рассматриваемого тела Т. В
результате замены (6) соотношения (4), (5) принимают вид

∂Φ1
(7) =| ϕ ′ | f (θ , ϕ ) ≡ f1 (θ , ϕ )
∂r r =1

(8) Φ1 r = 0 = 0,

где f(θ,φ) получается Из соs(п,х1) заменой (5.6).


Знак в формуле (7) выбран с учетом того, что при отображении (6)
внутренняя нормаль к телу переходит во внешнюю.
Произведем еще одну замену:
Φ2(r, θ, φ)= Φ1 (r, θ, φ)- rf1(θ, φ),
тогда из соотношения (7), (8) получаем

∂Φ 2
(9) = 0,
∂r r =1

(10) Φ2 r =0
= 0.

Теперь функция Φ2(r, θ, φ) не гармоническая, а удовлетворяет


уравнению Пуассона

(11) ∆Φ 2 = −∆(rf1 (θ , ϕ ) ≡ F (r ,θ , ϕ )

с однородными краевыми условиями (9),(10).

6
Рассмотрим, например, эллипсоид вращения
x12 x22 x32
+ + − 1 = 0.
b2 b2 a 2
Тогда:

1 a +b
u ( r , θ ) =  ( a − b) r + cos θ ,
2 r 
1 a +b
v(r ,θ ) =  (a − b)r −  sin θ ,
2 r 
2 2
1 ( a + b) 2  1 ( a + b) 2 
ω =  (a − b)r +
2
 sin 2 θ +  (a − b)r −  cos 2 θ ,
4 r  4 r 
f1 (θ , ϕ ) = a sin θ cos ϕ ,
r cos ϕ  1 a + b  2  r sin θ cos ϕ
F ( r ,θ , ϕ ) = a (b − a ) sin θ + 2  (b − a )r + r  cos θ  +
2
.
ω 2v     v2

Например, для шара (а=1,b=1) F (r ,θ , ϕ ) = 2 x3 sin θ cos ϕ , а


r2 
решение краевой задачи (9)-(11) есть Φ 2 (r ,θ , ϕ ) =  − r  sin θ cos ϕ .
 2 

Если Φ2 найдено, то для эллипсоида Ф=v(r,θ)cosφ- Φ1(r, θ, φ).


Для дискретизации краевой задачи (9)-(11) применим подход,
предложенный в [8]. Таким образом, получаем дискретный
Лапласиан в виде h - матрицы:


l '

2
H= Λ k ⊗ hk , L = 2l + 1,
L
k =0

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


коэффициентом 1/2, символ ⊗ обозначает кронекерово
произведение матриц Λk и hk размера M x M и L x L соответственно.
Матрицы Λk размера, M x M, M = тп, получены дискретизацией диф-
ференциального соотношения, зависящего от k:

7
r  ∂  ∂Φ 2  ∂  v ∂Φ 2  k 2
(12)  ∂r  rv ∂r  + ∂θ  r ∂θ  − 2 Φ 2 , k = 0,1,..., L − 1
vω 2      v

с краевыми условиями (9), (10), где m - число узлов сетки по r, n -


число узлов сетки по θ.
Для дискретизации дифференциального оператора (12) выберем по
θ сетку, состоящую из n узлов:

π (2ν − 1)π
θν = ( xν + 1), xν = cos χν , χν = , ν = 1,2,..., n,
2 2n

и применим интерполяционную формулу


n
Tn ( x) fν 1
f (θ ) = , x= (2θ − π ), fν = f (θ ν ),ν = 1,2,..., n;
(13) (−1) ν −1
π
ν =1 n ( x − xν )
sin xν
Tn ( x) = cos (narccos( x)).

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


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

1 (2ν − 1)π
rν = ( yν + 1), yν = cos αν , αν = , ν = 1,2,..., m,
2 2m

и рассмотрим интерполяционную формулу


n
g (r ) = ∑ lν (r ) gν , gν =g (rν ),
ν =1
m '
(14) lν (r ) = ∑ β νp rT p (2r − 1) − cνm r (r − 1)Tm
p =0

4 cos α ν m −1
β νp = , cνm = ∑ β νp (1 + 2 p 2 ).
m(cos α ν + 1) p =0

Заметим, что lν (0) = 0, lν′ (1) = 0, т.е. краевые условия (9), (10)
8
выполнены. Первую, и вторую производные, входящие в
соотношение (12), получим дифференцированием
интерполяционной формулы (14).
После того, как матрицы Λk, k = 0,1,... ,l, построены для
приближенного решения краевой задачи (9)-(11) требуется решить
систему линейных уравнений

(15) HФ2=F,

где Ф2 и F- векторы, компоненты которых суть значения


соответствующих функций в узлах сетки (по φ выбирается сетка из
узлов (φk =2πk/L, k=0,1,…,L-1).
В [8] показано, что для обращения h- матрицы справедлива
формула


l '

2
(16) H −1 = Λ−1 k ⊗ hk , L = 2l + 1,
L
k =0

т.е. для решения системы линейных уравнений (15) достаточно


обратить матрицы Λk, k = 0,1,... ,l, после чего задача сводится к
умножению h- матрицы (16) на вектор.
Оценку погрешности построенной дискретизации можно получить
стандартными средствами. Отметим только ее качественные
особенности. Для дискретизации использовалась интерполяция
решения многочленами. Известно [7,9], свойство приближения
гладких функций интерполяционными многочленами. Это
приближение тем точнее, чем большим условиям гладкости отвечает
приближаемая функция. Таким образом, построенный алгоритм не
имеет насыщения, т.е. точность полученного приближенного
решения тем выше, чем большим условиям гладкости отвечает
точное решение.
9
Конкретные расчеты проводились для шара (а=1,b=1) и
эллипсоида (а=1,b=0.5) на сетке m=7, n=10, L=9, т.е. состоящей из
630 узлов. Оказалось, что для шара матрица Λ0 плохо обращается
методом Гаусса. Норма (Λ0 Λ0-1-I) оказалась порядка 10-3. Пришлось
применить итерационное уточнение обратной матрицы [10], после
чего норма (Λ0 Λ0-1-I) уменьшилась до 10-8. Однако
непосредственным умножением матрицы (16) на вектор получить
решение не удается. Дело в том, что норка Λ0-1 оказалась порядка
1016. Норма остальных матриц Λ1, Λ2, Λ3, Λ4, суть 105, 104, 103, 103.
Пришлось применить масштабирование с коэффициентом 1010.
После этого мантисса полученного приближенного решения совпала
с мантиссой точного решения с 7 знаками после запятой (порядок
отличался на 10 в соответствии с выбранным масштабным
множителем). Для эллипсоида матрица Λ0 обращалась хорошо, и
итерационное уточнение обратной матрицы не потребовалось.
Нормы матриц Λ0, Λ1, Λ2, Λ3, Λ4 имели величину порядка 106, 104, 103
,103, 103, соответственно масштабирование не потребовалось
(разумеется, правая часть уравнения Пуассона (11) должна быть
вычислена с 6-7 запасными знаками).
Отметим, что для умножения матрицы Н-1 на вектор требуется
O(m2 n2LlogL) операций.
Итак, проведенные расчеты показали, что дискретная задача
может быть плохо обусловленной. Поэтому при практическом
применении алгоритма следует следить за качеством обращения
клеток h - матрицы Λ0, Λ1, …, Λl. В случае необходимости
применять итерационное уточнение обратной матрицы. Также
следует следить за нормой полученных матриц Λ0-1,Λ1-1 …,Λl-1и
применять, если потребуется, масштабирование и вычисление

10
правой части уравнения Пуассона с запасными знаками.

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

Решает поставленную задачу для шара программа INT5.

PROGRAM INT5
C 23.7.92 - 31.7.92
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION C0(4900),C1(4900),C2(4900),C3(4900),C4(4900),
*F(630),U(630)
DIMENSION AD(4900),D0(4900),D1(4900),R0(4900)
DIMENSION DL1(49),DL2(49),DB1(169),DB2(169)
DIMENSION LX(70),LY(70)
COMMON AE,BE
FU(R,TETA,FI)=(R**2/2.-R)*SIN(TETA)*COS(FI)
AE=1.D0
BE=1.D0
C
M=5
M=7
N=10
NT=M*N
CALL MLKG4 (C0,0,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C1,1,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C2,2,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C3,3,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C4,4,DL1,DL2,DB1,DB2,M,N,NT)
NOUT =4
OPEN(UNIT=4,FILE='NOUT')
IJ=0
DO 10 I=1,NT
DO 10 J=1,NT
IJ=IJ+1
10 AD(IJ)=C0(IJ)
CALL DMINV (C0,NT,DET,LX,LY)
C
NM=100
NM=5
NM=10
EPS=1.D-15
IJ=0
11
DO 13 I=1,NT
DO 13 J=1,NT
IJ=IJ+1
13 D0(IJ)=C0(IJ)
CALL ITER0 (NT,AD,D0,D1,R0,NM,EPS)
IJ=0
DO 11 I=1,NT
DO 11 J=1,NT
IJ=IJ+1
11 C0(IJ)=D1(IJ)
CALL PRO (AD,C0,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C0,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C0,CN)
WRITE (*,*) 'CNORM = ',CN
C
PM=1.D+17
PM=1.D0
PM=1.D+10
IJ=0
DO 130 I=1,NT
DO 130 J=1,NT
IJ=IJ+1
130 C0(IJ)=C0(IJ)/PM
C
IJ=0
DO 20 I=1,NT
DO 20 J=1,NT
IJ=IJ+1
20 AD(IJ)=C1(IJ)
CALL DMINV (C1,NT,DET,LX,LY)
CALL PRO (AD,C1,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C1,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C1,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 131 I=1,NT
DO 131 J=1,NT
12
IJ=IJ+1
131 C1(IJ)=C1(IJ)/PM
C
IJ=0
DO 30 I=1,NT
DO 30 J=1,NT
IJ=IJ+1
30 AD(IJ)=C2(IJ)
CALL DMINV (C2,NT,DET,LX,LY)
CALL PRO (AD,C2,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C2,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C2,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 132 I=1,NT
DO 132 J=1,NT
IJ=IJ+1
132 C2(IJ)=C2(IJ)/PM
C
IJ=0
DO 40 I=1,NT
DO 40 J=1,NT
IJ=IJ+1
40 AD(IJ)=C3(IJ)
CALL DMINV (C3,NT,DET,LX,LY)
CALL PRO (AD,C3,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C3,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C3,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 133 I=1,NT
DO 133 J=1,NT
IJ=IJ+1
133 C3(IJ)=C3(IJ)/PM
C
IJ=0
13
DO 50 I=1,NT
DO 50 J=1,NT
IJ=IJ+1
50 AD(IJ)=C4(IJ)
CALL DMINV (C4,NT,DET,LX,LY)
CALL PRO (AD,C4,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C4,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C4,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 134 I=1,NT
DO 134 J=1,NT
IJ=IJ+1
134 C0(IJ)=C0(IJ)/PM
C
PI=3.141592653589D0
L=9
I=0
DO 1 NU=1,N
XN=COS((2.*NU-1.)*PI/2./N)
TETA=PI*(XN+1.)/2.
DO 1 MU=1,M
XN=COS((2.*MU-1.)*PI/2./M)
R=0.5*(XN+1.)
DO 1 K=0,8
FI=2.*PI*K/L
I=I+1
U(I)=FU(R,TETA,FI)
1 F(I)=FB(R,TETA,FI)
NG=NT*L
WRITE(*,*) 'ТОЧНОЕ ЗНАЧЕНИЕ'
WRITE(*,12) (U(I),I=1,NG,81)
12 FORMAT(4E18.11)
WRITE(4,*) 'ТОЧНОЕ ЗНАЧЕНИЕ'
WRITE(4,12) (U(I),I=1,NG)
C
CALL DIVH (NT,2,C0,C1,C2,C3,C4,F,U)
C
WRITE(*,*) 'ВЫЧИСЛЕННОЕ ЗНАЧЕНИЕ'
14
WRITE(*,12) (U(I),I=1,NG,81)
WRITE(4,*) 'ВЫЧИСЛЕННОЕ ЗНАЧЕНИЕ'
WRITE(4,12) (U(I),I=1,NG)
STOP
END
FUNCTION FB(R,TETA,FI)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
FB=(AE*R*COS(FI)/V(R,TETA)/W2(R,TETA))*
*((BE-AE)*R*SIN(TETA)**2+ 0.5*((BE-
- AE)*R+(AE+BE)/R)*COS(2.*TETA))+R*SIN(TETA)*COS(FI)/
/V(R,TETA)**2
RETURN
END
FUNCTION V(R,TETA)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
V=0.5*((AE-BE)*R-(AE+BE)/R)*SIN(TETA)
RETURN
END
FUNCTION VR(R,TETA)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
VR=0.5*(AE-BE+(AE+BE)/R**2)*SIN(TETA)
RETURN
END
FUNCTION VT (R,TETA)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
VT=0.5*((AE-BE)*R-(AE+BE)/R)*COS(TETA)
RETURN
END
FUNCTION W2 (R,TETA)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
W2=0.25*((AE-BE)*R+(AE+BE)/R)**2*SIN(TETA)**2+
+0.25*((AE-BE)*R-(AE+BE)/R)**2*COS(TETA)**2
RETURN
END
15
SUBROUTINE MLKG4 (A,K,DL1,DL2,DB1,DB2,M,N,NT)
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 DIFFR1(DL1,M)
CALL DIFFR2(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)=(RM+RM**2*VR(RM,TN)/V(RM,TN))*
*DL1(MU,MU1)*DN+ +RM**2*DL2(MU,MU1)*DN+
+(VT(RM,TN)/V(RM,TN))*DB1(NU,NU1)*DM+
+DB2(NU,NU1)*DM
A(I1,I2)=A(I1,I2)/W2(RM,TN)
IF(I1.EQ.I2) A(I1,I2)=A(I1,I2)-K**2/V(RM,TN)**2
1 CONTINUE
RETURN
END
C
SUBROUTINE PRO (A,B,NT,CNORM)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(NT,NT),B(NT,NT)
16
CNORM=0.D0
DO 1 I=1,NT
DO 1 J=1,NT
P=0.D0
DO 2 L=1,NT
2 P=P+A(I,L)*B(L,J)
IF (I.EQ.J) P=P-1.D0
IF (ABS(P).GT.CNORN ) CNORM = ABS(P)
1 CONTINUE
RETURN
END
SUBROUTINE ITER0 (N,A,D0,D1,R,M,EPS)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(N,N),D0(N,N),D1(N,N),R(N,N)
NITER=0
100 CONTINUE
WRITE (*,*) ' NITER = ',NITER
DO 1 I=1,N
DO 1 J=1,N
P=0.D0
DO 2 L=1,N
2 P=P+A(I,L)*D0(L,J)
R(I,J)=-P
IF (I.EQ.J) R(I,J)=R(I,J)+1.D0
1 CONTINUE
PMAX=0.D0
DO 3 I=1,N
DO 3 J=1,N
IF (ABS(R(I,J)).GT.PMAX) PMAX=ABS(R(I,J))
3 CONTINUE
IF (PMAX.LE.EPS.OR.NITER.GT.M) RETURN
NITER=NITER+1
DO 4 I=1,N
DO 4 J=1,N
P=0.D0
DO 5 L=1,N
5 P=P+D0(I,L)*R(L,J)
4 D1(I,J)=D0(I,J)+P
DO 6 I=1,N
DO 6 J=1,N
6 D0(I,J)=D1(I,J)

17
GO TO 100
RETURN
END
SUBROUTINE SISLO (N,A,A1,COND)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(N,N),A1(N,N)
P=0.D0
DO 1 I=1,N
Q=0.D0
DO 2 J=1,N
2 Q=Q+ABS(A(I,J))
IF (Q.GT.P) P=Q
1 CONTINUE
P1=0.D0
DO 3 I=1,N
Q=0.D0
DO 4 J=1,N
4 Q=Q+ABS(A1(I,J))
IF (Q.GT.P1) P1=Q
3 CONTINUE
COND=P*P1
RETURN
END
SUBROUTINE CNORM1 (N,A,CN)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(N,N)
P=0.D0
DO 1 I=1,N
Q=0.D0
DO 2 J=1,N
2 Q=Q+ABS(A(I,J))
IF (Q.GT.P) P=Q
1 CONTINUE
CN=P
RETURN
END

18
Вызываемые подпрограммы и подпрограмм-функции:
MLKG4, DMINV, ITER0, PRO, SISLO, CNORM1, FB, V, VR,
VT, W2.

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

Вычисляет K – ую (K=0,1,2,3,4) клетку h-матрицы размера NT


x NT, NT=M*N для давления, DL1(M,M), DL2(M,M), DB1(N,N),
DB2(N,N) – рабочие массивы.
Вызываемые подпрограммы:
DIFFR1, DIFFR2, DIFT1, DIFT2.
DIFT1, DIFT2 описаны в [5]. DIFFR1, DIFFR2 описываются
ниже.

SUBROUTINE DIFFR1 (D1,M)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D1(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
TM=(2.*MU-1.)*PI/2./M
XM=COS(TM)
RM=0.5*(XM+1.)
DO 1 NU=1,M
TN=(2.*NU-1.)*PI/2./M
P=0.
DO 2 NP=0,M-1
BETA=4.*COS(NP*TN)/(1.+COS(TN))/M
IF(NP.EQ.0) BETA=BETA/2.
TPS=NP*SIN(NP*TM)/SIN(TM)
TMS=M*SIN(M*TM)/SIN(TM)
2 P=P+BETA*(COS(NP*TM)+2.*RM*TPS-(1.+2.*NP**2)*
*2.*(RM**2-RM)*TMS)
1 D1(MU,NU)=P
RETURN
END

19
SUBROUTINE DIFFR2 (D2,M)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D2(M,M)
PI=3.141592653589D0
DO 1 MU=1,M
TM=(2.*MU-1.)*PI/2./M
XM=COS(TM)
RM=0.5*(XM+1.)
DO 1 NU=1,M
TN=(2.*NU-1.)*PI/2./M
P=0.
DO 2 NP=0,M-1
BETA=4.*COS(NP*TN)/(1.+COS(TN))/M
IF(NP.EQ.0) BETA=BETA/2.
TPS=NP*SIN(NP*TM)/SIN(TM) TPS2=-
NP**2*COS(NP*TM)/SIN(TM)**2+NP*COS(TM)*SIN(NP*T
M)/
/ SIN(TM)**3
TMS=M*SIN(M*TM)/SIN(TM) TMS2=M*COS(TM)*
*(-1)**M/SIN(TM)**3
2 P=P+BETA*(4.*TPS+4.*RM*TPS2-
(1.+2.*NP**2)*(4.*XM*TMS+ +4.*(RM**2-RM)*TMS2))
1 D2(MU,NU)=P
RETURN
END

Эти подпрограммы осуществляют первое и второе


дифференцирование по r на отрезке [0,1] для функции u,
удовлетворяющей краевым условиям
∂u
= 0, u r =1 = 0.
∂r r =1

SUBROUTINE PRO (A,B,NT,CNORM)

Вычисляет норму A*B-I. Результат в CNORM.

SUBROUTINE ITER0 (N,A,D0,D1,R,M,EPS)


20
Итерационное уточнение обратной матрицы:
N – размер матрицы;
AD – A исходная матрица;
D0 – A-1 вычисленная с ошибкой обратная матрица;
D1 – результат уточнения;
R(N,N) – рабочий массив;
M – максимальное колличество итераций;
EPS – точность уточнения.

SUBROUTINE SISLO (N,A,A1,COND)

Число обусловленности A ∞ A1 ∞ → COND .

SUBROUTINE CNORM1 (N,A,CN)

Чебышёвская норма A(N,N); A ∞ → CN .

FUNCTION FB(R,TETA,FI)

Вычисляет правую часть уравнения Пуассона для точного


решения FU(R,TETA,FI).
DMINV – вариант с двойной точностью подпрограммы MINV
[11]; V, W2, VT, VR– подпрограмм функции для v, w2, vθ, vr .
Задачу для эллипса решает программа INT7 (без итерационного
уточнения обратной матрицы и масштабирования ). В остальном
программа подобна INT5.

21
PROGRAM INT7
C 31.7.92
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION C0(4900),C1(4900),C2(4900),C3(4900),C4(4900),
*F(630),U(630)
DIMENSION AD(4900),D0(4900),D1(4900),R0(4900)
DIMENSION DL1(49),DL2(49),DB1(169),DB2(169)
DIMENSION LX(70),LY(70)
COMMON AE,BE
FU(R,TETA,FI)=(R**2/2.-R)*SIN(TETA)*COS(FI)
AE=1.D0
BE=1.D0
BE=0.5D0
C
M=5
M=7
N=10
NT=M*N
CALL MLKG4 (C0,0,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C1,1,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C2,2,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C3,3,DL1,DL2,DB1,DB2,M,N,NT)
CALL MLKG4 (C4,4,DL1,DL2,DB1,DB2,M,N,NT)
NOUT =4
OPEN(UNIT=4,FILE='NOUT')
C
IJ=0
DO 10 I=1,NT
DO 10 J=1,NT
IJ=IJ+1
10 AD(IJ)=C0(IJ)
CALL DMINV (C0,NT,DET,LX,LY)
C
CALL PRO (AD,C0,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C0,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C0,CN)
WRITE (*,*) 'CNORM = ',CN
C
PM=1.D+17
PM=1.D0
22
C PM=1.D+10
IJ=0
DO 130 I=1,NT
DO 130 J=1,NT
IJ=IJ+1
130 C0(IJ)=C0(IJ)/PM
C
IJ=0
DO 20 I=1,NT
DO 20 J=1,NT
IJ=IJ+1
20 AD(IJ)=C1(IJ)
CALL DMINV (C1,NT,DET,LX,LY)
CALL PRO (AD,C1,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C1,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C1,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 131 I=1,NT
DO 131 J=1,NT
IJ=IJ+1
131 C1(IJ)=C1(IJ)/PM
C
IJ=0
DO 30 I=1,NT
DO 30 J=1,NT
IJ=IJ+1
30 AD(IJ)=C2(IJ)
CALL DMINV (C2,NT,DET,LX,LY)
CALL PRO (AD,C2,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C2,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C2,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 132 I=1,NT
DO 132 J=1,NT
23
IJ=IJ+1
132 C2(IJ)=C2(IJ)/PM
C
IJ=0
DO 40 I=1,NT
DO 40 J=1,NT
IJ=IJ+1
40 AD(IJ)=C3(IJ)
CALL DMINV (C3,NT,DET,LX,LY)
CALL PRO (AD,C3,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C3,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C3,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 133 I=1,NT
DO 133 J=1,NT
IJ=IJ+1
133 C3(IJ)=C3(IJ)/PM
C
IJ=0
DO 50 I=1,NT
DO 50 J=1,NT
IJ=IJ+1
50 AD(IJ)=C4(IJ)
CALL DMINV (C4,NT,DET,LX,LY)
CALL PRO (AD,C4,NT,CNORM)
WRITE (*,*) 'DET = ',DET,' CNORM = ',CNORM
CALL SISLO (NT,AD,C4,COND)
WRITE(*,*) 'COND = ',COND
CALL CNORM1 (NT,C4,CN)
WRITE (*,*) 'CNORM = ',CN
C
IJ=0
DO 134 I=1,NT
DO 134 J=1,NT
IJ=IJ+1
134 C0(IJ)=C0(IJ)/PM
C
PI=3.141592653589D0
24
L=9
I=0
DO 1 NU=1,N
XN=COS((2.*NU-1.)*PI/2./N)
TETA=PI*(XN+1.)/2.
DO 1 MU=1,M
XN=COS((2.*MU-1.)*PI/2./M)
R=0.5*(XN+1.)
DO 1 K=0,8
FI=2.*PI*K/L
I=I+1
U(I)=FU(R,TETA,FI)
1 F(I)=FB(R,TETA,FI)
NG=NT*L
WRITE(*,*) 'ТОЧНОЕ ЗНАЧЕНИЕ'
WRITE(*,12) (U(I),I=1,NG,81)
12 FORMAT(4E18.11)
WRITE(4,*) 'ТОЧНОЕ ЗНАЧЕНИЕ'
WRITE(4,12) (U(I),I=1,NG)
C
CALL DIVH (NT,2,C0,C1,C2,C3,C4,F,U)
C
WRITE(*,*) 'ВЫЧИСЛЕННОЕ ЗНАЧЕНИЕ'
WRITE(*,12) (U(I),I=1,NG,81)
WRITE(4,*) 'ВЫЧИСЛЕННОЕ ЗНАЧЕНИЕ'
WRITE(4,12) (U(I),I=1,NG)
STOP
END
FUNCTION FB(R,TETA,FI)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
FB=(AE*R*COS(FI)/V(R,TETA)/W2(R,TETA))*((BE-
-AE)*R*SIN(TETA)**2+ +0.5*((BE-
-AE)*R+(AE+BE)/R)*COS(2.*TETA))+R*SIN(TETA)*COS(FI)/
/V(R,TETA)**2
RETURN
END
III. Заключение. По поводу получения полных версий описанных
программ обращайтесь по электронному адресу: algazinsd@mail.ru
или на адрес Института проблем механики РАН, 119526, Москва,
проспект Вернадского д.101, к.1.
25
Алгазин Сергей Дмитриевич, Грошев Михаил
Владимирович

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

VI. Потенциальное обтекание тела вращения потоком


несжимаемой жидкости.

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


________________________________________________________

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


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

26