From a366558ab820c66000b649accf702cae83847fef Mon Sep 17 00:00:00 2001 From: Paul <paul.dechamps@student.uliege.be> Date: Mon, 11 Jul 2022 19:02:32 +0200 Subject: [PATCH] Iterations 3d --- vii/pyVII/vCoupler2.py | 2 +- vii/pyVII/vInterpolator.py | 158 ++++++++++++++++++++++++++----------- vii/tests/bli3.py | 8 +- 3 files changed, 122 insertions(+), 46 deletions(-) diff --git a/vii/pyVII/vCoupler2.py b/vii/pyVII/vCoupler2.py index 1699635..048ae7f 100644 --- a/vii/pyVII/vCoupler2.py +++ b/vii/pyVII/vCoupler2.py @@ -30,7 +30,7 @@ class Coupler: self.iSolverAPI = _iSolverAPI self.vSolver = vSolver - self.maxCouplIter = 150 + self.maxCouplIter = 5 self.couplTol = 1e-4 self.tms=fwk.Timers() diff --git a/vii/pyVII/vInterpolator.py b/vii/pyVII/vInterpolator.py index 8f7210e..d543849 100644 --- a/vii/pyVII/vInterpolator.py +++ b/vii/pyVII/vInterpolator.py @@ -28,11 +28,10 @@ class Interpolator: self.idata, self.icg = self.GetMesh(_imsh) self.vdata, self.vcg = self.GetMesh(_vmsh) self.Xp, self.Yp, self.Zp, self.sortedRows, self.Xc, self.Yc, self.Zc, self.sortedElems = self.SortMesh(self.vdata, self.vcg) - self.tms['Mesh sort'].stop() print(self.tms) - fig = plt.figure() + """fig = plt.figure() ax = fig.add_subplot(projection='3d') ax.scatter(self.vdata[0][:,0], self.vdata[0][:,1], self.vdata[0][:,2], s=0.3) ax.scatter(self.vcg[0][:,0], self.vcg[0][:,1], self.vcg[0][:,2], s=0.3) @@ -56,7 +55,7 @@ class Interpolator: ax.set_zlabel('z') #plt.gca().invert_yaxis() plt.axis('off') - plt.show() + plt.show()""" self.iSolver = _dartAPI self.blw = _blw @@ -72,8 +71,10 @@ class Interpolator: #self.uePrev = [[np.zeros(len(self.viscStruct[iSec][iReg][:,0])) for iReg in range(3)] for iSec in range(len(self.viscStruct))] self.DeltaStarPrev = [[np.zeros(0) for iReg in range(3)] for iSec in range(len(self.cfg['Sections']))] - self.Cg_Sec = [[np.zeros((len(self.Xc[iReg])-1, 3)) for iReg in range(2)] for _ in range(len(self.cfg['Sections']))] + self.Cg_Sec = [[np.zeros((len(self.Xc[iReg]), 3)) for iReg in range(2)] for _ in range(len(self.cfg['Sections']))] + self.xCp = [[np.zeros((len(self.Xp[iReg]), 1)) for iReg in range(2)] for _ in range(len(self.cfg['Sections']))] + self.CpIter = [[np.zeros((len(self.Xp[iReg]), 1)) for iReg in range(2)] for _ in range(len(self.cfg['Sections']))] def GetInvBC(self, vSolver, couplIter): self.tms['InvToVisc'].start() @@ -86,7 +87,7 @@ class Interpolator: U = [np.zeros((len(self.idata[i][:,0]), 3)) for i in range(len(self.idata))] M = [np.zeros(len(self.idata[i][:,0])) for i in range(len(self.idata))] Rho = [np.zeros(len(self.idata[i][:,0])) for i in range(len(self.idata))] - + CpII = [np.zeros(len(self.idata[i][:,0])) for i in range(len(self.idata))] # Extract variables. for iReg in range(len(self.idata)): @@ -95,14 +96,16 @@ class Interpolator: U[iReg][iNode,:] = [self.iSolver.U[row][0], self.iSolver.U[row][1], self.iSolver.U[row][2]] M[iReg][iNode] = self.iSolver.M[row] Rho[iReg][iNode] = self.iSolver.rho[row] - + CpII[iReg][iNode] = self.iSolver.Cp[row] + nD = self.cfg['nDim'] Ux = [self.__RbfToSections(self.idata[0][:,:nD], U[0][:,0], self.vdata[0][:,:nD]), self.__RbfToSections(self.idata[1][:, [0,2] if nD==3 else 0], U[1][:,0], self.vdata[1][:,[0,2] if nD==3 else 0])] Uy = [self.__RbfToSections(self.idata[0][:,:nD], U[0][:,1], self.vdata[0][:,:nD]), self.__RbfToSections(self.idata[1][:, [0,2] if nD==3 else 0], U[1][:,1], self.vdata[1][:,[0,2] if nD==3 else 0])] Uz = [self.__RbfToSections(self.idata[0][:,:nD], U[0][:,2], self.vdata[0][:,:nD]), self.__RbfToSections(self.idata[1][:, [0,2] if nD==3 else 0], U[1][:,2], self.vdata[1][:,[0,2] if nD==3 else 0])] Me = [self.__RbfToSections(self.idata[0][:,:nD], M[0], self.vdata[0][:,:nD]), self.__RbfToSections(self.idata[1][:, [0,2] if nD==3 else 0], M[1], self.vdata[1][:,[0,2] if nD==3 else 0])] Rhoe = [self.__RbfToSections(self.idata[0][:,:nD], Rho[0], self.vdata[0][:,:nD]), self.__RbfToSections(self.idata[1][:, [0,2] if nD==3 else 0], Rho[1], self.vdata[1][:,[0,2] if nD==3 else 0])] - + Cp = [self.__RbfToSections(self.idata[0][:,:nD], CpII[0], self.vdata[0][:,:nD]), self.__RbfToSections(self.idata[1][:, [0,2] if nD==3 else 0], CpII[1], self.vdata[1][:,[0,2] if nD==3 else 0])] + for iSec, y in enumerate(self.cfg['Sections']): for iReg in range(2): @@ -118,6 +121,7 @@ class Interpolator: uz = np.zeros(0) me = np.zeros(0) rhoe = np.zeros(0) + cp = np.zeros(0) xxx = np.zeros(0) for i in range(len(x_pos)): @@ -129,7 +133,13 @@ class Interpolator: uz = np.append(uz, Uy[iReg][row]) me = np.append(me, Me[iReg][row]) rhoe = np.append(rhoe, Rhoe[iReg][row]) + cp = np.append(cp, Cp[iReg][row]) + + self.xCp[iSec][iReg] = np.column_stack((self.xCp[iSec][iReg], abs(x_pos))) + self.CpIter[iSec][iReg] = np.column_stack((self.CpIter[iSec][iReg], cp)) + + if couplIter == 0: if iReg == 0: @@ -157,10 +167,6 @@ class Interpolator: self.Cg_Sec[iSec][iReg][i,2] = z_pos[i+1] + z_pos[i] self.Cg_Sec[iSec][iReg]/=2 - plt.plot(x_pos, y_pos, 'x-') - plt.plot(self.Cg_Sec[iSec][iReg][:,0], self.Cg_Sec[iSec][iReg][:,1], 'o') - plt.show() - if iReg == 0: UxUp, UxLw = self.__Remesh(ux, self.stgPt[iSec]) UyUp, UyLw = self.__Remesh(uy, self.stgPt[iSec]) @@ -188,47 +194,103 @@ class Interpolator: def SetBlowingVel(self, vSolver, couplIter): - for iSec in range(len(self.viscStruct)): + for iSec in range(len(self.cfg['Sections'])): for iReg in range(3): self.DeltaStarPrev[iSec][iReg] = vSolver.ExtractDeltaStar(iSec, iReg) self.xxPrev[iSec][iReg] = vSolver.Extractxx(iSec, iReg) - blw = [np.zeros(0) for _ in range(2)] + blw = [[np.zeros(0) for _ in range(2)] for _ in range(len(self.cfg['Sections']))] - for iSec in range(len(self.viscStruct)): + for iSec in range(len(self.cfg['Sections'])): for iReg in range(2): if iReg == 0: blwUp = vSolver.ExtractBlowingVel(iSec, 0) blwLw = vSolver.ExtractBlowingVel(iSec, 1) - blw[iReg] = np.concatenate((blw[iReg], blwUp[::-1] , blwLw)) + blw[iSec][iReg] = np.concatenate((blw[iSec][iReg], blwUp[::-1] , blwLw)) elif iReg == 1: - blw[iReg] = np.concatenate((blw[iReg], vSolver.ExtractBlowingVel(iSec, 2))) + blw[iSec][iReg] = np.concatenate((blw[iSec][iReg], vSolver.ExtractBlowingVel(iSec, 2))) - blwAll = interp2d(self.Cg_Sec[0]) - - fig = plt.figure() - ax = fig.add_subplot(projection='3d') - ax.scatter(x[0][:,0], x[0][:,2], blw[0], color = 'red') - """for sec in viscStruct_tr: - ax.scatter(sec[0][:,0], sec[0][:,2], sec[0][:,1], color = 'red') - #ax.scatter(sec[1][:,0], sec[1][:,2], sec[1][:,1], color = 'red')""" - #ax.set_zlim([-0.5, 0.5]) - ax.set_xlabel('x') - ax.set_ylabel('y') - ax.set_zlabel('Blowing velocity') - #plt.axis('off') - plt.show() - self.tms['Interpolation'].start() - nD = self.cfg['nDim'] - #wignggg = self.__RbfToSections(x[0], blw[0], self.invCg_tr[0][:,:3]) - wakke = self.__RbfToSections(x[1][:, [0,2] if nD==3 else 0], blw[1], self.invCg_tr[1][:, [0,2] if nD==3 else 0]) - mappedBlw = [self.__RbfToSections(x[0], blw[0], self.invCg_tr[0][:,:3]), self.__RbfToSections(x[1][:, [0,2] if nD==3 else 0], blw[1], self.invCg_tr[1][:, [0,2] if nD==3 else 0])] - - self.tms['Interpolation'].stop() - for iElm in range(len(self.invCg_tr[0][:,0])): - self.blw[0].setU(iElm, mappedBlw[0][iElm]) - for iElm in range(len(self.invCg_tr[1][:,0])): - self.blw[1].setU(iElm, mappedBlw[1][iElm]) + blwAll = [np.zeros(np.shape(self.Xc[iReg])) for iReg in range(2)] + for iReg in range(2): + + # Find index of all Sections in Y + + jBounds = np.zeros(len(self.cfg['Sections']), dtype=int) + for i, y in enumerate(self.cfg['Sections']): + jBounds[i] = (abs(self.Yp[iReg][0,:]-y)).argmin() + + # Find all index of column of cg which lies between sections + # len of indexInside = nb of intervals between sections (nSections-1) + + indexInside = [[] for _ in range(len(self.cfg['Sections'])-1)] + + for i in range(len(indexInside)): + + indexInside[i] = np.where((self.Yp[iReg][0,jBounds[i]] <= self.Yc[iReg][0,:]) & (self.Yc[iReg][0,:] <= self.Yp[iReg][0,jBounds[i+1]]))[0] + + indexOutside = [np.where((self.Yc[iReg][0,:] <= self.Yp[iReg][0,jBounds[0]]))[0], np.where((self.Yc[iReg][0,:] >= self.Yp[iReg][0,jBounds[-1]]))[0]] + + blwAll = np.zeros((len(self.Xc[iReg][:,0]), len(self.Xc[iReg][0,:]))) + + dummy = np.zeros((len(self.Xc[iReg][:,0]), len(indexOutside[0]))) + for iCol in range(len(dummy[0,:])): + dummy[:,iCol] = blw[0][iReg] + + blwAll[:,indexOutside[0]] = dummy + + for iInter, inter in enumerate(indexInside): + for j in inter: + dblw = blw[iInter+1][iReg] - blw[iInter][iReg] + dy = self.Cg_Sec[iInter+1][iReg][0,2] - self.Cg_Sec[iInter][iReg][0,2] + blwAll[:, j] = dblw/dy*(self.Yc[iReg][0, j] - self.Cg_Sec[iInter][iReg][0,2]) + blw[iInter][iReg] + + dummy = np.zeros((len(self.Xc[iReg][:,0]), len(indexOutside[1]))) + for iCol in range(len(dummy[0,:])): + dummy[:,iCol] = blw[-1][iReg] + + blwAll[:,indexOutside[1]] = dummy + + """fig = plt.figure() + ax = fig.add_subplot(projection='3d') + for i in range(len(blw)): + ax.scatter(self.Cg_Sec[i][iReg][:,0], self.Cg_Sec[i][iReg][:,2], blw[i][iReg], s=0.7, color='red') + for i in range(len(blwAll[0,:])): + ax.scatter(self.Xc[iReg][:,i], self.Yc[iReg][:,i], blwAll[:,i], s=0.2, color='blue') + ax.set_xlabel('x') + ax.set_ylabel('y') + ax.set_zlabel('z') + #plt.gca().invert_yaxis() + plt.show()""" + + nD = self.cfg['nDim'] + xyz = np.zeros((np.size(self.Xc[iReg]), 3)) + blwForMap = np.zeros(np.size(self.Xc[iReg])) + ind=0 + for i in range(len(self.Xc[iReg][:,0])): + for j in range(len(self.Xc[iReg][0,:])): + xyz[ind,:] = [self.Xc[iReg][i,j], self.Yc[iReg][i,j], self.Zc[iReg][i,j]] + blwForMap[ind] = blwAll[i,j] + ind+=1 + + mappedBlw = self.__RbfToSections(xyz[:, [0,2] if nD==3 else 0], blwForMap, self.icg[iReg][:, [0,2] if nD==3 else 0]) + + """fig = plt.figure() + ax = fig.add_subplot(projection='3d') + for i in range(len(blw)): + ax.scatter(self.Cg_Sec[i][iReg][:,0], self.Cg_Sec[i][iReg][:,2], blw[i][iReg], s=0.7, color='red') + ax.scatter(self.icg[iReg][:, 0], self.icg[iReg][:, 1], mappedBlw, s=0.2, color='blue') + ax.set_zlim([-0.01, 0.015]) + ax.set_xlabel('x') + ax.set_ylabel('y') + ax.set_zlabel('z') + #plt.gca().invert_yaxis() + plt.show()""" + + + self.tms['Interpolation'].stop() + if iReg==0: + for iElm in range(len(self.idata[iReg][:,0])): + self.blw[iReg].setU(iElm, mappedBlw[iElm]) def RunSolver(self): self.iSolver.run() @@ -647,7 +709,7 @@ class Interpolator: data[0] = data[0][data[0][:,1]<=1, :] - cg = data.copy() + cg = cg.copy() cg[0] = cg[0][cg[0][:,1]<=1, :] @@ -655,6 +717,7 @@ class Interpolator: for i in range(len(sections)): sections[i] = round(sections[i], 3) sections = np.unique(sections) + sections = np.sort(sections) nChord = [len(data[i][abs(data[i][:,1]-sections[0])<1e-3, 0]) for i in range(len(data))] @@ -683,10 +746,12 @@ class Interpolator: sections_cg = cg[0][:,1] for i in range(len(sections_cg)): sections_cg[i] = round(sections_cg[i], 3) - sections_cg = np.unique(sections) + sections_cg = np.unique(sections_cg) + sections_cg = np.sort(sections_cg) - nChord_cg = [len(cg[i][abs(cg[i][:,1]-sections[0])<1e-3, 0]) for i in range(len(cg))] + nChord_cg = [len(cg[i][abs(cg[i][:,1]-cg[i][0,1])<1e-3, 0]) for i in range(len(cg))] + print(nChord_cg) Xc = [np.zeros((nChord_cg[i], 0)) for i in range(len(data))] Yc = [np.zeros((nChord_cg[i], 0)) for i in range(len(data))] Zc = [np.zeros((nChord_cg[i], 0)) for i in range(len(data))] @@ -710,6 +775,11 @@ class Interpolator: Yc[iReg] = np.column_stack((Yc[iReg], sort[:,1])) Zc[iReg] = np.column_stack((Zc[iReg], sort[:,2])) + Xc[0] = np.delete(Xc[0], 0, 0) + Yc[0] = np.delete(Yc[0], 0, 0) + Zc[0] = np.delete(Zc[0], 0, 0) + sortedElems[0] = np.delete(sortedElems[0], 0, 0) + return Xp, Yp, Zp, sortedRows, Xc, Yc, Zc, sortedElems diff --git a/vii/tests/bli3.py b/vii/tests/bli3.py index 139f34e..326446c 100644 --- a/vii/tests/bli3.py +++ b/vii/tests/bli3.py @@ -33,6 +33,8 @@ import vii.pyVII.vUtils as viscU import vii.pyVII.vCoupler2 as viscC import vii.pyVII.vInterpolator as vInterpol +from matplotlib import pyplot as plt + import fwk from fwk.testing import * from fwk.coloring import ccolors @@ -78,7 +80,7 @@ def main(): tms['pre'].stop() # solve problem - config = {'nDim': dim, 'Sections':[0.02, 0.041], 'span':spn, 'rbftype': 'linear', 'smoothing': 1e-8, 'degree': 0, 'neighbors': 5} + config = {'nDim': dim, 'Sections':[0.026, 0.103, 0.179, 0.256, 0.333, 0.41, 0.436, 0.513, 0.59, 0.667, 0.744, 0.821, 0.897, 0.949], 'span':spn, 'rbftype': 'linear', 'smoothing': 1e-8, 'degree': 0, 'neighbors': 5} iSolverAPI = vInterpol.Interpolator(floD.newton(pbl), blw, imsh, vmsh, config) vSolver = viscU.initBL(Re, M_inf, CFL0, len(config['Sections']), 2) #iSolverAPI = viscAPI.dartAPI(floD.newton(pbl), bnd, wk, nSections, vInterp) @@ -86,6 +88,10 @@ def main(): coupler.Run() + plt.plot(iSolverAPI.xCp[0][0][:,1], iSolverAPI.CpIter[0][0][:,1]) + plt.plot(iSolverAPI.xCp[0][0][:,-1], iSolverAPI.CpIter[0][0][:,-1]) + plt.show() + # display timers tms['total'].stop() print(ccolors.ANSI_BLUE + 'PyTiming...' + ccolors.ANSI_RESET) -- GitLab