diff --git a/pyproject.toml b/pyproject.toml index 53d7c5deb..416f46762 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "wisdem" -version = "4.2.5" +version = "4.2.6" description = "Wind-Plant Integrated System Design & Engineering Model" readme = "README.md" requires-python = ">=3.11" diff --git a/wisdem/ccblade/ccblade.py b/wisdem/ccblade/ccblade.py index 6383f5b3e..51c511458 100644 --- a/wisdem/ccblade/ccblade.py +++ b/wisdem/ccblade/ccblade.py @@ -102,13 +102,16 @@ def max_eff(self, Re): aoa_end = 40 alpha = np.deg2rad(np.linspace(aoa_start, aoa_end, num=201)) - cl = np.array([self.cl_spline.ev(aoa, Re) for aoa in alpha]) - cd = np.array([self.cd_spline.ev(aoa, Re) for aoa in alpha]) + cl = np.array([self.cl_spline.ev(aoa, Re) for aoa in alpha]).flatten() + cd = np.array([self.cd_spline.ev(aoa, Re) for aoa in alpha]).flatten() if np.max(cl) < 1.e-3: # Cylinder alpha_Emax = 0. cl_Emax = self.cl_spline.ev(alpha_Emax, Re) cd_Emax = self.cd_spline.ev(alpha_Emax, Re) + if isinstance(cl_Emax, np.ndarray): + cl_Emax = cl_Emax.item() + cd_Emax = cd_Emax.item() Emax = cl_Emax / cd_Emax else: Eff = [cli / cdi for cli, cdi, in zip(cl, cd)] @@ -139,7 +142,7 @@ def awayfromstall(self, Re, margin): else: alpha = np.deg2rad(np.linspace(aoa_start, aoa_end, num=201)) cl = [self.cl_spline.ev(aoa, Re) for aoa in alpha] - cd = [self.cd_spline.ev(aoa, Re) for aoa in alpha] + #cd = [self.cd_spline.ev(aoa, Re) for aoa in alpha] i_stall = np.argmax(cl) alpha_stall = alpha[i_stall] @@ -147,6 +150,9 @@ def awayfromstall(self, Re, margin): cl_op = self.cl_spline.ev(alpha_op, Re) cd_op = self.cd_spline.ev(alpha_op, Re) + if isinstance(cl_op, np.ndarray): + cl_op = cl_op.item() + cd_op = cd_op.item() Eff_op = cl_op / cd_op # print Emax, np.deg2rad(alpha_Emax), cl_Emax, cd_Emax @@ -175,11 +181,16 @@ def evaluate(self, alpha, Re, return_cm=False): also uses a small amount of smoothing to help remove spurious multiple solutions. """ - cl = self.cl_spline.ev(alpha, Re)[0] - cd = self.cd_spline.ev(alpha, Re)[0] - + cl = self.cl_spline.ev(alpha, Re) + cd = self.cd_spline.ev(alpha, Re) + if isinstance(cl, np.ndarray): + cl = cl.item() + cd = cd.item() + if self.use_cm and return_cm: - cm = self.cm_spline.ev(alpha, Re)[0] + cm = self.cm_spline.ev(alpha, Re) + if isinstance(cm, np.ndarray): + cm = cm.item() return cl, cd, cm else: return cl, cd diff --git a/wisdem/optimization_drivers/nsga2_driver.py b/wisdem/optimization_drivers/nsga2_driver.py index 14831253c..c6b9f52f5 100644 --- a/wisdem/optimization_drivers/nsga2_driver.py +++ b/wisdem/optimization_drivers/nsga2_driver.py @@ -439,7 +439,7 @@ def run(self): desvar_new = design_vars_fronts[0][median_idx, :] for name in desvars: i, j = self._desvar_idx[name] - self.set_design_var(name, desvar_new[i:j]) + self._set_design_var(name, desvar_new[i:j]) with RecordingDebugging(self._get_name(), self.iter_count, self) as rec: self._run_solve_nonlinear() rec.abs = 0.0 @@ -471,7 +471,7 @@ def objective_callback(self, x): out_of_bounds = False for name in self._designvars: i, j = self._desvar_idx[name] - self.set_design_var(name, x[i:j]) + self._set_design_var(name, x[i:j]) # Check that design variables are within bounds if (