import numpy as np def readswash(filename,xlen,nlay): with open('test.txt', 'r') as f: content = f.readlines() fsurf = [] klay = np.zeros((7203,11,300)) brkp = [] Vxfield = np.zeros((7203,11,300)) Vyfield = np.zeros((7203,11,300)) Vzfield = np.zeros((7203,11,300)) 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(300-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