I am running simulations while modifying n_opt in the Wisdem analysis option file. How do the control points move to optimize?

안녕하세요. 대한민국 광주과학기술원(GIST)에서 WISDEM을 활용해 연구를 진행하고 있는 박정현이라고 합니다.

최근 WISDEM의 Analysis 옵션을 통해 블레이드의 코드(Chord) 길이와 트위스트(Twist) 분포를 최적화하는 실험을 진행하고 있습니다. 해당 과정에서 목표함수(Merit figure)는 출력 계수($C_p$)로 설정하였으며, 제어점의 개수($n_{opt}$)를 변경해가며 그에 따른 경향성을 비교 분석 중입니다.

실험을 진행하던 중, WISDEM의 B-spline 보간 방식과 관련하여 한 가지 의문점이 생겨 질문을 드립니다.

예를 들어 $n_{opt} = 6$으로 설정하는 경우, 저는 6개의 제어점이 전체 블레이드 길이를 일정하게 등분한 위치에 고정된 상태에서 최적화가 이루어지고, 그 사이를 B-spline으로 보간하여 분포를 생성한다고 이해했습니다. 그러나 출력된 결과 그래프를 확인해 보니, 이 6개의 제어점(Control points) 위치가 스팬(Span) 방향으로 균등하게 고정되어 있지 않고, 제어점 자체의 위치(X축 공간)가 함께 이동하며 최적화가 수행되는 듯한 거동을 보였습니다.

이에 따라 WISDEM 내부적으로 B-spline 최적화가 구체적으로 어떤 메커니즘으로 작동하는지, 그리고 제어점의 위치(위치 좌표 및 노드 스팬 분포)가 최적화 과정에서 매개변수로서 어떻게 가변적으로 움직이게 되는지 알고 싶습니다.

바쁘시겠지만, 이에 대해 조언을 주시면 연구에 큰 도움이 될 것 같습니다. 감사합니다.

Translation to English via Google Translate:

1 Like

Hi,

WISDEM uses PCHIPs, not B-splines. These two are similar but not identical. The control points for the optimization do split the blade along the span in equally spaced segments. However, the user has the option to activate only some of these control points, see the inputs index_start and index_end here WISDEM/examples/03_blade/analysis_options_aero.yaml at c4b97ec49eb2eb3428d1f03f336a031672d18b19 · NLRWindSystems/WISDEM · GitHub
The documentation of the examples explains this more at length.
Let us know if this helps!

Thank you for your kind and detailed answer.

After reading the answer, I am writing an additional article because I think it will be more helpful to analyze the cause to explain the specific background of why I have such a deep question about the Spanwise variable behavior of B-spline control points in WISDEM.

Currently, I’m working on a twist and code length optimization experiment for Cp maximization with reference to the analysis_options_aero.yaml based on the IEA 15MW RWT example. In this process, we did 2 versions of testing to replace some of the existing FFA airfoil family with DU airfoil.

V1: FFA 241, 211 → DU 25, 21 Replacement

V2: FFA 270, 241, 211 → DU 30, 25, 21 Replacement

After the optimization was completed, we found an unexpected phenomenon while analyzing the code length result graph. This resulted in a significant reduction in code length not only near the replaced tip, but also to the root area where the airfoil data was not replaced at all.

As I wondered if it was a matter of span resolution, I re-tested the number of optimization control points (n_opt) gradually from 6 to 8 and 10, but the code length of the root part still decreased significantly.

At the same time, a closer look at the resulting graph showed that the code length distribution curve did not lead smoothly and showed discontinuous behavior that seemed to bend or snap at a certain point.

As I asked earlier, I wondered, “Does WISDEM fluidly move the span direction position (x-axis) of the control point during the optimization process, breaking the physical continuity, which distorts (code reduction) the geometry of the root area?”

I would like to ask you if the change in the characteristics of aerodynamic data (Cl, Cd) that occurs during airfoil replacement can cause such root area deformation or graph breakage when combined with WISDEM’s PCHIP optimization behavior and how to respond to it.

Once again, thank you for your valuable answer, and further comments would be a great help to your research! I will upload the results graphs below.

Hi. The chord is often designed following aerostructural considerations. If you optimize chord to maximize Cp, WISDEM is likely to lower chord to obtain some marginal benefits in power coefficient. These trends are discussed in a number of publications, such as the discussion around Figure 3 in Integrated aero-structural optimization of wind turbines | Multibody System Dynamics | Springer Nature Link, so I am not too surprised to see that WISDEM reduces your chord. This would be true even before starting to replace airfoils. If you don’t want to see changes in chord, simply set its flag to False among the analysis options. If you are looking to optimize the chord, you will probably need to move to an aerostructural design problem, which will however be more complicated. Note that the trend of reducing chord is especially problematic close to blade root, where chord is more driven by structural design than aerodynamic considerations

Sorry, I mistook the data. I solved the problem. Thank you for reading

Thank you again for your ongoing help. As I was reviewing our previous discussions and continuing my study, a new question came to mind.

In our previous discussion regarding the IEA 15MW RWT where I replaced the FFA airfoils with DU airfoils, you mentioned: “If you optimize the chord to maximize Cp, WISDEM is likely to reduce the chord to gain slight advantages in the power coefficient.” I completely understand this logic when structural constraints are absent.

However, I have a theoretical doubt about what happens when the replaced airfoil has worse aerodynamic performance (lower efficiency). As far as I know, Cp is influenced by the tip speed ratio (TSR), induction factors (a, a’), and the product of local solidity and the force coefficient (Cx). If the airfoil performance is poorer and thus Cx decreases, shouldn’t the chord length actually increase to maximize Cp? It seems that the optimizer would need to increase the solidity (by widening the chord) to compensate for the reduced Cx and maintain the optimal aerodynamic load. I would love to hear your thoughts on this.

I also have an additional question regarding the software usage.

In the analysis_options YAML file, the objective function is specified very simply in a single line, such as merit_figure: Cp, AEP, or LCOE.

Does the OpenMDAO framework internally map this single string directly to the objective function? Furthermore, how does the underlying code intrinsically recognize the direction of optimization—for instance, knowing that variables like Cp or AEP should be maximized, whereas variables like LCOE or mass should be minimized?

Thank you once again for your time and valuable insights!

Hi I’m sorry, I was on vacation and this post went unanswered.
I am not 100% sure what a worse airfoil would do to an aerodynamic-optimal chord. As a matter of fact, chords are never aerodynamic-only-optima… I’d expect chord to increase, but I’d need to check things in a classic textbook such as Wind Energy Explained.
As for the WISDEM questions, things are mapped here WISDEM/wisdem/glue_code/gc_PoseOptimization.py at ef216a1b889aee3d535994ce1676c7a33acd8643 · NLRWindSystems/WISDEM · GitHub, with the appropriate minus signs when quantities must be maximized

Thank you for your previous response and for pointing me to gc_PoseOptimization.py. Your advice has been incredibly helpful in navigating the code.

However, as I continued analyzing my results, I found that I still do not fully understand the underlying logic behind the chord length optimization. Therefore, I would like to ask two follow-up questions to clarify this.

1. Contradiction between the theoretical equation and the optimization results

According to the optimal chord length equation (please see the attached image), assuming parameters such as the number of blades (B), induction factors (a, a’), and the local radius (r) are constant, the chord length (c) is inversely proportional to the force coefficient (C_x) and directly proportional to sin^2(phi).

In my current study, I analyzed the IEA 15MW RWT by replacing its original FFA airfoil family with the DU airfoil family (V2: FFA 270, 241, 211 → DU 30, 25, 21). As shown in the attached graph, the original FFA airfoils actually exhibit higher C_y and C_x values compared to the substituted DU airfoils.

Since the FFA airfoils have larger C_y and C_x values, I believe that, based on the theoretical equation, the optimal chord length for the original FFA blades should actually be shorter. Thus, I am struggling to understand why WISDEM increases the chord length when optimizing the original blade with FFA airfoils. It would be immensely helpful if you could elaborate on the specific rationale or hidden variables WISDEM uses when determining the chord length in such a scenario.

2. Regarding “purely aerodynamic optimization”

You mentioned earlier that, “Actually, the chord is never optimized purely aerodynamically.” I understand that WISDEM is a multidisciplinary design optimization (MDO) framework.

However, if I configure analysis_options.yaml so that only the chord, twist, and TSR are set as design variables, and specify C_p as the sole objective function (merit_figure: Cp), doesn’t this effectively isolate the problem into a “perfectly aerodynamic optimization,” devoid of structural constraints or mass penalties? I am curious whether WISDEM still implicitly applies structural or non-aerodynamic penalties even under such strictly limited configurations.

Thank you once again for taking your valuable time to provide insightful feedback. I look forward to your response.

Hi, I’m afraid I don’t have an answer to your question right away… what I would do is to carefully look at the implementation of the WISDEM BEM solver CCBlade WISDEM/wisdem/ccblade/src/bem.f90 at master · NLRWindSystems/WISDEM · GitHub and study the corresponding paper https://doi.org/10.1002/we.1636

I should probably also add that Prof Branlard at the University of Massachusetts Amherst has recently rewrote parts of the BEM model in AeroDyn15 to fix some weaknesses in the theoretical formulation. These weaknesses are unfortunately still present in CCBlade. As far I know these weaknesses only emerge in case of blades clearly sitting out of the rotor plane (such as in presence of highly coned/prebent rotors). Prof Branlard is working on a journal article, which is however not available yet