def _read_td_nutbar_format(self, filename): f = open(filename, "r") self._skip_comment(f) orbs = Orbits() while True: x = f.tell() entry = f.readline().split() if (entry[0] == "#"): f.seek(x) break orbs.add_orbit(int(entry[1]), int(entry[2]), int(entry[3]), -int(entry[4])) ms = ModelSpace.ModelSpace() ms.set_modelspace_from_orbits(orbs) self.allocate_density(ms) two_body_kets = [] self._skip_comment(f) while True: x = f.tell() entry = f.readline().split() if (len(entry) == 0): break two_body_kets.append((int(entry[1]), int(entry[2]), int(entry[3]))) entry = f.readline().split() self.Jbra = float(entry[6]) self.wflabel_bra = int(entry[7]) self.Jket = float(entry[8]) self.wflabel_ket = int(entry[9]) Jrank = int(float(entry[10])) line = f.readline() while True: x = f.tell() entry = f.readline().split() if (len(entry) == 0): break self.set_1btd(int(entry[0]), int(entry[1]), Jrank, float(entry[2])) line = f.readline() while True: x = f.tell() entry = f.readline().split() if (len(entry) == 0): break a = two_body_kets[int(entry[0])][0] b = two_body_kets[int(entry[0])][1] Jab = two_body_kets[int(entry[0])][2] c = two_body_kets[int(entry[1])][0] d = two_body_kets[int(entry[1])][1] Jcd = two_body_kets[int(entry[1])][2] self.set_2btd_from_indices(a, b, c, d, Jab, Jcd, Jrank, float(entry[2])) print("----------------------------------------") print(" read nutbar-format density ") print(" < Jf_nf | lambda | Ji_ni > ") print(" Ji = {0:6.2f}, ni = {1:3d}".format(self.Jket, self.wflabel_ket)) print(" lambda = {0:3d} ".format(Jrank)) print(" Jf = {0:6.2f}, nf = {1:3d}".format(self.Jbra, self.wflabel_bra)) print("----------------------------------------") f.close()
def _read_td_binary(self, filename, byte_order='little'): with open(filename, "rb") as fp: if (self.ms == None): n_orbs = fp.read(4) n_orbs = int.from_bytes(n_orbs, byteorder=byte_order, signed=True) orbs = Orbits() for i in range(n_orbs): tmp = [] for j in range(4): idx = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) tmp.append(idx) orbs.add_orbit(*tuple(tmp)) ms = ModelSpace() ms.set_modelspace_from_orbits(orbs) self.allocate_density(ms) else: fp.seek(self.ms.orbits.get_num_orbits() * 4 * 4 + 4, 0) if (self.bin_header == None): n = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) self.bin_header = [] for i in range(n): J2bra = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) wflabel_bra = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) J2ket = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) wflabel_ket = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) self.bin_header.append( (J2bra, wflabel_bra, J2ket, wflabel_ket)) else: fp.seek(4 + len(self.bin_header) * 4 * 4, 1) try: n = self.bin_header.index( (int(self.Jbra * 2), self.wflabel_bra, int(self.Jket * 2), self.wflabel_ket)) except: raise ValueError("Mismatch of J and wf label was detected!") for i in range(n): n1 = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) n2 = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) skip_block_size = (n1 * 20) + (n2 * 36) fp.seek(skip_block_size, 1) bin_parser = [] n1 = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) n2 = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) arrs = [] for i in range(n1): a = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) b = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) rank = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) arrs.append((a, b, rank)) bin_parser.append(arrs) arrs = [] for i in range(n2): a = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) b = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) c = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) d = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) Jab = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) Jcd = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) rank = int.from_bytes(fp.read(4), byteorder=byte_order, signed=True) arrs.append((a, b, c, d, Jab, Jcd, rank)) bin_parser.append(arrs) for i in range(n1): idxs = bin_parser[0][i] v = np.frombuffer(fp.read(8), dtype=np.float64)[0] self.set_1btd(*idxs, v) for i in range(n2): idxs = bin_parser[1][i] v = np.frombuffer(fp.read(8), dtype=np.float64)[0] self.set_2btd_from_indices(*idxs, v) return
def _read_td_kshell_format(self, filename): if (not os.path.exists(filename)): print("file is not found {}".format(filename)) return f = open(filename, 'r') orbs = Orbits() flag = True for i in range(200): line = f.readline() if (line[1:12] == "model space"): flag = False break if (flag): print("The file {:s} might be crushed. Please check it!".format( filename)) return while True: entry = f.readline().split() if (len(entry) == 0): break if (entry[0] == 'k,'): continue orbs.add_orbit(int(entry[1]), int(entry[2]), int(entry[3]), int(entry[4])) #ms = ModelSpace.ModelSpace() ms = ModelSpace() ms.set_modelspace_from_orbits(orbs) self.allocate_density(ms) lines = f.readlines() f.close() i = 0 i_obtd = 0 i_tbtd = 0 store_obtd = False store_tbtd = False for line in lines: i += 1 if (not line.startswith("OBTD:")): i_obtd = 0 if (not line.startswith("TBTD:")): i_tbtd = 0 if (line.startswith("OBTD:")): if (i_obtd == 0): str1 = lines[i - 3] if (str1[0:4] != 'w.f.'): print("see file " + filename + " at line " + str(i)) d = str1.split() j2_bra = int(d[2][:-3]) j2_ket = int(d[5][:-3]) i_bra = int(d[3][:-1]) i_ket = int(d[6][:-1]) if (j2_bra == int(2 * self.Jbra) and j2_ket == int(2 * self.Jket) and i_bra == self.wflabel_bra and i_ket == self.wflabel_ket): store_obtd = True if (j2_bra != int(2 * self.Jbra) or j2_ket != int(2 * self.Jket) or i_bra != self.wflabel_bra or i_ket != self.wflabel_ket): store_obtd = False if (not store_obtd): i_obtd = -1 if (store_obtd): data = line.split() a, b, jr, wf_label_bra, wf_label_ket, me = int(data[1]), int(data[2]), int(data[4]), \ int(data[6]), int(data[7]), float(data[9]) self.set_1btd(a, b, jr, me) i_obtd += 1 continue if (line.startswith("TBTD")): if (i_tbtd == 0): str1 = lines[i - 3] if (str1[0:4] != 'w.f.'): print("see file " + filename + " at line " + str(i)) d = str1.split() j2_bra = int(d[2][:-3]) j2_ket = int(d[5][:-3]) i_bra = int(d[3][:-1]) i_ket = int(d[6][:-1]) if (j2_bra == int(2 * self.Jbra) and j2_ket == int(2 * self.Jket) and i_bra == self.wflabel_bra and i_ket == self.wflabel_ket): store_tbtd = True if (j2_bra != int(2 * self.Jbra) or j2_ket != int(2 * self.Jket) or i_bra != self.wflabel_bra or i_ket != self.wflabel_ket): store_tbtd = False if (not store_tbtd): i_tbtd = -1 if (store_tbtd): data = line.split() a, b, c, d, Jab, Jcd, Jr, wf_label_bra, wf_label_ket, me = \ int(data[1]), int(data[2]), int(data[3]), int(data[4]), \ int(data[6]), int(data[7]), int(data[8]), \ int(data[10]), int(data[11]), float(data[13]) self.set_2btd_from_indices(a, b, c, d, Jab, Jcd, Jr, me) i_tbtd += 1 continue