Compiling Instructions FASTv8

CompilingInstructions_FASTv8

User Manual: Pdf

Open the PDF directly: View PDF PDF.
Page Count: 12

DownloadCompiling Instructions FASTv8
Open PDF In BrowserView PDF
Compiling FAST v8.15.00a-bjj
Bonnie Jonkman
National Renewable Energy Laboratory
April 12, 2016

Introduction
FAST v8.15.00a-bjj is distributed with several options for compiling the source code. It contains a Visual
Studio project (XML) file, a Windows® batch file for Intel Fortran, and a makefile for gfortran. The FAST
archive contains all of the source files necessary to compile, and the compiling tools are set up with the
correct paths to those files. The tools also set up all the compiling options required to compile FAST.
Future versions will likely be distributed with cmake.
The compiling tools distributed with FAST v8.15.00a-bjj were created primarily for Windows® systems.
However, the makefile can be used on non-Windows® systems. Please see “Compiling and Running on
Linux or Mac OS” at the end of this document for some suggestions.
We have developed these instructions with the following two compilers:
•

•

Intel® Visual Fortran (IVF) Composer XE 2013 SP1, version 14.0.5.239
Intel Math Kernel Library (MKL) 11.1 Update 4
Microsoft Visual Studio Community 2013, Version 12.0.31101.00 Update 4
gfortran/gcc version 4.6.2
mingw32

The MKL is used only for LAPACK routines.
Please note that FAST v8.15.00a-bjj is distributed with executables of both 32-bit and 64-bit singleprecision and double-precision Windows® applications. Unless you are compiling for a different
architecture or are adding functionality to FAST, you should not have to recompile the code.

Supported Compilers
We support gfortran/gcc and Intel Fortran compilers. The gcc compiler must be at least version 4.6.1.
Intel Fortran should be version 2013 or later, though earlier versions can be supported with minor
modifications to the source code.

1

Compiling with Intel Fortran in Visual Studio
Open “FAST_Project.vfproj” in the Compiling\VisualStudio directory of
the FAST v8 archive. This should open a Solution Explorer window that
lists all of the source files and Registry input files for FAST v8. See
Figure 1.
Choose either Debug or Release configuration from the Configuration
manager (Debug is the default), and then select “Build Solution” from
the “Build” menu. This will run the FAST Registry (when necessary) to
produce the *_Types.f90 files needed in the project and then will
compile and link the project. When it has successfully completed, it
will place an executable called “FAST_dev_Win32.exe” (Release mode)
or “FAST_dev_debug_Win32.exe” (Debug mode) in the \bin
folder. (Note that if you are using Intel Visual Fortran 2015 or newer,
the executable might be placed in the
\Compiling\VisualStudio folder. This is a result of differences
in formats between versions of Intel Visual Fortran integrations with
Visual Studio).
When you compile the first time, a box will probably pop up to ask you
to save the solution file. Select “ok” to save the solution file in the
same directory as your project file.
Note that sometimes the Registry will create a *_Types.f90 file that
does not get compiled when building the solution. If that happens, you
will need to select “Build Solution” a second time, so the *_Types.f90
file will compile.

Figure 1. Source Files in the FAST
v8.12.00 Visual Studio Project

Note that this project requires that you have the Intel® Math Kernel Library (MKL) to access LAPACK
routines. MKL comes with newer versions of Intel® Visual Fortran (IVF), however some old versions of
IVF required a separate license for MKL. If you have the Intel compiler without access to MKL, see the
“LAPACK Libraries” section of this document, and see instructions at this web site:
http://icl.cs.utk.edu/lapack-for-windows/lapack/ for help in installing LAPACK and BLAS libraries for
Release and Debug modes.

Compiling with Intel Fortran from a Windows Command Prompt
FAST is distributed with a batch file called “Compile_FAST.bat” that will compile the code using Intel
Visual Fortran (IVF) from the command line. However, if you are using IVF for Windows, we recommend
using Visual Studio instead of the command prompt to compile.

2

Before using Compile_FAST.bat, either you must modify variables in the section labeled “set compiler
internal variables” or you must run Compile_FAST.bat only from the compiler’s command prompt
window.

Setting Compiler Environment Variables
In the “Set Compiler Internal Variables” section of the batch script, you make sure that the proper paths
and environment variables are set for the compiler and linker. If this step is not done correctly, you will
not be able to build the executable. The blue text shown in Figure 2 (copied from Compile_FAST.bat)
must be changed to reflect your compiler.
REM ---------------------------------------------------------------------------REM
set compiler internal variables
REM ---------------------------------------------------------------------------REM
You can run this bat file from the IVF compiler's command prompt (and not
REM
do anything in this section). If you choose not to run from the IVF command
REM
prompt, you must call the compiler's script to set internal variables.
REM
TIP: Right click on the IVF Compiler's Command Prompt shortcut, click
REM
properties, and copy the target (without cmd.exe and/or its switches) here:
CALL "C:\Program Files (x86)\Intel\Composer XE 2013 SP1\bin\ipsxe-comp-vars.bat" ia32 vs2013

Figure 2. The "Set Compiler Internal Variables section of Compile_FAST.bat

One way to find this command is to open the shortcut to the IVF command prompt (also called IVF Build
Environment in some versions). You can usually find the shortcut at a location named something like
Start > All Programs > Intel CompilerName > CommandPromptName. (Different versions of the compiler
may have more submenus.) Note that if the shortcut says “non-compilation mode”, then you likely have
a version of Visual Studio without the Intel Fortran integrations installed. You need to have the
integrated product for this script to work.
Right click on the shortcut to the command prompt and click “Properties.” (See Figure 3 for an example.)
A window similar to Figure 4 will open.
Copy the text from the Shortcut’s “Target” field and paste it in the Compile_FAST.bat script:
C:\Windows\SysWOW64\cmd.exe /E:ON /V:ON /K ""C:\Program Files
(x86)\Intel\Composer XE 2013 SP1\bin\ipsxe-comp-vars.bat" ia32 vs2013"

You will need to remove the call to cmd.exe and its switches, leaving you with the name of a batch file
(and possibly some of its arguments):
"C:\Program Files (x86)\Intel\Composer XE 2013 SP1\bin\ipsxe-comp-vars.bat" ia32 vs2013

If you do not want to call this batch file from Compile_FAST.bat, you may remove the line from the file.
However, you must then run Compile_FAST.bat only from the compiler’s command line window. Please
refer to your compiler’s documentation about using ifort and calling it from the command line.

3

Figure 3. An example of finding the IVF command
prompt shortcut

Figure 4. The properties window for an IVF command
prompt shortcut

Running the Batch File
After you have modified Compile_FAST.bat, you can run it from the command line by typing
Compile_FAST.bat

in the directory where the batch file is stored. Figure 5 shows the screen output after a successful build
using Intel® Composer XE 2011. Notice the title of the command window after Compile_FAST.bat has
been run. The script that you call in the “Set Compiler Internal Variables” section to set the paths and
environment variables for the IVF compiler also modifies the title of the window. If the title does not
say anything about the compiler and Visual Studio versions, please verify that you have modified
Compile_FAST.bat correctly.

4

Figure 5. Screen output from Compile_FAST.bat. (Note that the title of the command window indicates that the batch script
to set the compiler and linker paths was successfully run)

Compiling with gfortran for Windows
The makefile in the FAST\Compiling folder can be used to compile FAST v8 using gfortran.
gfortran (gcc) for Windows will require you to download the LAPACK and BLAS binary files, which you
can get here: http://icl.cs.utk.edu/lapack-for-windows/index.html. For 32-bit Windows, you will need
these files:
•
•
•

http://icl.cs.utk.edu/lapack-for-windows/libraries/VisualStudio/3.5.0/DynamicMINGW/Win32/liblapack.dll
http://icl.cs.utk.edu/lapack-for-windows/libraries/VisualStudio/3.5.0/DynamicMINGW/Win32/liblapack.lib
http://icl.cs.utk.edu/lapack-for-windows/libraries/VisualStudio/3.5.0/DynamicMINGW/Win32/libblas.dll
5

•

http://icl.cs.utk.edu/lapack-for-windows/libraries/VisualStudio/3.5.0/DynamicMINGW/Win32/libblas.lib

When you use gfortran for Windows, you will need to make sure these .dll files are on your Windows
PATH so that the executables will run. The .lib files are required for linking.
To use the LAPACK and BLAS libraries in gfortran, use linking options –llapack and –lblas. (if you are
having trouble, this web site may also provide some useful information:
http://www.math.utah.edu/software/lapack.html)
Also note, a couple of users have reported problems linking with these libraries with gfortran v5.x. We
have not verified this issue.

Known compiling issues
•
•

•

The version of gfortran must be at least 4.6.0. NWTC Library uses some quad-precision variables,
which are not supported in earlier versions of gfortran.
Intel Fortran version 10 and earlier does not provide the gamma() function. You can write your
own gamma() function in the SysI*.f90 files, or remove the calls to gamma() (e.g., set
nwtc_gamma = 1) and avoid using IceDyn and the wave spreading features of HydroDyn.
Intel Visual Fortran 2013 produces an internal compiler error and/or linking error with the
OrcaFlexInterface.f90 file in release mode. Setting the optimization level to /O1 and removing
interprocedural optimization seems to fix the issue. IVF 2013 SP1 does not have this problem.

Compiling and Linking Options
The options required to compile and link FAST v8.12.00a-bjj are already set in the compiling tools
distributed with the code. However, it is sometimes useful to modify the options for debugging or other
purposes.
Table 1 lists several useful compiling options. The first column of the table indicates which options are
required to compile FAST.
We also require some additional linking options:
•

•

You must link with the MAP library. On Windows, this means adding MAP_Win32.lib (or
MAP_x64.lib) to the linking command. On non-Windows machines, this means adding
libmap-{version}.so to the linking command.
Some parts of the code place large arrays on the stack, and we have found that on Win32
systems, we sometimes need to increase the stack reserve size. The command option is:
/STACK:999999999
(IVF)
-Wl,--stack=999999999
(gfortran)
There is a 1-GB limit on stack size. If you go beyond that limit, you will see errors when you try

6

•

to run the code. When using the OrcaFlex interface, you will need to ensure that the stack
reserve size is small enough to accommodate the number of threads being used in OrcaFlex.
Also on some large models (e.g., OC4 Jacket), we can exceed the 2-GB Windows memory limit
for 32-bit processes. We can extend this limit when running the application on 64-bit
architectures by adding the option to Enable Large Addresses.
/LARGEADDRESSAWARE
(IVF)
-Wl,--large-address-aware
(gfortran)

If you compile a 64-bit version of FAST, you can omit the /STACK and /LARGEADDRESSAWARE options.

Double Precision
To compile FAST in double precision:
•

Use the preprocessor definition DOUBLE_PRECISION (for the NWTC Subroutine Library). This can
be done from the command line by adding –DDOUBLE_PRECISION to the compile options, or
using the appropriate GUI in Visual Studio (see Figure 6).

Figure 6: Adding preprocessor definitions to a Visual Studio project

7

•

Some of the Third Party code we use also requires setting the default Real and Double KINDs to
8 and 16 bytes, respectively. (Default REAL must be the same as ReKi and Default DOUBLE must
be the same as DbKi.)

Figure 7: Changing default real and double sizes in Visual Studio

LAPACK Libraries
FAST v8 uses some LAPACK routines (http://www.netlib.org/lapack/index.html). We have made the
decision to link with prebuilt libraries, which should include highly optimized versions of the Basic Linear
Algebra Subprograms (BLAS).
These prebuilt libraries typically come installed on Linux and Mac operating systems. Use linking options
–llapack and –lblas for gfortran.
If you are using the Intel compiler, you can use the Intel® Math Kernel Library. To activate MKL, you will
need to set Project -> {project name} Properties -> Configuration Properties -> Fortran -> Libraries -> Use
Intel Math Kernel Library to Sequential (/Qmkl:sequential).

8

Figure 8. Setting Visual Studio to use LAPACK

With this option set, you can compile and use any routine in the LAPACK libraries.
If you have an older version of the Intel compiler, you may not have access to MKL. In that case, please
see the instructions at this web site: http://icl.cs.utk.edu/lapack-for-windows/lapack/ for help in
installing LAPACK and BLAS libraries for Release and Debug modes.
LAPACK in Double Precision
To facilitate compiling in double precision, we have created some wrapper routines in for the LAPACK
and ScaLAPACK routines used in FAST and its modules.
The NWTC wrapper routines for LAPACK have been written assuming that they are calling prebuilt
libraries. If you choose to compile with the LAPACK source files instead of using the prebuilt libraries
(not recommended), you must make sure that default Real and Double KINDs for the LAPACK routines
are 4 and 8 bytes, respectively (even when compiling FAST in double precision).

9

Table 1: Fortran Compiling Options

Data options

Define all default real (and complex) variables
as 4 bytes long
Define all default real (and complex) variables
as 8 bytes long

Optimization options

Disable all optimizations (debug mode)
Enable optimizations for speed (release
mode)
Enable higher optimizations (may set other
options; may not be appropriate for all codes)

External libraries

Use optimized LAPACK routines

Used in FAST?

Intel Fortran
(Windows)

Intel Fortran
(Linux and Mac OS)

GNU Fortran

Recommended
(compiler default)

/real-size:32

-real-size 32

(set by default)

/real-size:64

-real-size 64

-fdefault-real-8

/Od

-O0

-O0

/O2

-O2

-O2

/O3

-O3

-O3

/Qmkl:sequential

-mkl=sequential

-llapack -lblas

/traceback

-traceback

-fbacktrace

/check:bounds

-check bounds

-fcheck=bounds

/stand:f03

-std03

-std=f2003

Recommended for
Debug
Recommended for
Release

Required

Debugging options

Provide source file traceback information
when a severe error occurs at run time
Check array subscripts

Fortran Dialect Options

Produce warning/error for non-standard
Fortran 2003 code
Allow free-format code to exceed 132
columns

Recommended

(allowed by default)

Required

Other

Display compiler version information
Preprocess source files before compilation
Create 32-bit code
Create 64-bit code

*

/logo
Required

/fpp

-ffree-line-length-none

-logo
-V
-fpp

(use appropriate Visual Studio configuration or call appropriate script
prior to using compiler from command line)

These are actually linking options in gfortran.

10

*

-v
--version
-x f95-cpp-input
-m32
-m64

Compiling and Running on Linux or Mac OS
The makefile distributed in the /Compiling directory has been tested with Mac OS X and some
Linux systems. Before compiling the FAST v8 executable, though, you will need to compile a few
components.

FAST Registry
We have included the source code for the FAST Registry in the /Source/dependencies/Registry
folder. That folder also contains a makefile that will generate the FAST Registry executable using gcc. In
the Registry folder, perform the command
make

This command will generate an executable named “registry.exe” in the /Source/dependencies
folder.

MAP++ Library
The source files for the MAP++ library are not included in the FAST archive, but they are available on the
MAP++ web site: https://nwtc.nrel.gov/MAP . The MAP++ archive contains a makefile (in its src folder)
that can be used to generate the MAP++ library.
Running the “make” command should produce a .so file in the MAP++ src folder. At this writing, the file
is called “libmap-1.20.10.so”. When finished, copy libmap-1.20.10.so to the /bin directory,
where the FAST makefile will look for the file.
When running FAST, the system must be able to load libmap-1.10.01.so. This can be accomplished in
several ways, including putting it in the directory where you run FAST, copying it to /usr/lib, or changing
DYLD_LIBRARY_PATH on Mac OS.

FAST Executable
Before running the FAST v8 makefile, make sure you have the FAST registry executable and MAP++
library compiled for your operating system. The FAST Registry executable file will be necessary only if
you modify any of the FAST Registry input files or if you perform the command
make superclean

for creating the FAST executable.
The makefile has been set up to link with the file ../bin/libmap-1.20.10.so. If this MAP++ library file has a
different name, you will need to edit the makefile accordingly.
When the FAST Registry and MAP++ library have been generated, you can run the command
make

11

in the /Compiling directory. This should generate a file called FAST_glin32 in the /bin
directory. If you have set the makefile to compile with 64-bit addresses, the file will be called
FAST_glin64.

DISCON: Discrete Controllers in Dynamically Loaded Libraries
If you wish to run any FAST model that uses the DISCON dynamically loaded libraries (e.g., CertTests 1826), you must compile the control algorithms as a dynamic library (shared object). The DISCON routine is
an industry-standard interface (Gerrad Hassan’s Bladed Interface). The source files for each of the
controllers used in CertTests 18-26 are in the /CertTest/5MW_Baseline/ServoData/Source
folder, and a makefile (makefile_DISCON_DLL) to compile them is in /Compiling. Running the
command
make –f makefile_DISCON_DLL

in the Compiling folder will generate a file called DISCON_glin32.so in the
/CertTest/5MW_Baseline/ServoData folder. This controller is used for Test 18 (and a few
others). If you wish to compile a different source file, you will need to edit “makefile_DISCON_DLL” and
modify variables SOURCE_FILE and OUTPUT_NAME.
When /CertTest/5MW_Baseline/ServoData/DISCON_glin32.so has been created, you must
open the ServoDyn input file and tell it to read this library. Open the file
/CertTest/5MW_Baseline/NRELOffshrBsline5MW_Onshore_ServoDyn.dat and change the input
parameter “DLL_FileName” to "ServoData/DISCON_glin32.dll".
When that is complete, you can run the FAST CertTest 18 model on Mac OS X or Linux. For example, in
the /CertTest folder, type:
../bin/FAST_glin32 Test18.fst

Note: if you compile a 64-bit version of FAST (i.e., FAST_glin64), you also need to compile a 64-bit
version of the DISCON*.so file.

Feedback
If you have questions or suggestions for improvements, please use our forums:
https://wind.nrel.gov/forum/wind/

12



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.7
Linearized                      : Yes
Tagged PDF                      : Yes
XMP Toolkit                     : Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26
Modify Date                     : 2016:04:12 22:44:19-06:00
Create Date                     : 2016:04:12 22:44:17-06:00
Metadata Date                   : 2016:04:12 22:44:19-06:00
Creator Tool                    : Acrobat PDFMaker 10.1 for Word
Document ID                     : uuid:18086046-8d67-43e1-bb92-ff931bdd9062
Instance ID                     : uuid:7c1688fe-e759-46c3-b8ed-4498b922259f
Subject                         : 30
Format                          : application/pdf
Creator                         : Bonnie Jonkman
Producer                        : Adobe PDF Library 10.0
Source Modified                 : D:20160413044411
Company                         : NREL
Page Layout                     : OneColumn
Page Count                      : 12
Author                          : Bonnie Jonkman
EXIF Metadata provided by EXIF.tools

Navigation menu