diff --git a/blast/coupler.py b/blast/coupler.py index 397f8434e6af9d579951116eedca27f05975e951..b94e05e2079d2005595ffd889c2c30f37ffcf569 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 08a2e328651df0cee65513e5d7fc91a7a3061421..a1fcba0bbb46a638a8ea896cfa1f40ab71460ec5 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 a95458659929bf0bce46f86246f5f2acfa516de1..2937d3dc529e53ed3da7127fc151dd100732626b 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 80ac5bb7c607e81879be93f73c72d6c1fee3166a..91a0aa4699a2016cd0ef2f666f7e5b5c7befa25c 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]