def test(): from tempfile import mkdtemp from shutil import rmtree from os.path import join, exists from os import mkdir from pylada.dftcrystal import Crystal, Functional, Shell from pylada.dftcrystal.properties import Properties from pylada import default_comm functional = Functional() functional.basis['Si'] = [ Shell('s', a0=[16120.0, 0.001959], a1=[2426.0, 0.01493], a2=[553.9, 0.07285], a3=[156.3, 0.2461], a4=[50.07, 0.4859], a5=[17.02, 0.325]), Shell('sp', a0=[292.7, -0.002781, 0.004438], a1=[69.87, -0.03571, 0.03267], a2=[22.34, -0.115, 0.1347], a3=[8.15, 0.09356, 0.3287], a4=[3.135, 0.603, 0.4496]), Shell('sp', 4.0, a0=[1.22, 1.0, 1.0]), Shell('sp', 0.0, a0=[0.55, 1.0, 1.0]), Shell('sp', 0.0, a0=[0.27, 1.0, 1.0]) ] functional.dft.pbe0 = True functional.fmixing = 30 functional.shrink = 8, 16 functional.levshift = 5, True functional.maxcycle = 600 functional.dft.spin = True crystal = Crystal(227, 5.43).add_atom(0.125, 0.125, 0.125, 'Si') directory = mkdtemp() if directory == '/tmp/test/': rmtree(directory) mkdir(directory) firstdir, seconddir = join(directory, '0'), join(directory, '1') try: si = functional(crystal, outdir=firstdir, comm=default_comm) assert exists(join(firstdir, 'crystal.f9')) assert not exists(join(directory, 'crystal.f98')) properties = Properties(si) properties.rdfmwf = True result = properties(outdir=directory, workdir=join(directory, 'try0')) assert result.success assert exists(join(directory, 'crystal.f9')) assert not exists(join(directory, 'crystal.f98')) properties = Properties(directory) properties.fmwf = True result = properties(outdir=directory, workdir=join(directory, 'try1')) assert not exists(join(directory, 'crystal.f98')) result = properties(outdir=directory, workdir=join(directory, 'try1'), overwrite=True) assert result.success assert exists(join(directory, 'crystal.f98')) finally: if directory != '/tmp/test/': rmtree(directory)
def test_rdfmwf(): from collections import namedtuple from shutil import rmtree from tempfile import mkdtemp from os.path import join, exists from os import remove from pylada.dftcrystal.properties import Properties from pylada.error import IOError Extract = namedtuple('Extract', ['directory']) try: indir = mkdtemp() outdir = mkdtemp() extract = Extract(indir) a = Properties(input=extract) assert a.rdfmwf is None assert len(a.output_map(filework=False)) == 0 assert len(a.print_input(filework=False)) == 0 try: a.output_map(filework=True, workdir=outdir) except IOError: pass else: raise Exception() a.rdfmwf = True assert len(a.output_map(filework=False)) == 1 assert a.output_map(filework=False)['rdfmwf'] == True try: a.output_map(filework=True, workdir=outdir) except IOError: pass else: raise Exception() a.rdfmwf = False assert len(a.output_map(filework=False)) == 0 try: a.output_map(filework=True, workdir=outdir) except IOError: pass else: raise Exception() # now with .f98 file with open(join(indir, 'crystal.f98'), 'w') as file: file.write('hello') a.rdfmwf = None assert len(a.output_map(filework=False)) == 1 assert a.output_map(filework=False)['rdfmwf'] == True assert not exists(join(outdir, 'fort.98')) # should fail a.rdfmwf = False try: a.output_map(filework=True, workdir=outdir) except IOError: pass else: raise Exception() # now check writing a.rdfmwf = None assert not exists(join(outdir, 'fort.98')) assert a.output_map(filework=True, workdir=outdir)['rdfmwf'] == True assert exists(join(outdir, 'fort.98')) remove(join(outdir, 'fort.98')) a.rdfmwf = True assert not exists(join(outdir, 'fort.98')) assert a.output_map(filework=True, workdir=outdir)['rdfmwf'] == True assert exists(join(outdir, 'fort.98')) remove(join(indir, 'crystal.f98')) remove(join(outdir, 'fort.98')) with open(join(outdir, 'crystal.f98'), 'w') as file: file.write('hello') assert exists(join(outdir, 'crystal.f98')) assert not exists(join(outdir, 'fort.98')) assert a.output_map(filework=True, workdir=outdir, outdir=outdir)['rdfmwf'] == True assert exists(join(outdir, 'fort.98')) remove(join(outdir, 'fort.98')) # now for .f9 with open(join(indir, 'crystal.f9'), 'w') as file: file.write('hello') a.rdfmwf = None assert len(a.output_map(filework=False)) == 0 assert not exists(join(outdir, 'fort.9')) # should fail a.rdfmwf = True try: a.output_map(filework=True, workdir=outdir) except IOError: pass else: raise Exception() # now check writing a.rdfmwf = None assert not exists(join(outdir, 'fort.9')) assert len(a.output_map(filework=True, workdir=outdir)) == 0 assert exists(join(outdir, 'fort.9')) remove(join(outdir, 'fort.9')) a.rdfmwf = False assert not exists(join(outdir, 'fort.9')) assert len(a.output_map(filework=True, workdir=outdir)) == 0 assert exists(join(outdir, 'fort.9')) remove(join(indir, 'crystal.f9')) remove(join(outdir, 'fort.9')) with open(join(outdir, 'crystal.f9'), 'w') as file: file.write('hello') assert not exists(join(outdir, 'fort.9')) assert exists(join(outdir, 'crystal.f9')) assert len(a.output_map(filework=True, workdir=outdir, outdir=outdir)) == 0 assert exists(join(outdir, 'fort.9')) remove(join(outdir, 'fort.9')) finally: try: rmtree(indir) except: pass try: rmtree(outdir) except: pass