Um dieses Projekt aus dem Quellcode in diesem Repository zu erstellen, benötigen Sie einen FORTRAN -Compiler, der Forran 2008 und eines der unterstützten Build -Systeme unterstützt:
Derzeit unterstützt dieses Projekt GCC-, Intel- und PGI/NVHPC -Compiler.
Einen Build mit
meson setup _build
Sie können den FORTRAN -Compiler nach der FC
-Umgebungsvariablen auswählen. Um den Projektlauf zu kompilieren
meson compile -C _build
Sie können die Projekte testsuite mit ausführen
meson test -C _build --print-errorlogs
Um mctc-lib
in Ihr Projekt aufzunehmen, fügen Sie Ihrem Subprojects-Verzeichnis die folgende Wrap-Datei hinzu:
[wrap-git]
directory = mctc-lib
url = https://github.com/grimme-lab/mctc-lib
revision = head
Sie können die Abhängigkeit vom Wrap -Fallback mit abrufen
mctc_dep = dependency ( ' mctc-lib ' , fallback : [ ' mctc-lib ' , ' mctc_dep ' ])
und fügen Sie es Ihren Zielen als Abhängigkeit hinzu.
Alternativ kann dieses Projekt mit CMake erstellt werden (in diesem Fall ist Ninja 1.10 oder neuer erforderlich):
cmake -B _build -G Ninja
Um das Projekt mit CMake Run zu kompilieren
cmake --build _build
Sie können den Projekttestsuite mit ausführen
pushd _build && ctest && popd
Um mctc-lib
in Ihr CMake-Projekt aufzunehmen, holen Sie es mit dem FetchContent
Modul ab:
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 ()
Und Link mit der Schnittstellenbibliothek "mctc-lib"
.
target_link_libraries ( " ${PROJECT_NAME} -lib" PUBLIC "mctc-lib" )
Rufen Sie FPM in die Projektwurzel mit mit
fpm build
Um den Testsuite -Gebrauch auszuführen
fpm test
Sie können mit dem Run-Unterbefehl auf das mctc-convert
-Programm zugreifen
fpm run -- --help
Um mctc-lib
zum Testen zu verwenden, geben Sie es als Abhängigkeit in Ihr Paketmanifest ein
[ dependencies ]
mctc-lib.git = " https://github.com/grimme-lab/mctc-lib "
Eine Beispielanwendung wird mit dem mctc-convert
-Programm zur Verfügung gestellt, um zwischen verschiedenen unterstützten Eingangsformaten zu konvertieren.
Um eine Eingabedatei mithilfe der IO -Bibliothek zu lesen, verwenden Sie die Routine read_structure
. Die endgültigen Geometriedaten werden in einem structure_type
gespeichert:
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
Die Umgebungsbibliothek bietet einen Grundmechanismus für einen Back-Propagations-Mechanismus mit einem Allocatable error_type
, der an die Bibliotheksroutinen übergeben wird. Normalerweise kann der Leser den Dateityp aus dem Suffix der Dateinamen erkennen. Alternativ enthält der filetype
Enumerator die Kennungen aller unterstützten Dateitypen, die als optionales Argument an die Routine read_structure
übergeben werden können.
In ähnlicher Weise ermöglicht die Routine write_structure
eine structure_type
in eine Datei oder Einheit:
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
Das mctc-convert
-Programm bietet einen angeketteten Leser und einen Autor-Aufruf, um als Geometrie-Dateikonverter zu fungieren. Checkout der Implementierung in app/main.f90
.
Die Leser der Geometrieeingänge versuchen, hilfreiche Fehlermeldungen anzugeben. Kein Benutzer sollte mit einer Fehlermeldung wie ungültiger Eingabe allein gelassen werden. Unklare Fehlermeldungen werden als Fehler in MCTC-Lib betrachtet, wenn Sie Schwierigkeiten haben, einen gemeldeten Fehler zu verstehen, uns ein Problem einreichen, und wir werden den Bericht verbessern.
Wie können hilfreiche Fehlermeldungen aussehen? Hier sind einige Beispiele.
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
|
Wir versuchen, so viele Informationen wie möglich beizubehalten, wenn die Fehlermeldung angezeigt wird, damit der beleidigende Teil im Eingang behoben wird.
Lizenziert unter der Apache -Lizenz, Version 2.0 (der „Lizenz“); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Sie können eine Kopie der Lizenz unter http://www.apache.org/licenses/license-2.0 erhalten
Sofern nicht nach geltendem Recht oder schriftlich zu vereinbart wird, wird die im Rahmen der Lizenz verteilte Software ohne Ausdruck oder impliziten Bedingungen ohne Gewährleistungen oder Bedingungen jeglicher Art verteilt . Siehe die Lizenz für die spezifischen Sprachberechtigungen und Einschränkungen im Rahmen der Lizenz.
Sofern Sie nicht ausdrücklich etwas anderes angeben, ist ein Beitrag, der absichtlich für die Aufnahme in dieses Projekt von Ihnen eingereicht wird, wie in der Lizenz Apache-2.0 definiert, ohne zusätzliche Bedingungen wie oben genannte lizenziert.