示例#1
0
    def __init__(self, temperatures, energies):
        if len(temperatures) != len(energies):
            print("Gibbs: data size are different !")
            exit()

        data = []
        for temp, ene in zip(temperatures, energies):
            data.append({'temp': float(temp), 'gibbs': float(ene)})
        DataBox.__init__(self, data)
示例#2
0
 def __init__(self, dos):
     DataBox.__init__(self, [])
     self.dos_lines = Cabinet.read_file(dos)
     self.num_atoms = self.get_num_atoms(self.dos_lines[0])
     (self.num_energy,
      self.fermi_energy) = self.get_parameters(self.dos_lines[5])
     print(self.get_parameters(self.dos_lines[5]))
     self.dos_data = self.__prep_dos_data(self.num_atoms,
                                          self.labels_orbital)
示例#3
0
 def __init__(self, data):
     """
     DataBox の labels
         label: クラスターのラベル R*N*
         MxCls: MaxCluster の個数
         CV_score: CV score
     """
     DataBox.__init__(self, data)
     self.output_keys = []
示例#4
0
 def __init__(self, temps, fit_params):
     data = []
     for temp, param in zip(temps, fit_params):
         [G, B, B1, V0] = param
         data.append({'temp': float(temp), 'G_P0': float(G),
                      'gibbs': float(G),
                      'B': float(B), 'B1': float(B1), 'V0': float(V0)})
     DataBox.__init__(self, data)
     self.is_per_atom = False
     self.pressure = 0
示例#5
0
 def __init__(self, compound, refs):
     if (compound.murnaghan['temp'] != refs.temp).all():
         print('Enthalpy: Temperatures are different !')
         exit()
     temp = [{'temp': x} for x in refs.temp]
     self.compound = compound
     self.murnaghan = compound.murnaghan
     self.refs = refs
     self.comp = compound.comp
     DataBox.__init__(self, temp)
     self['enthalpy'] = self.enthalpy()
示例#6
0
 def __init__(self, path_list, poscar='POSCAR', output='OSZICAR'):
     """
     initialize
     """
     if not path_list:
         print("path_list is empty !!!")
     self.filetype = {'poscar': poscar, 'output': output}
     self.path_list = path_list
     DataBox.__init__(self, self.get_data())
     #self.data, self.comp = self.get_data()
     #self.trim_bool(self.data, self.data['bool'], 'energy', 'mag')
     self.output_keys = []
示例#7
0
 def __init__(self, procar):
     """
     self.dataの構成
     'kpoint_id', 'orbitals_phase', 'kpoint', 'energy', 'spin'
     'orbitals_tot', 'occupancy'
     """
     flow_procar = open(procar)
     line = flow_procar.readline()
     line = flow_procar.readline()
     (self.num_kpoints,
      self.num_bands,
      self.num_atoms) = self.get_meta(line)
     print(self.get_meta(line))
     DataBox.__init__(self, self.get_data(flow_procar))
示例#8
0
    def table_combi(self, sites, out_key):
        """
        self.dataをcombi用のtableに整形
        POSCARでのcombiの元素位置をsiteに指定
        __str__()でx:site[0], y:site[1]の元素でtableが出力
        """
        data_list = self.separate_data('elements', sites[1])
        tmp_table = []

        tmp_key = [x[sites[0]] for x in self['elements']]
        keys = sorted(set(tmp_key), key=tmp_key.index)

        for data in data_list:
            add_dict = {out_key: data.data[1]['elements'][sites[1]]}
            add_dict.update({x['elements'][sites[0]]: x[out_key]
                             for x in data.data})
            tmp_table.append(add_dict)
        table = DataBox(tmp_table)
        table.output_keys = [out_key] + keys
        return table
 def __init__(self, procar, poscar=None):
     """
     self.dataの構成
     'kpoint_id', 'orbitals_phase', 'kpoint', 'energy', 'spin'
     'orbitals_tot', 'occupancy'
     'dk', 'xaxis'を追加
     'dk'は前のk点からのk空間上の距離,
     'xaxis'はそれを積算したものでband描写の横軸に用いる
     poscarを読み込ませることで逆格子cellの各軸の長さを反映させて,
     bandの横軸の長さを対応させることができる
     defaultではposcarは読まずに、a*, b*, c*の長さは全て1
     """
     with open(procar, 'r') as flow_procar:
         line = flow_procar.readline()
         line = flow_procar.readline()
         (self.num_kpoints,
          self.num_bands,
          self.num_atoms) = self.get_meta(line)
         print(self.get_meta(line))
         DataBox.__init__(self, self.get_data(flow_procar))
示例#10
0
def md_voldep(cutoff, wo_fit, vrange):
    """
    md 計算の体積依存性を plot する
    """
    path = "voldep/*/OSZICAR"
    dir_list = [os.path.dirname(x) for x in glob.glob(path)]
    average = []

    sb_dark = seaborn.dark_palette("skyblue", 10, reverse=True)
    # sb_dark = seaborn.dark_palette("seagreen", 10, reverse=True)
    # sb_dark = seaborn.dark_palette("purple", 10, reverse=True)
    seaborn.set(palette=sb_dark)
    fig, axes = pylab.subplots(2, 1, figsize=(5, 10))

    for dirc in dir_list:
        with open(os.path.join(dirc, 'OUTCAR')) as wfile:
            lines = wfile.readlines()
        meta = re.compile(r".*external pressure = \s*(.*)\s+kB.+")
        pressure = []
        for line in lines:
            match = meta.match(line)
            if match:
                pressure.append(float(match.group(1)))

        with open(os.path.join(dirc, 'OSZICAR')) as wfile:
            lines = wfile.readlines()
        meta = re.compile(r".+T=\s*(.*)\s+E=\s*(.*)\s+F=.+")
        energy = []
        for line in lines:
            match = meta.match(line)
            if match:
                energy.append(float(match.group(2)))
        data = [{'energy':e, 'pressure':p} for e, p in zip(energy, pressure)]
        dbox = DataBox(data)
        volume = float(dirc.split('_')[1])
        press_ave = dbox['pressure'][cutoff:].mean()
        energy_ave = dbox['energy'][cutoff:].mean()
        average.append({'volume':volume, 'p': press_ave, 'e': energy_ave})
        label = "V={0:.0f}".format(float(dirc.split("_")[-1]))
        seaborn.distplot(dbox['pressure'][cutoff:], label=label, ax=axes[0])

    axes[0].legend(loc='upper left')
    axes[0].set_ylabel("Frequency")
    axes[0].set_xlabel("Pressuer (kbar)")
    average_data = DataBox(average)
    average_data.sorted('volume')
    if vrange != (0, 0):
        average_data = average_data.trim_data_within_range('volume', vrange)
    axes[1].plot(average_data['volume'],
                 average_data['p'], 'p', color=sb_dark[-1])
    axes[1].set_ylabel(r"Pressuer (kbar)")
    axes[1].set_xlabel(r"Volume ($\AA^3$)")
    fig.subplots_adjust(left=0.20)
    if not wo_fit:
        xi, yi = FitData.Stineman_interp_fit(average_data['volume'],
                                             average_data['p'])
        axes[1].plot(xi, yi)
        idx = np.abs(yi).argmin()
        print("v0: {0}, p0: {1}".format(xi[idx], yi[idx]))
        print("v0**(1/3): {0}".format(xi[idx]**(1/3)))
        axes[1].plot(xi[idx], yi[idx], 'o')
    pylab.savefig("pressure.eps")
示例#11
0
 def __init__(self, path_list):
     self.path_list = path_list
     DataBox.__init__(self, self.get_data())
     self.output_keys = []
示例#12
0
 def __init__(self, data):
     DataBox.__init__(self, data)
示例#13
0
 def __init__(self, data):
     DataBox.__init__(self, data)
     self.output_keys = []
示例#14
0
 def __init__(self, temperatures, bulk_mods):
     data = []
     for temp, bulk in zip(temperatures, bulk_mods):
         data.append({'temp': float(temp), 'bulk': float(bulk)})
     DataBox.__init__(self, data)