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

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

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

С. Д. Алгазин

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


МАТФИЗИКИ.
XV. Программа АМАЛИЯ – двумерная однофазная фильтрация газа в
пористой среде. Версия 1/Февраль 2007 г.

Препринт № 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.

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


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

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

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

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

3
Закон Дарси (1856) справедлив для медленных движений жидкости в
изотропной пористой среде, т.е. для малых значений числа Рейнольдса Re
(Re<Reкр.)

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

где 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 ∂θ  ∂θ 

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

4
m=m(r,θ) – пористость (известная функция координат );
p=p(r,θ,t) – давление ( неизвестная функция координат и времени );
=k k=(r , θ , p ) k (r , θ )ψ ( p ) - проницаемость ( известная функция координат и
давления);
ρ=ρ(p) – плотность ( известная функция давления );
μ=μ(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. О численном решении нестационарной задачи.

После того как дискретизация по пространственным переменным


построена [2 – 3] осталось решить две задачи:
• Моделирование скважин (точечных источников);
• Решение нестационарной задачи.

В этом параграфе будет рассмотрено решение второй задачи. Первая


задача будет рассмотрена в §3.
Для решения задачи (1.5),(1.7) применялся метод Гира
[51]. Более новую версию этой программы можно найти в
сетевой библиотеке: htpp://www.netlib.org/DIFSUB/.
Примечание. Подпрограмма написана на старой версии
Фортрана. Для того, чтобы сделать её работоспособной в
новой версии Фортрана пришлось заменить переменную SAVE
на SAVE1 (в новой версии Фортрана SAVE имя оператора
(сохранить)).

SUBROUTINE DIFSUB(NP,TIME,Y,SAVE1,HS,HSMIN,HSMAX,EPS,MF,YMAX,ERROR,
1 NFLAG,NSTART,MAXDER,DR)

5
2. 1. Пояснения к ФОPTPAH программе. Рекомендации по
использованию.

ФОРТРАН-программа DIFSUB, предложенная Гиром [51] , предназначена для


интегрирования систем ОДУ:

dxi
= f i (t , xi (t )), i = 1,..., n.
dt

Некоторые изменения внесены для использования программ на современной версии


Фортрана (см. выше).
2.1.1. Программа DIFSUB составлена так, что позволяет считать жесткие
и обычные системы дифференциальных уравнений. Жесткие системы решаются
методом Гира [51], причем порядок метода может меняться от 1 до 6. Для обычных
систем ОДУ применяется видоизмененный метод Адамса, предложенный
Нордсиком [52]. (Максимальный порядок этого метода K = 7). Возможность
объединения двух методов в одной программе обусловлена тем, что они оба
имеют одинаковый предиктор, описанный в [52]. Кроме того, оба метода типа
предиктср-корректср, и матричные записи их имеют аналогичный вид.
Контроль ошибки осуществляется так, чтобы ошибка метода на каждом ваге
интегрирования не превышала ε. Если решение представляет собой
возрастающую функцию, то производится контроль относительной ошибки; если
решение выходит на стационарное значение, то оценивается абсолютная ошибка.
(Для оценки величины ошибки используются поправки корректора).

2.. 2.2. Описание процедур.

Для независимей переменной t системы обыкновенных


дифференциальных уравнений в программе -используется идентификатор Т
(TIME) ; ( Здесь и ниже в скобках будем указывать значение формальных
параметров при вызове); функции xI (I =1,..,N) хранятся в в массиве Y(1,I)
элементах массива Y . Весь массив Y имеет размерность 8·N и Y(J+1,J)
содежит J -ую производную xI умноженную на (HJ/J!); N (NP) – число
уравнений системы; H (HS) – текущий шаг интегрирования
Программа DIFSUB использует три подпрограммы: DIFFUN (T,Y,DY),
PEDERW (T,Y,PW,M), MATINV (PW,N,M,J) , которые должен написать
пользователь. DIFFUN , используя Y и T вычисляет значения правах частей
системы обыкновенных уравнений и помещает их в массив DY . MATINV
обращает матриц порядка N×N . Матрица записана в одномерный массив PW
так, что ( I , J ) элемент матрицы расположен в PW(I + М (J-1 )). (Величина М
запоминается при первом обращении в DIFSUB , когда JSTART (NSTART) = 0
(см. далее), и не меняется до следующего обращения JSTART (NSTART) = 0).

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 может быть пустой.

2.2..3. Формальные параметры.

• Т (TIME) - независимая переменная. При обращении Т задается


как начальная точка интервала интегрирования. При выходе из
DIFSUB значение Т соответствует точке, для которой вычислено
решение.
• Y(8·N) - массив 8·N для функций xI (I=1,…,N) и их производных.
Перед первым обращением надо задать в Y(1,I) начальные значения
xI0 . При выходе из DIFSUB Y(1,I) = xI(T).
• SAVE1(20*N+N,N) (в оригинале SAVE) рабочий массив для
хранения информации обращения к процедурам DIFFUN и
PEDERW.
• H (HS) – шаг по T. При обращении к программе задаётся величина
шага, которую хотелось бы использовать. Однако программа может
уменьшить шаг, если предложенный шаг даёт большую ошибку.
Выход из программы осуществляется после продвижения на один
машинный шаг (не обязательно заданное H). На выходе в H
засылается величина, которую рекомендуется использовать при
следующем обращении к программе. Предлагаемый шаг задаётся в
интервале [HMIN (HSMIN), HMAX (HSMAX)] .
• HMIN (HSMIN) - минимальный шаг интегрирования (задаётся
пользователем).
• HMAX (HSMAX) - максимальный шаг интегрирования (задаётся
пользователем).
• EPS - задаваемая при обращении допустимая величина ошибки.
Норма относительной ошибки вычислений на одном шаге должна
быть меньше EPS. Для достижения этого программа может изменить
шаг и (или) порядок метода.
• MF - указатель метода (задаётся пользователем). Возможные
значения для MF:
0 - использовать переработанный Нордсиком метод Адамса;

7
∂f i
1 - применять метод Гира, причем матрица , вычисляется по
∂x j
аналитическим формулам процедурой PEDERW.
∂f i
2 -применить тот же метод, но , вычисляется численным
∂x j
дифференцированием.

• YMAX(N) - массив из N элементов, на каждом шаге содержащие


наибольшее из всех ранее вычисленных значений xI , (I =1,…,N).
Перед первым обращением надо обязательно задать все элементы
YMAX(I)>0.
• ERROR(N) - массив из N элементов, содержащий ошибку на дан-
ном шаге по каждой компоненте, Вычисляется в программе.

• KFLAG(NFLAG) – число показывающее как прошёл шаг;


вычисляется программой и принимает следующие значения :
+1 – шаг прошёл нормально (хотя предлагаемое значение H могло
быть уменьшено);
- 1 - шаг прошёл при H=HMIN, но требуемая точность не
достигнута; - 2 – велик максимальный
предложенный порядок метода MAXDER (см. ниже);
- 4 - для данной задачи достигнуть требуемой точности
невозможно.

• JSTART(NSTART) – входной параметр задаваемый пользователем и


принимающий следующие значения:
- 1 – повторить последний шаг с новым значением H (повторение
возможно лишь для шагов, которые прошли с KFLAG = + 1 или – 1;
для шагов закончившихся с другим значением KFLAG, повторение
бессмысленно;
0 – провести первый шаг. При первом обращении в DIFSUB надо
обязательно задавать JSTART =0, т. к. при первом обращении
определяются некоторые параметры, которые при других
обращениях уже не меняются.
+ 1 – провести следующий шаг, причём начальной точкой для него
является конечная точка предыдущего.
После выхода из DIFSUB величина JSTART равна текущему порядку
метода.
• MAXDER – максимальный порядок метода; задаётся пользователем.
Он не должен превышать 6 для метода Гира (MF = 1,2) и 7 для метода
Адамса (MF =0);
• PW(N,N) – вспомогательный массив содержащий не менее N·N ячеек;
∂f
используется программой для вычисления матрицы i и для
∂x j

8
∂f i
хранения матрицы [ I + HA(1) ].
∂x j

§ 3. Моделирование скважин (точечных источников).

Задача об установившейся плановой напорной фильтрации жидкости к


скважине из однородного ограниченного пласта, как известно [53], сводится к
нахождению решения уравнения Лапласа в двусвязной области, внешней
границей которой является контур области фильтрации, а внутренняя границей
– контур скважины [54].
В связи с тем, что размеры области фильтрации много больше размеров
скважины, при решении указанной задачи методом сеток нецелесообразно
аппроксимировать область фильтрации сеточной областью так, чтобы учесть
размеры и форму скважины, ибо для этого потребовалось бы чрезвычайно
большое число узлов сетки. Поэтому при решении таких задач, когда на контуре
скважины задан расход ( граничное условие 2 – го рода), обычно пренебрегают
размерами скважины, считая её точечным источником с мощностью, равной
расходу реальной скважины, и уже эту задачу аппроксимируют на сетке. При
этом возникают вопросы о способе аппроксимации точечного источника на
сетке и о близости сеточного решения к решению предельной задачи.
Последний вопрос не является тривиальным из-за наличия логарифмической
особенности у решения, что не позволяет использовать для оценки точности
общие результаты теории разностных схем. Ситуация существенно
осложняется, если на контуре скважины задано давление (граничное условие 1 –
го рода). В этом случае контур скважины стягивать в точку нельзя [55].
Если при решении указанно задачи методом сеток скважину всё же
считать точечной, то возникает необходимость построения специальных
аппроксимаций уравнения в окрестности точки-скважины. Вопрос о близости
сеточного решения к решению исходной задачи не менее сложен, чем в первой
задаче. Аналогичные обстоятельства имеют место и в случае несовершенной
скважины, то есть когда на контуре скважины задано граничное условие 3-го
рода [56-58].
Из работ иностранных авторов отметим известную работу Письмена
1978 года [59], а также более позднюю работу других авторов [60].
В настоящей работе применяется другая методика моделирования
скважин. Итак, пусть в рассматриваемой области G, φn - полная и
нормированная система собственных функций оператора L(w), тогда


δ ( x0 , x) = ∑ ϕ n ( x)ϕ n ( x0 ).
n =1

9
Сходимость этого ряда понимается как слабая. Таким образом, точеный
источник замещается источниками и стоками в узлах сетки. Результаты
численных расчётов показали хорошие результаты для одиночной скважины
(см. ниже).

§4. Технология программирования.

При написании рабочей программы выдерживалась определённая


технология программирования. [61-62]. Коротко можно сказать, что разработка
программы начинается сверху-вниз, с программы макета. Данные разбиты на
COMMON – блоки и подставляются в подпрограммы при помощи оператор
INCLUDE. Подпрограммы, как правило, параметров не имеют, что позволяет
легко менять модули. Подробно программа описана ниже. Сейчас рассмотрим
COMMON – блоки.

10
4.1. COMMON – блоки.

Данные разбиты на 11 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
Переменные для вычисления собственных значений.

4.2. Текст программы.

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

C ЗАПРОС ВРЕМЕНИ ЗАКАЗАННОГО ДЛЯ РАБОТЫ ПРОГРАММЫ (СЕК)


C ?
C ПЕЧАТЬ ДАТЫ (ГОД, МЕСЯЦ, ДЕНЬ) И ВРЕМЕНИ (ЧАСЫ, МИНУТЫ,
СЕКУНДЫ, СОТЫЕ ДОЛИ СЕКУНДЫ )
CALL GETDAT (YEAR,MONTH,DAY)
CALL MESAGE (' ГОД МЕСЯЦ ДЕНЬ',21)
PRINT *, YEAR,MONTH,DAY
CALL GETTIM (HOUR,MINUTE,SECOND,SEC100)
CALL MESAGE (' ЧАС МИНУТА СЕКУНДА 100 ДОЛЯ СЕК',36)
PRINT *, HOUR,MINUTE,SECOND,SEC100
17
C НАЧАЛЬНАЯ УСТАНОВКА СТАНДАРТНЫХ COMMON-БЛОКОВ
CALL BASIC
OPEN (NOUT,FILE='NOUT')
OPEN (NDIARY,FILE='NDIARY')
OPEN (NIN,FILE='NIN')
OPEN
(NONLIN,FORM='UNFORMATTED',DISPOSE='SAVE',FILE='NONLIN')
WRITE (NOUT,*) 'Система Olympus Pentium(R) 4 CPU 3.00GHz'
WRITE (*,FORMI) HOUR
EPS=1.43
WRITE (*,FORMR) EPS
C WRITE (*,*) HOUR
C WRITE (*,*) FORMI
C УПРАВЛЕНИЕ РАСЧЁТОМ
CALL COTROL
C
END
C
C/ MODULE C0S1
C
SUBROUTINE BASIC
C
C 0.1 НАЧАЛЬНАЯ УСТАНОВКА СТАНДАРТНЫХ COMMON БЛОКОВ
C
C ВЕРСИЯ 07/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
INCLUDE 'COMADD.FOR'
C--------------------------------------------------------------------
DATA ICLASS, ISUB /0,1/
C
C--------------------------------------------------------------------
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
18
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
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

CALL EXPERT (ICLASS,ISUB,1)


RETURN
END
C
C/ MODULE C2S6
C
DOUBLE PRECISION FUNCTION W(P)
C
C 2.6 ВЫЧИСЛЕНИЕ W
C
C ВЕРСИЯ 1 21/МАР/04 СДА ИПМех РАН
C
INCLUDE 'COMBAS.FOR'
INCLUDE 'COMDDP.FOR'
C
INCLUDE 'COMPHY.FOR'
INCLUDE 'COMCON.FOR'
DOUBLE PRECISION P,ZCON
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,6/
C
C--------------------------------------------------------------------
C
ZCON=ARO/VIST(1)/APD
W=ZCON*P*P
W=XLENG**2*W/APD/XTIME
RETURN
END
C
C
C/ MODULE C2S7
C
SUBROUTINE DIFFUN (T,Y,DY)
C
C 2.7 ПРАВАЯ ЧАСТЬ ДЛЯ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
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'
INCLUDE 'COMSPT.FOR'
36
C--------------------------------------------------------------------
DATA ICLASS, ISUB /2,7/
C
C--------------------------------------------------------------------
C
DOUBLE PRECISION T,Y(1),DY(1),ZC,ZP,W
DO 100 J=1,NP
ZC=0.D0
C ZP=+1.D0/HPOR(J)
ZP=APD/ARO/HPOR(J)
DO 101 JL=1,NP
101 ZC=ZC+H(J+(JL-1)*NP)*W(Y(1+(JL-1)*8))*ZP
100 DY(J)=ZC-(Q(1)/SREGION)*WI(J)*ZP/CMOD2(J)
C 100 DY(J)=ZC+(Q(1)/SREGION)*WI(J)*ZP/CMOD2(J)

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

WRITE (NOUT,*) ' C2.2 COMREG '


C
CALL DVAR (' SREGION = ',SREGION)
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 DVAR (' EPS = ',EPS )
CALL DVAR (' HS = ',HS )
CALL DVAR (' HSMAX = ',HSMAX )
CALL DVAR (' HSMIN = ',HSMIN )
CALL DVAR (' TIME = ',TIME )
CALL IVAR (' NF = ',NF )
CALL IVAR (' NFLAG = ',NFLAG )
CALL IVAR (' NJMATR = ',NJMATR)
CALL IVAR (' NP = ',NP )
CALL IVAR (' NR = ',NR )
CALL IVAR (' NSTART = ',NSTART)
CALL IVAR (' NSUB = ',NSUB )
IF(KBLOCK.NE.0) RETURN
C
CL 3.2 COMSPT
C
320 CONTINUE
C
WRITE (NOUT,*) ' C3.3 COMSPT '
C
CALL IVAR (' NQ = ',NQ )
CALL IVAR (' NS = ',NS )

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

WRITE (NOUT,*) ' C4.2 COMADV '


C
CALL RVAR (' TIMMAX = ',TIMMAX)
CALL IVAR (' MAXDER = ',MAXDER)
CALL IVAR (' MF = ',MF )
IF(KBLOCK.NE.0) RETURN
C
CL 4.3 КОНСТАНТЫ
C
WRITE (NOUT,*) ' C4.3 COMCON '
C
CALL RVAR (' APD = ',APD )
CALL RVAR (' ARO = ',ARO )
CALL RVAR (' ATEMP = ',ATEMP )
CALL RVAR (' TEMP = ',TEMP )
CALL IVAR (' MAXNF = ',MAXNF )
CALL IVAR (' MAXNP = ',MAXNP )
CALL IVAR (' MAXNR = ',MAXNR )
CALL IVAR (' MAXNQ = ',MAXNQ )
IF(KGROUP.NE.0) RETURN
C
C--------------------------------------------------------------------
CL 5. ВВОД/ВЫВОД И ДИАГНОСТИКА
C
500 CONTINUE
C
IF(KGROUP.NE.0) GO TO 510
GO TO(510,520) , KBLOCK
C
CL 5.1 НЕСТАНДАРТНАЯ ДИАГНОСТИКА
C
510 CONTINUE
C
WRITE (NOUT,*) ' C5.1 COMDGN '
C
CALL LVAR (' NMREPT = ',NMREPT)
CALL LVAR (' N20401 = ',N20401)
CALL LVAR (' N20402 = ',N20402)
IF(KGROUP.NE.0) RETURN
C
CL 5.2 XXXXXXXXXXXXXXXXXX
C
520 CONTINUE
C
WRITE (NOUT,*) ' C5.2 COM '
C
IF(KGROUP.NE.0) RETURN
C
RETURN
46
END
C
C/ MODULE C5S3
C
SUBROUTINE ARRAYS (KGROUP,KBLOCK)
C
C 5.2 ПЕЧАТЬ COMMON МАССИВОВ
C
C ВЕРСИЯ 1 30/ЯНВ/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 ВЫБОР ГРУППЫ ДЛЯ ПЕЧАТИ
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 HARRAY(' LABEL1 = ',LABEL1,48)
CALL HARRAY(' LABEL2 = ',LABEL2,48)
CALL HARRAY(' LABEL3 = ',LABEL3,48)
CALL HARRAY(' LABEL4 = ',LABEL4,48)
CALL HARRAY(' LABEL5 = ',LABEL5,48)
CALL HARRAY(' LABEL6 = ',LABEL6,48)
CALL HARRAY(' LABEL7 = ',LABEL7,48)
CALL HARRAY(' LABEL8 = ',LABEL8,48)
IF(KBLOCK.NE.0) RETURN
C
CL 1.9 ДИАГНОСТИКА И РАЗВИТИЕ ПРОГРАММЫ
C
190 CONTINUE
C
WRITE (NOUT,*) ' C1.9 COMDDP '
C
CALL IARRAY(' NADUMP = ',NADUMP,20)
CALL IARRAY(' NPDUMP = ',NPDUMP,20)
CALL IARRAY(' NVDUMP = ',NVDUMP,20)
47
CALL IARRAY(' NLHEAD = ',NLHEAD,9 )
CALL LARRAY(' NLOMT1 = ',NLOMT1,50)
CALL LARRAY(' NLOMT2 = ',NLOMT2,50)
CALL LARRAY(' NLOMT3 = ',NLOMT3,50)

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

WRITE (NOUT,*) ' C4.2 COMADV '


C
CL НЕТ МАССИВОВ
C
IF(KBLOCK.NE.0) RETURN
C
CL 4.3 КОНСТАНТЫ
C
430 CONTINUE
C
CALL RARRAY(' CHARD = ',CHARD ,2)
CALL RARRAY(' PZD = ',PZD ,2)
CALL RARRAY(' VIST = ',VIST ,2)

WRITE (NOUT,*) ' C4.3 COMCON '


C
IF(KGROUP.NE.0) RETURN
C
C--------------------------------------------------------------------
CL 5. ВВОД/ВЫВОД И ДИАГНОСТИКА
C
500 CONTINUE
C
IF(KGROUP.NE.0) GO TO 510
GO TO(510,520) , KBLOCK
49
C
CL 5.1 НЕСТАНДАРТНАЯ ДИАГНОСТИКА
C
510 CONTINUE
C
WRITE (NOUT,*) ' C5.1 COMDGN '
C
IF(KGROUP.NE.0) RETURN
C
CL 5.2 XXXXXXXXXXXXXXXXXX
C
520 CONTINUE
C
WRITE (NOUT,*) ' C5.2 COM '
C
IF(KGROUP.NE.0) RETURN
C
RETURN
END

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

4.3. Пояснения к программе.

Первая строка программы $objcomment lib:"AMALI.lib" – вызов


библиотеки AMALI.lib, третья строка программ INCLUDE 'TextTransfer.f90' –
модуль печати русских букв в DOS – окне [63].

После трансляции программа спрашивает:

Счёт или считывание матрицы (Y/N).

Y – Вычисление матрицы дискретной задачи. Организован счёт с


продолжением.
N – Считывание ранее вычисленной матрицы с диска.

Результаты промежуточных вычислений программа записывает в файл


NOUT. В файл EIGFUN.DAT записываются данные для TECPLOT (по каналу
10).

4.4. Результаты расчётов.

Данные для программы установлены в программ PRESET.


Рассматривалась одиночная скважина в центре пласта в виде 12-ти лепестковой
эпитрохоиды и в точке (0.5, 0.) в круге (после построения конформного
отображения). Дебит 5·105 кубометров в сутки. Остальные параметры см.
PRESET. Результаты представлены на FIG 1 и FIG 2.
Проверялось свойство точечного источника: 1). Интеграл по площади; 2).
Свёртка с пробной функцией f = r3cosφsinφ+1.
Результаты экспериментов: 1.000; 1.000 для скважины в центре и 1.000;
0.8386 для смещённой скважины. Таким образом, можно констатировать, что
для одиночной скважины результаты моделирования удовлетворительные.

56
Выводы.

Программа DIFSUB мельчит шаг по времени, и в следующей версии


программы будет заменена на оригинальную программу. Исследования по
моделированию скважин будут продолжены.

Заключение.

По поводу получения полных версий описанных программ обращайтесь


по электронному адресу: algazinsd@mail.ru или на адрес Института проблем
механики РАН, 119526, Москва, проспект Вернадского д.101, к.1.

Литература.

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


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

2. Алгазин С. Д. О вычислении собственных значений уравнения


переноса // ПМТФ, т. 45, № 46, 2004 г., с. 107-113.

3. Алгазин С. Д. Численные алгоритмы классической матфизики. XI. О


вычислении собственных значений уравнения переноса // ИПМех
РАН, препринт № 801, 2006 г., 16 с.

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


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

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


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

6. Численные методы решения задач многофазной несжимаемой


жидкости. ВЦ СО АН СССР, 1975, 318 стр., 1972, 227 стр.

7. Чарный И. А. Подземная гидродинамика. Гостехиздат, 1967.

8. Эфрос Д. А. Исследование фильтрации неоднородных систем.


Гостехиздат, Л., 1963.

9. Полубаринова – Кочина П. Я. Теория движения грунтовых вод. М.,


ГИТЛ, 1952.

10. Аравин В. И., Нумеров С. Н. Теория движения жидкостей и газов в


недеформируемой пористой среде. М., ГИТЛ, 1953.

57
11. Коллинз Р. Течение жидкостей через пористые материалы. М., Мир,
1964.

12. Саульев В. К. Интегрирование уравнений параболического типа


методом сеток. М., Физматгиз, 1960.

13. Самарский А. А. // ЖВМ и МФ, т.3, № 1, 1963; т.2, №4, 1961; т.2, 34,
1962.

14. Агапов, Колосов. Численные методы решения системы многомерных


нелинейных уравнений диффузионного типа. // ИКИ АН СССР,
препринт № 428, 1978.

15. Повещенко Ю. А., Попов Ю. П. Пакет программ для решения


тепловых задач // ИПМ АН СССР, препринт № 65, 1978.

16. Кричлоу Генри Б. Современная разработка нефтяных месторождений


– проблемы моделирования. Москва, Недра, 1979 г.

17. Ширковский А. И. Разработка и эксплуатация газовых и


газоконденсатных месторождений. Москва, Недра, 1979.

18. Лейбензон Л. С. Подземная гидродинамика. Собр. Трудов, т. II, Изд-


во АН СССР, 1953, 544 с.

19. Маскет М. Течение однородных жидкостей в пористой реде. Перевод


с англ., М., Гостехиздат, 1949, 628 с.

20. Мирзаджанзаде А. Х., Гусейн-Заде М. А. Решение задач


нефтегазопромысловой механики. М., Недра, 1971, 199 с.

21. Баренблат Г. И., Ентов В. М., Рыжик В. М. Теория неустановившейся


фильтрации жидкости и газа. М., Недра, 1972, 218 с.

22. Закиров С. Н., Лапук Б. Б. Проектирование и разработка газовых


месторождений. М., Недра, 1974.

23. Шейдегер А. Е. Физика течения жидкости через пористые среды.


Гостехиздат, 1960.

24. Минский Е. М. Статистическое обоснование уравнений


фильтрационного движения// ДАН, т. 118, № 2, 1958.

25. Бариковецкий П. Г., Дорфман Е. Я. Нелинейные волны в процессах


двухфазной трёхкомпонентной фильтрации // Докл. АН СССР, 1982,
т. 264, № 1, с. 60 – 65.

58
26. Веригин Н. Н., Саркисян В. С. О фильтрации двух жидкостей с
разной плотностью и вязкостью при закачке в галерею с постоянным
расходом // Докл. АН СССР, 1974, т. 218, № 3, с. 536 – 539.

27. Веригин Н. Н., Саркисян В. С. О фильтрации двух неоднородных


жидкостей при упругом режиме. // Докл. АН СССР, 1975, т. 221, № 2,
с. 305 – 308.

28. Веригин Н. Н., Саркисян В. С. , Шибанов А. В. Об определении


границы раздела двух несмешивающихся жидкостей в пористой
среде. // Изв. АН СССР. Сер. Механика жидкости и газа, 1973, № 6, с.
155 – 163.

29. Данилов В. Л., Кац Р. М. Гидродинамические расчёты взаимного


вытеснения жидкости в пористой среде. М.: Недра, 1980, 264 с.

30. Численные методы решения задач фильтрации многофазной


несжимаемой жидкости // ВЦ СО АН СССР, Новосибирск, 1977, с. 87
– 96.

31. Коздоба Л. А. Решение нелинейных задач теплопроводности. Киев:


Наукова думка, 1976, 136 с.

32. Лебедева Л. Н., Филиппов М. В. О движении границы раздела 2-х


жидкостей с образованием зоны двухфазного течения. // Изв. АН
СССР. Сер. механика жидкости и газа, 1981, № 6, с. 78 – 83.

33. Нигматулин Р. И. Математическое моделирование процесса


мицелярно-полимерного заводнения // Докл. АН СССР, 1980, т. 255,
№ 1, с. 52 – 56.

34. Розенберг М. Д., Киндин С. А. Многофазная многокомпонентная


фильтрация при добыче нефти и газа. М., Недра, 1976, 335 с.

35. Рубинштейн Л. И. Проблема Стефана. Рига, 1967, 457 с.

36. Середницкий Л. М. О перемешивании взаиморастворимых жидкостей


в пористой среде. // Прикл. Мех., 1967, т. 3, вып. 4, с. 103 – 110.

37. Теплов Ю. А. О перемещении водо-нефтяного контакта в


неоднородном пласте. // Изв. АН СССР. Сер. Механика жидкости и
газа, 1967, № 5, с. 160 – 164.

38. Токарева И. А., Цынкова О. Э. Модель 3-х фазной фильтрации при


лицемерном заводнении нефтяных пластов. // Изв. АН СССР. Сер.
Механика жидкости и газа, 1981, № 5, с. 72 – 80.

39. Сеттари Э., Азис Х. Математическое моделирование пластовых


систем, М., Недра, 1982.
59
40. Яненко Н. Н., Сучков В. А., Погодин Ю. Я. О разностном решении
уравнения теплопроводности в криволинейных координатах // ДАН
СССР, 128, 5(1959).

41. Фёдорова О. А. Вариационно-разностная схема для однородного


уравнения диффузии. // Мат. заметки, 17, 6(1975).

42. Яненко Н. Н., Бояринцев Ю. Е.. О сходимости разностных схем для


уравнения теплопроводности с переменными коэффициентами //
ДАН СССР, 139, 6(1961).

43. Булев Н. И. Численный метод решения двумерных и трёхмерных


уравнений диффузии // Мат. сб., 51, 2(1960).

44. Софронов И. Д. Разностная схема с диагональными направлениями


прогонок для решения уравнения теплопроводности // ЖВМ и МФ, 5,
2(1965).

45. Андреев В. Б. О разностных схемах с расщепляющим оператором для


общих p-мерных параболических уравнений второго порядка со
смешанными производными // ЖВМ и МФ, 7, 2(1967).

46. Ильин В. П. О расщеплении разностных уравнений параболического


и эллиптического типов // Сиб. Мат. журнал, VI, 1(1965).

47. Самарский А. А. Об одном экономичном разностном методе решения


многомерного параболического уравнения в произвольной областии //
ЖВМ и МФ, 2 5(1962).

48. Яненко Н. Н. Об одном разностном методе счёта многомерного


уравнения теплопроводности // ДАН СССР, 125, 6(1959)

49. Яненко Н. Н. О неявных разностных методах счёта многомерного


уравнения теплопроводности // Изв. Вузов, Математика, 4(23), (1961).

50. Яненко Н. Н. О сходимости метода расщепления для уравнения


теплопроводности с переменными коэффициентами // ЖВМ и МФ, 2,
5(1962).

51. Gear C. V. Algoritm 407. DIFSUB for Solution of Ordinary Differential


Equations [D2] // Communications of the ACM. March 1971, Volume 14,
Number 3, pp. 185 – 190.

52. Nordsiek A. On Numerical Integration of Ordinary Differential Equations


// Math. Comp., 16, 24, 1962.

53. Чарный И. А. Подземная гидрогазодинамика, М., Гостоптехиздат,


1963.
60
54. Андреев В. Б., Кряквина С. А. Сеточные аппроксимации задачи о
скважине // Численные методы решения задач многофазной
несжимаемой жидкости. СО АН СССР, Выч. Центр, Новосибирск,
1975, стр. 51.

55. Самарский А. А. О влиянии закрепления на собственные частоты


замкнутых объёмов // ДАН СССР, т. 63, №6, 1948, с. 631 – 638.

56. Андреев В. Б., Кряквина С. А. О функции источника сеточного


оператора Лапласа // ЖВМ и МФ, т. 18, №2, 1972, с. 364 – 373.

57. Андреев В. Б., Кряквина С. А. О фундаментальном решении


однопараметрического семейства разностных аппроксимаций
оператора Лапласа на плоскости // ЖВМ и МФ, т. 13, № 2, 1973, с.
325-337.

58. Андреев В. Б., Кряквина С. А. Аппроксимация задачи о


несовершенной скважине // Сб. Исследования по теории разностных
схем для эллиптических и параболических уравнений // Изд-во МГУ,
1973.

59. Peaceman, D. W.:”Interpolation jf Well-Block Pressures in numerical


Reservoir Simulation,” SPEJ (June 1978) 183; Trans., AIME, 265.

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. Huges M. H., Roberts K. V. Olympus convection // Comp. Phys. Comm.


29(1983) 15-43.

62. Гайфулин С. А., Карпов В. Я., Мищенко Т. В. САФРА.


Функциональное наполнение. Система OLYMPUS // Препринт
ИПМатем АН СССР, 1980, № 27.

63. Бартеньев О. В. Современный FORTRAN. Москва, Диалог МИФИ,


2000 г., 448 стр.

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

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

XV. Программа АМАЛИЯ – двумерная однофазная фильтрация газа в


пористой среде. Версия 1/Февраль 2007 г.

Подписано к печати 27.02.07. Заказ № 2 - 2007. Тираж 50 экз.


________________________________________________________

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


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

62

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