import numpy as np def readswash(filename, nx, nlay): with open(filename, "r") as f: content = f.readlines() fsurf = [] klay = np.zeros((7203, nlay+1, nx)) brkp = [] Vxfield = np.zeros((7203, nlay+1, nx)) Vyfield = np.zeros((7203, nlay+1, nx)) Vzfield = np.zeros((7203, nlay+1, nx)) ts = [] t = 0 for i in range(len(content)): if ( content[i][33:93] == "Layer interface k=00" ): layint0 = content[i + 7].split(".") layint1 = content[i + 12].split(".") surftemp = ( [float(layint0[0].split()[1])] + layint0[1:-1] + [float(layint1[0].split()[1])] + layint1[1:-1] ) j = 0 while j < len(surftemp): surftemp[j] = float(surftemp[j]) j += 1 fsurf.append(np.asarray(surftemp) / 10) if content[i][33:56] == "Flow velocity per layer": k = int(content[i][83:85]) layint0 = content[i + 7].split(".") layint1 = content[i + 12].split(".") vktemp = ( [float(layint0[0].split()[1])] + layint0[1:-1] + [float(layint1[0].split()[1])] + layint1[1:-1] ) j = 0 while j < len(vktemp): try: vktemp[j] = float(vktemp[j]) except: # vktemp[j] = float(vktemp[j][-5:]) vktemp[j] = 0 j += 1 if content[i][87:88] == "X": Vxfield[t, k, :] = np.asarray(vktemp) / 1000 else: Vyfield[t, k, :] = np.asarray(vktemp) / 1000 if content[i][33:56] == "Velocity in z-direction": k = int(content[i][91:93]) layint0 = content[i + 7].split(".") layint1 = content[i + 12].split(".") vktemp = ( [float(layint0[0].split()[1])] + layint0[1:-1] + [float(layint1[0].split()[1])] + layint1[1:-1] ) j = 0 while j < len(vktemp): try: vktemp[j] = float(vktemp[j]) except: vktemp[j] = 0.0 j += 1 Vzfield[t, k, : len(vktemp)] = np.asarray(vktemp) / 1000 Vzfield[t, k, len(vktemp) :] = np.zeros(nx - len(vktemp)) if content[i][33:48] == "Layer interface": k = int(content[i][91:93]) layint0 = content[i + 7].split(".") layint1 = content[i + 12].split(".") layktemp = ( [float(layint0[0].split()[1])] + layint0[1:-1] + [float(layint1[0].split()[1])] + layint1[1:-1] ) j = 0 while j < len(layktemp): layktemp[j] = float(layktemp[j]) j += 1 klay[t, k, :] = np.asarray(layktemp) / 10 if content[i][33:52] == "wave breaking point": br0 = content[i + 7].split(".") br1 = content[i + 12].split(".") brtemp = ( [float(br0[0].split()[1])] + br0[1:-1] + [float(br1[0].split()[1])] + br1[1:-1] ) j = 0 while j < len(brtemp): brtemp[j] = float(brtemp[j]) j += 1 brkp.append(np.asarray(brtemp)) if content[i][33:68] == "Time in seconds from reference time": ts.append(float(content[i + 1][7:16])) t += 1 return fsurf, Vxfield, Vyfield, Vzfield, brkp, klay if __name__ == "__main__": print(readswash("test.txt", 1250, 10))