حرکت کنید به سمت NiO_ldau . مطالعه فایل ورودی (run_NiO_r16_ucalc) برای محاسبه U در این مورد آموزنده است. برای این سیستم ما می خواهیم U را برای Ni و O بسنجیم. مسائل قابل توجه :
1 ) به طور رسمی دو نوع اتم نیکل وجود دارد ؛ هرچند آنها تنها برای داشتن مغناطش متضاد متفاوت هستند، به طوری که تنها یکی از آنها برآشفته خواهد شد. پاسخ به یک اختلال در ثانیه با استفاده از تقارن بین دو اسپین بدست می آید.
2) زمانیکه تخمین پاسخ اختلال روی اکسیژن یک محاسبه SCF جدید را اجرا میکند اکسیژن برآشفته به سلول واحد مبدا برمیگردد. این کار برای حفظ بیشترین تعداد ممکن از تقارن اجرا میشود.
3) اتمی که در آن اختلال اعمال میشود نوع متفاوتی از دیگران است که توسط PP یکسان توصیف میشود.
ابتدا دو فایل وروری داریم که محاسبات را بر اساس ni و o انجام میدهند و به ازای آنها نیز دو فایل خروجی یکی به ازای ni و دیگری به ازای o داریم . این دو فایل در برخی موارد با یکدیگر تفاوت دارند ابتدا محاسبات را برای ni انجام داده سپس با یک شیفت مختصات اتمها را تغییر داده و محاسبات را برای o انجام میدهیم که این تغییرات به صورت زیر میباشد :
1- اختلاف در تعداد حالاتیست که برای starting _magnetization در نظر می گیریم
برای ni داریم :
14 starting_magnetization(1)=0.5,
15 starting_magnetization(2)=0.5,
16 starting_magnetization(3)=-0.5,
همچنین برای حالت o :
14 starting_magnetization(1)=0.5,
14 starting_magnetization(1)=-0.5,
2- اختلاف در Atomic_species :
برای ni داریم:
34 ATOMIC_SPECIES
35 Ni1 58.69 Ni.pbe-nd-rrkjus.UPF
35 Ni2 58.69 Ni.pbe-nd-rrkjus.UPF
35 Ni3 58.69 Ni.pbe-nd-rrkjus.UPF
35 O1 15.99 O.pbe-nd-rrkjus.txt
برای o داریم :
34 ATOMIC_SPECIES
35 Ni1 58.69 Ni.pbe-nd-rrkjus.UPF
35 Ni2 58.69 Ni.pbe-nd-rrkjus.UPF
35 O1 15.99 O.pbe-nd-rrkjus.txt
35 O2 15.99 O.pbe-nd-rrkjus.txt
همانطور که مشاهده میکنید طبق دو حالتیکه در بالا مقایسه کردیم میتوان گفت
برای محاسبه ni :
اتم (1) : ni1 _ اتم (2) : ni2 _ اتم (3) : ni3 _ اتم (4) : o1
و برای محاسبه o :
اتم (1) : ni1 _ اتم (2) : ni2 _ اتم (3) : o1 _ اتم (4) : o2
همچنین میتوان نتیجه گرفت که طبق مشاهدات فوق محاسبات starting _magnetization را فقط برای اتمهای ni در نظر میگیریم .
3- اختلاف دیگری که در محاسبات برای ni و o میتوان بیان کرد اختلاف در بیان ATOMIC_POSITIONS ها است
برای ni داریم :
39 ATOMIC_POSITIONS {crystal}
40 Ni1 0.d0 0.d0 0.d0
41 Ni2 0.5d0 0.5d0 0.d0
42 Ni2 0.5d0 0.d0 0.5d0
43 Ni2 0.d0 0.5d0 0.5d0
44 Ni3 0.5d0 0.d0 0.d0
45 Ni3 0.d0 0.5d0 0.d0
46 Ni3 0.d0 0.d0 0.5d0
47 Ni3 0.5d0 0.5d0 0.5d0
48 O1 -0.25d0 0.25d0 0.25d0
49 O1 0.25d0 0.25d0 0.25d0
50 O1 -0.25d0 0.25d0 0.75d0
51 O1 -0.25d0 0.75d0 0.25d0
52 O1 0.25d0 0.75d0 0.25d0
53 O1 0.25d0 0.25d0 0.75d0
54 O1 -0.25d0 0.75d0 0.75d0
55 O1 0.25d0 0.75d0 0.75d0
برای o داریم :
38 ATOMIC_POSITIONS {crystal}
39 Ni1 0.25d0 -0.25d0 -0.25d0
40 Ni1 0.75d0 0.25d0 -0.25d0
41 Ni1 0.75d0 -0.25d0 0.25d0
42 Ni1 0.25d0 0.25d0 0.25d0
43 Ni2 0.75d0 -0.25d0 -0.25d0
44 Ni2 0.25d0 0.25d0 -0.25d0
45 Ni2 0.25d0 -0.25d0 0.25d0
46 Ni2 0.75d0 0.25d0 0.25d0
47 O1 0.d0 0.d0 0.d0
48 O2 0.5d0 0.d0 0.d0
49 O2 0.d0 0.d0 0.5d0
50 O2 0.d0 0.5d0 0.d0
51 O2 0.5d0 0.5d0 0.d0
52 O2 0.5d0 0.d0 0.5d0
53 O2 0.d0 0.5d0 0.5d0
54 O2 0.5d0 0.5d0 0.5d0
که در اینجا نیز با مقایسه این دو حالت میتوان گفت زمانیکه محاسبات را برای ni انجام می دهیم موقعیت اتمهای ni1 را صفر در نظر گرفته و موقعیت اتمهای دیگر ni یعنی ni2 و ni3 را تغییر میدهیم همچنین برای اتم o یک نوع o1 در نظر میگیریم با موقعیت های مختلف ولی زمانی که محاسبات را برای o انجام میدهیم دو نوع اتم ni1 و ni2 در نظر میگیریم با موقعیت های مختلف همچنین دو نوع اتم o1 و o2 در نظر میگیریم که موقعیت اتم o1 را صفر قرار میدهیم ولی موقیت اتم های o2 را مختلف در نظر میگیریم . (میبینیم که در هر دو حالت تعداد هرکدام از اتمها نیز به تعداد اتمها در قسمت Atomic_species بستگی دارد).
پس از ران کردن هر دو برنامه برای هر کدام یک فایل خروجی داریم چیزی که در این فایل خروجی برای ما اهمیت دارد مقدار عددی ethr است که در آخرین iteration قرار دارد.
1515 iteration # 13 ecut= 30.00 Ry beta=0.30
1516 Davidson diagonalization with overlap
1517 ethr = 1.78E-11, avg # of iterations = 2.0
شکل 146 خروجی scf
این مقدار را به خاطر بسپارید.
حال برای هرکدام از محاسبات ni و o یک فایل ورودی جدید نوشته و مقدار عددی ethr را در diago_thr_init آن وارد میکنیم.
30 &electrons
31 diagonalization='david',
32 mixing_beta = 0.3,
33 conv_thr = 1.0d-8,
34 startingwfc = 'file',
35 startingpot = 'file',
36 diago_thr_init = 1.78E-11,
شکل 147 ویرایش فایل ورودی
سپس عبارت جدید Hubbard_alpha در فایل های فوق وارد کرده و محاسبات را به ازای مقادیر مختلف آلفا (0.15 _ 0.07 _ 0.0 __ 0.07- _ 0.15- ) برای آن انجام میدهیم. این فایل نیز در هر دو محاسبه ni و o با یکدیگر متفاوت هستند . که در اینجا به تفاوت بین آنها اشاره میکنیم :
برای محاسبه ni مولفه Hubbard_alpha را فقط برای یکی از اتمهای ni وارد میکنیم در واقع برای همان ni1که موقعیت اتمهای آنرا صفر در نظر گرفته بودیم :
22 lda_plus_u = .true.
23 U_projection_type = 'atomic',
24 Hubbard_U(1) = 1.d-10
25 Hubbard_U(2) = 1.d-10
26 Hubbard_U(3) = 1.d-10
27 Hubbard_U(4) = 1.d-10
28 Hubbard_alpha(1) = 0.0
برای محاسبه o مولفه Hubbard_alpha را فقط برای یکی از اتمهای o وارد میکنیم در واقع برای همان o1که موقعیت اتمهای آنرا صفر در نظر گرفته بودیم :
21 lda_plus_u = .true.
22 U_projection_type = 'atomic',
23 Hubbard_U(1) = 1.d-10
24 Hubbard_U(2) = 1.d-10
25 Hubbard_U(3) = 1.d-10
26 Hubbard_alpha(3) = -0.07
27 Hubbard_U(4) = 1.d-10
پس از نوشتن و اجرای صحیح محاسبات به نتایجی از فایلهای خروجی نیازمندیم که این نتایج شامل مقدار عددی (Tr[ns(na)] (up, down, total ) برای 16 اتم موجود به ازای هر کدام از مقادیر Hubbard_alpha که به صورت جداگانه ران کردیم برای هر دو محاسبه ni و o میباشد. البته لازم به ذکر است که این اطلاعات را از iteraction #1 و End of self-consistent calculation استخراج میکنیم.
سپس برای دسته بندی آنها فایلهایی به صورت زیر نامگذاری میکنیم :
برای اتمهای ni :
1-dn0. Number of atom. da. 1
2-dn. Number of atom. da. 1
برای اتمهای o :
1-dn0. Number of atom. da. 9
2-dn. Number of atom. da. 9
این مقادیر را برای فایل های حالت 1 از iteraction #1 به صورت زیر حاصل میشود:
iteration # 1 ecut= 30.00 Ry beta=0.30
Davidson diagonalization with overlap
ethr = 1.78E-11, avg # of iterations = 5.8
--- enter write_ns ---
LDA+U parameters:
U( 1) = 0.00000000
alpha( 1) = 0.15000000
U( 2) = 0.00000000
alpha( 2) = 0.00000000
U( 3) = 0.00000000
alpha( 3) = 0.00000000
U( 4) = 0.00000000
alpha( 4) = 0.00000000
atom 1 Tr[ns(na)] (up, down, total) = 4.95994 3.70078 8.66072
شکل 148 iteration 1 فایل خروجی scf
و برای فایل های حالت 2 از End of self-consistent calculation به صورت زیر حاصل میشود :
End of self-consistent calculation
--- enter write_ns ---
LDA+U parameters:
U( 1) = 0.00000000
alpha( 1) = 0.15000000
U( 2) = 0.00000000
alpha( 2) = 0.00000000
U( 3) = 0.00000000
alpha( 3) = 0.00000000
U( 4) = 0.00000000
alpha( 4) = 0.00000000
atom 1 Tr[ns(na)] (up, down, total) = 4.96187 3.71279 8.67466
شکل 149 End of self-consistent calculation فایل خروجی scf
بنابر این با یک دسته بندی صحیح میتوان به راحتی تعیین کرد که برای مثال مقدار عددی مربوط به اتم شماره یک ni با مقدار hubbard_alpha برابر 0.07 چند است .
حال برای اجرای محاسبات U آمادهایم .
در اینجا نیز روی فایل grepnalfa_nio_r16 تغییرات لازمه را ایجاد کرده سپس آنرا اجرا کرده ،در نتیجه فایل های dn.at.da.1.dat , dn0.at.da.1.dat , dn.at.da.9.dat , dn0.at.da.9.dat و file.nio.r16 ایجاد میشود.
از آنجاییکه فایل r.x را قبلا تولید کردیم در نتیجه میتوان در اینجا فایل resp_mat را اجرا کرد.
در Ucalc / فایل ورودی resp_mat.in را به صورت زیر درنظر بگیرید:
&input_mat
تعداد اتمهایی که برای محاسبه U به کار میرود ntyp=2
تعداد اتمهای Ni برابر na(1) = 8
تعداد اتمهای O برابر na(2) = 8
nalfa = 5 تعداد آلفاهایی که درنظر میگیریم
magn = .true.
filepos = 'pos_nio_r16'
مرتبه species باید یکسان باشد با فایل pos_nio_r16 زیرا ما می خواهیم اسپین نیکل را مشخص کنیم (فایل pos_nio_r16 را ببینید)
back = 'no'
filednda = 'file.nio.r16'
n1 = 5
n2 = 5
n3 = 5
&end
فایل pos_nio_r16 باید به صورت زیر باشد
10.0 10.0 0.0
10.0 0.0 10.0
0.0 10.0 10.0
0.d0 0.d0 0.d0 1
0.5d0 0.5d0 0.d0 1
0.5d0 0.d0 0.5d0 1
0.d0 0.5d0 0.5d0 1
0.5d0 0.d0 0.d0 -1
0.d0 0.5d0 0.d0 -1
0.d0 0.d0 0.5d0 -1
0.5d0 0.5d0 0.5d0 -1
-0.25d0 0.25d0 0.25d0 0
0.25d0 0.25d0 0.25d0 0
-0.25d0 0.25d0 0.75d0 0
-0.25d0 0.75d0 0.25d0 0
0.25d0 0.75d0 0.25d0 0
0.25d0 0.25d0 0.75d0 0
-0.25d0 0.75d0 0.75d0 0
0.25d0 0.75d0 0.75d0 0
همانطور که مشاهده میکنیم در ستون آخر فایل pos_nio_r16 اعداد 1 ، 1- و 0 را مشاهده میکنیم که : (1) برای اسپین بالایNi و(1-) برای اسپین پایین Ni ونیز (0) برای اسپین غیرقطبیده شده O
توجه داشته باشید که اتم های O اسپین 0 دارند (آنها غیرمغناطیسی هستند) در حالی که اتم نیکل 1 یا 1- است.
پس از اجرای فایل resp_mat.in فایل Umat.out حاصل میشود.
در فایل Umat.out میتوان برای ni و o مقادیر زیر را جستجو کرد:
Number of atom , U1
در اینجا نیز اسکریپت ucalc_sc1_pbe.j همه عملیات لازم برای محاسبه U را به طورخودکار انجام میدهد.