Данные модели

Главная / Програмная реализация

Содержание:

  • Системы координат, используемые в модели
  • Рассчитываемые в модели параметры и общий алгоритм расчета
  • Размещение данных во время расчета в оперативной памяти компьютера
  • Стандартная структура файлов данных модели
  • Информационная запись файла данных модели
  • Защита от ошибок при трансляции и сборке программы модели
  • Проверки при запуске программы модели на исполнение

Системы координат, используемые в модели

Вся моделируемая область пространства (сфера с центром в центре Земли радиусом 15 земных радиусов, кроме центральной области этой сферы, включающей саму Землю и атмосферу до высоты 80 км) по высоте разделяется на две пересекающихся подобласти, условно называемые «шар» и «трубка». «Шар» занимает область высот от 80 до 526 км над земной поверхностью, «трубка» — от 175 до 100000 км. В каждой из этих подобластей расчет ведется в узлах своей системы координат.

Для «шара» это обычные сферические координаты: высота над поверхностью Земли (h или r), геомагнитные долгота (d) и коширота (t или s). Шаг по долготе в модели принят постоянным, по кошироте сетка может быть произвольной, но симметричной относительно экватора, а по высоте шаг сетки нарастает снизу вверх в геометрической прогрессии.

Для «трубки» это дипольная система координат: V — долгота, L-параметр (в модели обычно используется U-параметр: U=1/L) и Q-параметр. Долготные плоскости узлов сетки «трубки» совпадают с плоскостями сетки «шара». Долгота и L-параметр задают силовую линию дипольного поля, вдоль которой расположены узлы сетки «трубки». Узлы располагаются на фиксированных высотах над поверхностью Земли, совпадающих в области пересечения «шара» и «трубки» с высотами сетки «шара», а выше меняющихся по такому же закону. L-параметры линий координатной сетки однозначно определяются коширотами оснований силовых линий, которые могут задаваться произвольно.

Электрический потенциал вычисляется в основаниях силовых линий сетки «трубки», при этом узлы потенциала автоматически оказывются симметричны относительно экватора.

Число узлов по каждой из этих координат задается в программе следующими переменными:

  • IDT — число узлов сетки по долготе;
  • NH — число узлов сетки «шара» по высоте;
  • ITS — число узлов сетки «шара» по кошироте;
  • NL — число силовых линий сетки трубки;
  • NL2 — число узлов сетки потенциала по кошироте ( NL2 = NL+NL+3 — два основания каждой силовой линии «трубки» + полюса + экватор);
  • NTPL — общее число узлов в каждой долготной плоскости «трубки»;
  • NTSL(NL) — массив количеств узлов на каждой силовой линии «трубки» (NTPL — сумма всех элементов массива NTSL).

Кошироты узлов сетки «шара» и оснований силовых линий сетки «трубки» (узлов потенциала) задаются в программе двумя массивами:

  • TETMS(ITS) — кошироты узлов сетки «шара» в градусах от северного полюса к южному;
  • TETMT(NL2) — кошироты узлов сетки потенциала в градусах от северного полюса к южному.

Закон изменения высот узлов задается на входе модели (в управляющем файле MOD1) шестью параметрами:

  • RMIN — высота нижнего узла сетки «шара» (80 км);
  • RMAX — верхняя граница моделируемой области (14.9 радиусов Земли);
  • DH — нижний шаг по высоте сетки «шара» (3 км);
  • GAMMA — коэффициент прогрессии увеличения шага по высоте (1.1);
  • NH — количество узлов сетки «шара» по высоте (из него определяется верхняя граница «шара») (30);
  • NTR — номер высоты сетки «шара», на которой находятся нижние узлы сетки «трубки» (из него определяется нижняя граница «трубки» — 175 км) (16).
    Во время расчета высоты узлов не вычисляются каждый раз заново, а используется массив:
  • RADS(NH) — высоты узлов сетки «шара» в сантиметрах.

Координаты узлов сетки «трубки» (высоты и кошироты всех узлов одной долготной плоскости) содержатся в специальном массиве PARK(2,NTPL). Порядок размещения данных в нем:

{{{высота узла в см, коширота узла в градусах},цикл по узлам вдоль силовой линии от южного ее конца к северному}цикл по силовым линиям от самой приполярной до самой приэкваториальной}

Переменные и массивы, определяющие используемую сетку координат, задаются в программе в следующих местах:

  • константы IDT, NH, ITS, NL, NTPL, определяющие размерности объявляемых массивов данных — в файле PARAMETR.INC на этапе трансляции программы. Тогда же из заданной NL вычисляется NL2.
  • правила, определяющие массивы TETMS(ITS) и TETMT(NL2) — зависимости шагов сеток по кошироте от кошироты — в специальных подпрограммах-функциях типа REAL*8 DTETS(TET) и DTETS(TET) вызываемых из п/п SETKA, получающих при вызове значение кошироты текущего узла сетки (типа REAL*8) и возвращающих соответствующее ему значение следующего шага по кошироте.
  • параметры RMIN, RMAX, DH, GAMMA, NH, NTR, определяющие высоты узлов сетки и количество узлов по высоте — в управляющем файле MOD1.
  • переменные и массивы RADS(NH), IDT, ITS, NL, NL2, NTSL(NL), NTPL, TETMS(ITS), TETMT(NL2), PARK(2,NTPL) — при запуске программы на исполнение. В п/п SETKA заполняются перечисленные массивы и вычисляются минимально необходимые для расчета в заданнойкоординатной сетке значения величин размерностей массивов, и затем в головной вызывающей программе производится проверка достаточности объявленных массивов. Если они меньше, чем необходимо для работы, исполнение программы прерывается — в оперативной памяти машины зарезервировано слишком мало места для данных. Если объявленные массивы больше, чем необходимо, программа работает правильно: при работе используются вычисленные необходимые размерности массивов, а остальная часть зарезервированного в оперативной памяти места не используется.
  • переменные и массивы IDT, ITS, NH, NL, NL2, NTR, NTSL(NL), NTPL, RADS(NH), TETMS(ITS), TETMT(NL2), RMIN, RMAX, DH, GAMMA, характеризующие координатную сетку, в которой ведется текущий расчет, записываются в основной рабочий файл модели MOD4 на диск в специальную информационную запись. При попытке использовать данные, сохраненные в этом файле, в качестве начальных условий для нового расчета производится проверка совпадения этих параметров из информационной записи с рассчитанными для нового расчета. Несовпадение их означает, что начальные условия были насчитаны в другой сетке и не могут быть использованы. Исполнение программы при этом прерывается. В том же файле MOD4 в отдельном логическом файле сохраняется массив PARK(2,NTPL).

Рассчитываемые в модели параметры и общий алгоритм расчета

Процесс расчетов по модели заключается в численном решении системы дифференциальных и алгебраических уравнений, описывающих состояние моделируемой системы. Представляются в разностном виде и численно решаются трехмерные нестационарные уравнения непрерывности, движения и теплового баланса для нейтральных и заряженных частиц верхней атмосферы Земли, а также уравнение для потенциала электрического поля магнитосферного и динамо происхождения. Система уравнений переписывается в виде:

\frac{d\bar P}{dt}=f(\bar P)

где \bar P — набор рассчитываемых параметров, а t — время, и от заданных начальных условий производится интегрирование по времени. Результатом расчета на каждом временном шаге является глобальное распределение параметров нейтральной атмосферы (концентраций нейтральных компонент, температуры и трехмерной циркуляции нейтрального газа), ионосферы и протоносферы (концентраций заряженных частиц, их температур и скоростей направленного движения) и потенциала электрического поля. Это глобальное распределение параметров представлено в виде набора значений рассчитываемых параметров в каждом узле координатной сетки. В узлах «шара» и «трубки» рассчитываются разные наборы параметров (см.табл.1). Но в системы уравнений «шара» и «трубки» входят, кроме собственных, рассчитываемых в этой части параметров еще и значения параметров, рассчитываемых в другой части модели (соответственно, в «трубке» и «шаре»). Из-за несовпадения координатных сеток эти значения в расчетных узлах не определены, и они специально интерполируются из узлов одной сетки в узлы другой. Общая схема порядка расчетов на шаге интегрирования по времени приведена на рис.1.

Размещение данных во время расчета в оперативной памяти компьютера

Рассчитываемые параметры моделируемой среды во время расчета содержатся в оперативной памяти компьютера в виде массивов. В прежних версиях программы расчет велся по долготным плоскостям, и в оперативной памяти одновременно находились только массивы с рассчитываемыми параметрами в узлах текущей рассчитываемой долготной плоскости (при расчете «шара» еще и двух соседних с ней) — «трехплоскостной» вариант. По окончании расчета плоскости ее итоговое состояние записывалось в файл на диске, а оттуда считывалось исходное состояние для расчета следующей долготной плоскости, и расчет продолжался. Сегодня в оперативной памяти содержатся массивы, описывающие распределение рассчитываемых параметров на всем глобусе, и чтение и запись на диск производятся сразу глобальным массивом. Это уменьшило число обращений к диску и повысило скорость работы программы, но потребовало много больше оперативной памяти.

Одновременно в памяти находятся два состояния моделируемой среды: начало и конец текущего шага по времени. Если же использовать имеющуюся в программе возможность при расчете «шара» делать несколько итераций, то понадобится еще одно состояние: начало текущей итерации. Так как при одной итерации оно совпадает с началом шага по времени, а вероятность использования нескольких итераций мала, сегодня принят следующий вариант: в памяти держится глобальный массив начала текущей итерации (SI) и плоскостной массив начала шага по времени (SN), который на первой итерации просто копируется из SI без обращения к диску, и чтение SN с диска долготными плоскостями требуется только при последующих итерациях.

В сегодняшней версии программы данные в массивах размещаются по точкам, то есть подряд записываются значения всех рассчитываемых параметров в одном узле координатной сетки, затем — значения всех параметров в следующем узле и т.д. Из-за различного количества рассчитываемых параметров и узлов сетки размерности массивов параметров «шара», «трубки», потенциала и интерполированных из «шара» в «трубку» и из «трубки» в «шар» различны. Порядок размещения данных в этих массивах:

  • для массивов значений параметров в узлах сетки «шара»:
    • для массива PAR(KPARS,NH,ITS,IDT) — параметры «шара» и
    • для массива PARI(INS,NH,ITS,IDT) — параметры «трубки», интерполированные в узлы сетки «шара»:{{{{{значение параметра в узле}, цикл по параметрам}, цикл по высотам RADS(NH) вдоль вертикального профиля снизу вверх}, цикл по коширотам TETMS(ITS) от северного полюса до южного}, цикл по долготам от 0 до 345 градусов}.
  • для массивов значений параметров в узлах сетки «трубки»:
    • для массива PAR(KPART,NTPL,IDT) — параметры «трубки» и
    • для массива PARI(INT,NTPL,IDT) — параметры «шара», интерполированные в узлы сетки «трубки»:{{{{{значение параметра в узле}, цикл по параметрам}, цикл по узлам вдоль силовой линии от южного ее конца к северному}, цикл по силовым линиям от самой приполярной до самой приэкваториальной}, цикл по долготам от 0 до 345 градусов}.
  • для массива значений электрического потенциала POTEF(IDT,NL2):{{{значение потенциала в узле}, цикл по долготам от 0 до 345 градусов}, цикл по коширотам TETMT(NL2) от северного полюса до южного}.

Имена массивов параметров и интерполированных параметров в «шаре» и «трубке» совпадают не случайно — на самом деле в обеих частях модели используются одни и те же массивы (участки оперативной памяти), объявляемые при трансляции программы достаточного (наибольшего необходимого) размера для размещения в них и «шаровых», и «трубочных» данных. При этом существуют два варианта использования этих массивов в зависимости от объема имеющейся оперативной памяти компьютера, условно называемые «большой» («глобальный», но этот же термин используется для различения по алгоритму расчетов «трехплоскостного» и «теоретического» вариантов, и там он более точен) и «малый» («8-мегабайтный»).

При расчете «шара» требуется иметь три массива параметров самого «шара» (начало шага по времени, начало текущей итерации и конечное состояние), один массив параметров «трубки» (начальное состояние), интерполированных в узлы сетки «шара», и массив значений электрического потенциала (начальное состояние). Как уже сказано, массив начала шага по времени не глобальный, а плоскостной.

При расчете потенциала требуется иметь массив параметров «шара» (новое его состояние) и массив значений самого потенциала.

При расчете дрейфа требуется иметь два массива параметров «трубки» (начальное и конечное состояние) и массив значений электрического потенциала (новое состояние).

При расчете «трубки» требуется иметь два массива параметров самой «трубки» (начальное и конечное состояние) и один массив параметров «шара» (новое его состояние), интерполированных в узлы сетки «трубки».

Кроме того, при расчетах необходимо иметь массивы, описывающие координатную сетку (см. системы координат), и еще внутри самих расчетных подпрограмм объявляются локальные рабочие массивы. Здесь мы не будем больше говорить о них, а будем понимать под данными только объявляемые вверху глобальные массивы.

Стандартная структура файлов данных модели

Данные модели (глобальные распределения рассчитываемых параметров в узлах сетки и информация о используемой координатной сетке)сохраняются на диске в файлах специальной структуры. Основной рабочий файл модели традиционно носит имя MOD4. Это неформатный (т.е. содержащий данные во внутреннем машинном представлении, а не в виде цифр-символов) файл прямого доступа с естественной для IBM PC длиной записи 4096 байт (целое число кластеров для любого типа магнитных дисков), т.е. 1024 вещественных числа в каждой записи (по 4 байта на вещественное число в Fortran’е). В первой записи этого файла хранится служебная информация о том, какие именно данные и где в нем содержатся, а также о координатной сетке, в которой они насчитаны. Все остальные записи содержат собственно данные модели.

В принципе длина записи может быть произвольной (но не меньше 330 байт — длина необходимой части информационной записи). Эта длина задается параметром MDOR (сегодня =1024) в файле PARAMETR.INC и записывается в одно из полей информационной записи, откуда его читают все программы, работающие с файлом MOD4, и настраиваются для работы именно с такой длиной записи.

Данные записываются в файл MOD4 на диск в виде логических файлов. Каждый логический файл — это содержимое массива данных PARK, PAR или PARI, т.е. мгновенное глобальное распределение параметров «шара» или «трубки» в узлах своей собственной сетки или интерполированных, или же координаты узлов сетки «трубки». Далее эти глобальные распределения называются также наборами данных. Данные записываются на диск в том же порядке, как они расположены в ОП. После данных к каждому логическому файлу (кроме файлов с координатами узлов «сетки» и интерполированными параметрами «шар»->»трубка») добавляется специальная метка, в которую записывается дата и время UT, к которому относится это распределение параметров, а также параметры солнечной активности: Kp-индекс и F10.7. На диске каждый логический файл начинаетя с начала новой записи в файле MOD4 и занимает группу подряд идущих записей. В последней записи может остаться неиспользуемый «хвост».

Всего в файле MOD4 содержится (см.табл.3) в сегодняшней версии программы 12 логических файлов, имеющих следующие логические номера: по два глобальных распределения параметров «шара» и «трубки», относящихся к моментам времени: начало предыдущего шага по DTS (11 и 12 л.ф.) и начало текущего шага по DTS (5 и 6 л.ф.); по одному логическому файлу для записи результата расчета «шара» и «трубки» на текущем шаге по DTS (10 и 14 л.ф.), один рабочий файл для записи распределений параметров «шара» после промежуточных итераций при нескольких итерациях по «шару» (9 л.ф.) или «трубки» в промежуточные моменты времени при нескольких шагах по DTT внутри одного шага по DTS (13 л.ф.), два логических файла с глобальными распределениями электрического потенциала: на начало текущего шага по DTS (15 л.ф.) и новое рассчитанное состояние (4 л.ф.); по одному логическому файлу для записи интерполированных параметров «трубка»->»шар» (7 л.ф.) и «шар»->»трубка» (8 л.ф.), и наконец один файл с координатами узлов сетки «трубки» (3 л.ф.).

Логические номера характеризуют роль набора данных, записанного в логическом файле, в процессе расчета, и по ходу расчета могут меняться: рассчитываемое на данном шаге по DTS распределение параметров «шара» (10 л.ф.) на следующем шаге станет начальным (5 л.ф.), а еще через шаг предыдущим (11 л.ф.). Чтобы избежать при этом физического перемещения данных в файле на диске, применяется специальный механизм указателей, подобный описанному в п.1.4.3.1. Он работает следующим образом.

При создании файла MOD4 (п/п FORMFL) в нем выделяются места для размещения всех описанных логических файлов. Эти места также будем называть логическими файлами. Каждому такому месту присваивается «физический» номер. Физический номер жестко связан с определенным участком (последовательно расположенными записями) в файле MOD4. Всего создается в сегодняшней версии программы:

  • 3 логических файла (5-й, 9-й, 11-й) «шарового» размера ((KPARS*NH*ITS*IDT+6)/MDOR), округленное вверх до целого;
  • 3 логических файла (6-й, 13-й, 12-й) «трубочного» размера ((KPART*NTPL*IDT+6)/MDOR), округленное вверх до целого;
  • 1 логический файл (14-й) наибольшего из «трубочного» и «шарового» размера; — 2 логических файла (15-й, 4-й) «потенциального» размера ((IDT*NL2+6)/MDOR), округленное вверх до целого; — 1 логический файл (7-й) «трубка»->»шар» размера ((INS*NH*ITS*IDT+6)/MDOR), округленное вверх до целого;
  • 1 логический файл (8-й) «шар»->»трубка» размера ((INT*NTPL*IDT)/MDOR), округленное вверх до целого;
  • 1 логический файл (3-й) массива координат узлов сетки «трубки» размера ((2*NTPL)/MDOR), округленное вверх до целого.

В скобках указаны физические номера логических файлов. Размеры всех файлов приведены в «вещественных числах» (т.е. для получения размера в байтах их нужно умножить на 4).

Затем создается таблица соответствия между физическими и логическими номерами. Ее первоначальный вид приведен в табл.4.

Как можно видеть, логические номера могут принимать любые значения от 1 до 17, а физические могут иметь лишь те значения, для которых в файле MOD4 на диске действительно созданы логические файлы. Часть логических номеров не имеет соответствующих физических — там стоят 0. В программе эта таблица реализована в виде COMMON-блока FLSTAT, в котором размещается целочисленный массив NF(17).

Во многих подпрограммах элементы этого массива объявлены отдельными целыми переменными-указателями на логические файлы, имена важнейших из них приведены в табл.3. Индексы (номера элементов массива) являются логическими номерами логических файлов, т.е. показывают, какую роль этот набор данных сейчас играет в расчете, а значения соответствующих элементов массива являются физическими номерами, т.е. показывают, где в файле MOD4 записан этот набор данных. При изменении роли набора данных в расчете его физический номер переносится в другой элемент массива-таблицы. Копия этой таблицы хранится в информационной записи файла MOD4 и используется как оглавление его любыми программами, обращающимися к данным.

При работе программы модели любое обращение к файлу данных на диске производится через эту таблицу: если нужно прочитать начальные условия, они читаются из логических файлов с физическими номерами из переменных NFSN (или, что то же самое, NF(5)) для «шара» (набор SN), NFTN (NF(6)) для «трубки» (набор TN) и NFPN (NF(15)) для потенциала (набор PN), результаты расчета записываются в логические файлы с физическими номерами из переменных NFSS (NF(10)) для «шара» (набор SS), NFTS (NF(14)) для «трубки» (набор TS) и NFPS (NF(4)) для потенциала (набор PS), и т.п.

Физические номера логических файлов однозначно связаны с определенными непрерывными участками файла MOD4, но порядок размещения этих участков может быть произвольным. Сейчас реально порядок размещения логических файлов в MOD4 следующий: 3, 6, 12, 13, 14, 5, 9, 11, 8, 4, 15, 7. Соответствие между физическим номером логического файла и номерами относящихся к нему записей в MOD4 устанавливается через еще два целочисленных массива: KDU(20) и KDF(20). Элементы массива KDU показывают, сколько записей от начала MOD4 нужно пропустить до начала соответствующего логического файла, а элементы массива KDF — длину в записях соответствующего логического файла (т.е. i-й логический файл занимает в файле MOD4 записи с (KDU(i)+1)-й по (KDU(i)+KDF(i))-ю). Если в файле MOD4 нет логических файлов с каки ми-то физическими номерами, то соответствующие элементы массивов KDU и KDF равны 0. Копии этих массивов также находятся в информационной записи MOD4.

Описанная структура файла данных MOD4: информационная запись с оглавлением и информацией о сетке и логические файлы – является стандартной и используется как самой расчетной программой модели, так и программами обработки и вывода результатов расчетов. При этом есть возможность создавать и использовать файлы неполного состава, включающие только часть логических файлов, например, только наборы данных «шара» и «трубки», относящиеся к одному какому-то моменту времени. В таких файлах увеличивается количество нулей в массивах NF, KDU и KDF. Непосредственно использовать его для ведения расчета в качестве основного рабочего файла нельзя, но все программы обработки результатов работают с ним так же, как с MOD4, а размер такого неполного файла в несколько раз меньше. Обычно они создаются для сохранения наборов данных для какого-то момента, чтобы потом использовать их в качестве начальных условий в расчете или чтобы освободить MOD4 для проведения другого расчета, сохранив для позднейшей обработки результаты текущего. Для создания таких файлов (извлечения из MOD4 или любого другого файла данных стандартной структуры логических файлов и создания из них отдельного физического файла стандартной структуры) в пакете обслуживания модели имеется специальная программа ZFL56.EXE. Другие программы этого пакета позволяют копировать логические файлы из одного физического в другой уже существующий (программа COPYF.EXE), сравнивать логические файлы между собой поэлементно с заданной точностью (программа FL1.EXE) и т.п.

Информационная запись файла данных модели

Первая запись в файле MOD4 (и любом другом файле данных модели стандартной структуры) содержит информацию о том, какие именно данные и где размещены в этом файле. Как и все остальные записи, она имеет длину 4 кбайта и заполняется массивом из 1024 вещественных чисел. Информационная запись (ее 1024 элемента) содержит следующую информацию:

1 — 77 элементы — оглавление файла MOD4:

 1 - 17 элементы - таблица распределения логических файлов по ролям в расчете 
                   (массив NF(17) - см.п.1.4);
 18 - 37 элементы - строка (80 байт-букв) с текстом задания на счет 
                    (задается в файле MOD1 - см.п.1.2);
 38 - 57 элементы - массив KDF(20) (см.п.1.4);
 58 - 77 элементы - массив KDU(20) (см.п.1.4).

78 — 81 элементы — количество моделируемых параметров:

 78 элемент - KPART - число рассчитываемых параметров "трубки";
 79 элемент - KPARS - число рассчитываемых параметров "шара";
 80 элемент - INT - число параметров "шара", интерполируемых в узлы сетки "трубки";
 81 элемент - INS - число параметров "трубки", интерполируемых в узлы сетки "шара".

82 — 83 элементы — физические характеристики файла MOD4:

 82 элемент - MDOR - длина записи в файле MOD4 (в количестве вещественных чисел в одной записи);
 83 элемент - NDF - общее количество записей в файле MOD4.

84 — 93 элементы — характеристики используемой сетки координат:

 84 элемент - DDOLGT - шаг сетки по долготе;
 88 элемент - RMIN - высота нижнего узла сетки "шара"  (80 км);
 89 элемент - DH - нижний шаг по высоте сетки "шара" (3 км);
 90 элемент - NH - количество узлов сетки "шара" по высоте 
    (из него определяется верхняя граница "шара") (30);
 91 элемент - GAMMA - коэффициент прогрессии увеличения шага по высоте (1.1);
 92 элемент - NTR - номер высоты сетки "шара", на которой находятся 
    нижние узлы сетки "трубки" (из него определяется нижняя граница 
    "трубки" - 175 км) (16);
 93 элемент - RMAXT - верхняя граница моделируемой области (14.9 радиусов Земли);

96 — 99 и 104, 105, 107,108 элементы — координаты меток времени в логических файлах:

 96 элемент - NZAPT - номер записи от начала логических файлов "трубки", 
    в которой находится метка времени;
 97 элемент - NZAPS - номер записи от начала логических файлов "шара", 
    в которой находится метка времени;
 98 элемент - NADRT  - номер элемента в записи NZAPT, с которого в логических файлах "трубки" 
    начинается метка времени;
 99 элемент - NADRS  - номер элемента в записи NZAPS, с которого в логических файлах "шара" 
    начинается метка времени.

100 — 103 и 106 элементы — размерности массивов данных, связанные с используемой сеткой координат:

 100 элемент - NL - количество силовых линий сетки трубки;
 101 элемент - NTPL*2 - размерность массива PARK - координат узлов сетки "трубки";
 102 элемент - NTPL*INT - размерность массива PARI - интерполированных параметров "шар"->"трубка";
 103 элемент - NTPL*KPART - размерность массива PAR – параметров "трубки".
 104 элемент - NZAPP - номер записи от начала логических файлов потенциала, в которой 
     находится метка времени.
 105 элемент - NADRP  - номер элемента в записи NZAPP, с которого логических файлах 
     потенциала начинается метка времени.
 106 элемент - ITS - количество узлов сетки "шара" по кошироте.
 107 элемент - NZAPI - номер записи от начала логических файлов интерполированных параметров 
     "трубка"->"шар", в которой находится метка времени.
 108 элемент - NADRI  - номер элемента в записи NZAPI, с которого в логических файлах 
     интерполированных параметров "трубка"->"шар" начинается метка времени.

111 — 200 элементы — область, отведенная для записи массива NTSL(NL) — количество узлов на каждой силовой линии сетки «трубки». Используется не полностью: заполнены лишь NL элементов.

201 — 300 элементы — область, отведенная для записи данных п/п CONTIN для продолжения расчета после прерывания не с начала шага по DTS, а непосредственно с места прерывания. Используется не полностью. Сегодня временно эта возможность отключена.

301 — 400 элементы — массив TETMT(NL2) — кошироты узлов сетки потенциала (основания силовых линий + полюса + экватор). В информационной записи содержится лишь половина этого массива длиной (NL2-3)/2 — см. ниже.

401 — 500 элементы — массив TETMS(ITS) — кошироты узлов сетки «шара». В информационной записи содержится лишь половина этого массива длиной (ITS-3)/2 — см. ниже.

501 — 530 элементы — массив RADS(NH) — высоты узлов сетки «шара».

1021 — 1024 элементы — специальная метка, отличающая файлы данных модели от всех других. В элементах 1021 — 1024 (12 подряд идущих байт) записаны слова ‘GLOBAL MODEL’, а в последнем 1024 элементе записи — номер версии программы модели в виде вещественного числа (сегодня это 94.).
Остальные элементы информационной записи сегодня свободны.

Такая структура информационной записи накладывает ограничения на количество узлов координатных сеток по кошироте и высоте: массивы их должны помещаться в отведенный участок записи. Это ограничение может быть смягчено, если учесть обязательную симметрию сеток относительно экватора: можно записывать только узлы в одном полушарии, причем без полюсов и экватора. В версии программы «94» так и делается. Средний шаг сеток по кошироте может быть при этом уменьшен до 1 градуса.

Заполнение информационной записи производит п/п FORMFL (файл MD1.F). Размеры логических файлов при этом вычисляются вызываемой из головной программы п/п ADRTIM, количество и расположение их задаются в п/п FORMFL, величины и массивы, характеризующие координатную сетку, вычисляются в п/п SETKA (см.п.1.4.1) или задаются в файле MOD1. При создании неполных файлов данных программа копирования ZFL56.EXE из пакета обслуживания модели копирует из файла-источника его информационную запись (ту ее часть, которая описывает используемую сетку координат и другие общие характеристики) и вносит в нее изменения, касающиеся включения только части логических файлов.

Информационная запись файла MOD4 используется:

а) расчетной программой модели:

 - при начале счета для проверки достаточности размера файла MOD4 для работы с 
   заданной координатной сеткой;
 - при начале счета, если в качестве начальных условий предлагается использовать 
   данные, содержащиеся в MOD4, для проверки,    что они заданы в узлах той же координатной сетки;
 - при чтении и записи в файл MOD4 для поиска нужных логических файлов в нем;
 - для записи текущего распределения логических файлов в ходе расчета для 
   продолжения счета после прерывания;

б) программами пакетов обслуживания модели и графического вывода

  результатов - для поиска нужных данных и получения информации о 
  координатной сетке, в которой они насчитаны.

Для чтения информационной записи любого файла данных стандартной структуры в пакете обслуживания модели имеется специальная программа RINF.EXE («Read INFormation record»).

Защита от ошибок при трансляции и сборке программы модели

При трансляции и сборке модели применяются специальные приемы, чтобы обеспечить внутреннюю согласованность размерностей объявляемых в различных подпрограммах массивов.

Объявляемые в программе массивы, размерности которых в принципе могут изменяться, содержат распределения рассчитываемых параметров в узлах выбранной координатной сетки и информацию о самой сетке. Размерности массивов зависят от количества рассчитываемых параметров и выбранной сетки. Чтобы обеспечить согласованность размерностей всех массивов, объявляемых в различных подпрограммах, определяющие эти размерности числа задаются в единственном месте исходного текста программы модели: в специальном файле PARAMETR.INC. Он содержит объявления следующих констант:

 MDOR0 - длина записи в файле MOD4 (в вещ.числах - см.п.1.4.4),
 KPART0 - количество рассчитываемых параметров "трубки",
 KPARS0 - количество рассчитываемых параметров "шара",
 INT0 - количество параметров "шара", интерполируемых в узлы сетки "трубки",
 INS0 - количество параметров "трубки", интерполируемых в узлы сетки "шара",
 NSU0 - размерность массива SOLU (см.п.1.3.1),
 NSE0 - размерность массивов SOLE, SOLEN и SOLET (см.п.1.3.1),
 NL0 - количество силовых линий сетки "трубки",
 NV0 - максимальное количество точек в силовой линии сетки "трубки",
 NTPL0 - общее число узлов в каждой долготной плоскости "трубки",
 IDT0 - количество узлов сетки по долготе,
 ITS0 - количество узлов сетки "шара" по кошироте,
 NH0 - количество узлов сетки "шара" по высоте,
 NL20 - количество узлов сетки потенциала по кошироте ( вычисляется из заданного NL),
 IDPAR0 - количество рассчитываемых параметров в одной долготной плоскости 
          (наибольшее из значений для "шара" и "трубки"),
 IPARI0 - количество интерполируемых параметров в одной долготнойплоскости 
          (наибольшее из значений для интерполяционных массивов "шар"->"трубка" 
           и "трубка"->"шар").

Символ «0» в именах констант добавлен, чтобы иметь возможность при запуске задачи на выполнение изменить значения фактически используемых размерностей (разумеется, не выходя при этом за границы объявленных массивов — об этом см.п.1.5.2). Это позволяет программе, оттранслированной и собранной для работы с большими массивами (более густой координатной сеткой), без перетрансляции производит расчет для более редкой сетки. Имена фактически используемых размерностей в подпрограммах модели — те же, что у соответствующих констант в файле PARAMETR.INC, но без 0 в конце: MDOR, KPART, INS и т.д.

Содержимое файла PARAMETR.INC подставляется как часть исходного текста во все подпрограммы модели, в которых объявляются массивы, размерности которых зависят от количества рассчитываемых параметров и выбранной сетки, а размерности массивов при объявлении указаны не явно, а выражены через константы файла PARAMETR.INC. Эта подстановка осуществляется использованием оператора Fortran’а-77 INCLUDE ‘PARAMETR.INC’. При этом во все места исходного текста, где объявляются такие массивы, подставляются одни и те же значения констант из одного и того же файла PARAMETR.INC, что гарантирует согласованность их размерностей.

Еще одна возможность ошибки заключена в раздельности операций трансляции файлов с исходными текстами и сборки исполняемого модуля из объектных. Если изменить константы в файле PARAMETR.INC, но после этого перетранслировать не все подпрограммы, в которые он включен, то при сборке будут использованы объектные модули с несогласованными размерностями массивов, и полученный исполняемый модуль может работать неправильно (если фактически используемые размерности окажутся больше, чем объявленные в каких-либо подпрограммах). Чтобы избежать этого, нужно внимательно следить за перетрансляцией всех необходимых модулей. Проще всего это достигается полной перетрансляцией всех исходных модулей (пакетным управляющим файлом MODEL.BAT или MODELT.BAT — см.п.1.2). Удобнее пользоваться программой MAKE и ее управляющими файлами MODEL.MAK или MODELT.MAK (см.п.1.2) – в них указано, в какие исходные файлы включен файл PARAMETR.INC, и автоматически перетранслируются только нужные модули, что экономит время.

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

При запуске программы модели на исполнение в зависимости от задания на расчет (ответов с терминала на запросы программы) могут также проводиться различные проверки.

При запуске на исполнение программа в первую очередь открывает в текущем подкаталоге рабочие файлы MOD1 (задание на счет) и MOD4 (данные). Эти файлы обязательно должны уже существовать, иначе фиксируется ошибка открытия и программа прерывается. Для создания файла MOD4 существует специальная программа SETKA.EXE, входящая в пакет обслуживающих программ модели COPYF и подробно описанная там.

Если эти файлы найдены, программа делает запрос: откуда брать начальные условия. Возможные варианты ответа — рассчитать «нулевые», взять с диска, продолжить прерванный счет.

Затем программа читает (п/п WWOD) файл MOD1 с заданием на расчет (см.п.1.3). При чтении проверяется, подключена ли при сборке та же версия MSIS (-77, -83 или -86), которая указана в задании, иначе исполнение программы прерывается с выводом на терминал соответствующего сообщения.

Прочитав из MOD1 сведения о выбранной координатной сетке, программа вычисляет (п/п SETKA) соответствующие ей размеры глобальных массивов данных и проверяет (в головной программе — файл M0.F), достаточны ли для них объявленные при трансляции (файл PARAMETR.INC — см.п.1.5.1) размерности массивов. Если размерности недостаточны, исполнение программы прерывается с выводом на терминал соответствующего сообщения.

Затем управление получает п/п FORMFL. Она читает информационную запись файла MOD4 и сравнивает общий размер этого файла (NDF -83-й элемент его информационной записи), с вычисленным ей «правильным» размером для данного задания. При недостаточном размере файла на диске исполнение программы прерывается с выводом на терминал соответствующего сообщения.

Затем п/п FORMFL проверяет зависящие от сетки координат параметры из информационной записи (ее элементы 58 — 95, массивы NTSL — элементы с 111 по (110 + NL), TETMS — с 401 по (400 + (ITS-3)/2), TETMT — с 301 по (300 + (NL2-3)/2), RADS — с 501 по (500 + NH). При несовпадении прочитанных с диска и вычисленных из задания «правильных» значений исполнение программы прерывается с выводом на терминал соответствующего сообщения и номера различающегося элемента. Затем при расчете «нулевых» начальных условий в файл MOD4 записывается новая рассчитанная «правильная» информационная запись и 3-й лог.файл.

Следующей управление получает п/п NACHUS. Она готовит начальные условия для расчета в соответствии с полученным заданием.

«Нулевые» начальные условия рассчитываются п/п ZEROS и ZEROT (вызываются из п/п NACHUS), результаты записываются в 5 (NFSN) и 6 (NFTN) логические файлы (их логические номера — см.п.1.4.4 — совпадают с физическими), им приписывается время (к лог.файлам дописывается метка времени — см.п.1.4.4), заданное как начальное для расчета в файле MOD1, и затем от них начинается счет.

Если указано брать начальные условия с диска, то старым 5 и 6 (NFSN и NFTN) лог.файлам (здесь и ниже все приводимые номера лог. файлов — логические) приписывается время (дописывается метка времени), заданное как начальное для расчета в файле MOD1. Записанное в этих лог.файлах глобальное распределение рассчитываемых параметров считается относящимся к этому времени (независимо от того, для какого момента оно в действительности рассчитано) и является начальным состоянием моделируемой системы для расчета.

Если указано продолжить прерванный счет, то из старого 5 лог. файла читается метка времени, и это время является начальным для счета. Начальным состоянием системы считается записанное в 5 и 6 лог.файлах.

При продолжении счета проверяются также метки времени из 15 и 7 лог.файлов (для потенциала и интерполированных параметров «трубка»->»шар»). Если это время не совпадает с записанным в 5 лог.файле (а при «нулевых» или «с диска» начальных условиях — всегда), то расчет потенциала или интерполяция проводятся заново из имеющихся начальных условий.

После окончания работы п/п NACHUS управление передается п/п CYCLT, и начинается циклический процесс интегрирования по времени.