Skip to content

Latest commit

 

History

History
271 lines (219 loc) · 13 KB

File metadata and controls

271 lines (219 loc) · 13 KB

بررسی Nio

حرکت کنید به سمت NiO_ldau . مطالعه فایل ورودی (run_NiO_r16_ucalc) برای محاسبه U در این مورد آموزنده است. برای این سیستم ما می خواهیم U را برای Ni و O بسنجیم. مسائل قابل توجه :
1 ) به طور رسمی دو نوع اتم نیکل وجود دارد ؛ هرچند آنها تنها برای داشتن مغناطش متضاد متفاوت هستند، به طوری که تنها یکی از آنها برآشفته خواهد شد. پاسخ به یک اختلال در ثانیه با استفاده از تقارن بین دو اسپین بدست می آید.
2) زمانیکه تخمین پاسخ اختلال روی اکسیژن یک محاسبه SCF جدید را اجرا می‌کند اکسیژن برآشفته به سلول واحد مبدا برمیگردد. این کار برای حفظ بیشترین تعداد ممکن از تقارن اجرا می‌شود.
3) اتمی که در آن اختلال اعمال می‌شود نوع متفاوتی از دیگران است که توسط PP یکسان توصیف می‌شود.

محاسبه scf

ابتدا دو فایل وروری داریم که محاسبات را بر اساس 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

در اینجا نیز روی فایل 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 ایجاد می‌شود.

محاسبه resp_mat

از آنجایی‌که فایل 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 را به طورخودکار انجام می‌دهد.