Pour construire ce projet à partir du code source de ce référentiel, vous devez avoir un compilateur FORTRAN Pouvant Fortran 2008 et l'un des systèmes de construction pris en charge:
Actuellement, ce projet prend en charge les compilateurs GCC, Intel et PGI / NVHPC.
Configurer une construction avec
meson setup _build
Vous pouvez sélectionner le compilateur FORTRAN par la variable d'environnement FC
. Pour compiler la course du projet
meson compile -C _build
Vous pouvez exécuter la rédaction de projets avec
meson test -C _build --print-errorlogs
Pour inclure mctc-lib
dans votre projet, ajoutez le fichier de wrap suivant à votre répertoire de sous-projets:
[wrap-git]
directory = mctc-lib
url = https://github.com/grimme-lab/mctc-lib
revision = head
Vous pouvez récupérer la dépendance de la secours enveloppant avec
mctc_dep = dependency ( ' mctc-lib ' , fallback : [ ' mctc-lib ' , ' mctc_dep ' ])
et ajoutez-le comme dépendance à vos cibles.
Alternativement, ce projet peut être construit avec CMake (dans ce cas, Ninja 1.10 ou plus récent est requis):
cmake -B _build -G Ninja
Pour compiler le projet avec Cmake Run
cmake --build _build
Vous pouvez exécuter le projet TestSuite avec
pushd _build && ctest && popd
Pour inclure mctc-lib
dans votre projet CMake, récupérez-le à l'aide du module 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 ()
Et lier à la bibliothèque d'interface "mctc-lib"
.
target_link_libraries ( " ${PROJECT_NAME} -lib" PUBLIC "mctc-lib" )
Invoquez un FPM dans la racine du projet avec
fpm build
Pour exécuter l'utilisation de lauit à test
fpm test
Vous pouvez accéder au programme mctc-convert
à l'aide de la sous-commande RUN
fpm run -- --help
Pour utiliser mctc-lib
pour les tests, incluez-le comme dépendance dans votre package manifeste
[ dependencies ]
mctc-lib.git = " https://github.com/grimme-lab/mctc-lib "
Un exemple d'application est fourni avec le programme mctc-convert
pour convertir entre différents formats d'entrée pris en charge.
Pour lire un fichier d'entrée à l'aide de la bibliothèque IO, utilisez la routine read_structure
. Les données de géométrie finales sont stockées dans une 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 bibliothèque d'environnement fournit un mécanisme de propriété de base d'erreur de base à l'aide d'une error_type
allocative_type, qui est transmise aux routines de la bibliothèque. Habituellement, le lecteur peut détecter le type de fichier à partir du suffixe des noms de fichiers. Alternativement, le filetype
Enumerator fournit les identificateurs de tous les types de fichiers pris en charge, qui peuvent être transmis comme argument facultatif à la routine read_structure
.
De la même manière, la routine write_structure
permet d'écrire un structure_type
dans un fichier ou une unité:
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
Le programme mctc-convert
fournit un appel de lecteur et d'écrivain enchaînés pour agir comme un convertisseur de fichiers de géométrie. Découvrez l'implémentation dans app/main.f90
.
Les lecteurs d'entrée de géométrie essaient de fournir des messages d'erreur utiles, aucun utilisateur ne doit être laissé seul avec un message d'erreur comme une entrée non valide . Les messages d'erreur peu clairs sont considérés comme un bogue dans MCTC-lib , si vous avez du mal à donner un sens à une erreur rapportée, liez-nous un problème et nous améliorerons le rapport.
À quoi les messages d'erreur peuvent-ils ressembler? Voici quelques exemples.
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
|
Nous essayons de conserver autant d'informations que possible lors de l'affichage du message d'erreur pour faciliter la réparation de la partie incriminée dans l'entrée.
Licencié sous la licence Apache, version 2.0 (la «licence»); Vous ne pouvez pas utiliser ce fichier sauf conforme à la licence. Vous pouvez obtenir une copie de la licence à http://www.apache.org/licenses/license-2.0
Sauf exiger la loi applicable ou convenu par écrit, les logiciels distribués en vertu de la licence sont distribués sur une base «tel quel» , sans garantie ou conditions d'aucune sorte , expresse ou implicite. Voir la licence pour la langue spécifique régissant les autorisations et les limitations sous la licence.
À moins que vous ne soyez explicitement indiqué autrement, toute contribution intentionnellement soumise pour inclusion dans ce projet par vous, tel que défini dans la licence Apache-2.0, doit être autorisée comme ci-dessus, sans aucune condition ou condition supplémentaire.