Jump to content
Mr. Chien Nguyen

Fitting a mathematic functions to set of blade sections

Recommended Posts

Hello,

My problem is that I am having a set of blade section from 0.2R to 0.95R with data points for each sections. Basically, I can model the propeller from those sections by lofting a surface through all the sections.

But now, I would like to fit a mathematic function to all the blade sections to create a parametric profile then put it in a curve engine for propeller modelling. 

For example, fitting a mathematic function to the Wageningen propeller sections. Is there anyway in Caeses that can do this ?

I am thinking to start with the Naca profile then using optimization algorithm to find the value of c, m and p that creates the sets of sections which are best match with the sections from data points (for example the maximum distance is less than a define limit)

 

Share this post


Link to post
Share on other sites

Dear Chien,

it is indeed possible to use CAESES' optimization algorithms to perform geometric optimizations such as the fitting of parametric profile to a set of points. The main difficulty usually is the definition of an appropriate objective function -- you will want to put "weight" onto the leading and trailing edge region, otherwise they will be matched poorly as they take up only a small fraction of the overall chord length.

Depending on the quality of your data and how well the parametric profile matches the point data you will have to adjust things to your specific case. 

Attached is an example where I created a NACA profile and a set of discrete points from it. I then use a simple TSearch to fit another NACA to the point data -- looks like this:

profileFitting.thumb.gif.422b879d171d16237a02207a3a6de964.gif

Like I mentioned, I expect that you will have to play around a bit with how the error (which is minimized by the optimization algorithm) is calculated. Right now, it's a simple least squares approach...

Best regards,

Heinrich

testCase.fdb

Share this post


Link to post
Share on other sites

Dear Heinrich,

Thanks so much for your reply.

I have managed to import my data points and got the result as a picture below. The red curve is the Naca4ds after 100 iteration and the black one is the original profile from data points.

However as you said, I did not get good result at leading and trailing edge. I realized that at x = 0 and x = profile length, the y value of the Naca4Ds profile is also 0. But for the original profile, those y values are not 0.So that, it is impossible to get a good approximation Naca4ds curve to the original profile.

I am thinking to apply a deformation(or a deformation function, or something similar) to the Naca4Ds at leading and trailing edge to get the shape of original profile. How do you think ?

Thank you

image.png.d38817a1eee9577c6f25c4b15e73b06d.png

Share this post


Link to post
Share on other sites

Dear Chien,

from the picture it looks, as if you have an angle of attack unequal to zero. My suggestion would be to extract this value and rotate the profile such that the leading and trailing edge both have a y equal to 0. Let's see how this turns out -- my feeling is, that this should also reduce the large amount of camber you see in the red profile right now.

Cheers,

Heinrich

Share this post


Link to post
Share on other sites
On 10/20/2020 at 2:15 PM, Mr. Heinrich von Zadow said:

Dear Chien,

from the picture it looks, as if you have an angle of attack unequal to zero. My suggestion would be to extract this value and rotate the profile such that the leading and trailing edge both have a y equal to 0. Let's see how this turns out -- my feeling is, that this should also reduce the large amount of camber you see in the red profile right now.

Cheers,

Heinrich

Dear Heinrich,

Thank you so much for your advice, I am able to get better result (see the picture below). (the red curve is the Naca4ds and the green one is the original one)

Now I just need to adjust the leading edge to get much better result ? But I still do not know how to adjust the error function to get much better result? Can you show my some ideas ? Thank you

Chien

image.thumb.png.901c13f41aa6e4921d7636de6044de63.png

 

Share this post


Link to post
Share on other sites

Dear Chien,

it looks like the maximum thickness position of the red profile is a bit too far towards the leading edge. However, the green profile also looks a bit "different" to my eye, so I doubt that you will get a much better fit when sticking to the NACA4DS. You could try to adjust the design variables manually for one of the sections just to get an idea if there is a lot of room for improvement.

About the "weighting":
In the feature I gave to you earlier, I simply check for the maximum deviation between points and profile like this:

genericcurve errorFunction(){
  .setx(t)
  .sety(profile.getShortestDistanceSquared(linearInterpolation.getpos(t)))
  .setz(0)
}
parameter error(errorFunction.getMax(1))

If we assume that your profile starts at t=0 (trailing edge, suction side), then goes through t=0.5 (leading edge) and back to t=1 (trailing edge, pressure side), you could put more "weight" to the leading edge region as follows:

1. You define a "weight distribution"

image.thumb.png.e18d77962347de9c1f16f9b89034d645.png

--> it's just a function running from x=0 to x=1 with it's maximum at x=0.5.

2. you multiply each squared error with the corresponding evaluation of the weight distribution. The generic curve should the read like this:

  .sety(profile.getShortestDistanceSquared(linearInterpolation.getpos(t))*weightFunction.getPos(t):y)

3. Instead of just checking for the maximum quadratic error like before, you now use the area below the error function as objective measure for your optimization:

parameter error(errorFunction.getArea(0,2))

 

You can play around and tweak things by manually adjusting the shape of the weight function. E.g. if you want to emphasize both, the leading and trailing edge region, your function could look like this:

image.png.b623077b636b1e14019acba652049029.png

The old fitting result of my example looked like this (green: original, red: fit):

image.thumb.png.1617f044fab4aad5ad9c488bea278675.png 

now, with the weighting included, it looks like this:

image.thumb.png.e8874c13bbdb92757c84a772e9bc1593.png

Keep in mind, that the result will always be only as good as the ability of your parametric profile to conform to your given data... I attached the project file for your convenience.

Best regards,

Heinrich

testCaseWeightedLE.fdb

Share this post


Link to post
Share on other sites
On 10/26/2020 at 3:48 PM, Mr. Heinrich von Zadow said:

Dear Chien,

it looks like the maximum thickness position of the red profile is a bit too far towards the leading edge. However, the green profile also looks a bit "different" to my eye, so I doubt that you will get a much better fit when sticking to the NACA4DS. You could try to adjust the design variables manually for one of the sections just to get an idea if there is a lot of room for improvement.

About the "weighting":
In the feature I gave to you earlier, I simply check for the maximum deviation between points and profile like this:


genericcurve errorFunction(){
  .setx(t)
  .sety(profile.getShortestDistanceSquared(linearInterpolation.getpos(t)))
  .setz(0)
}
parameter error(errorFunction.getMax(1))

If we assume that your profile starts at t=0 (trailing edge, suction side), then goes through t=0.5 (leading edge) and back to t=1 (trailing edge, pressure side), you could put more "weight" to the leading edge region as follows:

1. You define a "weight distribution"

image.thumb.png.e18d77962347de9c1f16f9b89034d645.png

--> it's just a function running from x=0 to x=1 with it's maximum at x=0.5.

2. you multiply each squared error with the corresponding evaluation of the weight distribution. The generic curve should the read like this:


  .sety(profile.getShortestDistanceSquared(linearInterpolation.getpos(t))*weightFunction.getPos(t):y)

3. Instead of just checking for the maximum quadratic error like before, you now use the area below the error function as objective measure for your optimization:


parameter error(errorFunction.getArea(0,2))

 

You can play around and tweak things by manually adjusting the shape of the weight function. E.g. if you want to emphasize both, the leading and trailing edge region, your function could look like this:

image.png.b623077b636b1e14019acba652049029.png

The old fitting result of my example looked like this (green: original, red: fit):

image.thumb.png.1617f044fab4aad5ad9c488bea278675.png 

now, with the weighting included, it looks like this:

image.thumb.png.e8874c13bbdb92757c84a772e9bc1593.png

Keep in mind, that the result will always be only as good as the ability of your parametric profile to conform to your given data... I attached the project file for your convenience.

Best regards,

Heinrich

testCaseWeightedLE.fdb 101 kB · 1 download

Dear Heinrich,

Thanks so much for your file. I am able to use it on my project. But it did not change much the result I got without weight function. Maybe you are right, using NACA4DS may not get better result.

Do you have suggestion about changing to another parametric airfoil ?

All the best

Chien

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...