ในการสร้างโครงการนี้จากซอร์สโค้ดในที่เก็บนี้คุณต้องมีคอมไพเลอร์ Fortran ที่รองรับ Fortran 2008 และหนึ่งในระบบบิลด์ที่รองรับ:
ปัจจุบันโครงการนี้รองรับคอมไพเลอร์ GCC, Intel และ PGI/NVHPC
ตั้งค่าการสร้างด้วย
meson setup _build
คุณสามารถเลือกคอมไพเลอร์ Fortran โดยตัวแปรสภาพแวดล้อม FC
เพื่อรวบรวมการรันโครงการ
meson compile -C _build
คุณสามารถเรียกใช้การทดสอบโครงการด้วย
meson test -C _build --print-errorlogs
หากต้องการรวม mctc-lib
ในโครงการของคุณเพิ่มไฟล์ WRAP ต่อไปนี้ลงในไดเรกทอรีโครงการย่อยของคุณ:
[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
คุณสามารถเรียกใช้โครงการทดสอบด้วย
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 Run
fpm run -- --help
ในการใช้ mctc-lib
สำหรับการทดสอบรวมถึงการพึ่งพาในแพ็คเกจของคุณ
[ 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
ไลบรารีสภาพแวดล้อมมีกลไกการแพร่กระจายข้อผิดพลาดพื้นฐานโดยใช้ orlocatable error_type
ซึ่งส่งผ่านไปยังรูทีนไลบรารี โดยปกติแล้วผู้อ่านสามารถตรวจจับประเภทไฟล์จากคำต่อท้ายของชื่อไฟล์ อีกทางเลือกหนึ่ง enumerator 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 จะได้รับใบอนุญาตดังกล่าวข้างต้นโดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใด ๆ