Jump to content

Mr. Heinrich von Zadow

Moderators
  • Content Count

    201
  • Joined

  • Last visited

  • Days Won

    9

Posts posted by Mr. Heinrich von Zadow


  1. Hi Zhen,

    just a small addition in case someone else stumbles across your question. For an actual (perfect) circle you can not use an F-Spline. Behind the scenes an F-Spline is a B-Spline curve, optimized with respect to fairness and constrained at start, end, start-tanget, end-tangent, curvature, enclosed area, etc... That means, if you set the area as the area of a circle and also match the tangent at start and end you will get something that is really close to a circle, but not a perfect circle.

    For an actual (quarter of a) circle, you need a NURBS curve with 3 control points. The weight of the center point needs to be set to 0.5*sqrt(2).

    image.thumb.png.e509c6daed44a8a8ed5eaed754ec8bed.png

    In order to keep the area constant while moving points 1 and 3 (in your picture), I suggest a delta shift and a brent (you can search the forum for nested optimization to see how the brent algorithm can be used to adjust the area to a certain target value).

    Cheers,

    Heinrich


  2. Hi Gunnar,

    You imported an STL file. Try using s STEP or IGES if you can. (These are not discretized, but NURBS-based) If you can get your hands on such a format, you can technically get to the underlying surfaces. However, they might be untrimmed and hence, not work for generation of your panelmesh. To check, create a BRepPart and use right-click "extract surfaces". 

    If STL is all you can get, you don't want to put that in a BRep, but rather use Trimeshes and Solids. For trimeshes (maybe you can get one with higher resolution) you could try the right-click "split by angle". This should make quick work of the reparametrization of the individual faces.

    Best regards,
    Heinrich

     


  3. Hi Rull,

    what you see when extracting surfaces from a solid ( it doesn't matter if it's a Parasolid import, or any other NURBS-based format, such as IGES, STEP or just a solid modeled in CAESES) are the "underlying surfaces". A few explaining words:

    BRep is actually short for "boundary representation" and gives you a hint about what's happening here. Underlying NURBS surfaces + a set of boundary curves (along with some other information) define the final shape. This is very convenient since it allows trimming (and cutting holes, etc.) without actually having to reparameterize the surfaces. If you "ectract" them, you will see the complete surfaces...

    I didn't quite understand you question/problem about removing this face though. Maybe you can explain it again?

    Best regards,
    Heinrich

     


  4. Hello Armagan,

    from what I can see, this is just a rendering issue -- the geometry might be perfectly smooth. If you toggle wireframe view,

    image.png.635f802afbffa263e92c0a3320b21515.png

    you will see the underlying triangulation. However, unless you a planning on exporting tesselated data (i.e. STL) this is probably nothing to worry about. If you still want finer triangulation, you can change i.e. the maximum chord height of your BRep:

    image.png.cbdb4e4513a7aafbdb77f632845830a8.png

    Cheers,

    Heinrich


  5. 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


  6. 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


  7. Dear Matheus,

    you are absolutely right. Indeed, complex models can benefit a lot from parallel computing. Unfortunately, up to the latest CAESES 4.x no such option is available (except for the settings referring to multiple external tools running in parallel during an optimization that you mentioned). However, one of the mayor changes of our upcoming release CAESES 5, is in fact the full parallelization. If you are particularly interested in this feature you can stay tuned via our newsletter here: https://www.caeses.com/news/newsletter/

    P.S: Often times it makes sense to take a closer look at what particular part of your geometry slows down the update -- you can use the profiler (go to help > start profiling, then trigger a model refresh, i.e. by changing a design variable and then go to help > stop profiling) to get statistics of the most time consuming objects in your model.

    Cheers,

    Heinrich

    • Like 1

  8. Hi Louise,

    I am not familiar with this specific format. If you can get your hands on a IGES, STEP that would be very comfortable. An STL will also be good and I think it's more likely they have this available from a 3D scan. 

    Otherwise you can check if maybe the PLY contains not much more than point coordinates anyways. In that case, you could write a feature to import the file on your own.

    Cheers,

    Heinrich


  9. Dear Lavesh,

    it's just a user-defined design variable. The skew in this project is defined as a function of normalized radius r/R. In the screenshot you can see how it is defined from 4 points as a B-Spline-Curve:

    image.png.35797d82199408a759cb138e24566f64.png

    If you take a closer look at p04, you will se that it's y-component is in fact the value you choose for SKEW_TIP:

    image.png.d84e50e382f51cb039622178026eaac9.png

    Hence, if you modify this value you modify the value of the skew at the blade tip (maximum radius) which changes the radial distribution of skew as shown in the following animation:

    SKEW_TIP.thumb.gif.aa5261af36295773d6981d08e4f751fb.gif

    As a result, the blade itself will change in shape accordingly:

    SKEW_TIP01.thumb.gif.b2e6d41eef75c49add0ca3689bb76a8f.gif

    Hope this helps. 

    Cheers,

    Heinrich

    image.png


  10. Hi Chien,

     

    thanks for taking the time to sort things a little bit.

    First thing I noticed is your usage of the BRep operation "solid from intersections". This is actually meant to allow you to create a closed solid from a set of surfaces. This could be something like the 6 sides of a cube, but the beauty is, that you don't have to worry if your faces are a bit over sized and intersect each other. The enclosed volume will be found and end up as your solid...

     

    Second is a bit earlier in the process. You might want to double check your trailing edge -- the two surfaces don't seem to be a tight match. Usually you should be able to add suction and pressure side of the blade, as well as the tip to one BRep using "add sources" and there should be no open (red) edges. Except for the hole towards the hub, of course.

     

     

    Please feel free to get back to me once you have sorted this part out.

     

    Cheers,

    Heinrich


  11. Dear Chien,

     

    one of the files (with number "2" and "NO_REBUILD") in the name shows nothing but a hub. The other file doesn't show anything. Please take some time to prepare the files and let me know in detail for which object the BRep operation fails.

     

    Maybe you can also use just one string parameter to hold the file path so that I can adjust this one parameter to my local directory of csv files.

     

    Thanks,

    Heinrich

×
×
  • Create New...