Development Guide to the FAST Modularization Framework

This page is for developers of modules in the FAST modularization framework.

by Jason Jonkman, Ph.D. and Bonnie Jonkman
National Wind Technology Center

NREL has recently put considerable effort into improving the overall modularity of its FAST wind turbine aero-hydro-servo-elastic tool to (1) improve the ability to read, implement, and maintain source code; (2) increase module sharing and shared code development across the wind community; (3) improve numerical performance and robustness; and (4) greatly enhance flexibility and expandability to enable further developments of functionality without the need to recode established modules. The new FAST modularization framework supports module-independent inputs, outputs, states, and parameters; states in continuous-time, discrete-time, and in constraint form; loose and tight coupling; independent time and spatial discretizations; time marching, operating-point determination, and linearization; data encapsulation; dynamic allocation; and save/retrieve capability.

It is envisioned that the new modularization framework will transform FAST into a powerful, robust, and flexible wind turbine modeling tool with a large number of developers and a range of modeling fidelities across the aerodynamic, hydrodynamic, servo-dynamic, and structural-dynamic components. For the most recent versions of FAST developed under this framework, please see the FAST v8 and OpenFAST web sites.

The following documents describe the FAST modularization framework:

The following code is designed to assist developing modules in the FAST framework:

  • Fortran Template Module
    supported by Bonnie Jonkman

    This gitHub link contains the Fortran source code of a template module and a driver program for the module, as well as a FAST Registry input file for the module. It compiles with NWTC Subroutine Library v2.09.00 and code generated by the FAST Registry. It was developed using Intel® Visual Fortran Compiler XE [IA-32] and gfortran (gcc) 4.6.2. A makefile for compiling with gfortran is also provided.

    Note that this template file can be generated--and modified for a new module name--using the FAST Registry.

  • FAST Registry for Automatic Code Generation
    supported by John Michalakes and Bonnie Jonkman

    The above link to gitHub contains the source code, makefile, and Visual Studio project file to compile the FAST Registry. The FAST Registry is described in the NWTC Programmer's Handbook .
  • Examples:
    We have created some simple examples that demonstrate the new FAST modularization framework. These examples use the Fortran Template Module and FAST Registry for Automatic Code Generation available at the links above. (Note that these examples and old; they do not use the Mesh Module, which is required for the FAST modularization framework.)
    1. Gasmi Paper Examples (tar, 412 KB) (26-March-2013)
      This archive contains the development plan and implementation of the examples described in Gasmi et al (2013), following the module-development requirements documented in the NWTC Programmer's Handbook for loose coupling. Module 1 is a one-degree-of-freedom damped oscillator with motion output and force input, Module 2 is a one-degree-of-freedom damped oscillator with force input and motion output, and Module 3 is a quasi-static nonlinear cable with motion input and force output. In contrast to Gasmi et al (2013), the method to couple the modules used here is a "symmetric" predictor-corrector approach (such that the order of modules does not matter). While these example problems are quite trivial, the examples can be used as a "how-to" reference when developing a plan and source code for more sophisticated modules.

      The archive contains the Fortran source files and Registry input files for the three modules, plus separate Fortran glue codes for coupling Module 1 to Module 2 and for coupling Module 1 to Module 3. Makefiles, which will run the FAST Registry and compile the code using gfortran, are included. These examples compile with NWTC Subroutine Library v1.07.00b-mlb and code generated by the FAST Registry Rev276.
    2. Example using ModMesh coming later
Programming Language:     Wind and Water Tools:

You must log in to download this software.

If you want to refer to this website in a report, here is a reference you can use:
NWTC Information Portal (Development Guide to the FAST Modularization Framework). Last modified 05-January-2018 ; Accessed 05-April-2020