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