لبناء هذا المشروع من الكود المصدري في هذا المستودع ، يجب أن يكون لديك برنامج التحويل البرمجي Fortran يدعم Fortran 2008 وأحد أنظمة الإنشاء المدعومة:
يدعم هذا المشروع حاليًا مجمعي GCC و Intel و PGI/NVHPC.
إعداد بناء مع
meson setup _build
يمكنك تحديد برنامج التحويل البرمجي Fortran بواسطة متغير بيئة FC
. لتجميع المشروع تشغيل
meson compile -C _build
يمكنك تشغيل مشاريع testsuite مع
meson test -C _build --print-errorlogs
لتضمين mctc-lib
في مشروعك ، أضف ملف التفاف التالي إلى دليل المشاريع الفرعية:
[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
يمكنك تشغيل Project TestSuite مع
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
لتشغيل استخدام testsuite
fpm test
يمكنك الوصول إلى برنامج mctc-convert
باستخدام المفوض الفرعي للتشغيل
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
توفر مكتبة البيئة آلية أساسية للترجمة الخلفية باستخدام error_type
قابلة للتداول ، والتي يتم تمريرها إلى إجراءات المكتبة. عادةً ما يمكن للقارئ اكتشاف نوع الملف من لاحقة أسماء الملفات. بدلاً من ذلك ، يوفر filetype
Enumerator معرفات جميع أنواع الملفات المدعومة ، والتي يمكن تمريرها كوسيطة اختيارية إلى روتين 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 ، على النحو الوارد أعلاه ، دون أي شروط أو شروط إضافية.