Гауссовские кубики

Автор Paul Bourke
Декабрь 2003 г.

Введение

Файл куба описывает объемные данные, а также позиции атомов, он исходит из программного пакета Gaussian. Файл состоит из заголовка, который включает в себя информацию о атоме и размере, а также ориентацию объемных данных. Затем следуют объемные данные, один скаляр на элемент воксела. Все аспекты файла являются текстовыми (удобочитаемыми), изначально числовые значения были 5-ю широкими для целых чисел, которые начали каждую строку заголовка (после первого), а значения с плавающей запятой были отформатированы 12,6, то есть 12 символов в ширину с 6 знаками после запятой.

заголовок

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

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

Следующие три строки дают количество вокселей вдоль каждой оси (x, y, z), за которыми следует вектор оси. Обратите внимание, что это означает, что объем не нужно выравнивать с осью координат, действительно, это также означает, что он может быть сдвинут, хотя большинство объемных пакетов не будет поддерживать это. Длина каждого вектора - это длина стороны воксела, что позволяет не быть кубическими объемами. Если знак числа вокселей в размерности положителен, то единицы являются Бором, если они отрицательны, то ангстремы.

Последний раздел в заголовке - это одна строка для каждого атома, состоящая из 5 чисел, первая - номер атома, вторая (?), Последние три - координаты x, y, z это центр атома.

Объемные данные

Объемные данные просты, одно число с плавающей запятой для каждого объемного элемента. Оригинальный формат Гаусса упорядочил значения в формате, показанном ниже в примере, большинство программ синтаксического анализа могут читать любой формат, разделенные пробелом. Традиционно сетка расположена с осью x как внешний контур и ось z как внутренний цикл, например, записанный как

   for (ix=0;ix<NX;ix++) {
      for (iy=0;iy<NY;iy++) {
         for (iz=0;iz<NZ;iz++) {
            printf("%g ",data[ix][iy][iz]);
            if (iz % 6 == 5)
               printf("\n");
         }
         printf("\n");
      }
   }
пример:

В следующем примере объемные данные представляют собой сетку 40 на 40 на 40, каждый воксел составляет 0,283459 единиц, а объем выравнивается с координатной осью. Есть три атома.

 CPMD CUBE FILE.
 OUTER LOOP: X, MIDDLE LOOP: Y, INNER LOOP: Z
    3    0.000000    0.000000    0.000000
   40    0.283459    0.000000    0.000000
   40    0.000000    0.283459    0.000000
   40    0.000000    0.000000    0.283459
    8    0.000000    5.570575    5.669178    5.593517
    1    0.000000    5.562867    5.669178    7.428055
    1    0.000000    7.340606    5.669178    5.111259
 -0.25568E-04  0.59213E-05  0.81068E-05  0.10868E-04  0.11313E-04  0.35999E-05
      :             :             :           :            :            :
      :             :             :           :            :            :
      :             :             :           :            :            :
        In this case there will be 40 x 40 x 40 floating point values
      :             :             :           :            :            :
      :             :             :           :            :            :
      :             :             :           :            :            :