Statistiques
| Révision :

root / ase / calculators / jacapo / changed.py @ 1

Historique | Voir | Annoter | Télécharger (4,55 ko)

1 1 tkerber
import numpy as np
2 1 tkerber
3 1 tkerber
import logging
4 1 tkerber
log = logging.getLogger('Jacapo')
5 1 tkerber
6 1 tkerber
'''
7 1 tkerber
provides functions to determine if an input parameter has changed.
8 1 tkerber
'''
9 1 tkerber
10 1 tkerber
#######################################################################
11 1 tkerber
#### changed functions
12 1 tkerber
13 1 tkerber
def kpts_changed(calc, x):
14 1 tkerber
    '''
15 1 tkerber
    check if kpt grid has changed.
16 1 tkerber

17 1 tkerber
    we have to take care to generate teh right k-points from x if
18 1 tkerber
    needed. if a user provides (4,4,4) we need to generate the MP
19 1 tkerber
    grid, etc...
20 1 tkerber

21 1 tkerber
    Since i changed the MP code in set_kpts, there is some
22 1 tkerber
    incompatibility with old jacapo calculations and their MP
23 1 tkerber
    grids.
24 1 tkerber
    '''
25 1 tkerber
    #chadi-cohen
26 1 tkerber
    if isinstance(x, str):
27 1 tkerber
        exec('from ase.dft.kpoints import %s' % kpts)
28 1 tkerber
        listofkpts = eval(kpts)
29 1 tkerber
    #monkhorst-pack grid
30 1 tkerber
    elif np.array(x).shape == (3,):
31 1 tkerber
        from ase.dft.kpoints import monkhorst_pack
32 1 tkerber
        N1, N2, N3 = x
33 1 tkerber
        listofkpts = monkhorst_pack((N1, N2, N3))
34 1 tkerber
    #user-defined list is provided
35 1 tkerber
    elif len(np.array(x).shape) == 2:
36 1 tkerber
        listofkpts = np.array(x)
37 1 tkerber
    else:
38 1 tkerber
        raise Exception, 'apparent invalid setting for kpts'
39 1 tkerber
40 1 tkerber
    grid = calc.get_kpts()
41 1 tkerber
42 1 tkerber
    if grid.shape != listofkpts.shape:
43 1 tkerber
        return True
44 1 tkerber
45 1 tkerber
    if (abs(listofkpts - grid) < 1e-6).all():
46 1 tkerber
        return False
47 1 tkerber
    else:
48 1 tkerber
        return True
49 1 tkerber
50 1 tkerber
def electronic_minimization_changed(calc, x):
51 1 tkerber
    myx = calc.get_electronic_minimization()
52 1 tkerber
53 1 tkerber
    for key in myx:
54 1 tkerber
        if myx[key] != x[key]:
55 1 tkerber
            print key, myx[key], ' changed to ', x[key]
56 1 tkerber
            return True
57 1 tkerber
    return False
58 1 tkerber
59 1 tkerber
def spinpol_changed(calc, x):
60 1 tkerber
    if x != calc.get_spinpol():
61 1 tkerber
        return True
62 1 tkerber
    else:
63 1 tkerber
        return False
64 1 tkerber
65 1 tkerber
def symmetry_changed(calc, x):
66 1 tkerber
    if x != calc.get_symmetry():
67 1 tkerber
        return True
68 1 tkerber
    else:
69 1 tkerber
        return False
70 1 tkerber
71 1 tkerber
def xc_changed(calc, x):
72 1 tkerber
    if x != calc.get_xc():
73 1 tkerber
        return True
74 1 tkerber
    return False
75 1 tkerber
76 1 tkerber
def calculate_stress_changed(calc, x):
77 1 tkerber
    if x != calc.get_calculate_stress():
78 1 tkerber
        return True
79 1 tkerber
    return False
80 1 tkerber
81 1 tkerber
def ados_changed(calc, x):
82 1 tkerber
    ados = calc.get_ados()
83 1 tkerber
84 1 tkerber
    #ados may not be defined, and then None is returned
85 1 tkerber
    if ados is None and x is None:
86 1 tkerber
        return False
87 1 tkerber
    elif ados is None and x is not None:
88 1 tkerber
        return True
89 1 tkerber
    elif ados is not None and x is None:
90 1 tkerber
        return True
91 1 tkerber
92 1 tkerber
    #getting here means ados and x are not none so we compare them
93 1 tkerber
    for key in x:
94 1 tkerber
        try:
95 1 tkerber
            if x[key] != ados[key]:
96 1 tkerber
                return True
97 1 tkerber
        except ValueError:
98 1 tkerber
            if (x[key] != ados[key]).all():
99 1 tkerber
                return True
100 1 tkerber
    return False
101 1 tkerber
102 1 tkerber
def convergence_changed(calc, x):
103 1 tkerber
    conv = calc.get_convergence()
104 1 tkerber
    for key in x:
105 1 tkerber
        if x[key] != conv[key]:
106 1 tkerber
            return True
107 1 tkerber
    return False
108 1 tkerber
109 1 tkerber
def charge_mixing_changed(calc, x):
110 1 tkerber
    cm = calc.get_charge_mixing()
111 1 tkerber
    if x is None and cm is None:
112 1 tkerber
        return False
113 1 tkerber
    else:
114 1 tkerber
        return True
115 1 tkerber
116 1 tkerber
    for key in x:
117 1 tkerber
        if x[key] != cm[key]:
118 1 tkerber
            return True
119 1 tkerber
    return False
120 1 tkerber
121 1 tkerber
def decoupling_changed(calc, x):
122 1 tkerber
    pars = calc.get_decoupling()
123 1 tkerber
    for key in x:
124 1 tkerber
        if x[key] != pars[key]:
125 1 tkerber
            return True
126 1 tkerber
    return False
127 1 tkerber
128 1 tkerber
def dipole_changed(calc, x):
129 1 tkerber
    pars = calc.get_dipole()
130 1 tkerber
    if pars is False and x is False:
131 1 tkerber
        return False
132 1 tkerber
    elif pars is not False:
133 1 tkerber
        for key in x:
134 1 tkerber
            if x[key] != pars[key]:
135 1 tkerber
                return True
136 1 tkerber
        return False
137 1 tkerber
138 1 tkerber
def extpot_changed(calc, x):
139 1 tkerber
    extpot = calc.get_extpot()
140 1 tkerber
    if (x == extpot).all():
141 1 tkerber
        return False
142 1 tkerber
    return True
143 1 tkerber
144 1 tkerber
def fftgrid_changed(calc, x):
145 1 tkerber
    validkeys = ['soft', 'hard']
146 1 tkerber
147 1 tkerber
    myx = calc.get_fftgrid()
148 1 tkerber
    if (myx['soft'] == x['soft'] and myx['hard'] == x['hard']):
149 1 tkerber
        return False
150 1 tkerber
    else:
151 1 tkerber
        return True
152 1 tkerber
153 1 tkerber
154 1 tkerber
def nbands_changed(calc, x):
155 1 tkerber
    if calc.get_nbands() == x:
156 1 tkerber
        return False
157 1 tkerber
    else:
158 1 tkerber
        return True
159 1 tkerber
160 1 tkerber
def occupationstatistics_changed(calc, x):
161 1 tkerber
    if calc.get_occupationstatistics() == x:
162 1 tkerber
        return False
163 1 tkerber
    else:
164 1 tkerber
        return True
165 1 tkerber
166 1 tkerber
def pw_changed(calc, x):
167 1 tkerber
    if calc.get_pw() == x:
168 1 tkerber
        return False
169 1 tkerber
    else:
170 1 tkerber
        return True
171 1 tkerber
172 1 tkerber
def dw_changed(calc, x):
173 1 tkerber
    if calc.get_dw() == x:
174 1 tkerber
        return False
175 1 tkerber
    else:
176 1 tkerber
        return True
177 1 tkerber
178 1 tkerber
def ft_changed(calc, x):
179 1 tkerber
    if calc.get_ft() == x:
180 1 tkerber
        return False
181 1 tkerber
    else:
182 1 tkerber
        return True
183 1 tkerber
184 1 tkerber
def mdos_changed(calc,x):
185 1 tkerber
186 1 tkerber
    myx = calc.get_mdos()
187 1 tkerber
188 1 tkerber
    log.debug('myx = %s' % str(myx))
189 1 tkerber
    log.debug('x = %s' % str(x))
190 1 tkerber
191 1 tkerber
    if x is None and myx is None:
192 1 tkerber
        return False
193 1 tkerber
    elif ((x is None and myx is not None)
194 1 tkerber
        or (x is not None and myx is None)):
195 1 tkerber
        return True
196 1 tkerber
    else:
197 1 tkerber
        for key in x:
198 1 tkerber
            if x[key] != myx[key]:
199 1 tkerber
                return True
200 1 tkerber
    return False