@@ -103,8 +103,12 @@ def __init__(
103
103
task_type ,
104
104
fft_grid_tolerance : float ,
105
105
) -> None :
106
+ """
107
+ Based on details of the inputted calculation, creates a set of valid inputs that
108
+ must be matched (or better). Also parses some of the inputted calc parameters for easier comparison.
106
109
# MK: unclear. I think a thorough docstring describing how this class init
107
110
# operates, in chronological order, would be best.
111
+ """
108
112
self .parameters = copy .deepcopy (parameters )
109
113
self .defaults = copy .deepcopy (defaults )
110
114
self .input_set = input_set
@@ -152,14 +156,15 @@ def __init__(
152
156
self .defaults [key ][attr ] = self .defaults [key ].get (attr , self ._default_defaults [attr ])
153
157
154
158
def add_defaults_to_parameters (self , valid_values_source : dict | None = None ) -> None :
155
- # update parameters with initial defaults
159
+ """ update parameters with initial defaults"""
156
160
valid_values_source = valid_values_source or self .valid_values
157
161
158
162
for key in self .defaults :
159
163
self .parameters [key ] = self .parameters .get (key , self .defaults [key ]["value" ])
160
164
self .valid_values [key ] = valid_values_source .get (key , self .defaults [key ]["value" ])
161
165
162
166
def update_u_params (self ) -> None :
167
+ """update GGA+U params"""
163
168
if not self .parameters ["LDAU" ]:
164
169
return
165
170
@@ -177,6 +182,7 @@ def update_u_params(self) -> None:
177
182
self .defaults [key ]["operation" ] = "=="
178
183
179
184
def update_symmetry_params (self ) -> None :
185
+ """update symmetry-related parameters"""
180
186
# ISYM.
181
187
if self .parameters ["LHFCALC" ]:
182
188
self .defaults ["ISYM" ]["value" ] = 3
@@ -203,6 +209,7 @@ def update_symmetry_params(self) -> None:
203
209
)
204
210
205
211
def update_startup_params (self ) -> None :
212
+ """update VASP initialization params"""
206
213
self .valid_values ["ISTART" ] = [0 , 1 , 2 ]
207
214
208
215
# ICHARG.
@@ -214,6 +221,7 @@ def update_startup_params(self) -> None:
214
221
self .defaults ["ICHARG" ]["operation" ] = "=="
215
222
216
223
def update_precision_params (self ) -> None :
224
+ """update VASP parameters related to precision"""
217
225
# LREAL.
218
226
# Do NOT use the value for LREAL from the `Vasprun.parameters` object, as VASP changes these values
219
227
# relative to the INCAR. Rather, check the LREAL value in the `Vasprun.incar` object.
@@ -255,6 +263,7 @@ def update_precision_params(self) -> None:
255
263
}
256
264
257
265
def update_misc_params (self ) -> None :
266
+ """Update miscellaneous params that do not fall into another category"""
258
267
# EFERMI. Only available for VASP >= 6.4. Should not be set to a numerical
259
268
# value, as this may change the number of electrons.
260
269
# self.vasp_version = (major, minor, patch)
@@ -318,6 +327,7 @@ def update_misc_params(self) -> None:
318
327
)
319
328
320
329
def update_hybrid_functional_params (self ) -> None :
330
+ """update params related to hybrid functionals"""
321
331
self .valid_values ["LHFCALC" ] = self .input_set .incar .get ("LHFCALC" , self .defaults ["LHFCALC" ]["value" ])
322
332
323
333
if self .valid_values ["LHFCALC" ]:
@@ -339,6 +349,7 @@ def update_hybrid_functional_params(self) -> None:
339
349
)
340
350
341
351
def update_fft_params (self ) -> None :
352
+ """update parameters related to the FFT grid."""
342
353
# NGX/Y/Z and NGXF/YF/ZF. Not checked if not in INCAR file (as this means the VASP default was used).
343
354
if any (i for i in ["NGX" , "NGY" , "NGZ" , "NGXF" , "NGYF" , "NGZF" ] if i in self .incar .keys ()):
344
355
self .valid_values ["ENMAX" ] = max (
@@ -410,6 +421,7 @@ def update_lmaxmix_and_lmaxtau(self) -> None:
410
421
self .defaults [key ]["operation" ] = "=="
411
422
412
423
def update_smearing (self , bandgap_tol = 1.0e-4 ) -> None :
424
+ """update parameters related to smearing. This is based on the final bandgap obtained in the calc."""
413
425
bandgap = self .task_doc .output .bandgap
414
426
415
427
smearing_comment = f"This is flagged as incorrect because this calculation had a bandgap of { round (bandgap ,3 )} "
@@ -503,6 +515,7 @@ def _get_default_nbands(self):
503
515
return int (default_nbands )
504
516
505
517
def update_electronic_params (self ):
518
+ """update electronic params"""
506
519
# ENINI. Only check for IALGO = 48 / ALGO = VeryFast, as this is the only algo that uses this tag.
507
520
if self .parameters ["IALGO" ] == 48 :
508
521
self .valid_values ["ENINI" ] = self .valid_values ["ENMAX" ]
@@ -560,6 +573,7 @@ def update_electronic_params(self):
560
573
self .parameters ["NBANDS" ] = [self .parameters ["NBANDS" ] for _ in range (2 )]
561
574
562
575
def update_ionic_params (self ):
576
+ """update params related to ionic relaxation"""
563
577
# IBRION.
564
578
self .valid_values ["IBRION" ] = [- 1 , 1 , 2 ]
565
579
if self .input_set .incar .get ("IBRION" ):
@@ -640,9 +654,11 @@ class BasicValidator:
640
654
operations : tuple [str , ...] = ("==" , ">" , ">=" , "<" , "<=" , "in" , "approx" , "auto fail" )
641
655
642
656
def __init__ (self , global_tolerance = 1.0e-4 ) -> None :
657
+ """ """
643
658
self .tolerance = global_tolerance
644
659
645
660
def _comparator (self , x : Any , operation : str , y : Any , ** kwargs ) -> bool :
661
+ """compares different values using one out of a set of supported operations"""
646
662
if operation == "auto fail" :
647
663
c = False
648
664
elif operation == "==" :
0 commit comments