С. Д. Алгазин
Препринт № 828
Москва 2007 г.
Аннотация.
На основе ранее построенной дискретизации без насыщения по
пространственным переменным построен численный алгоритм для решения
двумерной задачи об однофазной фильтрации газа в пористой среде.
Приводится структурная программа на Фортране-77.
The summary.
On the basis of earlier constructed digitization without saturation on space
variables the numerical algorithm for the solution of a two-dimensional problem on
anaphase filtering gas in porous medium is constructed. The structural program on
Фортране-77 is given.
2
Введение.
В [1] рассматриваются задачи на собственные значения для оператора
Лапласа в произвольной гладкой области с постоянными коэффициентами.
Однако ряд задач математической физики приводит к задачам на собственные
значения для уравнения второго порядка с переменными коэффициентами (см.
ниже). Для решения этих задач существует метод наискорейшего спуска [4],
который в частности сводит решение самосопряжённого уравнения второго
порядка к последовательности решения задач для уравнения Пуассона в этой же
области. Этот метод применяется также для решения нелинейных уравнений [5].
Однако рассмотренные там примеры численных расчётов не вызывают
оптимизма в быстроте сходимости метода. В [2-3] построен численный
алгоритм без насыщения в задаче на собственные значения для эллиптического
уравнения второго порядка с переменными коэффициентами. Для примера
рассмотрено краевое условие Неймана. В настоящей работе на основе этой
дискретизации по пространству рассматривается двумерная нестационарная
задача о фильтрации газа в пористой среде. По этому вопросу имеется обширная
литература [6- 50]. Для решения нестационарной задачи применяется метод
прямых, т.е. задача сводится к системе обыкновенных дифференциальных
уравнений. Последняя задача решается по стандартной программе методом
Гира. Необходимые ссылки приведены ниже.
∂ (mρ )
(1.1) + div( ρv ) = 0,
∂t
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).
3
Закон Дарси (1856) справедлив для медленных движений жидкости в
изотропной пористой среде, т.е. для малых значений числа Рейнольдса Re
(Re<Reкр.)
k
(1.3) v = − qrad p,
µ
M p
ρ= ,
RT z ( p )
∂ (mρ )
(1.4) + div( ρv ) = f ( z , t ), z ∈ G,
∂t
∂ (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 ∂θ ∂θ
4
m=m(r,θ) – пористость (известная функция координат );
p=p(r,θ,t) – давление ( неизвестная функция координат и времени );
=k k=(r , θ , p ) k (r , θ )ψ ( p ) - проницаемость ( известная функция координат и
давления);
ρ=ρ(p) – плотность ( известная функция давления );
μ=μ(p) – вязкость ( известная функция давления );
ρ ( p)ψ ( p)
w( p ) = ∫ dp.
µ ( p)
∂p
(1.7) = 0,
∂n ∂G
которое означает отсутствие потока газа через границу области дG (см. (1.3)).
Заметим, что функция w также удовлетворяет этому граничному условию.
SUBROUTINE DIFSUB(NP,TIME,Y,SAVE1,HS,HSMIN,HSMAX,EPS,MF,YMAX,ERROR,
1 NFLAG,NSTART,MAXDER,DR)
5
2. 1. Пояснения к ФОPTPAH программе. Рекомендации по
использованию.
dxi
= f i (t , xi (t )), i = 1,..., n.
dt
6
Параметр J этой процедуры указывает, удалось ли выполнить обращение. Если
обращение матрицы прочло нормально, то J=+1, иначе J=-1. Эта процедура
необходима только для метода Гира.
Процедура PEDERW вычисляет производные всех правых частей по всем
зависимым переменным, занося их в массив РW так, что производная I - го
уравнения по J – й переменкой помещается в PW(I+M(J-1)). Если
аналитическое отыскание производных затруднительно, в DIFSUB
предусмотрена возможность вычисления матрицы производных численным
дифференцированием. При этом в качестве приращения xI берется, величина
EPS*AMAX1(EPS, ABS(Y(1,X)), тогда процедура PEDERW может быть пустой.
7
∂f i
1 - применять метод Гира, причем матрица , вычисляется по
∂x j
аналитическим формулам процедурой PEDERW.
∂f i
2 -применить тот же метод, но , вычисляется численным
∂x j
дифференцированием.
8
∂f i
хранения матрицы [ I + HA(1) ].
∂x j
∞
δ ( x0 , x) = ∑ ϕ n ( x)ϕ n ( x0 ).
n =1
9
Сходимость этого ряда понимается как слабая. Таким образом, точеный
источник замещается источниками и стоками в узлах сетки. Результаты
численных расчётов показали хорошие результаты для одиночной скважины
(см. ниже).
10
4.1. COMMON – блоки.
C/ COMBAS
C/ MODULE COMBAS
C--------------------------------------------------------------------
CL C1.1 ОСНОВНЫЕ ПАРАМЕТРЫ СИСТЕМЫ
C ВЕРСИЯ 1 06/МАР/04 СДА ИПМех РАН
COMMON/COMBAS/
+ ALTIME, CPTIME, NLEDGE, NLEND , NLRES ,
NONLIN,
+ NOUT , NPRINT, NREAD , NREC , NRESUM, NSTEP
,
+ STIME , LABEL1, LABEL2, LABEL3, LABEL4,
LABEL5,
+ LABEL6, LABEL7, LABEL8, NDIARY, NIN , NPUNCH,
+ NRAN
LOGICAL
L NLEND , NLRES
REAL
R ALTIME, CPTIME, STIME
CHARACTER(48)
11
H LABEL1 , LABEL2 , LABEL3 ,
H LABEL4 , LABEL5 , LABEL6 ,
H LABEL7 , LABEL8
C
CL C1.1 COMBAS
C
C ВРЕМЯ ЗАКАЗАННОЕ ДЛЯ ПРОГРАММЫ (СЕК)
ALTIME=0.0
C ВРЕМЯ ИСПОЛЬЗОВАННОЕ ПРОГРАММОЙ (СЕК)
CPTIME=0.0
C КАНАЛ ВВОДА/ВЫВОДА ДЛЯ ВОЗОБНОВЛЕНИЯ РАСЧЁТА
NLEDGE=4
C NLEND=.TRUE., ЕСЛИ НЕОБХОДИМО ЗАКОНЧИТЬ РАСЧЁТ
NLEND=.FALSE.
C NLRES=.TRUE., ЕСЛИ НЕОБХОДИМО ВОЗОБНОВИТЬ РАСЧЁТ
NLRES=.FALSE.
C КАНАЛ ДЛЯ ON-LINE ВВОДА/ВЫВОДА
NONLIN=1
C КАНАЛ ПЕЧАТИ
NPRINT=6
C КАНАЛ ПРОМЕЖУТОЧНЫХ ВЫДАЧ
NOUT=NPRINT
C КАНАЛ ДЛЯ ЧТЕНИЯ С ПЕРФОКАРТ
NREAD=5
C НОМЕР ТЕКУЩЕЙ ЗАПИСИ
NREC=1
C ВОЗОБНОВЛЕНИЕ РАСЧЁТА ПО ЗАПИСИ НА ДАННОМ КАНАЛЕ
NRESUME=NLEDGE
C ТЕКУЩИЙ НОМЕР ШАГА
NSTEP=0
C ВРЕМЯ НАЧАЛА РАСЧЁТА
SPTIME=0.0
C LABEL1 - LABEL4 ТЕКСТОВЫЕ МАССИВЫ, УСТАНАВЛИВАЮТСЯ В LABRUN
LABEL1=' '
LABEL2=' '
LABEL3=' '
LABEL4=' '
C LABEL5 - LABEL6 МАССИВЫ ИСПОЛЗУЕМЫЕ ПРОГРАММИСТОМ
LABEL5=' '
LABEL6=' '
C LABEL7 - LABEL8 МАССИВЫ ИСПОЛЬЗУЕМЫЕ СИСТЕМОЙ
LABEL7=' '
LABEL8=' '
C КАНАЛ ПЕРФОРАЦИИ
NPUNCH=7
C МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ШАГОВ В РАСЧЁТЕ
NRUN=1
C КАНАЛ ДНЕВНИКА
NDIARY=NPUNCH
C ТЕКУЩИЙ КАНАЛ ВВОДА/ВЫВОДА
NIN=NREAD
C
C/ COMADD
C/ MODULE COMADD
C--------------------------------------------------------------------
CL C1.2 ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ СИСТЕМЫ
C ВЕРСИЯ 1 13/МАР/04 СДА ИПМех РАН
12
COMMON/COMADD/
+ YEAR , MONTH , DAY , HOUR , MINUTE,
SECOND,
+ SEC100, FORMI , FORMR , FORMH
INTEGER*2
+ YEAR , MONTH , DAY , HOUR , MINUTE, SECOND,
+ SEC100
CHARACTER(12)
H FORMI , FORMR , FORMH
C
C
CL C1.2 COMADD
C
C СПЕЦИФИКАЦИЯ ФОРМАТА ДЛЯ ПЕЧАТИ ЦЕЛЫХ ПЕРЕМЕННЫХ
FORMI='(1X,15I5)'
C СПЕЦИФИКАЦИЯ ФОРМАТА ДЛЯ ПЕЧАТИ ВЕЩЕСТВЕННЫХ ПЕРЕМЕННЫХ
FORMR='(1X,6G11.4)'
C
C/ COMDDP
C/ MODULE COMDDP
C--------------------------------------------------------------------
CL C1.9 ПАРАМЕТРЫ РАЗВИЬИЯ И ДИАГНОСТИКИ
C ВЕРСИЯ 1 06/МАР/04 СДА ИПМех РАН
COMMON/COMDDP/
I MAXDUM, MXDUMP, NADUMP, NCLASS, NPDUMP,
NPOINT,
I NSUB , NVDUMP,
L NLCHED, NLHEAD, NLOMT1, NLOMT2, NLOMT3,
NLREPT
LOGICAL
L NLCHED, NLHEAD, NLOMT1, NLOMT2, NLOMT3,
NLREPT
DIMENSION
I NADUMP(20), NPDUMP(20), NVDUMP(20),
L NLHEAD(9) , NLOMT1(50), NLOMT2(50),
L NLOMT3(50)
C
CL C1.9 COMDDP
C
C МАКСИМАЛЬНЫЙ ДОПУСТИМЫЙ РАЗМЕР МАССИВОВ ВЫВОДА
MAXDUM=20
C ДЕЙСТВИТЕЛЬНЫЙ РАЗМЕР МАССИВОВ ВЫВОДА
MXDUMP=10
C НОМЕР КЛАССА В ПОСЛЕДНЕМ СООБЩЕНИИ
NCLASS=0
C НОМЕР ТОЧКИ В ПОСЛЕДНЕМ СООБЩЕНИИ
NPOINT=0
C НОМЕР ПОДПРОГРАММЫ В ПОСЛЕДНЕМ СООБЩЕНИИ
NSUB=1
C .TRUE., ЕСЛИ НЕОБХОДИМЫ СООБЩЕНИЯ О РАБОТЕ ПРОГРАММ КЛАССА 0
NLCHED=.FALSE.
C КОДЫ ТОЧЕК ПЕЧАТИ
NPDUMP=0
C КОДЫ ДЛЯ ПЕЧАТИ ПЕРЕМЕННЫХ
NVDUMP=0
C КОДЫ ДЛЯ ПЕЧАТИ МАССИВОВ
NADUMP=0
13
C .TRUE., ЕСЛИ НЕОБХОДИМЫ СООБЩЕНИЯ О РАБОТЕ ПРОГРАММ КЛАССА 1 - 9
NLHEAD=.FALSE.
C .TRUE., ЕСЛИ НЕОБХОДИМО ОТКЛЮЧИТЬ ПРОГРАММУ КЛАССА 1
NLOMT1=.FALSE.
C ТО ЖЕ ДЛЯ КЛАССА 2
NLOMT2=.FALSE.
C ТО ЖЕ ДЛЯ КЛАССА 3
NLOMT3=.FALSE.
C .TRUE. ЕСЛИ НЕОБХОДИМЫ КАКИЕ-ЛИБО СООБЩЕНИЯ
NLREPT=.FALSE.
C/ COMADV
C/ MODULE COMADV
C--------------------------------------------------------------------
CL C4.2 АДМИНИСТРАТИВНЫЕ ПЕРЕМЕННЫЕ
C ВЕРСИЯ 1 15/МАР/04 СДА ИПМех РАН
COMMON/COMADV/
R TIMMAX,
I MAXDER, MF
C
TIMMAX - Максимальное время;
C
MAXDER – Параметр для DIFSUB (максимальный порядок метода);
C
MF - Параметр для DIFSUB (указатель метода);
C/ COMCON
C/ MODULE COMCON
C--------------------------------------------------------------------
CL C4.3 КОНСТАНТЫ
C ВЕРСИЯ 1 15/МАР/04 СДА ИПМех РАН
COMMON/COMCON/
R APD , ARO , ATEMP , CHARP , PZD ,
R TEMP , VIST ,
I MAXNF , MAXNP , MAXNR , MAXNQ
DIMENSION
R CHARP(2), PZD(2) , VIST(2)
C
APD – Стандартное атмосферное давление;
C
ARO – Стандартная плотность;
C
ATEMP – Стандартная температура в пласте;
C
CHARP –
C
PZD - Стандартный коэффициент сверхсжимаемости;
C
TEMP - Температура в пласте;
C
VIST - Стандартная вязкость;
C
MAXNF , MAXNP , MAXNR , MAXNQ – Максимальные размерности
NF , NP , NR , NQ ;
C/ COMDGN
C/ MODULE COMDGN
C--------------------------------------------------------------------
CL C5.1 ДИАГНОСТИКА
14
C ВЕРСИЯ 1 15/МАР/04 СДА ИПМех РАН
COMMON/COMDGN/
L NMREPT, N20401, N20402
LOGICAL
L NMREPT, N20401, N20402
C
NMREPT, N20401, N20402 –Включение нестандартной диагностики,
точки входа;
C/ COMHVL
C/ MODULE COMHVL
C--------------------------------------------------------------------
CL C4.1 ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ
C ВЕРСИЯ 1 16/МАР/04 СДА ИПМех РАН
COMMON/COMHVL/
D A1 , A2 , C , DF , DR , SAVE1
,
D Y , YMAX
DOUBLE PRECISION
D A1 , A2 , C , DF , DR , SAVE1
,
D Y , YMAX
DIMENSION
D A1(900), A2(900), C(30), DF(810000), DR(1512900),
D SAVE1(25830,1230), Y(8,1230), YMAX(1230)
C
A1(NR,NR), A2(NR,NR), C(NR), DF(NF,NF), DR(NP,NP),
SAVE1(20*NP+NP,NP),Y(8,NP), YMAX (NP) – Рабочие массивы;
C/ COMMTD
C/ MODULE COMMTD
C--------------------------------------------------------------------
CL C3.1 ПЕРЕМЕННЫЕ ЧИСЛЕННОГО МЕТОДА
C ВЕРСИЯ 1 16/МАР/04 СДА ИПМех РАН
COMMON/COMMTD/
D EPS , ERROR , H , HS , HSMAX , HSMIN
,
D REZP , TIME ,
I NF , NFLAG , NJMATR, NP , NR , NSTART
DOUBLE PRECISION
D EPS , ERROR , H , HS , HSMAX , HSMIN
,
D REZP , TIME
DIMENSION
D ERROR(1230) , H(1512900) , REZP(1230)
C
H(NP,NP) - Матрица дискретной задачи;
C
C ДАННЫЕ ДЛЯ DIFSUB
C
EPS=1.D-4
EPS=1.D-5
HS=0.1
HSMIN=1.D-3
HSMAX=5.D-1
HSMAX=1.D 0
C HSMAX=2.D 0
C HSMAX=4.D 0
C HSMAX=8.D 0
C HSMAX=16.D 0
C
15
MF=2
MF=1
MAXDER=6
TIMMAX=1
C ЧИСЛО ТОЧЕК В РАСЧЁТЕ
NP=1230
NF=41
NR=30
C/ COMPHY
C/ MODULE COMPHY
C--------------------------------------------------------------------
CL C2.1 ФИЗИЧЕСКИЕ ПЕРЕМЕННЫЕ
C ВЕРСИЯ 1 16/МАР/04 СДА ИПМех РАН
COMMON/COMPHY/
D HM , HPOR , Q , QRF , VPOR ,
R HPER , XLENG , XTIME , XPRES
DOUBLE PRECISION
D HM , HPOR , Q , QRF , VPOR
DIMENSION
R HPER(1230),
D HM(1230), HPOR(1230), Q(1) , QRF(2,1)
C
C СТАНДАРТНАЯ ПОРИСТОСТЬ 0.2
HPOR=0.2
C ХАРАКТЕРНОЕ ВРЕМЯ (СЕК) - 1 ГОД (ВРЕМЯ РАЗРАБОТКИ)
XTIME=1.*365*24*3600
C XАРАКТЕРНЫЙ ЛИНЕЙНЫЙ РАЗМЕР 20000 М
XLENG=2.E4
C ХАРАКТЕРНОЕ ДАВЛЕНИЕ (Н/М/М) 250 СТАНДАРТНЫХ АТМОСФЕР
XPRES=250.*1.03250E5
C СТАНДАРТНАЯ ПРОНИЦАЕМОСТЬ 0.1 ДАРСИ=1.D-13/0.981 М**2
HPER=1.D-13/0.981
C КООРДИНАТЫ СКВАЖИНЫ В КРУГЕ
QRF(1,1)=0.D0
QRF(1,1)=0.5D0
QRF(2,1)=0.D0
C СТАНДАРТНАЯ МОЩНОСТЬ ПЛАСТА 100 М
HM=1.D2
C СТАНДАРТНАЯ ПЛОТНОСТЬ 0.6679 (МЕТАН ПРИ 20С И 760 ММ РТ СТ)
КГ/М**3
ARO=0.6679
C СТАНДАРТНЫЙ ДЕБИТ 5.Е5 М**3/СУТКИ
Q(1)=5.D5*ARO/365.
C/ COMREG
C/ MODULE COMREG
C--------------------------------------------------------------------
CL C2.2 ПЕРЕМЕННЫЕ ДЛЯ ЗАДАНИЯ ОБЛАСТИ
C ВЕРСИЯ 1 16/МАР/04 СДА ИПМех РАН
COMMON/COMREG/
D CMOD2 , SREGION
DOUBLE PRECISION
D CMOD2 , SREGION
DIMENSION
D CMOD2(1230)
C
CMOD2 , SREGION – Квадрат модуля производной
конформного отображения, площадь области;C/ COMSPT
C/ MODULE COMSPT
C--------------------------------------------------------------------
16
CL C3.2 СПЕКТРАЛЬНЫЕ ПЕРЕМЕННЫЕ
C ВЕРСИЯ 1 16/МАР/04 СДА ИПМех РАН
COMMON/COMSPT/
D WR , WI , YY , YZ ,
I IANA , NQ , NS
DOUBLE PRECISION
D WR , WI , YY , YZ
DIMENSION
D WR(1230), WI(1230), YY(1230), YZ(1230),
I IANA(1230)
C
Переменные для вычисления собственных значений.
$objcomment lib:"AMALI.lib"
$FREEFORM
INCLUDE 'TextTransfer.f90'
$NOFREEFORM
C/ MODULE U1
C
SUBROUTINE MESAGE(TEXT,N)
use TextTransfer
CHARACTER TEXT*N
C
C Утилита: печать текстовой переменной в DOS окне
C
C ВЕРСИЯ 1 13/МАР/04 СДА ИПМех РАН
C
WRITE (*,*) trim(RuDosWin(TEXT,.false.))
C
RETURN
END
C/ MODULE C0S0
C
C SUBROUTINE MAIN
C
C 0.0 НАЧАЛО РАСЧЁТА
C
C ВЕРСИЯ 1 06/МАР/04 СДА ИПМех РАН
C
C use TextTransfer
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
C--------------------------------------------------------------------
CALL MESAGE ('Система Olympus Pentium(R) 4 CPU 3.00GHz',40)
LABEL2=' '
LABEL3=' '
LABEL4=' '
LABEL6=' '
LABEL8=' '
C КАНАЛ ПЕРФОРАЦИИ
NPUNCH=7
C МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ШАГОВ В РАСЧЁТЕ
NRUN=1
C КАНАЛ ДНЕВНИКА
NDIARY=NPUNCH
C ТЕКУЩИЙ КАНАЛ ВВОДА/ВЫВОДА
NIN=NREAD
C
CL C1.2 COMADD
C
C СПЕЦИФИКАЦИЯ ФОРМАТА ДЛЯ ПЕЧАТИ ЦЕЛЫХ ПЕРЕМЕННЫХ
FORMI='(1X,15I5)'
C СПЕЦИФИКАЦИЯ ФОРМАТА ДЛЯ ПЕЧАТИ ВЕЩЕСТВЕННЫХ ПЕРЕМЕННЫХ
FORMR='(1X,6G11.4)'
C
CL C1.9 COMDDP
C
C МАКСИМАЛЬНЫЙ ДОПУСТИМЫЙ РАЗМЕР МАССИВОВ ВЫВОДА
MAXDUM=20
C ДЕЙСТВИТЕЛЬНЫЙ РАЗМЕР МАССИВОВ ВЫВОДА
MXDUMP=10
C НОМЕР КЛАССА В ПОСЛЕДНЕМ СООБЩЕНИИ
NCLASS=0
C НОМЕР ТОЧКИ В ПОСЛЕДНЕМ СООБЩЕНИИ
NPOINT=0
C НОМЕР ПОДПРОГРАММЫ В ПОСЛЕДНЕМ СООБЩЕНИИ
NSUB=1
C .TRUE., ЕСЛИ НЕОБХОДИМЫ СООБЩЕНИЯ О РАБОТЕ ПРОГРАММ КЛАССА 0
NLCHED=.FALSE.
C КОДЫ ТОЧЕК ПЕЧАТИ
NPDUMP=0
C КОДЫ ДЛЯ ПЕЧАТИ ПЕРЕМЕННЫХ
NVDUMP=0
C КОДЫ ДЛЯ ПЕЧАТИ МАССИВОВ
NADUMP=0
C .TRUE., ЕСЛИ НЕОБХОДИМЫ СООБЩЕНИЯ О РАБОТЕ ПРОГРАММ КЛАССА 1 -
9
NLHEAD=.FALSE.
19
C .TRUE., ЕСЛИ НЕОБХОДИМО ОТКЛЮЧИТЬ ПРОГРАММУ КЛАССА 1
NLOMT1=.FALSE.
C ТО ЖЕ ДЛЯ КЛАССА 2
NLOMT2=.FALSE.
C ТО ЖЕ ДЛЯ КЛАССА 3
NLOMT3=.FALSE.
C .TRUE. ЕСЛИ НЕОБХОДИМЫ КАКИЕ-ЛИБО СООБЩЕНИЯ
NLREPT=.FALSE.
C ИЗМЕНЕНИЕ СТАНДАРТНЫХ ЗНАЧЕНИЙ
C
CALL MODIFY
C
RETURN
END
C
C/ MODULE C0S2
C
SUBROUTINE MODIFY
C
C 0.2 ИЗМЕНЕНИЕ ОСНОВНЫХ ПАРАМЕТРОВ
C
C ВЕРСИЯ 1 16/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /0,2/
C
C--------------------------------------------------------------------
C
C WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C МАКСИМАЛЬНЫЙ ДОПУСТИМЫЙ РАЗМЕР МАССИВОВ ВЫВОДА
MAXDUM=36
NIN=4
C
CL А. ДИАГНОСТИКА (ВКЛЮЧЕНИЕ/ОТКЛЮЧЕНИЕ)
C
NLEPT=.TRUE.
C
CL 1. ПЕЧАТЬ ТРАССИРОВКИ
C
CL 1.0 КЛАСС 0
C
NLCHED=.TRUE.
C
CL 1.1 КЛАССЫ 1 - 9
C
NLHEAD(1)=.TRUE.
NLHEAD(2)=.TRUE.
C
CL 2. ПЕЧАТЬ COMMON БЛОКОВ
C
C ВЫБОР ТОЧЕК ПЕЧАТИ
NPDUMP(1)=20102
NPDUMP(2)=20403
C
CL 2.1 ПЕЧАТЬ COMMON - ПЕРЕМЕННЫХ
C
C ВЫБОР БЛОКА И ГРУППЫ ДЛЯ ПЕЧАТИ
NVDUMP(1)=3141
20
NVDUMP(2)=3141
C
CL 2.2 ПЕЧАТЬ COMMON - МАССИВОВ
C
C ВЫБОР БЛОКА И ГРУППЫ ДЛЯ ПЕЧАТИ
NADUMP(1)=3141
NADUMP(2)=3141
C
CL Б. ОКОНЧАНИЕ РАСЧЁТА
C
NLEND=.TRUE.
C
RETURN
END
C
C/ MODULE C0S3
C
SUBROUTINE COTROL
C
C 0.3 УПРАВЛЕНИЕ РАСЧЁТОМ
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /0,3/
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
CL 1. ПРОЛОГ
C
IF (NLRES) GO TO 170
C
C A. НОВЫЙ РАСЧЁТ
C
CL 1.1 МАРКИРОВКА РАСЧЁТА
110 CALL LABRUN
CALL EXPERT (ICLASS,ISUB,1)
C
CL 1.2 ОЧИСТКА ПЕРЕМЕННЫХ И МАССИВОВ
120 CALL CLEAR
CALL EXPERT (ICLASS,ISUB,2)
C
CL 1.3 ПРЕДВАРИТЕЛЬНОЕ ЗАДАНИЕ ПАРАМЕТРОВ
130 CALL PRESET
CALL EXPERT (ICLASS,ISUB,3)
C
CL 1.4 ОПРЕДЕЛЕНИЕ ДАННЫХ РАСЧЁТА
140 CALL DATA
CALL EXPERT (ICLASS,ISUB,4)
C
CL 1.5 ОПРЕДЕЛЕНИЕ ВСПОМОГАТЕЛЬНЫХ ВЕЛИЧИН
150 CALL AUXVAL
CALL EXPERT (ICLASS,ISUB,5)
C
CL 1.6 ОПРЕДЕЛЕНИЕ НАЧАЛЬНЫХ УСЛОВИЙ
160 CALL INITAL
CALL EXPERT (ICLASS,ISUB,6)
21
GO TO 180
C
C B. ВОЗОБНОВЛЕНИЕ РАСЧЁТА
C
C
CL 1.7 ПОИСК ЗАПИСИ, ИЗМЕНЕНИЕ ПАРАМЕТРОВ
C
170 CONTINUE
CALL EXPERT (ICLASS,ISUB,7)
C
CL МАРКИРОВКА ПРОДОЛЖЕНИЯ РАСЧЁТА
CALL LABRUN
CALL EXPERT (ICLASS,ISUB,8)
C
CL ОЧИСТКА ПЕРЕМЕННЫХ И МАССИВОВ
CALL CLEAR
CALL EXPERT (ICLASS,ISUB,9)
C
CL ПОИСК ЗАПИСИ И ПЕЧАТЬ СООБЩЕНИЙ
CALL RESUME
CALL EXPERT (ICLASS,ISUB,10)
C
CL ОПРЕДЕЛЕНИЕ ДРУГИХ НЕОБХОДИМЫХ ДАННЫХ
CALL DATA
CALL EXPERT (ICLASS,ISUB,11)
C
CL ИЗМЕНЕНИЕ ВСПОМОГАТЕЛЬНЫХ ЗНАЧЕНИЙ, ЕСЛИ НУЖНО
CALL AUXVAL
CALL EXPERT (ICLASS,ISUB,12)
C
C C. ПРЕДВАРИТЕЛЬНЫЕ ОПЕРАЦИИ
C
CL 1.8 НАЧАЛО ИЛИ ПРОДОЛЖЕНИЕ РАСЧЁТА
180 CALL START
CALL EXPERT (ICLASS,ISUB,13)
C
C НАЧАЛЬНЫЙ ВЫВОД
CALL OUTPUT(1)
CALL EXPERT (ICLASS,ISUB,14)
C
C 2. ВЫЧИСЛЕНИЯ
C
CL 2.1 ШАГ ВЫЧИСЛЕНИЙ
210 CALL STEPON
CALL EXPERT (ICLASS,ISUB,15)
C--------------------------------------------------------------------
CL 3. ВЫВОД
C
CL 3.1 ВЫВОД НА КАЖДОМ ШАГЕ
310 CALL OUTPUT(2)
CALL EXPERT (ICLASS,ISUB,16)
C--------------------------------------------------------------------
CL 4. ЭПИЛОГ
C
CL 4.1 ПРОБА НА КОНЕЦ РАСЧЁТА
410 CALL TESEND
CALL EXPERT (ICLASS,ISUB,17)
IF(.NOT.NLEND) GO TO 210
C КОНЕЧНЫЙ ВЫВОД
CALL OUTPUT(3)
22
CALL EXPERT (ICLASS,ISUB,18)
C
CL 4.2 КОНЕЦ РАСЧЁТА
420 CALL ENDRUN
C
RETURN
END
C
C/ MODULE C0S4
C
SUBROUTINE EXPERT(KCLASS,KSUB,KPOINT)
C
C 0.4 ИЗМЕНЕНИЕ СТАНДАРТНЫХ ОПЕРАЦИЙ ПОДПРОГРАММЫ
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
INCLUDE 'COMDGN.FOR'
INCLUDE 'COMREG.FOR'
INCLUDE 'COMMTD.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /0,4/
C
C--------------------------------------------------------------------
C
C WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
ICODE=10000*KCLASS+100*KSUB+KPOINT
C
C ПОСЛЕДНЯЯ ТОЧКА ВЫЗОВА EXPERT
C
NCLASS=KCLASS
NSUB=KSUB
NPOINT=KPOINT
C
C НУЖНА ЛИ ДИАГНОСТИКА ?
IF(NMREPT) CALL DUMCOM(KCLASS,KSUB,KPOINT)
C
C НУЖНА ЛИ НЕСТАНДАРТНАЯ ДИАГНОСТИКА ?
IF(NMREPT) CALL REPORT(KCLASS,KSUB,KPOINT)
RETURN
END
C
C
C/ MODULE C?S2
C
SUBROUTINE DUMCOM(KCLASS,KSUB,KPOINT)
C
C ?.2 СТАНДАРТНАЯ ДИАГНОСТИКА
C
C ВЕРСИЯ 1 16/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,1/
C
C--------------------------------------------------------------------
23
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
RETURN
END
C
C
C/ MODULE C1S1
C
SUBROUTINE LABRUN
C
C 1.1 МАРКИРОВКА РАСЧЁТА
C
C ВЕРСИЯ 1 18/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,1/
C
C--------------------------------------------------------------------
C
C WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
C ЗАДАНИЕ ТЕКСТОВЫХ МАССИВОВ ДЛЯ МАРКИРОВКИ РАСЧЁТА
WRITE (LABEL1,*) 'П Р О Г Р А М М А А М А Л И Я'
WRITE (LABEL2,*) 'В Е Р С И Я 1 ЯНВ 2007 ГОДА'
WRITE (LABEL3,*) '1230=30x41 точек'
C
C ПЕЧАТЬ ПРОЧИТАННОГО МАССИВА
WRITE (NOUT,*) LABEL1
WRITE (NOUT,*) LABEL2
WRITE (NOUT,*) LABEL3
C ПЕЧАТЬ ДАТЫ
CALL GETDAT (YEAR,MONTH,DAY)
WRITE(NOUT,*)' ГОД МЕСЯЦ ДЕНЬ'
WRITE(NOUT,*) YEAR,MONTH,DAY
C ПЕЧАТЬ ВРЕМЕНИ
CALL GETTIM (HOUR,MINUTE,SECOND,SEC100)
WRITE(NOUT,*)' ЧАС МИНУТА СЕКУНДА 100 ДОЛЯ СЕК'
WRITE(NOUT,*) HOUR,MINUTE,SECOND,SEC100
C ЗАПИСЬ ПО КАНАЛУ ДНЕВНИКА МАРКЕРА РАСЧЁТА
WRITE (NDIARY,*) LABEL1
WRITE (NDIARY,*) LABEL2
C
RETURN
END
C
C/ MODULE C1S2
C
SUBROUTINE CLEAR
C
C 1.2 ЧИСТКА ПЕРЕМЕННЫХ И МАССИВОВ
C
C ВЕРСИЯ 1 18/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
24
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,2/
C
C--------------------------------------------------------------------
C
COMMON/COMPHY/D21(2464),R21(1233)
COMMON/COMREG/D22(1231)
COMMON/COMMTD/D31(1515365),I31(6)
COMMON/COMSPT/D32(4920),I32(1232)
COMMON/COMHVL/D41(5512890)
COMMON/COMADV/R42,I42(2)
COMMON/COMCON/R43(10),I43(4)
COMMON/COMDGN/L51(3)
DOUBLE PRECISION D21,D22,D31,D32,D41
LOGICAL L51
C--------------------------------------------------------------------
C
C ЧИСТКА COMMON БЛОКОВ
C
C БЛОК COMPHY
D21=0.D0
R21=0.
C БЛОК COMREG
D22=0.D0
C БЛОК COMMTD
D31=0.D0
I31=0
C БЛОК COMSPT
D32=0.D0
I32=0
C БЛОК COMHVL
D41=0.D0
C БЛОК COMADV
R42=0.
I42=0
C БЛОК COMCON
R43=0.
I43=0
C БЛОК COMDGN
L51=.FALSE.
C
RETURN
END
C
C/ MODULE C1S3
C
SUBROUTINE PRESET
C
C 1.3 ЗАДАНИЕ ОСНОВНЫХ ПАРАМЕТРОВ РАСЧЁТА
C
C ВЕРСИЯ 1 18/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMCON.FOR'
INCLUDE 'COMADV.FOR'
INCLUDE 'COMREG.FOR'
25
INCLUDE 'COMSPT.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,3/
C
C--------------------------------------------------------------------
C
C УСТАНОВКА МАКСИМАЛЬНЫХ РАЗМЕРНОСТЕЙ МАССИВОВ
C
MAXNP=410
MAXNF=41
MAXNR=10
MAXNQ=1
C
C ДАННЫЕ ДЛЯ DIFSUB
C
EPS=1.D-4
C EPS=1.D-5
HS=0.1
HSMIN=1.D-3
HSMAX=5.D-1
HSMAX=1.D 0
C HSMAX=2.D 0
C HSMAX=4.D 0
C HSMAX=8.D 0
C HSMAX=16.D 0
C
MF=2
MF=1
MAXDER=6
TIMMAX=1
C ЧИСЛО ТОЧЕК В РАСЧЁТЕ
NP=1230
NF=41
NR=30
C ЧИСЛО СКВАЖИН
NQ=1
C ЧИСЛО ХОРОШО ВЫЧИСЛЕННЫХ СОБСТВЕННЫХ ФУНКЦИЙ
NS=6
NS=10
NS=12
NS=48
NS=60
C NS=72
C NS=84
C NS=96
C СТАНДАРТНАЯ ПОРИСТОСТЬ 0.2
HPOR=0.2
C ХАРАКТЕРНОЕ ВРЕМЯ (СЕК) - 1 ГОД (ВРЕМЯ РАЗРАБОТКИ)
XTIME=1.*365*24*3600
C XАРАКТЕРНЫЙ ЛИНЕЙНЫЙ РАЗМЕР 20000 М
XLENG=2.E4
C ХАРАКТЕРНОЕ ДАВЛЕНИЕ (Н/М/М) 250 СТАНДАРТНЫХ АТМОСФЕР
XPRES=250.*1.03250E5
C СТАНДАРТНАЯ ПРОНИЦАЕМОСТЬ 0.1 ДАРСИ=1.D-13/0.981 М**2
HPER=1.D-13/0.981
C КООРДИНАТЫ СКВАЖИНЫ В КРУГЕ
QRF(1,1)=0.D0
QRF(1,1)=0.5D0
QRF(2,1)=0.D0
26
C СТАНДАРТНАЯ МОЩНОСТЬ ПЛАСТА 100 М
HM=1.D2
C СТАНДАРТНАЯ ПЛОТНОСТЬ 0.6679 (МЕТАН ПРИ 20С И 760 ММ РТ СТ)
КГ/М**3
ARO=0.6679
C СТАНДАРТНЫЙ ДЕБИТ 5.Е5 М**3/СУТКИ
Q(1)=5.D5*ARO/365.
C СТАНДАРТНОЕ АТМОСФЕРНОЕ ДАВЛЕНИЕ (760 ММ РТ СТОЛБА) Н/М**2
APD=1.03225E5
C СТАНДАРТНАЯ ТЕМПЕРАТУРА В ПЛАСТЕ 293К (20С)
ATEMP=293
TEMP=ATEMP
C СТАНДАРТНАЯ ВЯЗКОСТЬ ГАЗА В ПЛАСТЕ (Н*СЕК/М**2)
C (МЕТАН ПРИ 20С И 760 ММ РТ СТ)
VIST(1)=0.8066*1.084E-6
C СТАНДАРТНЫЙ КОЭФФИЦИЕНТ СВЕРХСЖИМАЕМОСТИ 1 (СОВ. ГАЗ)
PZD(1)=1.
C СТАНДАРТНАЯ ОБЛАСТЬ - КРУГ
CMOD2=1.D0
C
CALL EXPERT(ICLASS,ISUB,1)
RETURN
END
C
C/ MODULE C1S4
C
SUBROUTINE DATA
C
C 1.4 ПЕРЕОПРЕДЕЛЕНИЕ ОСНОВНЫХ ПАРАМЕТРОВ
C
C ВЕРСИЯ 1 18/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMDGN.FOR'
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMCON.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,4/
C
C--------------------------------------------------------------------
C
CL 1. ВКЛЮЧЕНИЕ НЕСТАНДАРТНОЙ ДИАГНОСТИКИ
C
NMREPT=.TRUE.
C NMREPT=.FALSE.
C N20401=.FALSE.
C N20402=.FALSE.
CL 1.2 КЛАСС 2
C
CL 3. ПЕРЕХОД К БЕЗРАЗМЕРНЫМ ВЕЛИЧИНАМ
C
ZRO=XPRES*XTIME**2/XLENG/XLENG
ZQ0=XPRES*XTIME/XLENG/XLENG
ZMU0=XPRES*XTIME
C
DO 100 J=1,NP
HPER(J)=HPER(J)/XLENG/XLENG
27
HM(J)=HM(J)/XLENG
HPOR(J)=HPOR(J)*HM(J)
100 HPER(J)=HPER(J)*HM(J)
ARO=ARO/ZRO
APD=APD/XPRES
ATEMP=ATEMP/TEMP
VIST(1)=VIST(1)/ZMU0
Q(1)=Q(1)/ZQ0
C
RETURN
END
C
C/ MODULE C1S6
C
SUBROUTINE INITAL
C
C 1.6 ЗАДАНИЕ НАЧАЛЬНЫХ УСЛОВИЙ
C
C ВЕРСИЯ 1 18/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
INCLUDE 'COMADD.FOR'
C
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMCON.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,6/
CALL MESAGE('1.6 ЗАДАНИЕ НАЧАЛЬНЫХ УСЛОВИЙ',29)
C
C--------------------------------------------------------------------
C НАЧАЛЬНОЕ ДАВЛЕНИЕ (БЕЗРАЗМЕРНОЕ) 1
DO 100 J=1,NP
100 Y(1,J)=1.D0
WRITE (NOUT,*) 'Y'
WRITE (NOUT,FORMR) (Y(1,J),J=1,NP)
C
RETURN
END
C
C/ MODULE C1S7
C
SUBROUTINE RESUME
C
C 1.7 ВВОД ДАННЫХ ДЛЯ ВОЗОБНОВЛЕНИЯ РАСЧЁТА
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,7/
C
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
RETURN
28
END
C
C/ MODULE C1S8
C
SUBROUTINE START
C
C 1.8 НАЧАЛО РАСЧЁТА
C
C ВЕРСИЯ 1 18/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMCON.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,8/
CALL MESAGE('1.8 НАЧАЛО РАСЧЕТА',25)
C
C--------------------------------------------------------------------
C
YMAX=1.D0
CALL EXPERT (ICLASS,ISUB,1)
RETURN
END
C
C/ MODULE C3S1
C
SUBROUTINE OUTPUT(K)
C
C 3.1 ВЫВОД
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMADD.FOR'
DOUBLE PRECISION ZNORM
C--------------------------------------------------------------------
DATA ICLASS, ISUB /3,1/
C
C--------------------------------------------------------------------
---
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
IF(K.NE.2) RETURN
C IF (NSTEP.EQ.1E3) THEN
WRITE (NOUT,*) 'KFLAG = ',NFLAG
WRITE (NOUT,*) 'JSTART = ',NSTART
C IF (NSTEP.EQ.200000) THEN
WRITE (NOUT,*) 'ERROR'
C WRITE (NOUT,FORMR) ERROR
CALL VNORM (ERROR,NP,ZNORM)
WRITE (NOUT,*) 'ERROR = ',ZNORM
WRITE (NOUT,*) 'NSTEP = ', NSTEP
WRITE (NOUT,*) 'Результат'
WRITE (NOUT,*) 'T '
WRITE (NOUT,FORMR) TIME
WRITE (NOUT,*) 'Y'
WRITE (NOUT,FORMR) (Y(1,J),J=1,NP)
29
C ENDIF
IF(NFLAG.EQ.-1) GO TO 9901
IF(NFLAG.EQ.-2) GO TO 9902
IF(NFLAG.EQ.-3) GO TO 9903
IF(NFLAG.EQ.-4) GO TO 9904
IF(NFLAG.EQ.+1) GO TO 9905
RETURN
C
9901 WRITE (NOUT,*)'Шаг прошёл при H=HMIN, но требуемая точн. не
1достигнута'
HS=HS*0.5D0
HSMIN=HSMIN*0.5D0
NSTART=-1
RETURN
9902 WRITE (NOUT,*) 'Проверь правильно ли задано MAXDER - STOP'
STOP
RETURN
9903 WRITE (NOUT,*) 'Корректор не сошёлся при H>=HMIN'
HSMIN=HSMIN/100.
NSTART=1
RETURN
9904 WRITE (NOUT,*) 'Для задачи достигнуть требуемой точнос
2ти невозможно'
EPS=2.*EPS
IF (EPS.GT.1.D-2) STOP
NSTART=0
RETURN
9905 CONTINUE
NSTART=1
C
RETURN
END
C
C/ MODULE C3S2
C
SUBROUTINE RECORD(KLEDGE,KCALL,KRET)
C
C 3.2 ЧТЕНИЕ/ЗАПИСЬ В ЛЕДЖЕР ФАЙЛ
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /3,2/
C
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
RETURN
END
C
C/ MODULE C1S5
C
SUBROUTINE AUXVAL
C
C 1.5 ОПРЕДЕЛЕНИЕ ВСПОМОГАТЕЛЬНЫХ ВЕЛИЧИН
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
30
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /1,5/
C
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
RETURN
END
C
C/ MODULE C2S1
C
SUBROUTINE STEPON
C
C 2.1 ШАГ ВЫЧИСЛЕНИЙ
C
C ВЕРСИЯ 1 21/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,1/
C
C--------------------------------------------------------------------
C
IF (NLRES) GO TO 224
IF (NFLAG.EQ.-3.OR.NFLAG.EQ.-1) GO TO 224
NSTEP=NSTEP+1
IF (NSTEP.GT.1) GO TO 224
CALL REGION
CALL EXPERT (ICLASS,ISUB,1)
CALL R2DISC
CALL EXPERT (ICLASS,ISUB,2)
CALL QDELTA
CALL EXPERT (ICLASS,ISUB,3)
224 CALL SOLVEQ
CALL EXPERT (ICLASS,ISUB,4)
RETURN
END
C
C/ MODULE C2S2
C
SUBROUTINE REGION
C
C 2.2 ЗАДАНИЕ ОБЛАСТИ
C
C ВЕРСИЯ 1 21/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMCON.FOR'
INCLUDE 'COMREG.FOR'
INCLUDE 'COMMTD.FOR'
31
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMSPT.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,2/
C
C--------------------------------------------------------------------
C
CL НА ПЕРВОМ ШАГЕ ЗАДАЁТСЯ ОБЛАСТЬ И ВЫЧИСЛЯЕТСЯ МАССИВ CMOD2
CL НА СЛЕДУЮЩИХ ШАГАХ ЭТОТ МАССИВ СЧИТЫВАЕТСЯ ПО КАНАЛУ NIN
C
CMOD2=1.D0
C
IANA=NF
CALL CNU(2*NR,IANA,C)
C
CALL MOD2 (CMOD2,NR,IANA,0.0625D0,12)
C
RETURN
END
C
C/ MODULE C2S3
C
SUBROUTINE R2DISC
C
C 2.3 ДИСКРЕТИЗАЦИЯ ПО ПРОСТРАНСТВУ
C
C ВЕРСИЯ 1 21/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMREG.FOR'
CHARACTER ZY*1
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,3/
C
C--------------------------------------------------------------------
CALL EXPERT (ICLASS,ISUB,1)
C
CALL MESAGE ('Счет или считывание матрицы (Y/N)',34)
C
READ (*,*) ZY
IF (ZY.EQ.'N') GO TO 110
C
CALL LAPNW (H,NR,NF,NP,HPER,A1,A2)
C
DO 100 J1=1,NP
DO 100 J2=1,NP
I0=(J1-1)*NP+J2
H(I0)=H(I0)/CMOD2(J2)
100 CONTINUE
REWIND NONLIN
WRITE (NONLIN) H
ENDFILE NONLIN
32
GO TO 120
110 REWIND NONLIN
READ (NONLIN) H
120 CONTINUE
C
C
RETURN
END
C
C/ MODULE C2S4
C
SUBROUTINE QDELTA
C
C 2.4 МОДЕЛИРОВАНИЕ СКВАЖИН
C
C ВЕРСИЯ 1 21/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
INCLUDE 'COMADD.FOR'
C
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMSPT.FOR'
INCLUDE 'COMREG.FOR'
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMCON.FOR'
DOUBLE PRECISION ZNORM,ZL,ZM,ZS,ZR,ZF,Z2
INTEGER ZNL(30)
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,4/
C
C--------------------------------------------------------------------
C
CL 1. РЕШЕНИЕ СПЕКТРАЛЬНОЙ ЗАДАЧИ
C
C ЗАПИСЬ МАССИВОВ H,DR ВО ВРЕМЕННЫЙ НАБОР ДАННЫХ
C
REWIND NONLIN
READ (NONLIN) H
REWIND NONLIN
WRITE (NONLIN) H,DR
ENDFILE NONLIN
C
C РЕШЕНИЕ СПЕКТРАЛЬНОЙ ЗАДАЧИ
CALL ELMHES (NP,NP,1,NP,H,IANA)
CALL ELTRAN (NP,NP,1,NP,H,IANA,DR)
CALL HQR2 (NP,NP,1,NP,H,WR,WI,DR,IERR)
C
WRITE (NOUT,*) 'ПЕЧАТЬ СПЕКТРАЛЬНЫХ ПЕРЕМЕННЫХ'
C
WRITE (NOUT,*) 'IERR = ', IERR
WRITE (NOUT,*) 'IANA'
WRITE (NOUT,FORMI) (IANA(I),I=1,NP)
WRITE (NOUT,*) 'WR'
WRITE (NOUT,FORMR) (WR(I),I=1,NP)
WRITE (NOUT,*) 'WI'
WRITE (NOUT,FORMR)(WI(I),I=1,NP)
WRITE (NOUT,*) (WI(I),I=1,NP)
C
33
CL 2. МОДЕЛИРОВАНИЕ СКВАЖИН
C
C НОРМИРОВКА СОБСТВЕННЫХ ВЕКТОРОВ
C
DO 210 J1=1,NP
ZNORM=0.D0
J2=0
DO 220 JR=1,NR
DO 220 JF=1,NF
J2=J2+1
220 ZNORM=ZNORM+C(JR)*CMOD2(J2)*DR((J1-1)*NP+J2)**2
DO 210 J3=1,NP
210 DR((J1-1)*NP+J3)=DR((J1-1)*NP+J3)/SQRT(ZNORM)
C
C УПОРЯДОЧЕНИЕ СОБСТВЕННЫХ ВЕКТОРОВ
C
WI=WR
I0=NP-1
DO 240 J1=1,I0
ZL=WR(J1)
JL=J1+1
IANA(J1)=J1
DO 230 J2=JL,NP
IF (WR(J2).LT.ZL) IANA(J1)=J2
IF (WR(J2).LT.ZL) ZL=WR(J2)
230 CONTINUE
ZM=WR(J1)
WR(J1)=ZL
240 WR(IANA(J1))=ZM
DO 231 J31=1,NP
ZM=WR(J31)
DO 231 J32=1,NP
IF(WI(J32).EQ.ZM) IANA(J31)=J32
231 CONTINUE
WRITE (NOUT,*) 'IANA'
WRITE (NOUT,FORMI) (IANA(I),I=1,NP)
WRITE (NOUT,*) 'WR'
WRITE (NOUT,FORMR) (WR(I),I=1,NP)
C
CALL EXPERT (ICLASS,ISUB,1)
C
C ВЫЧИСЛЕНИЕ ПЛОЩАДИ ОБЛАСТИ
C
SREGION=0.D0
I0=0
DO 250 JR=1,NR
DO 250 JF=1,NF
I0=I0+1
250 SREGION=SREGION+C(JR)*CMOD2(I0)
WRITE (NOUT,*) 'ПЛОЩАДЬ ОБЛАСТИ'
WRITE (NOUT,FORMR) SREGION
C
CL ВЫЧИСЛЕНИЕ ПОРОВОГО ОБЪЁМА
C
VPOR=0.D0
JI=0
DO 251 JNU=1,NR
DO 251 JL=1,NF
JI=JI+1
251 VPOR=VPOR+C(JNU)*HPOR(JI)*CMOD2(JI)
34
WRITE (NOUT,*) 'ПОРОВЫЙ ОБЪЁМ'
WRITE (NOUT,FORMR) VPOR
C
CL РЕЗУЛЬТАТ СОХРАНЯЕТСЯ В МАССИВЕ WI
C
ZNL=NF
WI=0.D0
DO 260 JQ=1,NQ
ZR=QRF(1,JQ)
ZF=QRF(2,JQ)
DO 270 JK=1,NS
IF (JK.NE.1) GO TO 281
DO 261 JI=1,NP
Z2=1.D0/SQRT(SREGION)
261 WR(JI)=Z2
C GO TO 271
281 CONTINUE
DO 280 JI=1,NP
280 WR(JI)=DR((IANA(JK)-1)*NP+JI)
CALL URT (ZF,NR,ZNL,WR,YY)
CALL URT (ZF+3.14159265358979D0,NR,ZNL,WR,YZ)
DO 290 JI=1,NR
I1=2*NR-JI+1
290 YY(I1)=YZ(JI)
Z2=EIGEN (ZR,YY,YZ,2*NR,-1.D0,+1.D0)
271 CONTINUE
DO 270 JI=1,NP
C 270 WI(JI)=WI(JI)-WR(JI)*Z2
270 WI(JI)=WI(JI)+WR(JI)*Z2
260 CONTINUE
C
WRITE (NOUT,*) ' DELTA - ФУНКЦИЯ'
WRITE (NOUT,FORMR) (WI(I),I=1,NP)
C
CALL EXPERT (ICLASS,ISUB,2)
C
C ВОСТАНОВЛЕНИЕ МАССИВОВ H,DR
REWIND NONLIN
READ(NONLIN) H,DR
C
CALL EXPERT (ICLASS,ISUB,3)
RETURN
END
C
C/ MODULE C2S5
C
SUBROUTINE SOLVEQ
C
C 2.5 РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
C
C ВЕРСИЯ 1 21/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMADV.FOR'
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
35
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,5/
C
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
CALL
DIFSUB(NP,TIME,Y,SAVE1,HS,HSMIN,HSMAX,EPS,MF,YMAX,ERROR,
1 NFLAG,NSTART,MAXDER,DR)
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
RETURN
END
C
C/ MODULE C2S8
C
SUBROUTINE PEDERV (T,Y,PW,M)
C
C 2.8 МАТРИЦА ЧАСТНЫХ ПРОИЗВОДНЫХ ДЛЯ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ
УРАВНЕНИЙ
C
C ВЕРСИЯ 1 21/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMCON.FOR'
INCLUDE 'COMREG.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,8/
C
C--------------------------------------------------------------------
DOUBLE PRECISION T,Y(1),PW(1)
C ZC=ARO/VIST(1)/APD
ZC=XLENG**2/VIST(1)/APD/XTIME
DO 100 JI=1,NP
ZP=+1.D0/HPOR(JI)
DO 100 J=1,NP
100 PW(JI+M*(J-1))=2.*ZC*Y(1+(J-1)*8)*H(JI+NP*(J-1))*ZP
C
RETURN
END
C
C/ MODULE C4S1
C
SUBROUTINE TESEND
C
C 4.1 ПРОВЕРКА НА КОНЕЦ РАСЧЁТА
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
C
37
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMMTD.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /4,1/
C
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
NLEND=.FALSE.
DO I=1,NP
IF (Y(1,I).LE.0.D0) GO TO 9900
ENDDO
IF (NSTEP.GE.1E6) GO TO 9900
RETURN
9900 CONTINUE
CALL EXPERT(ICLASS,ISUB,1)
NLEND =.NOT.NLEND
C
RETURN
END
C
C/ MODULE C5S1
C
SUBROUTINE REPORT (KCLASS,KSUB,KPOINT)
C
C 5.1 НЕСТАНДАРТНАЯ ДИАГНОСТИКА
C
C ВЕРСИЯ 1 13/ЯНВ/07 СДА ИПМех РАН
C
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMSPT.FOR'
INCLUDE 'COMDGN.FOR'
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMREG.FOR'
INCLUDE 'COMCON.FOR'
INCLUDE 'COMADD.FOR'
C
DOUBLE PRECISION
ZR,ZT,ZP,ZW,ZRES(60),ZQ,ZORT(60,60),ZA(4,4),
1
ZB(4,4),ZWR(4),ZWI(4),ZFUN,ZFUNR,ZDR,ZXR,ZYR,ZRR,ZFI
INTEGER ZANA(4),ZNL(30)
ZFUN (ZR,ZT)=ZR**3*COS(ZT)*SIN(ZT)**2+1.D0
ZFUNR(ZR,ZT)=3.*ZR**2*COS(ZT)*SIN(ZT)**2
DATA ZA/3.D0,2.D0,3.D0,4.D0,4*1.D0,2.D0,3.D0,2.D0,3.D0,5.D0,
2 7.D0,4.D0,2.D0/
C--------------------------------------------------------------------
DATA ICLASS, ISUB /5,1/
C
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
38
C--------------------------------------------------------------------
ICODE=10000*KCLASS+100*KSUB+KPOINT
C
CL 1. ВКЛЮЧЕНИЕ НЕСТАНДАРТНОЙ ДИАГНОСТИКИ
C
ZNL=NF
C 1.2 КЛАСС 2
C
IF (ICODE.EQ.20401) GO TO 20401
IF (ICODE.EQ.20402) GO TO 20402
IF (ICODE.EQ.10801) GO TO 10801
IF (ICODE.EQ.40101) GO TO 40101
RETURN
C
CL ПРОВЕРКА ДИСКРЕТИЗАЦИИ ПО ПРОСТРАНСТВУ ДЛЯ СТАНДАРТНОГО ВАРИАНТА
C
20401 IF(N20401) RETURN
C
WRITE(NOUT,*)'KCLASS =',KCLASS,'KSUB =',KSUB,'KPOINT = ',KPOINT
WRITE (NOUT,*) 'ПРОВЕРКА ДИСКРЕТИЗАЦИИ ПО ПРОСТРАНСТВУ'
ZP=HPER(1)
DO 100 J=1,NP
ZW=WR(J)/ZP
IF(ZW.LT.0.D0) ZW=0.D0
100 WR(J)=SQRT(ZW)
WRITE (NOUT,*) 'WR'
WRITE (NOUT,FORMR) (WR(I),I=1,NP)
WRITE (NOUT,*)'Печать 96 собств.значений в свободном формате'
WRITE (NOUT,*) (WR(I),I=1,96)
DO 107 JK=2,NS
DO 108 JI=1,NP
108 WI(JI)=DR((IANA(JK)-1)*NP+JI)
CALL URT (0.D0,NR,ZNL,WI,YY)
CALL URT (3.1415926535897932D0,NR,ZNL,WI,YZ)
DO 109 JI=1,NR
I1=2*NR-JI+1
109 YY(I1)=YZ(JI)
DO 106 JQ=1,11
ZR=(JQ-1)*0.1/WR(JK)
106 ZRES(JQ)=EIGEN(ZR,YY,YZ,2*NR,-1.D0,+1.D0)
CALL NORM (ZRES,11)
WRITE (NOUT,*) 'ZRES'
107 WRITE (NOUT,FORMR) (ZRES(I),I=1,11)
C
CL ПРОВЕРКА ОРТОГОНАЛЬНОСТИ СОБСТВЕННЫХ ВЕКТОРОВ
C
WRITE(NOUT,*) 'ПРОВЕРКА ОРТОГОНАЛЬНОСТИ СОБСТВЕННЫХ ВЕКТОРОВ'
C
DO 105 JI=1,NS
DO 105 JJ=1,NS
111 CONTINUE
ZP=0.D0
JK=0
DO 104 JR=1,NR
DO 104 JF=1,NF
JK=JK+1
104 ZP=ZP+DR((IANA(JI)-1)*NP+JK)*DR((IANA(JJ)-1)*NP+JK)*C(JR)*
* CMOD2(JK)
C
39
C WRITE(NOUT,*) 'JI=',JI,'JJ=',JJ,'ZP=',ZP
C
IF (ABS(ZP).LE.1.D-5.OR.JI.EQ.JJ) GO TO 105
DO 110 JP=1,NP
110 WI(JP)=DR((IANA(JJ)-1)*NP+JP)-ZP*DR((IANA(JI)-1)*NP+JP)
ZQ=0.D0
JQ=0
DO 112 JR=1,NR
DO 112 JF=1,NF
JQ=JQ+1
112 ZQ=ZQ+C(JR)*CMOD2(JQ)+WI(JQ)**2
DO 113 JQ=1,NP
113 DR((IANA(JJ)-1)*NP+JQ)=WI(JQ)/SQRT(ZQ)
GO TO 111
105 ZORT(JI,JJ)=ZP
WRITE (NOUT,*) 'ZORT'
WRITE (NOUT,FORMR) ZORT
C
CL ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТОВ ФУРЬЕ
C
WRITE (NOUT,*) 'КОЭФФИЦИЕНТЫ ФУРЬЕ FUN'
DO 103 JS=1,NS
ZP=0.D0
I0=0
DO 102 JR=1,NR
ZR=COS((2.*JR-1.)*3.1415926535897932D0/4./NR)
DO 102 JF=1,NF
ZT=2.*3.1415926535897932D0*(JF-1)/NF
I0=I0+1
102 ZP=ZP+C(JR)*CMOD2(I0)*DR((IANA(JS)-1)*NP+I0)*ZFUN(ZR,ZT)
103 ZRES(JS)=ZP
WRITE (NOUT,*) 'ФУРЬЕ'
WRITE (NOUT,FORMR) (ZRES(I),I=1,NS)
RETURN
C
CL ПРОВЕРКА DELTA-ОБРАЗНОСТИ ПРАВОЙ ЧАСТИ
C
20402 IF (N20402) RETURN
C
WRITE(NOUT,*)'KCLASS =',KCLASS,'KSUB =',KSUB,'KPOINT = ',KPOINT
C
WRITE (NOUT,*) 'ПРОВЕРКА DELTA-ФУНКЦИИ'
C
ZP=0.D0
ZQ=0.D0
I0=0
DO 200 JR=1,NR
ZR=COS((2.*JR-1.)*3.1415926535897932D0*(JF-1)/NF)
DO 200 JF=1,NF
ZT=2.*3.1415926535897932D0*(JF-1)/NF
I0=I0+1
ZQ=ZQ+C(JR)*WI(I0)*CMOD2(I0)
200 ZP=ZP+C(JR)*WI(I0)*ZFUN(ZR,ZT)*CMOD2(I0)
WRITE (NOUT,*) 'ZP'
WRITE (NOUT,FORMR) ZP
WRITE (NOUT,*) 'ZQ'
WRITE (NOUT,FORMR) ZQ
C
RETURN
C
40
CL ТЕСТ ДЛЯ ПОДПР. ELMHES, ELMTRANS, HQR2 ( СМ. ТАБЛ. 8 СТР. 346,
CL УИЛКИНСОН, РАЙНШ, СПРАВОЧНИК АКЛГОРИТМОВ НА ЯЗЫКЕ АЛГОЛ,
CL МАШИНОСТРОЕНИЕ, 1976 Г.)
C
10801 CONTINUE
C
WRITE(NOUT,*)'KCLASS =',KCLASS,'KSUB =',KSUB,'KPOINT = ',KPOINT
C
CALL ELMHES (4,4,1,4,ZA,ZANA)
CALL ELTRAN (4,4,1,4,ZA,ZANA,ZB)
CALL HQR2 (4,4,1,4,ZA,ZWR,ZWI,ZB,IERR)
WRITE (NOUT,9900) (ZANA(J),J=1,4)
WRITE (NOUT,9901) (ZWR(J), J=1,4)
WRITE (NOUT,9901) (ZWI(J), J=1,4)
DO 301 J1=1,4
DO 302 J2=1,4
302 ZWI(J2)=ZB(J2,J1)
CALL NORM (ZWI,4)
301 WRITE (NOUT,9901) (ZWI(J),J=1,4)
9900 FORMAT(4I3)
9901 FORMAT(4D20.11)
C
RETURN
C
40101 CONTINUE
C
CL ВЫЧИСЛЕНИЕ ГРАДИЕНТА
C
C REWIND NONLIN
C READ (NONLIN) H,DR
C
CALL HDR (NR,NF,NP,DR,A1,A2)
CALL DT(NF,DF)
C
WRITE(NOUT,*)'KCLASS =',KCLASS,'KSUB =',KSUB,'KPOINT =
',KPOINT
C
I0=0
DO 408 JR=1,NR
ZR=COS((2.*JR-1.)*3.1415926535897932D0/4.D0/NR)
DO 408 JF=1,NF
ZT=2.*3.1415926535897932*(JF-1)/NF
I0=I0+1
YY(I0)=ZFUN(ZR,ZT)
408 YZ(I0)=ZFUNR(ZR,ZT)
WRITE (NOUT,*) 'EXACT'
WRITE (NOUT,FORMR) (YZ(I),I=1,NP)
DO 409 J=1,NP
ZP=0.D0
DO 410 JK=1,NP
410 ZP=ZP+DR((JK-1)*NP+J)*YY(JK)
409 YZ(J)=ZP
WRITE (NOUT,*) 'ВЫЧИСЛЕНИЯ'
WRITE (NOUT,FORMR) (YZ(I),I=1,NP)
WRITE (NOUT,*) 'ПРОВЕРКА ВЫРОЖДЕННОСТИ МАТР. ДИФФ. ПО R'
DO 411 J=1,NP
ZP=0.D0
DO 412 JK=1,NP
412 ZP=ZP+DR((JK-1)*NP+J)
411 YZ(J)=ZP
41
WRITE (NOUT,*) 'ВЫРЖДЕНИЕ'
WRITE (NOUT,FORMR) (YZ(I),I=1,NP)
DO 400 J=1,NP
400 REZP(J)=Y(1,J)
WRITE (NOUT,*) 'REZP'
WRITE (NOUT,FORMR) (REZP(I),I=1,NP)
C Файл для TECPLOT
OPEN (UNIT=10,FILE='EIGFUN.DAT')
WRITE (10,*) 'TITLE="Pressure Data File"'
WRITE (10,*) 'VARIABLES="X","Y","Pressure"'
WRITE (10,*) 'ZONE I=',NR,',J=',NF, ' ,F=POINT'
C
ZPI=3.141592653589D0
J=0
DO NU=1,NR
ZRR=COS((2.D0*NU-1.D0)*ZPI/4.D0/NR)
DO L=1,NF
ZFI=2.D0*ZPI*(L-1)/NF
J=J+1
ZXR=ZRR*COS(ZFI)+0.0625D0*ZRR**(12+1)*COS((12.D0+1.D0)*ZFI)
ZYR=ZRR*SIN(ZFI)+0.0625D0*ZRR**(12+1)*SIN((12.D0+1.D0)*ZFI)
WRITE (10,121) ZXR,ZYR,REZP(J)
ENDDO
ENDDO
121 FORMAT (3E15.3)
CV
DO 401 J=1,NP
ZP=0.D0
DO 402 JK=1,NP
402 ZP=ZP+DR((JK-1)*NP+J)*REZP(JK)
401 WR(J)=ZP
WRITE (NOUT,*) 'DP/DR'
WRITE (NOUT,*) 'Норма матрицы дифференцирования'
CALL CNORM (DR,NP,ZDR)
WRITE (NOUT,*) 'Норма = ',ZDR
WRITE (NOUT,FORMR) (WR(I),I=1,NP)
WRITE (NOUT,*) 'ПРОВЕРКА ВЫПОЛНЕНИЯ ГРАНИЧНОГО УСЛОВИЯ'
DO IL =0,NF-1
ZFI=IL*2.D0*3.1415926535897932D0/NF
CALL URT(ZFI,NR,ZNL,WR,YY)
CALL URT(ZFI+3.1415926535897932D0,NR,ZNL,WR,YZ)
DO 407 JI=1,NR
I1=2*NR-JI+1
407 YY(I1)=YZ(JI)
ZRES(1)=EIGEN(+1.D0,YY,YZ,2*NR,-1.D0,+1.D0)
ZRES(2)=EIGEN(-1.D0,YY,YZ,2*NR,-1.D0,+1.D0)
C WRITE (NOUT,*) 'ГРАНИЦА'
WRITE (NOUT,FORMR) (ZRES(I),I=1,2)
ENDDO
DO 403 JR=1,NR
DO 403 JF=1,NF
ZP=0.D0
DO 404 JK=1,NF
404 ZP=ZP+DF((JK-1)*NF+JF)*REZP((JR-1)*NF+JK)
403 YZ((JR-1)*NF+JF)=ZP/COS((2.D0*JR-1.D0)*3.1415926535897932
* /4.D0/NR)
WRITE (NOUT,*) 'DP/DFI/R'
WRITE (NOUT,FORMR) (YZ(I),I=1,NP)
C
CL ВЫЧИСЛЕНИЕ ПОТОКА
42
C
DO 405 JR=1,NR
ZR= COS((2.D0*JR-1.D0)*3.1415926535897932/4.D0/NR)
ZP=0.D0
DO 406 JF=1,NF
406 ZP=ZP-WR((JR-1)*NF+JF)*HPER(1)*HM(1)**2/VIST(1)
405 ZRES(JR)=ZP*2.D0*3.1415926535897932*ZR/NF
WRITE (NOUT,*) 'ПОТОК'
WRITE (NOUT,FORMR) (ZRES(I),I=1,NR)
C
RETURN
END
C
C/ MODULE C4S2
C
SUBROUTINE ENDRUN
C
C 4.2 КОНЕЦ РАСЧЁТА
C
C ВЕРСИЯ 1 07/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /4,2/
C
C--------------------------------------------------------------------
C
WRITE (*,*) 'ICLASS = ',ICLASS, ' ISUB = ',ISUB
C
CALL CLIST (3,1)
C
RETURN
END
C
C/ MODULE C5S2
C
SUBROUTINE CLIST (KGROUP,KBLOCK)
C
C 5.2 ПЕЧАТЬ COMMON ПЕРЕМЕННЫХ
C
C ВЕРСИЯ 1 28/ЯНВ/07 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
INCLUDE 'COMMTD.FOR'
INCLUDE 'COMHVL.FOR'
INCLUDE 'COMSPT.FOR'
INCLUDE 'COMDGN.FOR'
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMREG.FOR'
INCLUDE 'COMCON.FOR'
INCLUDE 'COMADD.FOR'
C
WRITE (NOUT,*) 'ПЕЧАТЬ COMMON ПЕРЕМЕННЫХ'
C
C--------------------------------------------------------------------
CL 1. ОБЩИЕ ДАННЫЕ OLYMPUS
C
C ВЫБОР ГРУППЫ ДЛЯ ПЕЧАТИ
43
C
IF(KGROUP.EQ.0) GO TO 100
GO TO (100,200,300,400,500) , KGROUP
C
100 CONTINUE
IF(KBLOCK.EQ.0) GO TO 110
GO TO (110,191,191,191,191,191,191,191,190) , KBLOCK
C
CL 1.1 ОСНОВНЫЕ ПАРАМЕТРЫ СИСТЕМЫ
C
110 CONTINUE
C
WRITE (NOUT,*) ' C1.1 COMBAS '
C
CALL RVAR (' ALTIME = ',ALTIME)
CALL RVAR (' CPTIME = ',CPTIME)
CALL IVAR (' NDIARY = ',NDIARY)
CALL IVAR (' NIN = ',NIN )
CALL IVAR (' NLEDGE = ',NLEDGE)
CALL IVAR (' NLEND = ',NLEND )
CALL IVAR (' NLRES = ',NLRES )
CALL IVAR (' NONLIN = ',NONLIN)
CALL IVAR (' NOUT = ',NOUT )
CALL IVAR (' NPRINT = ',NPRINT)
CALL IVAR (' NPUNCH = ',NPUNCH)
CALL IVAR (' NREAD = ',NREAD )
CALL IVAR (' NREC = ',NREC )
CALL IVAR (' NRESUM = ',NRESUM)
CALL IVAR (' NRUN = ',NRUN )
CALL IVAR (' NSTEP = ',NSTEP )
CALL RVAR (' STIME = ',STIME )
IF(KBLOCK.NE.0) RETURN
C
CL 1.9 ДИАГНОСТИКА И РАЗВИТИЕ ПРОГРАММЫ
C
190 CONTINUE
C
WRITE (NOUT,*) ' C1.9 COMDDP '
CV
CALL IVAR (' MAXDUM = ',MAXDUM)
CALL IVAR (' MXDUMP = ',MXDUMP)
CALL IVAR (' NCLASS = ',NCLASS)
CALL LVAR (' NLCHED = ',NLHED )
CALL LVAR (' NLREPT = ',NLREPT)
CALL IVAR (' NPOINT = ',NPOINT)
CALL IVAR (' NSUB = ',NSUB )
191 CONTINUE
IF (KGROUP.NE.0) RETURN
C
CL 2 ФИЗИКА
C
200 CONTINUE
IF(KGROUP.NE.0) GO TO 210
GO TO(210,220) , KBLOCK
C
CL 2.1 ФИЗИЧЕСКИЕ ПЕРЕМЕННЫЕ
C
WRITE (NOUT,*) ' C2.1 COMPHY '
210 CONTINUE
44
CALL RVAR (' XLENG = ',XLENG )
CALL RVAR (' XTIME = ',XTIME )
CALL RVAR (' XPRES = ',XPRES )
220 CONTINUE
C
CL 2.2 ПЕРЕМЕННЫЕ ДЛЯ ЗАДАНИЯ ОБЛАСТИ
C
IF(KGROUP.NE.0) RETURN
C
C--------------------------------------------------------------------
CL 4. HOUSE-KEEPING
C
400 CONTINUE
IF(KGROUP.NE.0) GO TO 410
GO TO(410,420) , KBLOCK
C
CL 4.1 ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ
C
45
410 CONTINUE
C
WRITE (NOUT,*) ' C4.1 COMHVL '
C
IF(KBLOCK.NE.0) RETURN
C
CL 4.2 АДМИНИСТРАТИВНЫЕ ПЕРЕМЕННЫЕ
C
420 CONTINUE
C
191 CONTINUE
IF (KGROUP.NE.0) RETURN
C
CL 2 ФИЗИКА
C
200 CONTINUE
IF(KGROUP.NE.0) GO TO 210
GO TO(210,220) , KBLOCK
C
CL 2.1 ФИЗИЧЕСКИЕ ПЕРЕМЕННЫЕ
C
WRITE (NOUT,*) ' C2.1 COMPHY '
210 CONTINUE
CALL DARRAY(' HM = ',HM ,NP)
CALL RARRAY(' HPER = ',HPER ,NP)
CALL DARRAY(' HPOR = ',HPOR ,NP)
CALL DARRAY(' Q = ',Q ,NQ)
CALL DARAY2(' QRF = ',QRF ,2 ,NQ)
220 CONTINUE
C
CL 2.2 ПЕРЕМЕННЫЕ ДЛЯ ЗАДАНИЯ ОБЛАСТИ
C
WRITE (NOUT,*) ' C2.2 COMREG '
C
CALL DARRAY(' CMOD2 = ',CMOD2 ,NP)
IF (KGROUP.NE.0) RETURN
C
C--------------------------------------------------------------------
CL 3. МЕТОДИКА ВЫЧИСЛЕНИЙ
C
300 CONTINUE
IF(KGROUP.NE.0) GO TO 310
GO TO(310,320) , KBLOCK
C
CL 3.1 ПЕРЕМЕННЫЕ ЧИСЛЕННОГО МЕТОДА
C
310 CONTINUE
C
WRITE (NOUT,*) ' C3.1 COMMTD '
C
CALL DARRAY(' ERROR = ',ERROR ,NP)
CALL DARRAY(' H = ',H ,NP*NP)
CALL DARRAY(' REZP = ',REZP ,NP)
IF(KBLOCK.NE.0) RETURN
C
CL 3.2 COMSPT
C
320 CONTINUE
C
WRITE (NOUT,*) ' C3.3 COMSPT '
C
48
CALL IARRAY(' IANA = ',IANA ,NP)
CALL DARRAY(' WR = ',WR ,NP)
CALL DARRAY(' WI = ',WI ,NP)
CALL DARRAY(' YY = ',YY ,NP)
CALL DARRAY(' YZ = ',YZ ,NP)
IF(KGROUP.NE.0) RETURN
C
C--------------------------------------------------------------------
CL 4. HOUSE-KEEPING
C
400 CONTINUE
IF(KGROUP.NE.0) GO TO 410
GO TO(410,420,430) , KBLOCK
C
CL 4.1 ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ
C
410 CONTINUE
C
WRITE (NOUT,*) ' C4.1 COMHVL '
C
CALL DARRAY(' A1 = ',A1 ,NR*NR)
CALL DARRAY(' A2 = ',A2 ,NR*NR)
CALL DARRAY(' C = ',C ,NR)
CALL DARRAY(' DF = ',DF ,NF*NF)
CALL DARRAY(' DR = ',DR ,NP*NP)
CALL DARAY2(' SAVE1 = ',SAVE1 ,20*NP+NP,NP)
CALL DARAY2(' Y = ',Y ,8 ,NP)
IF(KBLOCK.NE.0) RETURN
C
CL 4.2 АДМИНИСТРАТИВНЫЕ ПЕРЕМЕННЫЕ
C
420 CONTINUE
C
C
C/ MODULE U2
C
SUBROUTINE DVAR(TEXT,NAME)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
DOUBLE PRECISION NAME
CHARACTER TEXT*12
C
C Утилита: печать переменной двойной точности
C
C ВЕРСИЯ 1 26/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,'(12H'//TEXT//',G10.3)') NAME
C
RETURN
END
C
C/ MODULE U3
C
SUBROUTINE RVAR(TEXT,NAME)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
REAL*4 NAME
CHARACTER TEXT*12
C
C Утилита: печать переменной одинарной точности
C
C ВЕРСИЯ 1 26/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,'(12H'//TEXT//',G10.3)') NAME
C
RETURN
END
C
C/ MODULE U4
C
SUBROUTINE IVAR(TEXT,NAME)
INCLUDE 'COMBAS.FOR'
50
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12
C
C Утилита: печать целой переменной
C
C ВЕРСИЯ 1 28/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,'(12H'//TEXT//',I10)') NAME
C
RETURN
END
C
C/ MODULE U5
C
SUBROUTINE LVAR(TEXT,NAME)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12
LOGICAL NAME
C
C Утилита: печать логической переменной
C
C ВЕРСИЯ 1 30/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,'(12H'//TEXT//',I10)') NAME
C
RETURN
END
C
C/ MODULE U6
C
SUBROUTINE HARRAY(TEXT,NAME,N)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12,NAME
DIMENSION NAME(N)
C
C Утилита: печать текстового массива
C
C ВЕРСИЯ 1 30/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,*) TEXT
WRITE (NOUT,*) (NAME(I),I=1,N)
C
RETURN
END
C
C/ MODULE U7
C
SUBROUTINE IARRAY(TEXT,NAME,N)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12
DIMENSION NAME(N)
C
C Утилита: печать целого массива
C
C ВЕРСИЯ 1 30/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,*) TEXT
51
WRITE (NOUT,*) (NAME(I),I=1,N)
C
RETURN
END
C
C/ MODULE U8
C
SUBROUTINE LARRAY(TEXT,NAME,N)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12
LOGICAL NAME(N)
C
C Утилита: печать логического массива
C
C ВЕРСИЯ 1 30/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,*) TEXT
WRITE (NOUT,*) (NAME(I),I=1,N)
C
RETURN
END
C
C/ MODULE U8
C
SUBROUTINE DARRAY(TEXT,NAME,N)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12
DOUBLE PRECISION NAME(N)
C
C Утилита: печать одномерного массива двойной точности
C
C ВЕРСИЯ 1 30/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,*) TEXT
WRITE (NOUT,'(1X,6G11.4)') (NAME(I),I=1,N)
C
RETURN
END
C
C/ MODULE U9
C
SUBROUTINE RARRAY(TEXT,NAME,N)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12
REAL*4 NAME(N)
C
C Утилита: печать одномерного массива одинарной точности
C
C ВЕРСИЯ 1 30/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,*) TEXT
WRITE (NOUT,'(1X,6G10.3)') (NAME(I),I=1,N)
C
RETURN
END
C
C/ MODULE U10
52
C
SUBROUTINE DARAY2(TEXT,NAME,M,N)
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMADD.FOR'
CHARACTER TEXT*12
DOUBLE PRECISION NAME(M,N)
C
C Утилита: печать одномерного массива двойной точности
C
C ВЕРСИЯ 1 30/ЯНВ/07 СДА ИПМех РАН
C
WRITE (NOUT,*) TEXT
DO J=1,M
WRITE (NOUT,'(1X,6G11.4)') (NAME(J,I),I=1,N)
ENDDO
C
RETURN
END
C
SUBROUTINE URT (TETA,M,NL,U,Z)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION U(1),NL(M),Z(M)
K=0
PI=3.141592653590D0
DO 2 NU=1,M
Z(NU)=0.D0
NL1=NL(NU)
DO 1 L1=1,NL1
L=L1-1
P=TETA-2.*PI*L/NL1
DN=0.5
N1=(NL1-1)/2
DO 3 I=1,N1
3 DN=DN+COS(I*P)
DN=2.*DN/NL1
IF (P.EQ.0.D0) DN=1.D0
L2=L1+K
1 Z(NU)=Z(NU)+U(L2 )*DN
2 K=K+NL1
RETURN
END
SUBROUTINE LAPNW (H,M,N,NT,PR,A1,A2)
IMPLICIT REAL*8 (A-H,O-Z)
INCLUDE 'COMBAS.FOR'
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)
CHARACTER ZIP*1
PI=3.1415926535897932D0
M1=2*M-1
C******************************************************
C ВЫЧИСЛЕНИЕ КОЭФФИЦИЕНТОВ КВАДРАТУРНОЙ ФОРМУЛЫ (3)
C******************************************************
DO I=1,M
NL(I)=N
ENDDO
CALL CNU(2*M,NL,C)
C*****
C ВЫЧИСЛЕНИЕ МАССИВОВ A1 И A2 (1,2)
C*****
53
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
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 (4)
C*****
IMUT=1
CALL MESAGE('Вычисление или продолжение (Y/N) ?',34)
READ (*,*) ZIP
IF (ZIP.EQ.'N') THEN
REWIND NIN
READ (NIN,*) IMUT
REWIND NONLIN
READ (NONLIN) H
ENDIF
NM1=NM+1
I=(IMUT-1)*N
DO 97 MUT=IMUT,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
54
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
H(I,J)=RES/C(MUT)
7 CONTINUE
C
REWIND NONLIN
WRITE (NONLIN) H
ENDFILE NONLIN
REWIND NIN
WRITE (NIN,*) MUT
ENDFILE NIN
97 CONTINUE
C*****
C ВЫЧИСЛЕНИЕ МАТРИЦЫ A (5)
C*****
I0=-N
DO 9 MUT=1,M
C
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
C
SUBROUTINE CNORM (H,N,CN)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION H(N,N)
CN=0.D0
DO 1 I=1,N
P=0.D0
DO 2 L=1,N
2 P=P+ABS(H(I,L))
55
IF (P.GT.CN) CN=P
1 CONTINUE
RETURN
END
C
SUBROUTINE VNORM (V,N,VN)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION V(N)
VN=0.D0
DO 1 I=1,N
P=ABS(V(I))
IF (P.GT.VN) VN=P
1 CONTINUE
RETURN
END
56
Выводы.
Заключение.
Литература.
57
11. Коллинз Р. Течение жидкостей через пористые материалы. М., Мир,
1964.
13. Самарский А. А. // ЖВМ и МФ, т.3, № 1, 1963; т.2, №4, 1961; т.2, 34,
1962.
58
26. Веригин Н. Н., Саркисян В. С. О фильтрации двух жидкостей с
разной плотностью и вязкостью при закачке в галерею с постоянным
расходом // Докл. АН СССР, 1974, т. 218, № 3, с. 536 – 539.
60. Aavatsmark I., Klausen R. A.:” Well Index in Reservoir Simulation for
Slanted and Slightly Curved Wells in 3D Grids,” SPEJ (March, 2003) 41.
61
Алгазин Сергей Дмитриевич
62