Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
С. Д. Алгазин
Препринт № 698
Москва 2002 г.
Аннотация.
Рассматривается уравнение Пуассона в торе и внешности тела
вращения. Построены численные алгоритмы без насыщения. Для
решения соответствующей дискретной задачи применяется быстрое
преобразование Фурье. Это позволяет решать уравнение Пуассона
быстрее, чем матрица дискретной задачи умножается на вектор.
Приводятся программы на Фортране
The summary.
The Poisson equation in Torres and appearance of a body of rotation
is considered. The numerical algorithms without saturation are
constructed. The fast transformation Fourier is applied to the solution of
the appropriate discrete problem. It allows deciding an equation Poisson
faster, than the matrix of a discrete problem is multiplied on vector. The
programs on a Fortran are resulted.
2
Введение.
Этот препринт продолжение серии препринтов [1-3]. Он
посвящён описанию программного комплекса для численного
решения трёхмерного уравнения Пуассона в торе и внешности тела
вращения. Сами алгоритмы описаны в [4-6]. Суть приведённых
алгоритмов состоит в следующем: на основе теории h-матрицы,
построенной в [6] строится дискретное уравнение Пуассона, которое
наследует свойство разделения переменных дифференциальной
задачи; для умножения полученной матрицы дискретной задачи на
вектор применяется быстрое преобразование Фурье. Таким образом,
дискретное уравнение Пуассона решается быстрее, чем матрица
дискретной задачи умножается на вектор. Точное количество
операций подсчитано в [4-6]. Заметим также, что применение
названного метода дискретизации позволяет также создать
экономные по памяти алгоритмы.
I. Уравнение Пуассона в торе.
3
Постановка задачи и дискретизация. Пусть рассматриваемый
тор Т получается вращением круга единичного радиуса вокруг оси
z некоторой декартовой системы координат (x, y, z). Причем центр
круга лежит в плоскости (x, у) на расстоянии R от оси z и плоскость
круга перпендикулярна плоскости (х, у).
Рассмотрим в этой области, например, задачу Дирихле для
уравнения Пуассона
∂ 2u ∂ 2u ∂ 2u
+ + = f ( x, y, z), ( x, y, z) ∈ T , u ∂G = 0.
∂x 2 ∂y 2 ∂z 2
оператор Лапласа
Δu=div grad u
записывается в виде
uϕ′′ 2 uθ′ sin θ − r u r′ cosθ
∆u = ∆ r ,θ u + + ,
( R − r cosθ ) 2
r ( R − r cosθ )
1 1
∆ r ,θ = (r u r′ )′r + 2 uθ′′2 .
r r
u k (r ,θ , ϕ ) = vk (r ,θ )e ikϕ , k = 0, ± 1, ± 2, ... ,
Hu+λu=0.
5
Здесь u ∈ R M , M = mN - вектор, компоненты которого содержат
(4) Hu=f.
Здесь u, f ∈ R M , M = mN - векторы, компоненты которых содержат
приближенные значения решения уравнения Пуассона и его правой
части в узлах сетки. Оценка погрешности отклонения решения
дискретного уравнения Пуассона от точного может быть получена
стандартным способом. Отметим только некоторые качественные
особенности. Применяемая дискретизация основана на
интерполировании решения многочленами (алгебраическими и
тригонометрическими). Известно [8], что точность этой
интерполяции тем выше, чем глаже интерполируемая функция.
Таким образом, описанный алгоритм не имеет насыщения.
Указанное обстоятельство позволяет проводить расчеты уравнения
Пуассона с гладкой правой частью на редкой сетке.
Быстрое решение дискретного уравнения Пуассона. Для того
чтобы решить дискретное уравнение Пуассона (4), необходимо
обратить h-матрицу Н. Это делается по формуле, приведённой в [6].
Затем производится быстрое умножение этой матрицы на вектор
(см. [4]).
6
Например, при N=27 требуется 678 N r2 Nθ2 + 271N r Nθ операций, а
прямое умножение матрицы H-1 на вектор требует
1458 N r2 Nθ2 − 27 N r Nθ операций. При больших Nr и Nθ экономия
составляет около 53% операций.
Для того чтобы убедиться в устойчивости предложенного метода,
следует оценить норму матрицы H-1. Обозначим через ||.||2
спектральную норму матрицы. Тогда
H −1 2
= max Λ−k1
2
PROGRAM TOR5
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A0(3025),DR(3025),U(495),F(495)
DIMENSION A1(3025),A2(3025),A3(3025),A4(3025)
7
DIMENSION C0(81),C1(81),C(81)
DIMENSION DT(11,11)
C
C WRITE(5,*) 'M = ? '
C READ(5,*) M1
C WRITE(5,*) 'N = ? '
C READ (5,*) N
M1=5
N=11
C
C KAHAЛ BBOДA ДAHHЫX
NREAD = 3
OPEN(UNIT=3,FILE='DATA')
C KAHAЛ ПPOMEЖУTOЧHЫX BЫДAЧ
NOUT = 4
OPEN(UNIT=4,FILE='NOUT')
C
IM = 0
300 IM = IM + 1
IF (IM.GT.10) STOP
READ(NREAD,*) M
C
NT=M*N
NM=(N-1)/2
M2=M*M
C
READ (NREAD,*) (C0(I),I=1,M2)
READ (NREAD,*) (C1(I),I=1,M2)
IF (M1.NE.M) GO TO 300
WRITE (NOUT,*) ' M = ', M
WRITE(NOUT,*) 'LAMDA0'
WRITE(NOUT,*) (C0(I),I=1,M2)
WRITE(NOUT,*) 'LAMDA1'
WRITE(NOUT,*) (C1(I),I=1,M2)
C
CALL HMATR (A0,M,N,C0,C1,C)
CALL RASPAK(A0,M,NM)
CALL TRANSP (A0,NT)
NT2=NT*NT
DO 1 I=1,NT2
A0(I)=-A0(I)
8
A1(I)= A0(I)
A2(I)= A0(I)
A3(I)= A0(I)
1 A4(I)= A0(I)
C
RB=5.D0
C
CALL TOR (A0,M,N,NT,0,RB,DT,DR)
CALL TOR (A1,M,N,NT,1,RB,DT,DR)
CALL TOR (A2,M,N,NT,2,RB,DT,DR)
CALL TOR (A3,M,N,NT,3,RB,DT,DR)
CALL TOR (A4,M,N,NT,4,RB,DT,DR)
C
CALL DMINV (A0,NT,DET,U,F)
CALL DMINV (A1,NT,DET,U,F)
CALL DMINV (A2,NT,DET,U,F)
CALL DMINV (A3,NT,DET,U,F)
CALL DMINV (A4,NT,DET,U,F)
C
PI=3.141592653589D0
C
IJ=0
DO 10 NU=1,M
R=COS((2.D0*NU-1.D0)*PI/4.D0/M)
DO 10 L=1,N
T=2.D0*(L-1)*PI/N
DO 10 LF=1,9
FI=2.D0*(LF-1)*PI/9.D0
IJ=IJ+1
X=(RB-R*COS(T))*COS(FI)
Y=(RB-R*COS(T))*SIN(FI)
Z=R*SIN(T)
S=X**2+Y**2+Z**2-RB**2-1.D0
F(IJ)=S**2-4.D0*RB**2*(1.D0-Z**2)
10 U(IJ)=12.D0*S+8.D0*(X**2+Y**2+Z**2)+8.D0*RB**2
NG=NT*9
WRITE (NOUT,*) 'Точное значение'
WRITE (NOUT,12) (F(I),I=1,NG)
WRITE (*,*) 'Точное значение'
WRITE (*,12) (F(I),I=1,NG,9)
C
CALL DIVH (NT,2,A0,A1,A2,A3,A4,U,F)
9
C
WRITE (NOUT,*) 'Вычисленное значение'
WRITE (NOUT,12) (F(I),I=1,NG)
WRITE (*,*) 'Вычисленное значение'
WRITE (*,12) (F(I),I=1,NG,9)
12 FORMAT (4E18.11)
STOP
END
Описание параметров:
H – выходной массив длины m2(n+1);
M – m (число окружностей сетки);
N=2n+1 – число точек на каждой окружности;
LAMDA0, LAMDA1 – входные массивы размерности m x m, таблицы
которых приведены в файле DATE [1];
C – рабочий массив m x m.
11
SUBROUTINE TOR (A,M,N,NT,K,RB,DDT,DDR)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION A(NT,NT),DDT(N,N),DDR(NT,NT)
DIMENSION A1(81),A2(81)
INTEGER P
CALL DT(N,DDT)
CALL DR(M,N,NT,DDR,A1,A2)
PI=3.141592653589D0
I=0
DO 1 MU=1,M
RMU=COS((2.D0*MU-1.D0)*PI/4.D0/M)
DO 1 P=1,N
SP=SIN((P-1.D0)*2.D0*PI/N)
CP=COS((P-1.D0)*2.D0*PI/N)
I=I+1
J=0
DO 1 NU=1,M
DO 1 L=1,N
D=RB-RMU*CP
J=J+1
IF(NU.NE.MU) GO TO 2
A(I,J)=A(I,J)+SP*DDT(P,L)/RMU/D
2 CONTINUE
A(I,J)=A(I,J)-CP*DDR(I,J)/D
IF(I.EQ.J) A(I,J)=A(I,J)-K*K/D**2
1 CONTINUE
RETURN
END
Описание параметров:
SUBROUTINE DT(N,D)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D(N,N)
PI=3.141592653589D0
NM=(N-1)/2
DO 1 I=1,N
DO 1 J=1,N
P=0.D0
DO 2 K=1,NM
2 P=P+K*SIN(K*2.D0*PI*(I-J)/N)
1 D(I,J)=-2.D0*P/N
RETURN
END
Описание параметров:
SUBROUTINE DR(M,N,NT,D,A1,A2)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D(NT,NT),A1(M,M),A2(M,M)
INTEGER P,DELTA
CALL A1A2 (M,A1,A2)
PI=3.141592653589D0
NM=(N-1)/2
I=0
DO 1 MU=1,M
DO 1 P =1,N
I=I+1
J=0
DO 1 NU=1,M
DO 1 L =1,N
13
J=J+1
IF(P.EQ.L) DELTA=1
IF(P.NE.L) DELTA=0
DN=0.5D0
DO 2 K=1,NM
2 DN=DN+(-1)**K*COS(K*2.D0*PI*(P-L)/N)
1 D(I,J)=A1(MU,NU)*DELTA-2.D0*A2(MU,NU)*DN/N
RETURN
END
Описание параметров:
Описание параметров:
M – m (число окружностей сетки в малом круге);
A1, A2 – выходные массивы размера M x M.
N −1
qj
Aq = ∑f
j =0
j exp(2πi
N
), q = 0,1,...,2n; N = 2n + 1 = 3R , R = 1,2.
Описание параметров:
R = 1,2 – целое;
A – выходные коэффициенты Фурье (COMPLEX*16 длины N )
F - входные коэффициенты REAL*8 длины N (0:2n);
IP=1 вычисляется половина коэффициентов Фурье q=0,1,…,n;
IP=0 вычисляются все коэффициенты Фурье.
17
SUBROUTINE DIVHM1 (R,RL,AM,BM,U)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION RL(0:4),AM(0:4),BM(4),U(9),FA(0:8),FB(0:8)
COMPLEX*16 A(0:8),B(0:8)
INTEGER P,R
L=3**R
L1=L-1
LM=(L-1)/2
FA(0)=0.D0
FB(0)=0.D0
DO 1 P=1,LM
FA(P)=RL(P)*AM(P)
FB(P)=RL(P)*BM(P)
FA(L-P)= FA(P)
1 FB(L-P)=-FB(P)
CALL FUR(R,A,FA,0)
CALL FUR(R,B,FB,0)
S=0.D0
DO 3 I=0,LM
3 S=S+AM(I)*RL(I)
U(1)=S
DO 2 P=1,L1
2 U(P+1)=AM(0)*RL(0)+0.5D0*(REAL(A(P))+AIMAG(B(P)))
RETURN
END
18
III. Дискретизация оператора Лапласа и быстрое решение
уравнения Пуассона для внешности тела вращения.
Ф|дΩ =0.
(III.3)
r ∂ ∂Φ ∂ v ∂Φ 1 ∂ 2 Φ
∆Φ = 2 ∂r rv ∂r + ∂θ r ∂θ + v 2 ∂ϕ 2 , w = (∂v / ∂θ ) + (∂u / ∂θ ) .
2 2 2
vw
19
(т. е. тело Ω получается вращением области G вокруг оси z). Пусть
ψ=ψ(ξ), ψ=u+iv, ξ=r exp (iθ) - конформное отображение круга |
ξ| ≤ 1 на внешность области G, причем центр круга переходит в
бесконечность.
Тогда вместо внешней задачи для уравнения (III.1) имеем
внутреннюю задачу в шаре единичного радиуса, проколотом в
центре, для уравнения (III.3). Причем в центре шара и на его
границе, т. е. при z = 0 и z = 1, ставится граничное условие Ф = 0.
Далее будем считать, что конформное отображение круга еди-
ничного радиуса на внешность области G известно. Заметим, что для
численного построения конформного отображения имеются
надежные алгоритмы (см., например, [7], [11]).
Сделав в (III.3) замену переменных ζ=cos θ, получим
r ∂ ∂Φ 2 ∂ v 2 ∂Φ
1 ∂ 2Φ
(III.4) ∆Φ = rv + 1 − ς
r 1 − ς
+ v 2 ∂ϕ 2 ,
vw2 ∂r ∂r ∂ς ∂ς
∑
l '
2
(III.5) H= Λ k ⊗ hk , L = 2l + 1,
L
k =0
r ∂ ∂Φ 1 2 ∂ v 2 ∂Φ 1
k2
(III.6) rv + 1 − ς 1 − ς − Φ1 ,
vw2 ∂r ∂r ∂ς r ∂ς v 2
−1
∑
m
m(−1) ν −1
(III.7) Φ(r ) = Tm ( x)(r − 1)r Φν (rν − 1)rν ( x − xν ) , Φν = Φ (rν ),
sin θ ν
ν =1
∑
n
n(−1) j −1
(III.8) Φ (ς ) = Tn (ς )Φ j (ς − ς j ) , Φ j = Φ (ς j ).
j =1
sin θ j
21
Нетрудно показать, что порядок аппроксимации построенной
таким образом дискретизации лапласиана зависит от гладкости
решения уравнения Пуассона. Причем аппроксимация тем лучше,
чем большим условиям гладкости удовлетворяет решение уравнения
Пуассона. Это следует из теорем о приближении гладких функций
многочленами [8]. Другими словами, построенный алгоритм не
имеет насыщения [7]. Для небольших m и n аппроксимация ин-
терполяционными многочленами (III.7) и (III.8) практически
совпадает с многочленом наилучшего приближения в норме С.
Соответственно, скорость убывания с ростом m и n погрешности
дискретизации этими многочленами совпадает со скоростью
стремления к нулю наилучшего приближения гладкой функции в
норме С.
3. Итак, для приближенного решения уравнения Пуассона (4.1)
нужно решить систему линейных уравнений
(III.9) HФ=f,
где матрица Н определена в (III.5), а Ф и f - векторы, компоненты
которых содержат значения соответствующих функций в узлах
сетки. В [6] показано, что
∑
l '
2
H −1 = Λ−1 k ⊗ hk , L = 2l + 1,
L
k =0
m2n2(L+8Llog3L+2)+mn(mn-1)+4mn(Llog3L-l).
с правой частью
2 x 2 y 2 z 2
2 2 2
2 6 1 4 2
f ( x, y, z) = 3 − 4 2 + 2 + 2 + 3 − 2 2 + 2 ,
R R b b a R R b a
где R( x, y, z) = x2 / b 2 + y 2 / b 2 + z 2 / a 2 .
1 a + b
ψ (ξ ) = (a − b)ξ + , | ξ |≤ 1.
2 ξ
23
IV. Описание программного комплекса для решения внешней
задачи для уравнения Пуассона.
PROGRAM AVZP8
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION
C0(10000),C1(10000),C2(10000),C3(10000),C4(10000)
DIMENSION
U(900),F(900),DL1(100),DL2(100),DB1(100),DB2(100)
DIMENSION XX(100),YY(100)
COMMON AE,BE
R(X,Y,Z,AE,BE)=X**2/BE**2+Y**2/BE**2+Z**2/AE**2
WRITE (*,*) 'AE = ?'
READ (*,*) AE
WRITE (*,*) 'BE = ?'
READ (*,*) BE
C
M=5
M=10
N=5
N=10
WRITE (*,*) 'M = ?'
READ (*,*) M
WRITE (*,*) 'N = ?'
READ (*,*) N
NT=M*N
EPS=0.D0
CALL MLKG1 (C0,0,DL1,DL2,DB1,DB2,M,N,NT,EPS)
CALL MLKG1 (C1,1,DL1,DL2,DB1,DB2,M,N,NT,EPS)
CALL MLKG1 (C2,2,DL1,DL2,DB1,DB2,M,N,NT,EPS)
CALL MLKG1 (C3,3,DL1,DL2,DB1,DB2,M,N,NT,EPS)
CALL MLKG1 (C4,4,DL1,DL2,DB1,DB2,M,N,NT,EPS)
CALL DMINV (C0,NT,D,XX,YY)
CALL DMINV (C1,NT,D,XX,YY)
CALL DMINV (C2,NT,D,XX,YY)
CALL DMINV (C3,NT,D,XX,YY)
CALL DMINV (C4,NT,D,XX,YY)
PI=3.141592653589793238462643D0
24
L=9
I=0
DO 1 NU=1,N
TETA=(2.*NU-1.)*PI/2./N
DZ = COS(TETA)
DO 1 MU=1,M
RO=COS((2.*MU-1.)*PI/2./M)
RO=(RO+1.)/2.+ EPS*(-RO+1.)/2.
DO 1 K=0,8
FI=2.*PI*K/L
X=V(RO,DZ)*COS(FI)
Y=V(RO,DZ)*SIN(FI)
Z=UU(RO,DZ)
RB=R(X,Y,Z,AE,BE)
I=I+1
U(I)=(2./RB**3-6./RB**4)*(4.*X**2/BE**4+4.*Y**2/BE**4+
+4.*Z**2/AE**4)+(2./RB**3-1./RB**2)*
*(2./BE**2+2./BE**2+2./AE**2)
1 F(I)=1./RB-1./RB**2
NOUT = 4
OPEN(UNIT=4,FILE='NOUT')
NG=NT*L
WRITE(*,*) 'ТОЧНОЕ ЗНАЧЕНИЕ'
WRITE(*,12) (F(I),I=2,NG,36)
12 FORMAT(4E18.11)
WRITE(4,*) 'ТОЧНОЕ ЗНАЧЕНИЕ'
WRITE(4,*) (F(I),I=1,NG)
C
CALL DIVH (NT,2,C0,C1,C2,C3,C4,U,F)
C
WRITE(*,*) 'ВЫЧИСЛЕННОЕ ЗНАЧЕНИЕ'
WRITE(*,12) (F(I),I=2,NG,36)
WRITE(4,*) 'ВЫЧИСЛЕННОЕ ЗНАЧЕНИЕ'
WRITE(4,*) (F(I),I=1,NG)
STOP
END
FUNCTION UU(RO,DZ)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
UU=0.5*((AE-BE)*RO+(AE+BE)/RO)*DZ
RETURN
END
25
FUNCTION V(RO,DZ)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
V=0.5*((AE-BE)*RO-(AE+BE)/RO)*SQRT(1.-DZ**2)
RETURN
END
FUNCTION VR(RO,DZ)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
VR=0.5*(AE-BE+(AE+BE)/RO**2)*SQRT(1.-DZ**2)
RETURN
END
FUNCTION VDZ (RO,DZ)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
VDZ=-0.5*((AE-BE)*RO-(AE+BE)/RO)*DZ/SQRT(1.-DZ**2)
RETURN
END
FUNCTION W2 (RO,DZ)
IMPLICIT REAL*8 (A-H,O-Z)
COMMON AE,BE
W2=0.25*((AE-BE)*RO+(AE+BE)/RO)**2*(1.-DZ**2)+
+0.25*((AE-BE)*RO-
(AE+BE)/RO)**2*DZ**2
RETURN
END
Вызываемые подпрограммы:
MLKG1, DMINV,DIVH.
27
SUBROUTINE MLKG1 (A,K,DL1,DL2,DB1,DB2,M,N,NT,EPS)
Эта подпрограмм вычисляет K-ую клетку A(NT,NT) (NT=M*N,
K=0,1,2,3,4) h-матрицы для внешней задачи уравнения Пуассона. M
и N – параметры сетки (вводятся в режиме диалога). EPS – параметр
при помощи которого вырезается нуль (в данной версии EPS=0.D0).
DL1(M,M),DL2(M,M),DB1(N,N),DB2(N,N) – рабочие массивы
Вызываемые подпрограммы: DIF1, DIF2, DIFR1, DIFR2.
SUBROUTINE DIF1(D1,N)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D1(N,N)
PI=3.141592653589D0
N1=N-1
DO 1 I=1,N
TI=(2.*I-1.)*PI/2./N
DO 1 J=1,N
TJ=(2.*J-1.)*PI/2./N
P=0.D0
DO 2 K=1,N1
2 P=P+K*COS(K*TJ)*SIN(K*TI)/SIN(TI)
1 D1(I,J)=2.*P/N
RETURN
END
SUBROUTINE DIF2(D2,N)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION D2(N,N)
PI=3.141592653589D0
N1=N-1
DO 1 I=1,N
TI=(2.*I-1.)*PI/2./N
DO 1 J=1,N
TJ=(2.*J-1.)*PI/2./N
P=0.D0
DO 2 K=1,N1
2 P=P+K*COS(K*TJ)*(-K*COS(K*TI)/SIN(TI)**2+COS(TI)*
*SIN(K*TI)/SIN(TI)**3)
1 D2(I,J)=2.*P/N
28
RETURN
END
30