برای بهینه کردن ساختار از دستور ریلکس استفاده میکنیم. هنگامی که این دستور را وارد میکنیم برنامه مکان اتم ها را جابه جا میکند تا مکانی برای اتم ها در یک سلول واحد انتخاب شود که در آن نقطه کل سیستم کمترین مقدار خود را داشته باشد. دو روش برای بهینه سازی وجود دارد که ما در اینجا به توضیح relax می پردازیم. در واقع از نمودار سهمی relax میتوان خواص مکانیکی ماده را بدست آورد اماvc-relax اینگونه نیست، دارای اجرای بسیار سنگین همراه با ، اطلاعات atomic position و پارامتر شبکه (celldm) در خروجی است.
- relax
- vc-relax
شکل 26 تغییر جایگاه اتمی در سلول واحد برای یافتن پایین ترین انرژی
تفاوتی که این دستور با scf دارد این است که باید در فایل ورودی مدلی که یون ها از آن پیروی میکنند را نیز لحاظ کنیم. همانطور که قبلا اشاره کرده بودیم برنامه کوانتوم اسپرسو بر اساس شبه پتانسیل عمل میکند. تئوری شبه پتانسیل در حقیقت کل سیستم را به دو دسته الکترون ها و الکترون هایی که مقید به هسته و خود هسته هستند تقسیم میکند. هنگامی که سیستم در حال ریلکس شدن است یون ها میتوانند در جایگاه نهایی اتم ها نقش موثری داشته باشند. بنابراین دلیل لحاظ کردن مدل حرکت یون ها را بیان میکنیم که معمولا از یک قالب کلی تبعیت میکنند. این دستور را به سیستم با فایل ورودی با نام ریلکس انتقال می دهیم. تصویر زیر یک نمونه از فایل ورودی ریلکس برای سلول واحد دو اتمی گرافن را نمایش می دهد. همانطور که در تصویر مشاهده میشود تمام ورودی ها مانند فایل scf است که پیشتر توضیح داده شد و تنها نوع محسبات را باید در حالت relax قرار داد و همچنین در بلوک چهارم پس ازالکترون ها که با IONS & مشخص شده است مدل دینامیک یون ها را لحاظ کنیم. ما مدل دینامیکی 'ion dynamics= 'bfgs را انتخاب نموده ایم. سایر مدل های دینامیکی را میتوانید از راهنمای نرم افزار پیدا کنید.
همانطور که گفتیم برای محاسبات ریلکس calculation=relax قرار داده سپس(celldm1) را 1درصد 1 درصد به طور فشاری و کششی تغییر می دهیم تا به نقطه مطلوب که در آن حالت کمترین انرژی را داراست برسیم.
&CONTROL
calculation = 'relax' ,
restart_mode = 'from_scratch' ,
outdir='/root/Desktop/out',
pseudo_dir = '/root/Desktop/ps',
tprnfor = .true.
tstress = .true.
/
&SYSTEM
ibrav = 14,
celldm(1)=3.796797653 ,
celldm(2)=1 ,
celldm(3)=11.250000000 ,
celldm(4)=0 ,
celldm(5)=0 ,
celldm(6)=-0.500000000 ,
nat = 2,
ntyp = 2,
ecutwfc =80 ,
ecutrho = 800 ,
occupations = 'fixed',
/
&ELECTRONS
conv_thr = 1.D-6 ,
diago_full_acc = .TRUE.,
/
&IONS
ion_dynamics= 'bfgs',
upscale = 100.d0,
pot_extrapolation = 'second_order',
wfc_extrapolation = 'second_order' ,
/
ATOMIC_SPECIES
B 10.811 b_pbe.upf
N 14.00674 n_pbe.upf
ATOMIC_POSITIONS (angstrom)
B 1.255733396641119 0.724999963449228 0
N -0.000003396641119 1.450000036550772 0
K_POINTS {automatic}
12 12 1 0 0 0
شکل 27 فایل ورودی ریلکس
ترمینال سیستم عامل را در جاییکه فایل ورودی قرار دارد اجرا کرده و دستور زیر را مانند شکل 28 تایپ میکنیم.
root@nrtc:~/Desktop/relax# pw.x <relax.in> relax.out
شکل 28 دستور ریلکس در ترمینال
خروجی برنامه یک فایل با نام relax.out خواهد بود. انتهای محتوای برنامه خروجی مانند شکل 29 مختصات نهایی سیستم مشخص شده است که وجود final energy الزامی است و پس از ریلکس کردن (celldm 1) مختصات اتم ها را در scf با توجه به ATOMIC POSITION خروجی ریکس تغییر می دهیم.
Final energy = -26.0425801221 Ry
Begin final coordinates
ATOMIC_POSITIONS (angstrom)
B 1.262582917 0.725489067 0.000000000
N -0.006852917 1.449510933 0.000000000
End final coordinates
شکل 29 قسمتی خروجی ریلکس