Example #1
0
def init_bands_parameters():
    """Fixture for a set of general input parameters for band structure calculations."""
    general_parameters = AttributeDict()
    general_parameters.bands = AttributeDict()
    general_parameters.bands.decompose_bands = False
    general_parameters.bands.decompose_wave = False

    return general_parameters
Example #2
0
def test_orbital_projections():  # pylint: disable=too-many-statements
    """Test the parameters associated with orbital projections."""
    parameters = AttributeDict()
    parameters.bands = AttributeDict()
    parameters.bands.decompose_wave = True
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 5
    parameters.bands.decompose_wave = False
    parameters.bands.decompose_bands = True
    parameters.bands.decompose_auto = True
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 14
    parameters.bands.decompose_auto = False
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 10
    parameters.bands.lm = True
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 11
    parameters.bands.phase = True
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 12
    parameters.bands.lm = False
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 12

    # Now do the once with a Wigner-Seitz radius supplied
    parameters.bands.wigner_seitz_radius = [2.0]
    parameters.bands.lm = False
    parameters.bands.phase = False
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 0
    print(massager.parameters.rwigs)
    assert int(massager.parameters.rwigs[0]) == 2
    parameters.bands.lm = True
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 1
    parameters.bands.phase = True
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 2
    parameters.bands.lm = False
    massager = ParametersMassage(None, parameters)
    assert massager.exit_code is None
    assert massager.parameters.lorbit == 2

    # Should raise ValueError if Wigner-Seitz radius is not defined as a list.
    parameters.bands.wigner_seitz_radius = 2.0
    with pytest.raises(ValueError):
        massager = ParametersMassage(None, parameters)
Example #3
0
def test_inherit_and_merge():
    """Test the inherit and merge functionality for the parameters and inputs."""
    from aiida.plugins import DataFactory
    from aiida_vasp.assistant.parameters import inherit_and_merge_parameters

    inputs = AttributeDict()
    inputs.bands = AttributeDict()
    inputs.bands.somekey = DataFactory('bool')(True)
    inputs.relax = AttributeDict()
    inputs.relax.somekey = DataFactory('bool')(True)
    inputs.smearing = AttributeDict()
    inputs.smearing.somekey = DataFactory('bool')(True)
    inputs.charge = AttributeDict()
    inputs.charge.somekey = DataFactory('bool')(True)
    inputs.converge = AttributeDict()
    inputs.converge.somekey = DataFactory('bool')(True)
    inputs.electronic = AttributeDict()
    inputs.electronic.somekey = DataFactory('bool')(True)
    inputs.dynamics = AttributeDict()
    inputs.dynamics.somekey = DataFactory('bool')(True)
    # Check that parameters does not have to be present
    parameters = inherit_and_merge_parameters(inputs)
    # Check that an empty parameters is allowed
    inputs.parameters = DataFactory('dict')(dict={})
    parameters = inherit_and_merge_parameters(inputs)
    test_parameters = AttributeDict({
        'electronic':
        AttributeDict({'somekey': True}),
        'bands':
        AttributeDict({'somekey': True}),
        'smearing':
        AttributeDict({'somekey': True}),
        'charge':
        AttributeDict({'somekey': True}),
        'relax':
        AttributeDict({'somekey': True}),
        'converge':
        AttributeDict({'somekey': True}),
        'dynamics':
        AttributeDict({'somekey': True})
    })
    assert parameters == test_parameters
    # Test ignored
    inputs.ignored = AttributeDict()
    inputs.ignored.ignored = DataFactory('bool')(True)
    parameters = inherit_and_merge_parameters(inputs)
    assert parameters == test_parameters
    # Test to override inputs.bands.somekey
    inputs.parameters = DataFactory('dict')(dict={'bands': {'somekey': False}})
    parameters = inherit_and_merge_parameters(inputs)
    test_parameters.bands.somekey = False
    assert parameters == test_parameters