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

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

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

С. Д. Алгазин

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


МАТФИЗИКИ.

XI. О вычислении собственных значений уравнения


переноса.

Препринт № 801

Москва 2006 г.
Аннотация.

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


уравнения второго порядка с переменными коэффициентами.
Построен численный алгоритм без насыщения. Приводится текст
программы на Фортране-77.

The abstract.

The problem on eigenvalues for a second-kind equation with


floating factors is considered. The numerical algorithm without saturation
builts. The text of the program on the FORTRAN - 77 is reduced.

Работа выполнена при финансовой поддержке Российского


фонда фундаментальных исследований. Проект № 05-01-00250.

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

2
Введение.
В [1] рассматриваются задачи на собственные значения для оператора
Лапласа в произвольной гладкой области с постоянными коэффициентами.
Однако ряд задач математической физики приводит к задачам на собственные
значения для уравнения второго порядка с переменными коэффициентами (см.
ниже). Для решения этих задач существует метод наискорейшего спуска [2],
который в частности сводит решение самосопряжённого уравнения второго
порядка к последовательности решения задач для уравнения Пуассона в этой же
области. Этот метод применяется также для решения нелинейных уравнений [3].
Однако рассмотренные там примеры численных расчётов не вызывают
оптимизма в быстроте сходимости метода. В настоящей главе построен
численный алгоритм без насыщения в задаче на собственные значения для
эллиптического уравнения второго порядка с переменными коэффициентами.
Для примера рассмотрено краевое условие Неймана. По ходу изложения будет
пояснено, как рассмотреть другие краевые условия.

§ 1. Постановка задачи фильтрации газа в пористой среде.


Искомое уравнение имеет вид:

∂ (mρ ) 
(1.1) + div( ρv ) = 0,
∂t

где m=Vпор./V – пористость ( для реальных пластов лежит в пределах 0,15 ~ 0,22

); mρ – концентрация; v - скорость фильтрации (а не скорость жидкости).
Это уравнение получается из обычного закона сохранения массы

d d
(1.2) ∫ ρdτ = ∫ ρmdτ = 0,
dt Vпор . dt V

где Vпор. – объём пор, а V – полный объём, причём оба объёма подвижные. Из
(1.2) получаем, применяя формулу дифференцирования по подвижному объёму
[4]:

∂ (mρ )   
= div(mρw), v = mw,
∂t
 
где v − скорость фильтрации, а w − скорость жидкости. В результате получаем
уравнение (1.1).
Закон Дарси (1856) справедлив для медленных движений жидкости в
изотропной пористой среде, т.е. для малых значений числа Рейнольдса Re
(Re<Reкр.)

 k
(1.3) v = − qrad p,
µ

3
где k - коэффициент проницаемости, измеряемый в Дарси (1д = 10-8/0,981 см2).
Для реальных пористых сред k = 100 ~ 1000 мд ( 1мд=10-3д). Проницаемость -
геометрическая характеристика пористой среды, т. е. определяется размерами
частиц, их формой и упаковкой, μ – динамическая вязкость.
Уравнение состояния.

M p
ρ= ,
RT z ( p )

где M – молярный вес газа, R – универсальная газовая постоянная, T –


абсолютная температура; z(p) – определяется экспериментально (z(p) =1 для
совершенного газа), т.е. это баротропный газ.
Уравнение (1.1) относится к случаю, когда в пласте нет источников газа
(скважин). В общем случае уравнение неразрывности имеет вид:

∂ (mρ ) 
(1.4) + div( ρv ) = f ( z , t ), z ∈ G,
∂t

где f(z,t) – заданная функция, G – двумерная область с гладкой границей дG∈C∞.


Пусть z = ϕ (ς ), ς = re iθ - конформное отображение единичного круга на область
G. Выпишем уравнение (1.5) в новых переменных [4]:

ds 2 = (dr 2 + r 2 dθ 2 ) | ϕ ′(ς ) | 2 ⇒ g11 = | ϕ ′(ς ) | 2 , g 22 = r 2 | ϕ ′(ς ) | 2 , g =| ϕ ′(ς ) | 2 r.


1 ∂p
grad p r = ,
| ϕ ′(ς ) | ∂r
1 ∂p
grad p θ = .
| ϕ ′(ς ) | r ∂θ

Подставляя в (1.4) получим

∂ (mρ )
(1.5) =| ϕ ′(ς ) | − 2 L( w) + f (ς , t ), ς = re iθ , 0 ≤ r ≤1, 0 ≤ θ < 2π , | ς |≤ 1;
∂t

1 ∂  ∂w  1 ∂  ∂w 
(1.6) L( w) =  rk (r ,θ ) + 2  k ( r ,θ ) .
r ∂r  ∂r  r ∂θ  ∂θ 

Здесь введены обозначения:

m=m(r,θ) – пористость (известная функция координат );


p=p(r,θ,t) – давление ( неизвестная функция координат и времени );
=k k=
(r , θ , p ) k (r , θ )ψ ( p ) - проницаемость ( известная функция координат и
давления);
ρ=ρ(p) – плотность ( известная функция давления );

4
μ=μ(p) – вязкость ( известная функция давления );
ρ ( p)ψ ( p)
w( p ) = ∫ dp.
µ ( p)

Размерность: (M – единица массы, L – единица длины, T – единица


времени).

m,θ,ψ – безразмерные величины;


[p]=M/LT2, [ρ]=M/L3, [μ]=M/LT, [k]=L2, [w]=M/L3T, [r]=L
f(ς,t)=f(r,θ,t) – плотность отбора газа, т.е. масса газа, выделяющаяся в единицу
времени в единице объёма в пласте. Если ввести мощность пласта h=h(x,y) (т. е.
высоту пласта в точке (x,y)∈G, рассматриваемой области), то вид уравнения
(1.5) не изменится, если заменить m на mh, а k на kh. В этом последнем случае
[f]=M/L2T, т.е. масса, выделяющаяся из пласта в единицу времени и с единицы
площади.
Таким образом, (1.5), (1.6) искомая постановка задачи фильтрации. К
этому уравнению нужно добавить граничное условие

∂p
(1.7) = 0,
∂n ∂G
которое означает отсутствие потока газа через границу области дG (см. (1.3)).
Заметим, что функция w также удовлетворяет этому граничному условию.

§2. Дискретизация по пространственным переменным.


Для дискретизации задачи (1.5) – (1.7) проведём вначале дискретизацию
оператора L(w). Рассмотрим спектральную задачу:

∂w
(2.1) L( w) + λw = 0, = 0.
∂r r =1

Заметим, что

  ∂w  2 k  ∂w  2 
− ∫
|ς |≤1
L( w) wdς = ∫ k   + 2 

|ς |≤1   ∂r  r  ∂θ
 dς .
 

Таким образом, краевая задача (2.1) эквивалентна следующей


экстремальной задаче

  ∂w  2 k  ∂w  2 
(2.2) J ( w) = ∫ k   + 2   − λw dς → min .
2

  ∂r 
|ς |≤1  r  ∂θ  

Действительно, δJ (вариация функционала J) есть главная линейная часть


приращения J(w+h)-J(w), где h – произвольная гладкая функция. Нетрудно
получить, что

5
 k  1 ∂ 1 ∂
δJ = 2
| ς
∫ kwr hr + r 2 wθ hθ − λwh dς = 2{krwr h r =1 − ∫ [ r ∂r (rkwr ) + r 2 ∂θ (kwθ ) +
|≤1   |ς |≤1

+ λw]hdς } = 0

Так как h – произвольная функция, отсюда следуют соотношения (2.1). Итак,


при поиске минимума функционала (2.2) не нужно заранее удовлетворять
краевому условию Неймана, т. е. это краевое условие естественное.
Для дискретизации функционала (2.2) применим квадратурную формулу
[1]:

ς
∫ f (ς )dσ = ∑
| |≤1 ν

,l
l fνl , fνl = f (rν e iθ l ),
(2.3)
(2ν − 1)π 2πl
rν = cos, ν = 1,2,..., m; θ l = , l = 0,1,...,2n; N = 2n + 1.
4m N
Эта квадратурная формула получается, если заменить подынтегральную
функцию интерполяционной формулой для функции двух переменных в круге
[1]:
2n m
(2.4) ( PM f )(r ,θ ) = ∑∑ fνl Lνl (r ,θ ) , fνl = f (rν ,θ l ) ,
l = 0 ν =1

2T2 m (r )  Dn (θ − θ l ) Dn (θ − θ l + π ) 
Lvl (r ,θ ) =  − ,
NT2'm (rν )  r − rν r + rν 
n
Dn (θ ) = 0,5 + ∑ cos kθ , Tm (r ) = cos(m arccos x).
k =1

Интерполяционная формула (2.4) обладает нужными свойствами.


Действительно, формула (2.4) точна на многочленах от двух переменных
степени ω=min(n,m-1). Обозначим множество этих многочленов Pω , а Eω
обозначим наилучшее приближение функции f∈C[D] (D – единичный круг)
многочленом из Pω . Тогда определён проектор
PM: C[D] →LM, LM=L(L1,…, LM)
и справедливо классическое неравенство:
(2.5) | f (r ,θ ) − ( PM f )(r ,θ ) |≤ (1+ | PM | ∞ ) E ω ( f ),
в котором |PM|∞ - норма проектора PM . Так же, как в одномерном случае,
неравенство (2.5) показывает, что соответствующая интерполяционная формула
не имеет насыщения. Норма проектора PM удовлетворяет соотношению
|PM|∞=O(ln2M),
причём не составляет труда уточнить эту оценку. Делая некоторые
предположения о гладкости класса интерполируемых функций, можно оценить
скорость убывания наилучшего приближения Eω при M→∞ и получить
конкретные оценки погрешности интерполяционной формулы (2.4).
Пусть
f(r,θ)=(PM f)(r,θ) +ρM(r,θ;f),
6
где ρM(r,θ;f) - погрешность интерполяционной формулы (2.4) (остаток). Тогда
справедлива следующая теорема К. И. Бабенко.
Теорема (К. И. Бабенко). Рассмотрим класс функций
H ∞ ( K; D) ⊂ C ( D), удовлетворяющих в круге D условиям
M

∂ k +l f
≤ K, k + l ≤ µ,
∂x k ∂y l
тогда, если f∈ H ∞M ( K; D) , то
(2.6) |ρM( . ;f)|∞≤ cµ K M−µ/2 log2M,
где cµ - константа, зависящая от µ.
Таким образом, из рассмотрения формулы (2.6) видно, что при
одинаковом числе узлов интерполяции M скорость убывания погрешности
интерполяционной формулы (2.4) возрастает с ростом µ, т.е. с ростом гладкости
интерполируемой функции f. Это означает, что полученная интерполяционная
формула не имеет насыщения.
Основываясь на интерполяционной формуле (2.4), легко построить
квадратурную формулу для вычисления определённых интегралов, когда
областью интегрирования является круг. В самом деле, заменяя
подынтегральную функцию выражением (2.4), получим квадратурную формулу
(2.3), где dσ - элемент площади, сνl – весовые коэффициенты, а δ(f) –
погрешность. Для сνl имеем
cν l = ∫ Lν l (r ,θ )dσ ,
D

и они не зависят от l. Введём в рассмотрение блочно-диагональную матрицу


C=diag(c1, c2,…, cm),
где cν , ν=1,2,…,m – диагональные матрицы размера N×N с одинаковыми
числами на диагонали. Для погрешности квадратурной формулы имеем
следующую оценку:
|δ(f)|≤ 2πEω(f).
Заметим, что все cνl положительны при достаточно большом числе узлов
интерполяции.
Для коэффициентов квадратурной формулы (2.3) имеем выражение:

s −1
4πrν  cosψ ν m −1  (2ν − 1)π
сν =  + ∑ t s cos sψ ν , t s = 1 /(1 + (−1) 2 s ), ψ ν = , s ≥ 1 − нечётно.
m(2nν + 1)  2 s = 3( 2 )  4m

 ∂w 
  = ∑ H νl , µp wµp
 ∂r  ς =ςνl µ , p

 ∂w  N
  = ∑ Blp wνp
 ∂θ  ς =ςνl p =1

7
Матрицы B и H подучаются дифференцированием интерполяционной
формулы (2.4)

2 n
2π (l − p )
Blp =
N
∑ k sin k
k =1 N

Для получения матрицы H продифференцируем по r интерполяционную


формулу (2.4). Обозначим
d  T2 m (r )  1 2 m −1 s cos sψ ν sin sψ µ
(1)
Aµν =   = ∑
dr  (r − rν )T2′m (rν )  r = r m s =1 sin ψ µ
µ

d   1 2 m −1 s (−1) cos sψ ν sin sψ µ


s
T2 m (r )
( 2)
Aµν =   =− ∑
dr  (r + rν )T2′m (rν )  r = r m s =1 sin ψ µ
µ

Дифференцируя (2.4) по r получим


du (r ,θ ) m
 (1) 2 2n

= ∑  Aµν uνp − ∑ Aµν D( 2)
n (θ p + π − θ l )uνl 
dr θr ==θrµ ν =1  N l =0 
p

n
где Dn (θ p + π − θ l ) = 0,5 + ∑ (−1) k cos k (θ p − θ l ) ⇒
k =1

2 ( 2)
H µp ,νl = Aµν
(1)
δ pl − Aµν Dn (θ p + π − θ l )
N
Нетрудно видеть, что H – h-матрица [1], и, следовательно, представляется в
виде
n
2 '
(2.7) H =
N

k =0
Λ k ⊗ hk ,

где штрих у знака суммы означает, что слагаемое при k=0 берётся с
коэффициентом ½, Λk, k=0,1,…,n – матрица размера m × m; hk, k=0,1,…,n –
матрица размера N × N:

hkij=cos[k2π(i-j)/N)], i,j=1,2,…,N,

через ⊗ обозначено кронекерово произведение матриц. Конкретно матрицы Λk в


этом случае имеют вид:

Λ kµν = (−1) k +1 Aµν


( 2)
+ Aµν
(1)

Итак,

2 2 m −1 s cos sψ ν sin sψ µ
Λ 2 k , µν = ∑
m s =2( 2) sin ψ µ

8
2 2 m −1 s cos sψ ν sin sψ µ
Λ 2 k +1, µν = ∑
m s =1( 2 ) sin ψ µ

Ниже будем обозначать эти матрицы - Λ(kµν) . Распишем формулу (2.7)

подробно:
2 n ' 2π ( p − l )
H νl , µp =
N

k =0
Λ(νµk ) cos k
N
,

~
2 n ' 2π (l − l )
H νl , µ~~l =
N
∑q =0
Λ(νqµ~) cos q
N
.

Используя квадратурную формулу (2.3) функционал (2.2) преобразуем в


квадратичную форму:
  ∂w  2 kνl  ∂w 
2

(2.8) J ( w) = ∑ cνl kνl   + 2  + λwν2l .
ν ,l   ∂r  ς =ςνl rν  ∂θ  ς =ςνl 
Дифференцируя (2.8) по wµ~~l получим
N

∑ Bµ~~l ,µp wµp + ∑ A~lµp wµ~p − λc µ~ wµ~~l = 0,


~

µ, p p =1

где
~
4 n ' n ' m 2n
2π ( p − l ) 2π (l − l ) 
Bµ~~l , µp = 2 ∑∑ ∑ cν Λνµ Λνµ~ ∑ kνl cos k
(k ) (q)

N
cos q
N

N k =0 q =0 ν =1 l =0 
~
4 c µ~ n n N 2π (l − p ) 2π (l − l ) 
µ~
A~l p = 2 2 ∑∑ kq ∑ k µ~l sin k
N
sin q
N
.
N rµ~ k =1 q =1  l =1 
Это есть дискретный аналог задачи на собственные значения
div(kqradw)+λw=0, r<1
∂w
= 0.
∂r r =1
Оценка погрешности описанной дискретизации может быть получена по
схеме, описанной в [1]. См. также [5].
§3. Результаты численных экспериментов.
Проводились расчёты задачи (2.1) в круге (k=1), возмущённом круге
(эпитрохоида, k=1, k≠1). В круге собственные значения известны λ i , i = 1,2,... -
нуль производной функции Бесселя. Сравнение с таблицами показывает, что
даже на сетке 3×7 имеем в первых собственных значениях по 4 знака после
запятой. Однако точность значительно хуже, чем по методике, описанной в [1]
для уравнения с постоянными коэффициентами. Второй расчёт проводился для

9
эпитрохоиды (ϕ(ς)=ς(1+εςn), ε = 0.0625, n=12), для которой в [1] в таблице (3.9)
приведены вычисленные значения. Результаты расчётов представлены в
таблице 3.1 (выписаны знаки, совпавшие с расчётами из [1]).

Таблица 3.1
№ 8×11 10×21 15×31
2 1.76 1.7751 1.77623557
6 3.77 3.72 3.7317
11 5.2 5.16 5.1770
16 6.9 6.5 6.4787
Третий расчёт проводился для той же эпитрохоиды для функции
k(r,θ)=k0(0.1+r2)(sin12θ+1.1), k0=10-13/0.981 м2=0.1 дарси.
Результаты расчётов представлены в таблице 3.2.
Таблица 3.2
№ 8×11 10×21 15×31 20×41 30×41
2 2.8451E-7 2.5447E-7 2.4840E-7 2.6227E-7 2.5541E-7
6 5.8268E-7 6.5814E-7 7.0164E-7 7.2177E-7 7.1376E-7
11 9.2409E-7 9.3812E-7 1.0838E-6 9.8923E-7 9.5191E-7
16 1.2075E-6 1.3895E-6 1.1905E-6 1.1763E-6 1.0876E-6
21 1.4927E-6 1.5927E-6 1.4384E-6 1.4482E-6 1.4222E-6

Таким образом, можно констатировать, что точность вычисления


собственных значений удовлетворительная и дискретизация по
пространственным переменным построена правильно. Методика расчёта
нестационарной задачи будет опубликована позднее.

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


Решение поставленной задачи осуществляет программа ALAPN:

$objcomment lib:"treq.lib"
PROGRAM ALAPN
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION H(1512900),B(1512900),WR(1230),WI(1230),IANA(1230),
*U(1230),PR(1230),A1(900),A2(900),NL(30),Z(1230),X(1230),
*Y(1230),Y2(11)
REAL*4 PR
P(R,T)=(1.D-13/0.981)*(0.1+R*R)*(SIN(12.*T)+1.1)
C P(R,T)=1.D0
PI=3.141592653589D0
WRITE (*,*) 'M=?, N=?'
READ (*,*) M,N
10
NT=M*N
NT2=NT*NT
I=0
DO 10 NU=1,M
R=COS((2.*NU-1.)*PI/4./M)
DO 10 L=1,N
T=2.*PI*(L-1.)/N
I=I+1
10 PR(I)=P(R,T)
CALL LAPN (H,M,N,NT,PR,A1,A2)
WRITE (*,*) 'EPS=?, NP=?'
READ (*,*) EPS,NP
DO I=1,M
NL(I)=N
ENDDO
CALL MOD2 (Z,M,NL,EPS,NP)
IJ=0
DO I=1,NT
DO J=1,NT
IJ=IJ+1
H(IJ)=H(IJ)/Z(J)
ENDDO
ENDDO
C
NOUT=4
OPEN(UNIT=4,FILE='NOUT')
WRITE(NOUT,*) 'H'
WRITE (NOUT,*), (H(I),I=1,NT*NT)
WRITE(NOUT,*) 'end H'
C
CALL ELMHES (NT,NT,1,NT,H,IANA)
CALL ELTRAN (NT,NT,1,NT,H,IANA,B)
CALL HQR2 (NT,NT,1,NT,H,WR,WI,B,IERR)
WRITE (*,*) 'IERR = ',IERR
PAUSE
PRINT 12, (WR(I),I=1,NT),(WI(I),I=1,NT)
12 FORMAT (1X,4E18.11)
C NOUT=4
C OPEN(UNIT=4,FILE='NOUT')
WRITE (NOUT,12), (WR(I),I=1,NT),(WI(I),I=1,NT)
DO 23 I=1,NT
23 WR(I)=DSQRT(ABS(WR(I)))
WRITE (*,*) 'Eigenvalue'
PRINT 12, (WR(I),I=1,NT)
WRITE (NOUT,*) 'Eigenvalue'
WRITE (NOUT,12), (WR(I),I=1,NT)
DO I=1,NT
X(I)=WR(I)
ENDDO
C
RMIN=1.D12
IJ=1
I1=1
110 DO 60 I=I1,NT
IF (X(I).LT.RMIN) THEN
RMIN=X(I)
IANA(IJ)=I
Y(IJ)=X(I)
ENDIF
60 CONTINUE
11
X(IANA(IJ))=1.D17
RMIN=1.D12
IJ=IJ+1
IF(IJ.LE.NT) GO TO 110
C
WRITE(NOUT,12) (X(I),I=1,NT)
WRITE(NOUT,12) (Y(I),I=1,NT)
WRITE (NOUT,*) 'Eigenvalue'
WRITE(NOUT,12) (Y(I),I=1,NT)
C
M11=2*M
DO 21 K=1,10
WRITE (*,*) 'Inject the number of an eigenvalue?'
READ (*,*) IJ
WRITE (*,*) IJ, Y(IJ)
WRITE (NOUT,*) IJ, Y(IJ)
I2=NT*(IANA(IJ)-1)
DO 22 I=1,NT
I3=I2+I
22 U(I)=B(I3)
CALL URT (0.D0,M,NL,U,X)
CALL URT (3.14159265359D0,M,NL,U,Z)
DO 4 I=1,M
I1=M11-I+1
4 X(I1)=Z(I)
DO 20 LL=1,11
X2=0.1*(LL-1)
C X2=0.1*(LL-1)/Y(IJ)
20 Y2(LL)=EIGEN (X2,X,Z,M11,-1.D0,+1.D0)
CALL NORM1(Y2,11)
WRITE (NOUT,12) Y2
PRINT 12,Y2
21 PAUSE
120 FORMAT(A)
STOP
END

SUBROUTINE LAPN (H,M,N,NT,PR,A1,A2)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION H(NT,NT),A1(M,M),A2(M,M),C(30),CT(30),ST(30)
REAL*4 PR(1)
INTEGER P,Q,S,Q1,QP,NL(30)
PI=3.1415926535897932D0
M1=2*M-1
C******************************************************
C Вычисление коэффициентов квадратурной формулы
C******************************************************
DO I=1,M
NL(I)=N
ENDDO
CALL CNU(2*M,NL,C)
C*****
C Вычисление массивов A1 и A2
C*****
DO 1 MU=1,M
PMU=0.25*(2.*MU-1.)*PI/M
SPMU=DSIN(PMU)
DO 1 NU=1,M
PNU=0.25*(2.*NU-1.)*PI/M
RES1=0.D0
12
RES2=0.D0
DO 2 S=2,M1,2
2 RES1=RES1+S*DCOS(S*PNU)*DSIN(S*PMU)/SPMU
DO 3 S=1,M1,2
3 RES2=RES2+S*DCOS(S*PNU)*DSIN(S*PMU)/SPMU
A1(MU,NU)=2.*RES1/M
1 A2(MU,NU)=2.*RES2/M
C*****
C Вычисление таблиц синусов и косинусов
C*****
NM=(N-1)/2
DO 6 L=1,NM
PNU=2.*PI*L/N
CT(L)=DCOS(PNU)*2./N
6 ST(L)=DSIN(PNU)*2./N
C*****
C Вычисление матрицы B
C*****
NM1=NM+1
I=0
DO 7 MUT=1,M
C
WRITE (*,*) 'B',MUT
C
DO 7 LT =1,N
I=I+1
J=0
DO 7 MU=1,M
DO 7 P=1,N
J=J+1
RES=0.D0
DO 8 K1=1,NM1
K=K1-1
KP=MOD(K,2)
DO 8 Q1=1,NM1
Q=Q1-1
QP=MOD(Q,2)
DO 8 NU=1,M
IF(KP.EQ.0) RES1=A1(NU,MU)
IF(K.EQ.0) RES1=RES1/2.D0
IF(KP.NE.0) RES1=A2(NU,MU)
IF(QP.EQ.0) RES2=A1(NU,MUT)
IF(Q.EQ.0) RES2=RES2/2.D0
IF(QP.NE.0) RES2=A2(NU,MUT)
DO 8 L=1,N
IC=MOD(K*IABS(P-L),N)
IF(IC.EQ.0) CS=2.D0/N
IF(IC.NE.0.AND.IC.LE.NM) CS=CT(IC)
IF(IC.GT.NM) CS=CT(N-IC)
IC=MOD(Q*IABS(L-LT),N)
IF(IC.EQ.0) SS=2.D0/N
IF(IC.NE.0.AND.IC.LE.NM) SS=CT(IC)
IF(IC.GT.NM) SS=CT(N-IC)
8 RES=RES+C(NU)*RES1*RES2*PR((NU-1)*N+L)*CS*SS
7 H(I,J)=RES/C(MUT)
C*****
C Вычисление матрицы A
C*****
I0=-N
DO 9 MUT=1,M
13
C
WRITE (*,*) 'A',MUT
C
R=DCOS(0.25*(2*MUT-1)*PI/M)
I0=I0+N
DO 9 LT=1,N
LTP=(LT-1)*N
DO 9 P=1,N
NP=(P-1)*N
RES=0.D0
DO 10 K=1,NM
DO 10 Q=1,NM
DO 10 L=1,N
IC=MOD(K*IABS(L-P),N)
IF(IC.EQ.0) CS=0.D0
IF(IC.NE.0.AND.IC.LE.NM) CS=ST(IC)
IF(IC.GT.NM) CS=-ST(N-IC)
IF(P.GT.L) CS=-CS
IC=MOD(Q*IABS(L-LT),N)
IF(IC.EQ.0) SS=0.D0
IF(IC.NE.0.AND.IC.LE.NM) SS=ST(IC)
IF(IC.GT.NM) SS=-ST(N-IC)
IF(LT.GT.L) SS=-SS
10 RES=RES+K*Q*PR(I0+L)*CS*SS
9 H(I0+LT,I0+P)=H(I0+LT,I0+P)+RES/R/R
RETURN
END

SUBROUTINE CNU (M,NL,C)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION NL(1),C(1)
PI=3.14159265359D0
M1=M-1
M2=M/2
DO 2 NU=1,M2
N1=NL(NU)
P=(2.*NU-1.)*PI/2./FLOAT(M)
P1=COS(P)
C(NU)=0.5*P1
DO 3 KS=3,M1,2
T=((-1)**((KS-1)/2)*FLOAT(KS)-1.)/(FLOAT(KS*KS)-1.)
3 C(NU)=C(NU)+ T*COS(KS*P)
2 C(NU)=C(NU)*8.*P1/FLOAT(M*N1)
RETURN
END

SUBROUTINE MOD2 (Z,M,NL,EPS,N)


IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION Z(1),NL(M)
PI=3.14159265359D0
I=0
DO 1 NU=1,M
R= COS((2.*NU-1.)*PI/4./M)
R1=R**N*(N+1)
R2= R1*R1
N1=NL(NU)
DO 1 L=1,N1
I=I+1
T=2.*PI*(L-1.)/N1
1 Z(I)=1.+2.*R1*EPS*COS(N*T)+EPS*EPS*R2
14
RETURN
END

SUBROUTINE NORM1(Y,N)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION Y(1)
P=0.D0
DO 1 I=1,N
IF (ABS(Y(I)).GT.P) IP=I
IF (ABS(Y(I)).GT.P) P=ABS(Y(I))
1 CONTINUE
P=Y(IP)
DO 2 I=1,N
2 Y(I)=Y(I)/P
RETURN
END

Первая строка этой программы: $objcomment lib:"treq.lib"

это вызов библиотеки treq.lib, которая содержит


подпрограммы пакета EISPACK: CDIV, ELMHES, ELTRAN, HQR2.
Эти подпрограммы доступны в Интернет по адресу:
htpp://www.netlib.org/eispack/. Кроме того, эта
библиотека содержит подпрограммы T, URT [1].

Описание программы ALAPN.

1. Программа запрашивает параметры сетки в круге: M=?,


N=?
2. Программа запрашивает параметры эпитрохоиды EPS=?,
NP=?
3. Далее вычисляется функция пористости, которая задана
функцией формулой в начале программы.
4. Матрица дискретной задачи вычисляется подпрограммой:
SUBROUTINE LAPN (H,M,N,NT,PR,A1,A2)

H – выходной массив размера NT×NT, NT=M*N (двойная


точность); PR – входной массив длины NT (функция
пористости в узлах сетки в круге)(одинарная точность); A1
и A2 – массивы размера M×M двойной точности(рабочие).
5.Вычисление собственных значений матрицы Z-1H
производится подпрограммами пакета EISPACK: ELMHES,
ELTRAN, HQR2.
6. После окончания вычислений программа запрашивает
номер собственного значения, которое нужно вывести на
экран. Выводится также на экран собственный вектор на
действительной оси [0,1]:
r=0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0. Собственный
вектор нормируется по максимуму модуля.

15
Литература.

1. Алгазин С. Д. Численные алгоритмы без насыщения в классических


задачах математической физики. М.: Научный Мир, 2002, 155 стр.

2. Канторович Л.В., Акилов Г.П. Функциональный анализ. М.: Наука,


1984, 752 с., [ стр. 572, 586]

3. Кошелёв А.И. Регулярность решений эллиптических уравнений и


систем. М.: Наука, 1986, 239 с.

4. Седов Л.И. Механика сплошной среды. Т.1, М.: Наука, 1970, 492 с.

5. Алгазин С. Д. О локализации собственных значений замкнутых


линейных операторов // Сиб. мат. журн. 1983. Т.24. № 2. С. 3-8.

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

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

XI. О вычислении собственных значений уравнения


переноса.

Подписано к печати 26.01.2006. Заказ № 1-2006. Тираж 50 экз.


________________________________________________________

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


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

16

Вам также может понравиться