Você está na página 1de 2

Em um cálculo DFT padrão no código WIEN2k (e.g.

via algoritmo PORT), conforme mostrado na


figura abaixo à esquerda, um double loop é usado para encontrar as posições atômicas de equilíbrio
que correspondam ao mínimo variacional de energia que satisfaça as equações do ciclo auto
consistente. A grande inovação introduzida pelo algoritmo MSR1a é tratar simultaneamente as
densidades e as posições dos átomos como variáveis em um único loop para encontrar a solução
auto consistente, conforme ilustrado na figura abaixo à direita.

Reporta-se que o procedimento variacional no MSR1a é mais rápido do que o double loop por um
fator de 1.5 a 4.0 nos sistemas usados como estudo de caso no guia de exercícios didáticos do
código. Provavelmente esse fator pode ser até maior para outros sistemas. Para usar o MSR1a:

a) Faça uma convergência preliminar do ciclo scf para algo como –cc 0.1 –ec 0.25 –fc 20 (eu não
recomendo uma convergência total). Ou alternativamente estabeleça os critérios totais de
convergência e monitore o ciclo até a convergência de –cc 0.1 neste exemplo foram necessários 7
ciclos:

calc@lih:~/Gd2Ti2O7$ nohup runsp_lapw -fc 10 -cc 0.0001 -p -i 250 -I </dev/null &>run.out &

calc@lih:~/Gd2Ti2O7$ grep :FGL001 Gd2Ti2O7.scf


:DIS : CHARGE DISTANCE ( 0.8232480 for atom 14 spin 2) 1.7550404 ←1°
:DIS : CHARGE DISTANCE ( 0.7232625 for atom 14 spin 2) 1.5010949 ←2°
:DIS : CHARGE DISTANCE ( 0.5082276 for atom 15 spin 2) 1.3333441 ←3°
:DIS : CHARGE DISTANCE ( 0.1643882 for atom 15 spin 1) 0.4229377 ←4°
:DIS : CHARGE DISTANCE ( 0.1974427 for atom 39 spin 1) 0.3536677 ←5°
:DIS : CHARGE DISTANCE ( 0.1830635 for atom 14 spin 2) 0.2581950 ←6°
:DIS : CHARGE DISTANCE ( 0.1336615 for atom 14 spin 2) 0.1066090 ←7°
b) Altere a chave TOT por FOR em case.in2 (ou case.in2c na falta de simetria de inversão) para o
cálculo das forças totais e aguarde o término do ciclo preliminar ou alternativamente pause o
cálculo através do comando touch .stop (nesse exemplo, no 8º ciclo):
calc@lih-System:~/CALCS_calc-account/Gd2Ti2O7$ grep :FGL001 Gd2Ti2O7.scf
:FGL001: 1.ATOM -43.747388577 -43.748942944 0.004836626 partial forces ←1°
… ….
:FGL001: 1.ATOM -29.009083416 -24.105738103 77.912140383 partial forces ←6°
:FGL001: 1.ATOM -49.232579085 -41.880052298 13.531139822 partial forces ←7°

calc@lih-System:~/CALCS_calc-account/Gd2Ti2O7$ emacs Gd2Ti2O7.in2c

calc@lih-System:~/CALCS_calc-account/Gd2Ti2O7$ grep :FGL001 Gd2Ti2O7.scf


:FGL001: 1.ATOM -43.747388577 -43.748942944 0.004836626 partial forces ←1°
:FGL001: 1.ATOM -42.782994129 -45.205911520 -1.492289923 partial forces ←2°
:FGL001: 1.ATOM -41.123842032 -47.342007202 -3.834321763 partial forces ←3°
:FGL001: 1.ATOM 0.140876130 -11.604186861 -29.471802724 partial forces ←4°
:FGL001: 1.ATOM 16.132864854 19.502342961 12.484549300 partial forces ←5°
:FGL001: 1.ATOM -29.009083416 -24.105738103 77.912140383 partial forces ←6°
:FGL001: 1.ATOM -49.232579085 -41.880052298 13.531139822 partial forces ←7°
:FGL001: 1.ATOM -3.532136783 -15.886487530 25.219352892 total forces ←8°

calc@lih:~/Gd2Ti2O7$ touch .stop

c) Feito isso, execute o comando x pairhess para construção da matriz hessiana (gera o case.inM) e
altere a chave MSR1 por MSR1a em case.inm para ativar o processo de minimização via MSR1a.
Então retome o cálculo e monitore as forças usando o comando grep :FGL case.scf

calc@lih:~/Gd2Ti2O7$ x pairhess

calc@lih:~/Gd2Ti2O7$ emacs Gd2Ti2O7.inm

case.inM present and used for constrains


Average Hessian Eigenvalue 140.0 mRyd/au^2, Frequency 269.52 cm-1
Min & Max of Eigenvalues, mRyd/au^2 46.6 281.4
Min & Max frequencies, cm-1 84 466
Check .minpair, the estimate, and output in ~/Gd2Ti2O7/Gd2Ti2O7.outputpair
PairHess END
1.254u 0.100s 0:01.37 98.5%0+0k 0+2792io 0pf+0w

calc@lih:~/Gd2Ti2O7$ nohup runsp_lapw -fc 10 -cc 0.0001 -p -i 250 -I </dev/null &>run.out &

calc@lih:~/Gd2Ti2O7$ grep :FGL Gd2Ti2O7

d) Quando as forças globais atingirem os critérios desejados, e.g. 5 mRy/a.u (para uma margem de
segurança cerifique-se que tenha-se pelo menos –cc 0.0025 ), execute uma convergência scf final
convencional, trocando a chave MSR1a por MSR1 em case.inm (não precisa pausar o cálculo), e
verifique se as forças estão OK.

Você também pode gostar