Vortexje: Source-Doublet Panel Method Library

Vortexje is open-source computational fluid dynamics (CFD) software. It implements the source-doublet panel method for potential flow, with the following features:

  • Modern C++ API, easily integrated with other simulation environments;
  • Gmsh file I/O;
  • Optional wake convection;
  • Wake-body and wake-wake interaction.

A blade of a vertical-axis wind turbine intersects its wake. Simulated with Vortexje and visualized in gmsh.

License

The library is licensed under the terms of the GNU GPL v2. For commercial use licenses are available from Baayen & Heinz GmbH.

Documentation

A preprint of a paper introducing Vortexje is available online at arxiv.org/abs/1210.6956.

API documentation is available online.

Support

Baayen & Heinz GmbH offers troubleshooting, customization and integration services.

Example

The following example code generates source, doublet, and pressure distributions on a NACA0012 airfoil with 5.0 degrees angle of attack and 30 m/s airspeed.

#include <vortexje/solver.hpp>

using namespace std;
using namespace Eigen;
using namespace Vortexje;

int
main (int argc, char **argv)
{
    // Load meshes:
    Mesh nolift_mesh;

    // Create wing:
    Mesh wing_mesh(string("naca0012.msh"));

    Vector3d location(0, 0, 0);
    Vector3d chord_direction(1, 0, 0);
    Vector3d top_direction(0, 1, 0);
    Vector3d span_direction(0, 0, 1);

    Wing wing(wing_mesh, location,
              chord_direction, top_direction, span_direction);

    // Prescribe angle of attack:
    double alpha = 5.0 / 180.0 * M_PI;
    wing.rotate(span_direction, -alpha);

    // Create mesh collection:
    Collection collection(string("test-wing"), nolift_mesh);
    collection.add_wing(&wing);

    // Set up solver:
    Solver solver("test-wing-log");
    solver.add_collection(collection);
    solver.set_freestream_velocity(Vector3d(30, 0, 0));
    solver.set_fluid_density(1.2);

    // Run simulation:
    double t = 0.0;
    double dt = 0.01;
    int step_number = 0;

    solver.initialize_wakes(dt);
    while (t < 60) {
        solver.update_coefficients(dt);
        solver.log_coefficients(step_number);
        solver.update_wakes(dt);

        t += dt;
        step_number++;
    }

    // Done:
    return 0;
}

Software Requirements

Vortexje uses Eigen for linear algebra.

Source Code

The latest source code is available through the Git version control system:

git clone git://git.baayen-heinz.com/Vortexje.git

The repository can also be viewed on-line at git.baayen-heinz.com.