آموزش کد محاسباتی سیستا (نوشتن مختصات به فرم z-matrix – مولکول متان)

در این مثال میخوایم ببینیم چطور می تونیم مختصات اتم ها به فرم z-matrix در ورودی سیستا لحاظ کنیم. قبل از اینکه به این مسئله بپردازیم میخوایم ببینیم این z-matrix چی هست.

در شیمی، z-matrix راهی برای نمایش یک سیستم شامل اتم هاست. یک z-matrix رو میشه به عنوان نمایش مختصات درونی سیستم هم در نظر گرفت. در این روش محل هر اتم در یک مولکول برحسب عدد اتمی، طول پیوند، زاویه پیوند و زاویه دو وجهی داده میشه که به این ویژگی ها مختصات داخلی گفته میشه. نام z-matrix از اون جهت اطلاق میشه که اولین اتم در مبدا قرار داره و دومین اتم در امتداد محور Z قرار داده میشه. 

این مختصات رو میشه به مختصات دکارتی تبدیل کرد و برعکس.

به عنوان یک مثال مولکول متان در مختصات کاتزین رو میشه به شکل زیر نمایش داد:

 

C 0.000000 0.000000 0.000000

H 0.000000 0.000000 1.089000

H 1.026719 0.000000 -0.363000

H -0.513360 -0.889165 -0.363000

H -0.513360 0.889165 -0.363000

با چرخش مولکول در مختصات کارتزین میشه یه شکل متقارن تری رو بدست آورد که به شکل زیره:

C 0.000000 0.000000 0.000000

H 0.000000 0.000000 1.089000

H 1.026719 0.000000 -0.363000

H -0.513360 -0.889165 -0.363000

H -0.513360 0.889165 -0.363000

ماتریس-z مربوطه رو می تونیم به شکل زیر نشون بدیم:

C

H 1 1.089000

H 1 1.089000 2 109.4710

H 1 1.089000 2 109.4710 3 120.0000

H 1 1.089000 2 109.4710 3 -120.0000

برای وارد کردن مختصات به صورت ماتریس-z باید یک بلاک به شکل زیر در فایل ورودی قرار بدیم:

%block Zmatrix
molecule

 

البته میشه این بلاک رو به شکل زیر هم به کار برد:

%block Zmatrix
molecule fractional

یا به شکل زیر:

%block Zmatrix
molecule scaled

اگر به شکل اول نوشته بشه با واژه کلیدی ZM.UnitsLength میشه واحد اندازه ها رو تعیین کرد.

بعد از کلمه کلیدی molecule به ازای هر اتم باید یه خط به شکل زیر اضافه کرد:

%block Zmatrix
molecule
Nspecie i j k r a t ifr ifa ift

Nspecie شماره اتم رو مشخص میکنه.

i j k سه عدد صحیح هستن.

r a t سه عدد حقیقی هستن.

ifr ifa ift هم سه عدد صحیح هستن. که می تونن 0 یا 1 باشن که 0 به معنی ثابت موندن و 1 به معنی متغیر بودن در ریلکس کردن مولکوله.

مختصات اولین اتم از همه ساده ترین چون اونو توی مرکز در نظر میگیریم:

%block Zmatrix
molecule
Nspecie1 0 0 0 0.0 0.0 0.0 0 0 0

در اینجا Nspecie1 شماره اتم رو مشخص می کنه. سه عدد اول برای اولین اتم باید حتما صفر باشه. سه عدد بعدی یه مختصات کارتزینه که ما مبدا در نظر میگیریم. حالا میخوایم مشخصات دومین اتم رو وارد کنیم:

%block Zmatrix
molecule
Nspecie1 0 0 0 0.0 0.0 0.0 0 0 0
Nspecie2 1 0 0 d12 0.0 0.0 0 0 0

در اینحا بر خلاف اتم اولی یکی از سه عدد اول 1 ه. این یعنی عدد چهارمی هر باشه نسبت به اتم اول سنجیده میشه. سه عدد دوم در واقع مختصات کروی اتم دوم نسبت به اولی هستن. در این مثال ما اتم دومی رو روی محور z نسبت به اتم اول در نظر گرفتیم. یعنی اتم اول در مبدأ و اتم دوم در امتداد محور z در فاصله d12 ازون قراره داره. خوب حالا میریم سراغ اتم سوم:

%block Zmatrix
molecule
Nspecie1 0 0 0 0.0 0.0 0.0 0 0 0
Nspecie2 1 0 0 d12 0.0 0.0 0 0 0
Nspecie3 1 2 0 d31 a123 t1234 0 0 0

در اینجا عدد 1 اول میگه که فاصله d31 داره از اتم اول سنجیده میشه. عدد 1 و 2 با هم میگن که زاویه بین سوم با توجه به اتم 1 و 2 چی باشه (عدد زاویه همون عدد شماره 5 یعنی a123 هستش).

عدد t1234 زاویه پیچشی که اتم سوم نسبت به اتم هایی که سه عدد اول بیان می کنه میسنجه. مشخصات باقی اتم ها هم به توجه به موارد زیر وارد می کنیم:

فاصله نسبت به اتم i

زاویه نسبت به اتم j و i

زاویه پیچشی نسبت به اتم های k,j و i

%block Zmatrix
molecule
Nspecie1 0 0 0 0.0 0.0 0.0 0 0 0
Nspecie2 1 0 0 d12 0.0 0.0 0 0 0
Nspecie3 1 2 0 d31 a123 t1234 0 0 0
…
NspecieX …….
%endblock Zmatrix

به جای اینکه مقادیر عددی وارد کنیم می تونیم یک سری نماد تعریف کنید به عنوان مثال:

%block Zmatrix
molecule fractional
1 0 0 0 0.0 0.0 0.0 0 0 0
2 1 0 0 HO1 90.0 37.743919 1 0 0
2 1 2 0 HO2 HOH 90.0 1 1 0
variables
HO1 0.956997
HO2 0.956997
constant
HOH 104.4
%endblock Zmatrix

که میشه به صورت متغییر یا ثابت تعریف بشن. 

تمرین

مختصات مولکول متان رو به صورت z-matrix وارد کنید و فاصله CH رو تغییر بدید تا فاصله تعادلی رو بدست بیارید.

%block Zmatrix
molecule
1 0 0 0 0.0 0.0 0.0 0 0 0
2 1 0 0 CH 0.0 0.0 1 0 0
2 1 2 0 CH 109.471 0.0 1 0 0
2 1 2 3 CH 109.471 120.0 1 0 0
2 1 2 3 CH 109.471 240.0 1 0 0
variables
CH 1.089
%endblock Zmatrix
ZM.UnitsLength Ang
ZM.UnitsAngle Deg

بعد از هر بار تغییر دستور زیر رو اجرا کنید تا فایل خروجی تولید بشه:

siesta < ch4.fdf > ch4.your_distance.Ang.out

بعد از تولید تمام فایل های خروجی مورد نظر از دستور زیر برای جمع آوری انرژی ها در یک فایل استفاده کنید:

grep ‘Total =’ ch4.*.Ang.out > ch4.distance.dat

بعد از این کار فایلی به صورت زیر آماده می کنیم:

برای رسم نمودار می تونیم از دستورات زیر استفاده کنیم:

gnuplot

gnuplot> plot “ch4.distance.dat” using 1:2 with lines

بعد از اجرای این دستورات به نموداری به شکل زیر می رسیم:

فاصله تعادلی که از تجربه بدست میاد 1.09 آنگستروم هستش. می تونید مقدار بدست اومده از محاسبات رو با این مقدار مقایسه کنید.

محاسبه فاصله تعادلی با استفاده از روش روش گرادیان همیوغ: توابع پایه Single-ζ

خطوط زیر رو به فایل ورودی اضافه کنید:

# Conjugate-gradient minimization

MD.TypeOfRun      CG             # We are going to perform a

                                 #   Conjugate Gradient (CG) minimization

MD.NumCGsteps     10             # Number of CG steps for

                                 #   coordinate optimization

ZM.ForceTolLength 0.04 eV/Ang    # Parameter that controls the convergence with

                                 # respect to forces on Z-matrix lengths

                                 # 

بعد از اون از دستور زیر برای ایجاد فایل خروجی استفاده کنید:

siesta < ch4.cg.fdf > ch4.cg.out

در فایل خروجی می تونید فاصله تعادلی رو پیدا کنید که در شکل زیر مشخصه:

محاسبه فاصله تعادلی با استفاده از روش روش گرادیان همیوغ: توابع پایه Double-ζ به علاوه قطبش

فایل ورودی رو باز کنید و PAO.BasisSize رو به DZP تغییر بدید. 

بعد از اون از دستور زیر برای ایجاد فایل خروجی استفاده کنید:

siesta < ch4.cg.fdf > ch4.cg.out

در فایل خروجی می تونید فاصله تعادلی رو پیدا کنید که در شکل زیر مشخصه:

 


بنده دانشجوی دکترای فیزیک ماده چگال از دانشگاه تربیت مدرس تهران هستم. حوزه مورد علاقه من فیزیک محاسباتی (به طور خاص نظریه تابعیت چگالی) و همچنین سیستم های توپولوژیک است.


یک دیدگاه

  • سلام , مهمان
  • خروج
  • ورود

    Or use one of these social networks

This site is protected by wp-copyrightpro.com