Para construir este proyecto a partir del código fuente en este repositorio, debe tener un compilador Fortran que admite Fortran 2008 y uno de los sistemas de compilación compatibles:
Actualmente, este proyecto admite compiladores GCC, Intel y PGI/NVHPC.
Configurar una compilación con
meson setup _build
Puede seleccionar el compilador Fortran por la variable de entorno FC . Para compilar la ejecución del proyecto
meson compile -C _build
Puede ejecutar los proyectos TestSuite con
meson test -C _build --print-errorlogs
Para incluir mctc-lib en su proyecto, agregue el siguiente archivo de envoltura a su directorio de subprojects:
[wrap-git]
directory = mctc-lib
url = https://github.com/grimme-lab/mctc-lib
revision = headPuede recuperar la dependencia de la envoltura de retroceso con
mctc_dep = dependency ( ' mctc-lib ' , fallback : [ ' mctc-lib ' , ' mctc_dep ' ])y agréguelo como dependencia a sus objetivos.
Alternativamente, este proyecto se puede construir con CMake (en este caso se requiere Ninja 1.10 o más nuevo):
cmake -B _build -G Ninja
Para compilar el proyecto con Cmake Run
cmake --build _build
Puede ejecutar el proyecto TestSuite con
pushd _build && ctest && popd
Para incluir mctc-lib en su proyecto CMake, recuperarlo utilizando el módulo 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 () Y enlace contra la biblioteca de la interfaz "mctc-lib" .
target_link_libraries ( " ${PROJECT_NAME} -lib" PUBLIC "mctc-lib" )Invocar fpm en la raíz del proyecto con
fpm build
Para ejecutar el uso de testSuite
fpm test
Puede acceder al programa mctc-convert utilizando el subcomando Ejecutar
fpm run -- --help
Para usar mctc-lib para pruebas, incluya como dependencia en su manifiesto de paquete
[ dependencies ]
mctc-lib.git = " https://github.com/grimme-lab/mctc-lib " Se proporciona una aplicación de ejemplo con el programa mctc-convert para convertir entre diferentes formatos de entrada compatibles.
Para leer un archivo de entrada utilizando la biblioteca IO, use la rutina read_structure . Los datos finales de geometría se almacenan en una 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 La biblioteca de entorno proporciona un mecanismo básico de propagación de error de error utilizando un error_type asignable, que se pasa a las rutinas de la biblioteca. Por lo general, el lector puede detectar el tipo de archivo del sufijo de nombres de archivo. Alternativamente, el Enumerador de filetype proporciona los identificadores de todos los tipos de archivos compatibles, que pueden aprobarse como argumento opcional a la rutina read_structure .
De manera similar, la rutina write_structure permite escribir una structure_type en un archivo o unidad:
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 El programa mctc-convert proporciona una llamada de lector y escritor encadenado para actuar como un convertidor de archivos de geometría. Consulte la implementación en app/main.f90 .
Los lectores de entrada de geometría intentan proporcionar mensajes de error útiles, ningún usuario debe quedarse solo con un mensaje de error como entrada no válida . Los mensajes de error poco claro se consideran un error en MCTC-LIB , si tiene dificultades para dar sentido a un error informado, presentarnos un problema y mejoraremos el informe.
¿Cómo pueden ser los mensajes de error útiles? Aquí hay algunos ejemplos.
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
|
Intentamos retener la mayor cantidad de información posible al mostrar el mensaje de error para facilitar la reparación de la parte ofensiva en la entrada.
Licenciado bajo la licencia Apache, versión 2.0 (la "licencia"); No puede usar este archivo, excepto de conformidad con la licencia. Puede obtener una copia de la licencia en http://www.apache.org/licenses/license-2.0
A menos que la ley aplicable sea requerida o acordado por escrito, el software distribuido bajo la licencia se distribuye de manera "tal cual" , sin garantías o condiciones de ningún tipo , expresa o implícita. Consulte la licencia para los permisos y limitaciones de rigor de idioma específico bajo la licencia.
A menos que declare explícitamente lo contrario, cualquier contribución presentada intencionalmente para su inclusión en este proyecto por usted, como se define en la licencia Apache-2.0, se debe licenciar como anteriormente, sin ningún término o condiciones adicionales.