finFoil: A program to help foiling your fins

Hi guys,

 

I’ve seen some badly foiled fins on swaylocks. Most guys do a pretty good job! But some guys think that foiling is just making sharp edges.

Therefore I’m writing a program that helps foiling if you are using a layered material (plywood, different colored fibreglass, …)

It uses the naca 4 digit airfoil profile.

 

I’d like to share this program with my fellow swaylockers (and the rest of the world).

 

Note that it is still under development. Things that I need to implement when I find the time are:

  • save/load

  • 3D

  • custom thickness (now it is a parabola between top en bottom)

 

 

 

I’ll never claim that this program generates the best profile, but it generates a hydrodynamicly justified profile.

 

screenshot in winXP:

 

A preview of 3D, for a future version (still needs some work):

 

 

 

 

Windows binairy (.exe): download

Source code: download (don’t forget to install the dependancies when using the sources)


There is no binairy version for Mac and linux. For linux users it should be easy to use the sources, that’s how I do it.

Mac users can use the sources, but some work is needed to compile the fortran libraries (using f2py). Since I have no Mac, I can’t do that for you. Maybe there is a Mac user here with some computer knowledge who can make a .dmg file?

 

Tell me if you like it! (or if you don’t)

yeah, it will take out some of the guess work, pretty cool

found this a while ago: http://www.geocities.ws/reystos/fin_making/index.html

That’s an interesting link! But his program is more basic, and harder to use (you need CAD software and it’s a command line utility).

 

I thought to show more of the capabilities of my program!

A more complex geometry is possible (here with thicker layers):

 

Or very thin layers can be generated too:

 

greets

Hans

yeah, definetly a nice program you have put together, it will be nice to use with a load of birtch ply i have!

 

good man, thanks for sharing!!

I forgot to tell:

The program is licensed with GPLv3, this means:

  • You are free to use it

  • You are free to modify it

  • You are free to redistribute it, BUT under this same license!

 

Thanks jj, I’m glad you like it!

nice work, hans!

that app sounds great, but a bummer for not being able to run it on a mac " )

cheers,

It can run on a mac, but I need an mac to make an executable for it.

I have some friends with a mac, I’ll try to do it on their computer some day (or in a virtual machine on my computer), but it won’t be for the next moth.

I’'l keep you posted

looking forward to your mac app, hans!

cheers,

I haven’t downloaded your program yet Hans.  But a quick question.  Can it generate NACA profiles for cross-sections of the fin at various transects?

It generates the naca 4 digit profile for every horizontal line defined by the y-resolution. Standard is this means 1000 naca profiles.

 

If you want the profile plotted for a specific horizontal section, I can easily implement that in a future version (it is already calculated, but not plotted).

 

I hope this is what you mean.

Does your program only deal with the 1000 NACA series or can it use any 4-digit NACA numerical series (2000, 3000, 4000, etc.)?

To clarify, if when you say “horizontal” section you mean the horizontal plane perpendicular to the fin in its vertical position (relative to the bottom of the board), yes this is what I am looking for.

I would very much like the ability to generate plotted (continuous line) foil profiles (horizontal) for any given fin shape (outline), and any NACA numeric series, at regular intervals from its base – say 12.7 mm vertical intervals.  Can this be done with your program? 

No, with the 1000 I mean that the program has a y-resolution 1000 as standard. Therefore it needs to calculate the naca profile a 1000 times.

The program uses one half of the NACA-00xx profile (this is the symetrical 4digit naca profile). The xx (percentage of thickness compared to chord) is a direct result of the thickness and the defined contour. A custom vertical thickness profile will be an option in a future release, for now it uses a second order polynomial from bottom to top with zero gradient at the bottom.

Yes thats what I meant.

This can’t be done with this version, but this can be easily implemented in a next release. I have exams right now, and vacation after that, give me a month or two.

By the way, the source code is available, if you have a littlebit knowledge of programming, feel free to implement what you need.

I can also make it possible to load the .dat files from http://www.ae.illinois.edu/m-selig/ads/coord_database.html as profiles.

If you like that?

Very nice work! Thanks for sharing! I wrote a quick BoardCAD script (jython) based on your code that produces a nurbs surface from the naca profiles. The fin outline is hard coded in the script, but it would be very nice to add something like your fin designer in future versions of BoardCAD. Let me know if you’re interested in helping out with this. That way you can easily get 3D visualization of the fins as well as support for exporting the fins on various CAD/CAM formats.

/Jonas

 

------- Jython script ------------

import boardcad.BoardCAD
import math

def naca(thickness, x):
        “”" generate the 4-digit naca airfoil profile “”"
        a1 = 0.2969  * math.sqrt(x)
        b1 = -0.1260 * (x)
        c1 = -0.3516 * (x)**2
        d1 = 0.2843 * (x)**3
        e1 = -0.1015 * (x)**4
        profile = thickness/0.2 * (a1+b1+c1+d1+e1) # * chordlength
        return profile

get nurbs surfaces

boardhandler=boardcad.BoardCAD.getInstance().getBoardHandler()
board=boardhandler.getActiveBoard()
boardhandler.set_nr_of_segments(4)
boardhandler.set_nr_of_points(0)
deck=board.getDeck()
bottom=board.getBottom()
basethickness=0.5
height=4.3

set leading edge

deck.set_control_point(0,0, boardcad.myPoint(0.0, 0.0, 0.4))
deck.set_control_point(1,0, boardcad.myPoint(0.0, 0.0, 0.4))
deck.set_control_point(2,0, boardcad.myPoint(0.0, 0.0, 0.4))
deck.set_control_point(3,0, boardcad.myPoint(0.5, 0.0, 0.55))
deck.set_control_point(4,0, boardcad.myPoint(1.0, 0.0, 0.8))
deck.set_control_point(5,0, boardcad.myPoint(2.0, 0.0, 1.4))
deck.set_control_point(6,0, boardcad.myPoint(3.0, 0.0, 2.2))
deck.set_control_point(7,0, boardcad.myPoint(3.7, 0.0, 2.9))
deck.set_control_point(8,0, boardcad.myPoint(4.3, 0.0, 3.7))
deck.set_control_point(9,0, boardcad.myPoint(4.3, 0.0, 4.3))
deck.set_control_point(10,0, boardcad.myPoint(4.3, 0.0, 4.3))
deck.set_control_point(11,0, boardcad.myPoint(4.3, 0.0, 4.3))

set trailing edge

deck.set_control_point(0,deck.get_nr_of_points()-1, boardcad.myPoint(0.0, 0.0, 4.0))
deck.set_control_point(1,deck.get_nr_of_points()-1, boardcad.myPoint(0.0, 0.0, 4.0))
deck.set_control_point(2,deck.get_nr_of_points()-1, boardcad.myPoint(0.0, 0.0, 4.0))
deck.set_control_point(3,deck.get_nr_of_points()-1, boardcad.myPoint(0.5, 0.0, 3.9))
deck.set_control_point(4,deck.get_nr_of_points()-1, boardcad.myPoint(1.0, 0.0, 3.8))
deck.set_control_point(5,deck.get_nr_of_points()-1, boardcad.myPoint(2.0, 0.0, 3.9))
deck.set_control_point(6,deck.get_nr_of_points()-1, boardcad.myPoint(3.0, 0.0, 4.3))
deck.set_control_point(7,deck.get_nr_of_points()-1, boardcad.myPoint(3.7, 0.0, 4.6))
deck.set_control_point(8,deck.get_nr_of_points()-1, boardcad.myPoint(4.3, 0.0, 4.5))
deck.set_control_point(9,deck.get_nr_of_points()-1, boardcad.myPoint(4.3, 0.0, 4.3))
deck.set_control_point(10,deck.get_nr_of_points()-1, boardcad.myPoint(4.3, 0.0, 4.3))
deck.set_control_point(11,deck.get_nr_of_points()-1, boardcad.myPoint(4.3, 0.0, 4.3))

set naca profile

zval=[.01, .05, .15, .3, .5, .7, .9]
for j in range(deck.get_nr_of_segments()):
    front=deck.get_control_point(j,0)
    back=deck.get_control_point(j,deck.get_nr_of_points()-1)
    a1 = -basethickness/(height2)
    y=front.x
    thickness = a1 * y
2 + basethickness
    deck.set_control_point(j,0,boardcad.myPoint(front.x, front.y, front.z))
    deck.set_control_point(j,1,boardcad.myPoint(front.x, front.y, front.z))
    deck.set_control_point(j,2,boardcad.myPoint(front.x, front.y, front.z))
    for i in range(7):
        z=zval[i]
        profile=naca(thickness, z)
        deck.set_control_point(j,i+3,boardcad.myPoint(front.x,profile,front.z+z*(back.z-front.z)))
    deck.set_control_point(j,10,boardcad.myPoint(back.x, back.y, back.z))
    deck.set_control_point(j,11,boardcad.myPoint(back.x, back.y, back.z))
    deck.set_control_point(j,12,boardcad.myPoint(back.x, back.y, back.z))

for j in range(deck.get_nr_of_segments()):
    for i in range(deck.get_nr_of_points()):
        p=deck.get_control_point(j,i)
        bottom.set_control_point(j,bottom.get_nr_of_points()-1-i,boardcad.myPoint(p.x,-p.y,p.z))

deck.evaluate_surface()
bottom.evaluate_surface()

 


Executing the script in BoardCAD:

 

Fin exported to Rhino using STEP:

 

Cool stuff.  I actually wrote something very similar to this when I was working for the navy.  4 digit naca foil generator.  Instead of fins for surfboards, they were for submarines though.  I also wrote it in fortran, only it was fortran77.

Anyways I'm a mac user, and willing to help you out.  It might take me a few days to get familiar with the language and your code, but I enjoy doing this kind of stuff.  Anything that you really want to implement and you think I can handle just let me know.  

I am interested in symmetrical as well as asymmetrical NACA foil shapes.

Sadly I have no programming skills and my calculus abilities have long since faded away.  I just play with a free NACA profile generating program I found and dlownloaded from the internet several years ago.  The size of the profile generated is limited.  I import the files I create into PowerPoint and resize the image if I want larger NACA profiles than the program can handle.

Ok, how I see it now:

I’ll try to help with boardCAD and the functionality that stoneburner needs would be better suited for boardCAD.

However, finFoil has its place as a easy to use tool if someone wants to quickly know how he should foil his fin properly. So I won’t discontinue finFoil, but I won’t make it to advanced.

For BoardCAD I can help with the very advanced features, like export to G-code or mesh generation for CFD simulations or …

 

@ surfineurope and jsweriduk, I’ll PM you.

Hi folks,

Im a newb poster to this forum althiugh I have been following many of the topics and posts on here for some time. Hans, I really like this foiling program and having foiled some wooden fins recently (planning on doing more) and can see the application of this software for sure...However, I'm a litle confused about how the fin profile generated may be applied to the material being worked with.

So, I have a chunk of plywood and want to shape the generated profile into it ....Do I use the generated diagram as a visual map to shape the layers of wood and in doing try to achieve as close as possible match on the wood? Also for any shape generated by the tool...are these profiles hydrodynamically efficient by default? 

Forgive me if I am missing the obvious.

Sparx

Indeed, the generated profile is a visual aid. You can print it in real size and than lay it over your fin to help you. The profiles are hydrodynamically efficient, you can’t do anything wrong with the program because you can’t change the profile :wink:

The aim of the program is not to generate “the best” fin, but it is rather a help for the backyarders who have no clue how they should foil their fins properly. Since most people here use a layered material, this program is an aid to foil your fins properly.

 

I’m glad you like it :slight_smile:

ahhhh great.... thanks mate...time to get shaping then !