Para construir este projeto a partir do código -fonte neste repositório, você precisa ter um compilador Fortran que suporta o Fortran 2008 e um dos sistemas de construção suportados:
Atualmente, este projeto suporta compiladores GCC, Intel e PGI/NVHPC.
Configurar uma construção com
meson setup _build
Você pode selecionar o compilador fortran pela variável de ambiente FC
. Para compilar a execução do projeto
meson compile -C _build
Você pode executar o projeto testsuite com
meson test -C _build --print-errorlogs
Para incluir mctc-lib
em seu projeto, adicione o seguinte arquivo de wrap ao seu diretório de subprojetos:
[wrap-git]
directory = mctc-lib
url = https://github.com/grimme-lab/mctc-lib
revision = head
Você pode recuperar a dependência do retrocesso com
mctc_dep = dependency ( ' mctc-lib ' , fallback : [ ' mctc-lib ' , ' mctc_dep ' ])
e adicione -o como dependência aos seus objetivos.
Como alternativa, este projeto pode ser construído com o CMake (neste caso, é necessário Ninja 1.10 ou mais recente):
cmake -B _build -G Ninja
Para compilar o projeto com CMake Run
cmake --build _build
Você pode executar o projeto testsuite com
pushd _build && ctest && popd
Para incluir mctc-lib
no seu projeto CMake, recupere-o usando o 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 ()
E link na biblioteca de interface "mctc-lib"
.
target_link_libraries ( " ${PROJECT_NAME} -lib" PUBLIC "mctc-lib" )
Invoque o FPM na raiz do projeto com
fpm build
Para executar o uso do TestSuite
fpm test
Você pode acessar o programa mctc-convert
usando o subcomando de execução
fpm run -- --help
Para usar mctc-lib
para testar, inclui-o como dependência no manifesto do seu pacote
[ dependencies ]
mctc-lib.git = " https://github.com/grimme-lab/mctc-lib "
Um exemplo de aplicativo é fornecido com o programa mctc-convert
para converter entre diferentes formatos de entrada suportados.
Para ler um arquivo de entrada usando a biblioteca de IO, use a rotina read_structure
. Os dados finais da geometria são armazenados em um 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
A biblioteca do ambiente fornece um mecanismo básico de propagação de erro usando um erro alocável error_type
, que é passado para as rotinas da biblioteca. Normalmente, o leitor pode detectar o tipo de arquivo do sufixo de nomes de arquivos. Como alternativa, o Enumerador filetype
fornece os identificadores de todos os tipos de arquivos suportados, que podem ser passados como argumento opcional para a rotina read_structure
.
De uma maneira semelhante, a rotina write_structure
permite escrever um structure_type
em um arquivo ou unidade:
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
O programa mctc-convert
fornece um leitor acorrentado e uma chamada de escritor para atuar como um conversor de arquivos de geometria. Confira a implementação em app/main.f90
.
Os leitores de entrada da geometria tentam fornecer mensagens de erro úteis, nenhum usuário deve ser deixado sozinho com uma mensagem de erro como entrada inválida . As mensagens de erro pouco claras são consideradas um bug no MCTC-LIB , se você lutar para entender um erro relatado, arquive-nos um problema e melhoraremos o relatório.
Como as mensagens de erro úteis podem ser? Aqui estão alguns exemplos.
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
|
Tentamos reter o máximo de informações possível ao exibir a mensagem de erro para facilitar a fixação da parte ofensiva da entrada.
Licenciado sob a licença Apache, versão 2.0 (a "licença"); Você não pode usar esse arquivo, exceto em conformidade com a licença. Você pode obter uma cópia da licença em http://www.apache.org/license/license-2.0
A menos que exigido pela lei aplicável ou acordada por escrito, o software distribuído sob a licença é distribuído "como está" , sem garantias ou condições de qualquer tipo , expressa ou implícita. Consulte a licença para o idioma específico que rege as permissões e limitações sob a licença.
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão neste projeto por você, conforme definida na licença Apache-2.0, será licenciada como acima, sem termos ou condições adicionais.