From 3e9aa7b7ef0f1f3a40fbe4b54a2fc7fb2559fa04 Mon Sep 17 00:00:00 2001 From: Paul Dechamps <paul.dechamps@uliege.be> Date: Tue, 19 Dec 2023 20:32:09 +0100 Subject: [PATCH] (feat) Average of transition Driver now computes the average position of the transition --- blast/coupler.py | 4 ++-- blast/src/DDriver.cpp | 9 +++++++++ blast/src/DDriver.h | 1 + blast/utils.py | 8 +++++--- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/blast/coupler.py b/blast/coupler.py index 397f843..b94e05e 100644 --- a/blast/coupler.py +++ b/blast/coupler.py @@ -87,7 +87,7 @@ class Coupler: print('{:>5s}| {:>7s} {:>7s} {:>7s} | {:>6s} {:>6s} | {:>6s}'.format('It', 'Cl', 'Cd', 'Cdwake', 'xtrT', 'xtrB', 'Error')) print(' ----------------------------------------------------------') if couplIter % self.iterPrint == 0: - print(' {:>4.0f}| {:>7.4f} {:>7.4f} {:>7.4f} | {:>6.4f} {:>6.4f} | {:>6.3f}'.format(couplIter, self.iSolverAPI.getCl(), self.iSolverAPI.getCd()+self.vSolver.Cdf, self.vSolver.Cdt, self.vSolver.getxoctr(0, 0), self.vSolver.getxoctr(0, 1), np.log10(error))) + print(' {:>4.0f}| {:>7.4f} {:>7.4f} {:>7.4f} | {:>6.4f} {:>6.4f} | {:>6.3f}'.format(couplIter, self.iSolverAPI.getCl(), self.iSolverAPI.getCd()+self.vSolver.Cdf, self.vSolver.Cdt, self.vSolver.getAvrgxoctr(0), self.vSolver.getAvrgxoctr(1), np.log10(error))) if self.iSolverAPI.getVerbose() != 0 or self.vSolver.verbose != 0: print('') couplIter += 1 @@ -97,6 +97,6 @@ class Coupler: print('') print('{:>5s}| {:>7s} {:>7s} {:>7s} | {:>6s} {:>8s} | {:>6s}'.format('It', 'Cl', 'Cd', 'Cdwake', 'xtrT', 'xtrB', 'Error')) print(' ----------------------------------------------------------') - print(ccolors.ANSI_RED, '{:>4.0f}| {:>7.5f} {:>7.5f} {:>7.5f} | {:>6.4f} {:>7.4f} | {:>6.3f}\n'.format(couplIter, self.iSolverAPI.getCl(), self.iSolverAPI.getCd()+self.vSolver.Cdf, self.vSolver.Cdt, self.vSolver.getxoctr(0, 0), self.vSolver.getxoctr(0, 1), np.log10(error)), ccolors.ANSI_RESET) + print(ccolors.ANSI_RED, '{:>4.0f}| {:>7.5f} {:>7.5f} {:>7.5f} | {:>6.4f} {:>7.4f} | {:>6.3f}\n'.format(couplIter, self.iSolverAPI.getCl(), self.iSolverAPI.getCd()+self.vSolver.Cdf, self.vSolver.Cdt, self.vSolver.getAvrgxoctr(0), self.vSolver.getAvrgxoctr(1), np.log10(error)), ccolors.ANSI_RESET) self.iSolverAPI.writeCp(sfx='_viscous'+self.filesfx) return aeroCoeffs diff --git a/blast/src/DDriver.cpp b/blast/src/DDriver.cpp index 08a2e32..a1fcba0 100644 --- a/blast/src/DDriver.cpp +++ b/blast/src/DDriver.cpp @@ -393,6 +393,15 @@ void Driver::computeSectionalDrag(std::vector<BoundaryLayer *> const &bl, size_t Cdp_sec[i] = Cdt_sec[i] - Cdf_sec[i]; } +double Driver::getAvrgxoctr(size_t const iRegion) const +{ + double xtr = 0.0; + for (size_t iSec = 0; iSec < sections.size(); ++iSec) + xtr += sections[iSec][iRegion]->xoctr; + xtr /= sections.size(); + return xtr; +} + /** * @brief Compute total drag coefficient on the airfoil/wing. * Performs the sectional drag integration for 3D computations. diff --git a/blast/src/DDriver.h b/blast/src/DDriver.h index a954586..2937d3d 100644 --- a/blast/src/DDriver.h +++ b/blast/src/DDriver.h @@ -45,6 +45,7 @@ public: // Getters. double getxtr(size_t iSec, size_t iRegion) const { return sections[iSec][iRegion]->xtr; }; double getxoctr(size_t iSec, size_t iRegion) const { return sections[iSec][iRegion]->xoctr; }; + double getAvrgxoctr(size_t const iRegion) const; double getRe() const { return Re; }; std::vector<std::vector<double>> getSolution(size_t iSec); diff --git a/blast/utils.py b/blast/utils.py index 80ac5bb..91a0aa4 100644 --- a/blast/utils.py +++ b/blast/utils.py @@ -67,6 +67,8 @@ def initBlast(iconfig, vconfig, iSolver='DART'): if 'nSections' not in vconfig: vconfig['nSections'] = len(vconfig['sections']) + if 'sfx' not in vconfig: + vconfig['sfx'] = '' # Viscous solver vSolver = initBL(vconfig['Re'], vconfig['Minf'], vconfig['CFL0'], vconfig['nSections'], xtrF=vconfig['xtrF']) @@ -80,7 +82,7 @@ def initBlast(iconfig, vconfig, iSolver='DART'): # Coupler import blast.coupler as blastCoupler - coupler = blastCoupler.Coupler(iSolverAPI, vSolver, _maxCouplIter=vconfig['couplIter'], _couplTol=vconfig['couplTol'], _iterPrint=vconfig['iterPrint'], _resetInv=vconfig['resetInv']) + coupler = blastCoupler.Coupler(iSolverAPI, vSolver, _maxCouplIter=vconfig['couplIter'], _couplTol=vconfig['couplTol'], _iterPrint=vconfig['iterPrint'], _resetInv=vconfig['resetInv'], sfx=vconfig['sfx']) return coupler, iSolverAPI, vSolver def mesh(file, pars): @@ -131,8 +133,8 @@ def getSolution(vSolver, iSec=0): 'y' : solverOutput[17], 'z' : solverOutput[18], 'ueInv' : solverOutput[19], - 'xtrT' : vSolver.getxtr(iSec, 0), - 'xtrB' : vSolver.getxtr(iSec, 1), + 'xtrT' : vSolver.getAvrgxoctr(0), + 'xtrB' : vSolver.getAvrgxoctr(1), 'Cdt_w' : vSolver.Cdt_sec[iSec], 'Cdf' : vSolver.Cdf_sec[iSec], 'Cdp' : vSolver.Cdp_sec[iSec] -- GitLab