Чтобы создать этот проект из исходного кода в этом хранилище, вам необходимо иметь компилятор Fortran, поддерживающий Fortran 2008 и одну из поддерживаемых систем сборки:
В настоящее время этот проект поддерживает компиляторы GCC, Intel и PGI/NVHPC.
Настройка сборки с
meson setup _build
Вы можете выбрать компилятор Fortran с помощью переменной среды FC
. Чтобы скомпилировать запуск проекта
meson compile -C _build
Вы можете запустить проекты TestSuite с
meson test -C _build --print-errorlogs
Чтобы включить mctc-lib
в ваш проект, добавьте следующий файл обертывания в свой каталог подпроектов:
[wrap-git]
directory = mctc-lib
url = https://github.com/grimme-lab/mctc-lib
revision = head
Вы можете получить зависимость от запасного обворота с
mctc_dep = dependency ( ' mctc-lib ' , fallback : [ ' mctc-lib ' , ' mctc_dep ' ])
и добавьте его как зависимость от ваших целей.
В качестве альтернативы, этот проект может быть построен с Cmake (в данном случае Ninja 1.10 или более новее требуется):
cmake -B _build -G Ninja
Чтобы скомпилировать проект с Cmake Run
cmake --build _build
Вы можете запустить проект TestSuite с
pushd _build && ctest && popd
Чтобы включить mctc-lib
в ваш проект CMAKE, получите его с помощью модуля FetchContent
:
if ( NOT TARGET mctc-lib)
set ( "mctc-lib-url" "https://github.com/grimme-lab/mctc-lib" )
message (STATUS "Retrieving mctc-lib from ${mctc-lib-url} " )
include (FetchContent)
FetchContent_Declare(
"mctc-lib"
GIT_REPOSITORY " ${mctc-lib-url} "
GIT_TAG "HEAD"
)
FetchContent_MakeAvailable( "mctc-lib" )
endif ()
И ссылка против библиотеки интерфейса "mctc-lib"
.
target_link_libraries ( " ${PROJECT_NAME} -lib" PUBLIC "mctc-lib" )
Вызвать FPM в корне проекта с
fpm build
Для запуска использования тестов
fpm test
Вы можете получить доступ к программе mctc-convert
используя подкоманду Run
fpm run -- --help
Чтобы использовать mctc-lib
для тестирования, включите его как зависимость в вашем пакете Manifest
[ dependencies ]
mctc-lib.git = " https://github.com/grimme-lab/mctc-lib "
Пример приложения предоставляется программой mctc-convert
для преобразования между различными поддерживаемыми входными форматами.
Чтобы прочитать входной файл, используя библиотеку IO, используйте подпрограмму read_structure
. Окончательные данные геометрии хранятся в structure_type
:
use mctc_io
use mctc_env
type(structure_type) :: mol
type(error_type), allocatable :: error
call read_structure(mol, " input.xyz " , error)
if (allocated(error)) then
print ' (a) ' , error%message
error stop
end if
Библиотека среды обеспечивает базовый механизм обратного распространения ошибок с использованием Allocatable error_type
, который передается в процедуры библиотеки. Обычно читатель может обнаружить тип файла из суффикса имен файлов. В качестве альтернативы, перечисление filetype
предоставляет идентификаторы всех поддерживаемых типов файлов, которые могут быть переданы в качестве необязательного аргумента в соответствии с подпрограммой read_structure
.
Аналогичным образом, подпрограмма write_structure
позволяет записать structure_type
в файл или устройство:
use mctc_io
use mctc_env
type(structure_type) :: mol
type(error_type), allocatable :: error
call write_structure(mol, " output.xyz " , error)
if (allocated(error)) then
print ' (a) ' , error%message
error stop
end if
Программа mctc-convert
предоставляет призыв считывателя и писателя в цепях, чтобы действовать в качестве конвертера с геометрией. Оформить реализацию в app/main.f90
.
Читатели ввода геометрии пытаются предоставить полезные сообщения об ошибках, ни один пользователь не должен оставаться наедине с сообщением об ошибке, таким как неверный ввод . Неясные сообщения об ошибках считаются ошибкой в MCTC-LIB , если вы изо всех сил пытаетесь разобраться в ошибке, сообщившей, подать нам проблему, и мы сделаем отчет лучше.
Как можно выглядеть полезные сообщения об ошибках? Вот несколько примеров.
Error: Impossible number of atoms provided
--> struc.xyz:1:1-2
|
1 | -3
| ^^ expected positive integer value
|
Error: Cannot read eht entry
--> struc.coord:18:13-15
|
18 | $eht charge=one unpaired=0
| ^^^ expected integer value
|
Error: Cannot read charges
--> struc.mol:29:23-25
|
29 | M CHG 3 1 1 3 b 2 -1
| ^^^ expected integer value
|
Error: Conflicting lattice and cell groups
--> struc.coord:37:1-5
|
35 | $lattice angs
| -------- lattice first defined here
:
37 | $cell angs
| ^^^^^ conflicting cell group
|
Мы стараемся сохранить как можно больше информации при отображении сообщения об ошибке, чтобы легко исправить оскорбительную часть в входе.
Лицензировано по лицензии Apache, версия 2.0 («Лицензия»); Вы не можете использовать этот файл, кроме как в соответствии с лицензией. Вы можете получить копию лицензии по адресу http://www.apache.org/licenses/license-2.0
Если не требуется применимый закон или не согласен в письменной форме, программное обеспечение, распространяемое по лицензии, распределяется на основе «как есть» , без каких -либо гарантий или условий любого рода , явного или подразумеваемого. См. Лицензию для конкретного языка, регулирующих разрешения и ограничения по лицензии.
Если вы явно не заявляете иное, какой-либо вклад, преднамеренно предназначенный для включения в этот проект вами, как определено в лицензии Apache-2.0, должен быть лицензирован, как указано выше, без каких-либо дополнительных условий или условий.