Устройство входного файла ========================= Группы и параметры ------------------ Входной файл GAMESS (US) состоит из, так называемых, групп. Начало группы обозначается **ключом**, начинающемся с символа ``$``, например, ``$CONTRL``, ``$BASIS``, ``$DATA`` и т. п. Окончание группы обозначается ключом $END. .. note:: *Если ключ пишется с новой строки, перед ним обязательно должен быть ровно один пробел, иначе он игнорируется.* Большинство групп имеют свободный формат ввода. Внутри группы со свободным форматом ввода содержатся **параметры**, которым с помощью оператора «=» задаются значения. Например, если ``SCFTYP`` – это параметр, а ``RHF`` – придаваемое ему значение, то запись будет выглядеть следующим образом: ``SCFTYP=RHF``. .. note:: *Во входном файле строчные и прописные буквы воспринимаются одинаково* Когда параметр принимает числовое значение, если оно положительное, то знак ``+`` можно опускать, например, записи ``ISPHER=+1`` и ``ISPHER=1`` равносильны. Для записи дробных значений в качестве разделительного знака используется точка, а для записи в экспоненциальной форме – буквы ``D`` или ``E`` (как строчные, так и прописные). При этом, если целая часть числа - ноль, то его можно опустить. Таким образом, записи: ``OPTTOL=1.0d-4``, ``OPTTOL=1.0D-4``, ``OPTTOL=1.0e-4``, ``OPTTOL=1.0E-4``, ``OPTTOL=0.0001`` и ``OPTTOL=.0001`` равносильны. Во входном файле присутствуют все группы со свободным форматом ввода вне зависимости от того, какие из них были введены вручную. Значения параметров при этом устанавливаются по умолчанию. GAMESS (US) позволяет вставлять сколько угодно пробелов и пустых строк в группах со свободным форматов ввода, без изменения смысла записи. Табуляция также допустима, GAMESS (US) её воспринимает подобно широкому пробелу. .. important:: *Ширина входного файла ограничена (80 символов, включая пробелы), так что параметры необходимо своевременно переносить на новую строку.* Специальные разновидности параметров ------------------------------------ Некоторые параметры, иначе именуемые **флаги**, могут иметь только значения ``.TRUE.`` или ``.FALSE.`` Данные значения также имеют сокращённые версии – ``.T.`` и ``.F.``, соответственно. И полная, и сокращённая версии равноправны. Существуют специальные параметры, которым одновременно соответствует несколько значений. Набор данных значений именуется **массивом**. Значения в составе массива записываются через запятую, при этом можно вставлять пробелы между ними или переносить на другую строку (запятая остаётся на предыдущей строке). Массивы состоят из различных **подмассивов**, которые могут записываться в *единой форме*, либо же *раздельно*. При *раздельной* записи для указания того, какой подмассив задаёт параметр, используется число в круглых скобках, записываемое вплотную к самому параметру. Запись числа в скобках для всех массивов и подмассивов обязательна; если массив состоит только из одного подмассива или записывается целиком, то должно быть записано ``(1)``. Например, параметр NPREO задаёт массив, который в «единой форме» записывается следующим образом: ``NPREO(1)=-3,-4,-3,-4`` – здесь -3,-4,-3 и -4 – его значения. А при раздельной записи (в виде подмассивов): ``NPREO(1)=-3 NPREO(2)=-4 NPREO(3)=-3 NPREO(4)=-4``. При записи в *единой* форме все значения записываются через запятую, как в едином массиве. В некоторых случаях, когда значений в подмассиве может быть неограниченно много, применяются *разделяющие значения*, которые отделяют значения одного подмассива от другого. Например, для параметра ``INDAT`` таким значением является ``0``, поэтому массивы разделяются следующим образом: ``INDAT(1)=0,1,2,0,3,4,0``. В некоторых массивах и подмассивах, значения которых могут быть только натуральными, допустимы сокращения следующего вида: ``INDAT(1)=0,1,2,3,4,5,6,0`` можно заменить на ``INDAT(1)=0,1,-6,0``. Если массив состоит всего из одного значения, то запись ``(1)`` вплотную к параметру можно опустить. Во многих случаях запятые в составе массива можно игнорировать, при этом смысл записи не поменяется, однако тогда между значениями обязан быть пробел. Форматированные группы ---------------------- Помимо групп со свободным форматом ввода в GAMESS (US) присутствует несколько «форматированных» групп. Такие группы состоят из строк разных типов, в каждой из которых должен быть введён соответствующий набор значений. При записи форматированных групп есть две дополнительные возможности: Можно сократить число строк, используя символ ``;``, отделённый пробелами с двух сторон; данный символ заменяет «перенос строки», то есть позволяет записывать следующую строку, не делая фактического переноса. Например, запись:: $H S 1 1 0.1831915800E+00 1.000000 $END Эквивалентна записи:: $H S 1 ; 1 0.1831915800E+00 1.000000 $END Также если в строке так много значений, что не хватает ограничения её длины в 80 символов, то можно использовать символ ``>``, отделённый от значений пробелом; данный символ отменяет «перенос строки», то есть следующая строка считается продолжением предыдущей. Например, запись:: $FRAGNAME DIPOLES A01O -0.0000000000 0.0000000000 0.0000000000 STOP $END Эквивалентна записи:: $FRAGNAME DIPOLES A01O -0.0000000000 > 0.0000000000 > 0.0000000000 STOP $END К форматированным группам относятся группы ``$DATA``, ``$ECP``, ``$VEC``, ``$HESS``, ``$GRAD``, а также некоторые другие. Большинство из этих групп являются техническими и, как правило, не заполняются вручную, а берутся из файла перезапуска GAMESS (US). В большинстве расчётов приходится иметь дело только с одной группой с таким форматом ввода – группой $DATA. Группы других типов ------------------- Группа ``$EFRAG`` имеет смешанный формат ввода: строки первого типа вводятся в свободной форме (строка состоит из параметров вместе с соответствующими значениями), а остальные строки состоят только из значений. Так как параметров в строке первого типа много, то для неё тоже возможно применение символа ``>``. Форматы вводов групп, предназначенных для работы с программами, которые опционально интегрируются в GAMESS (US) (Tinker, VB2000, XMVB, NEO, NBO и QuanPol), соответствуют форматам ввода самих программ, а не GAMESS (US). Дополнительные возможности входных файлов ----------------------------------------- Во входной файл GAMESS (US) также можно при желании добавить строки-примечания, для этого можно использовать символ ``!``. Всё, что идёт после данного символа уже не считается частью группы (при этом, не имеет значения форматированная группа или нет), поэтому записи после него игнорируются. Все параметры, ключи и значения могут быть записаны как строчными буквами, так и прописными, однако при переводе во временные файлы, выходной файл и файл перезапуска все строчные буквы переводятся в прописные, поэтому при введении собственных обозначений не следует делать одинаковые названия, отличающиеся только тем, что одни буквы строчные, а другие – прописные. Исключение составляют строки-комментарии, которые присутствуют в некоторых форматированных группах (например, ``$DATA``) и строки-примечания, которые добавляет пользователь, – они остаются без изменений. Пример входного файла --------------------- Входной файл может выглядеть, например, следующим образом:: $CONTRL ICHARG=0 MULT=1 EXETYP=RUN RUNTYP=OPTIMIZE SCFTYP=RHF DFTTYP=B3LYPV1R !B3LYP with VWN1RPA functional UNITS=ANGS COORD=UNIQUE NZVAR=15 MAXIT=120 ISPHER=1 $END $SYSTEM TIMLIM=9500 MWORDS=320 $END $BASIS GBASIS=N311 NGAUSS=6 NDFUNC=1 NPFUNC=1 $END !6-311G(d,p) basis set $STATPT OPTTOL=0.001 NSTEP=100 $END $ZMAT DLC=.TRUE. AUTO=.TRUE. $END $DATA SF6 DFT optimization test OH S 16 0.000 0.000 0.000 F 9 1.546 0.000 0.000 $END