Instructions for Compiling FAST

Provide feedback, request enhancements, and get help with wind-turbine computer-aided engineering tools.

Moderators: Bonnie.Jonkman, Jason.Jonkman

Keshan.He
Posts: 3
Joined: Sat Mar 22, 2014 10:09 pm
Organization: STU
Location: CHINA

Re: Instructions for Compiling FAST

Postby Keshan.He » Fri May 08, 2015 10:42 am

Hi, Bonnie,
Thank you very much for your answers.
I found FAST V8.10 can “ add an additional FAST_SFunc input from Simulink, just change the third S-Function parameter in the S-Function block in Simulink and then modify FAST_Library.f90 to handle the new input value” , I think this could help me to add an flap control signal input from simulink.But I met another problem.I modify some FAST source code list as below:
(1) FAST_Library.f90
subroutine FAST_SetExternalInputs(NumInputs_c, InputAry, m_FAST)
……
! add some variable
REAL(ReKi) , DIMENSION(1:3) :: FlapCom_STU ! Flap commands from Simulink/Labview [rad/s]
REAL :: COM1_STU,COM2_STU,COM3_STU ! Deliver the flap commands parameter to AeroSubs.f90 file.
COMMON COM1_STU,COM2_STU,COM3_STU
……
IF ( NumInputs_c > NumFixedInputs ) THEN ! NumFixedInputs is the fixed number of inputs
IF ( NumInputs_c == NumFixedInputs + 3 ) &
m_FAST%ExternInput%FlapCom_STU = InputAry(9:11) ! use the input port InputAry(9:11) to pass the flap commands
!m_FAST%ExternInput%LidarFocus = InputAry(9:11)
END IF
COM1_STU = FlapCom_STU(1)
COM2_STU = FlapCom_STU(2)
COM3_STU = FlapCom_STU(3)
end subroutine FAST_SetExternalInputs
(2)AeroSubs.f90
SUBROUTINE AD_GetInput(InitInp, P, x, xd, z, O, y, ErrStat, ErrMess )
……
! add some variable
CHARACTER (1024) :: FlapNm(100)
INTEGER :: L
INTEGER :: FlapCom
REAL :: COM11_STU,COM12_STU,COM13_STU
COMMON COM11_STU,COM12_STU,COM13_STU
……
!read the flap airfoil file name(s)
CALL ReadAryLines( UnIn, InitInp%ADFileName, FlapNm, 10, AryName='FlapNm', AryDescr='Flap file names', ErrStat=ErrStat, ErrMsg=ErrMess )
IF (ErrStat >= AbortErrLev) THEN
CLOSE(UnIn)
RETURN
END IF
! flap airfoil data file name(s) pass to FlapNm(L)
DO L=1,10
IF ( PathIsRelative( FlapNm(L) ) ) FlapNm(L) = TRIM(FilePath)//TRIM( FlapNm(L) )
END DO
FlapCom = INT( COM11_STU ) !Use the COM11_STU as an flap command single
! use the new flap airfoil data file to replace the old airfoil data file according to the flap command single
SELECT CASE (FlapCom)
CASE(1)
P%AirFoil%FoilNm(10)=FlapNm(1)
CASE(2)
P%AirFoil%FoilNm(10)=FlapNm(2)
CASE(3)
P%AirFoil%FoilNm(10)=FlapNm(3)
CASE(4)
P%AirFoil%FoilNm(10)=FlapNm(4)
CASE(5)
P%AirFoil%FoilNm(10)=FlapNm(5)
CASE(6)
P%AirFoil%FoilNm(10)=FlapNm(6)
CASE(7)
P%AirFoil%FoilNm(10)=FlapNm(7)
CASE(8)
P%AirFoil%FoilNm(10)=FlapNm(8)
CASE(9)
P%AirFoil%FoilNm(10)=FlapNm(9)
CASE(10)
P%AirFoil%FoilNm(10)=FlapNm(10)
CASE DEFAULT
WRITE(*,*)"ERROR"
STOP
END SELECT
……
Then run the …\Simulink\VisualStudio\FAST_Library.vfproj, It could create the FAST_Library_debug_Win32.dll. And then use the new FAST_Library_debug_Win32.dll replace the old FAST_Library _Win32.dll, and run the Run_OpenLoop.m file, An error occur , the prompt message are as below:

-------------------------------------------------------------
This segmentation violation occurred while executing the
S-function 'FAST_SFunc' in block 'O'.
A common cause of this segmentation violation is an incorrect
input port direct feedthrough setting. Each input port of the
S-function that is read (accessed) in mdlOutputs and/or
mdlGetTimeOfNextVarHit must specify that it needs its input
signal in these routines by setting direct feedthrough for
these input ports.
1) To debug your C-MEX S-function, you can enable diagnostics
by compiling the S-function source with the -g flag, e.g.,
mex -g sfunction_name.c
2) You can ask Simulink to try assuming your S-function has
direct feedthrough using:
set_param('modelname','TryForcingSFcnDF','on')
If Simulink can find a valid sorting mode that does not
result in algebraic loops involving your S-function, your
model will execute (assuming that the cause of this
segmentation violation is an incorrect direct feedthrough
setting on an input port).
See matlabroot/simulink/src/sfuntmpl_directfeed.txt
-------------------------------------------------------------
Error using Run_OpenLoop (line 30)
Error while obtaining sizes from MEX S-function 'FAST_SFunc' in 'OpenLoop/FAST Nonlinear Wind
Turbine/S-Function'.
Caused by:
Error using Run_OpenLoop (line 30)
FatalException

There are something wrong happen in the interface of the FAST_SFunc and Matlab\Simulink, I don’t know how to solve it. Can anybody help me?

Best regards,
keshan

Borja.Aguilo
Posts: 2
Joined: Tue May 12, 2015 8:24 am
Organization: self
Location: Spain

Re: Instructions for Compiling FAST

Postby Borja.Aguilo » Thu May 14, 2015 10:25 am

Dear JeanMarc,

I am trying to compile FAST in Ubuntu 14.04, I have to admit this is my first compiling experience so I am a bit lost...

First I've checked if I have gfortran and gcc installed and they are and their versions are 4.8.2 both of them.
I made some changes in the makefile indicating some paths and changing the compiler instructions to the ones you indicated for gfortran. I save and copy the file into ../Source folder.
In addition I patched SysGnuLinux.f90 as indicated in your post.

Now, I open a terminal, go to ../FAST_v8.10.00a-bjj/Source folder and execute the command "make" and I get the following message.

Code: Select all

borja@borja-HP:~/FAST/FAST_v8.10.00a-bjj/Source$ make
gfortran -I Obj_lin64  -c /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90 -o Obj_lin64/SysGnuLinux.obj -J Obj_lin64 -B Obj_lin64
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:399: Illegal preprocessor directive
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:413: Illegal preprocessor directive
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:95.1:

-
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:96.1:

+   
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:97.1:

+#ifndef __GFORTRAN__
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:98.1:

+    USE IFPORT
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:99.1:

+#else
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:100.1:

+#endif
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:157.1:

-
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:158.1:

+#ifndef __GFORTRAN__
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:159.1:

+    USE IFPORT
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:160.1:

+#else
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:161.1:

+#endif
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:445.1:

+   
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:446.1:

+#ifndef __GFORTRAN__
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:447.1:

+      FLUSH(CU)
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:448.1:

+#else
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:449.1:

+#endif
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:481.1:

+   
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:482.1:

+#ifndef __GFORTRAN__
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:483.1:

+      FLUSH(CU)
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:484.1:

+#else
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:485.1:

+#endif
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:490.1:

+   
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:491.1:

+#ifndef __GFORTRAN__
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:492.1:

+      FLUSH(CU)
 1
Error: Invalid character in name at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:493.1:

+#else
 1
Error: Invalid character in name at (1)
Fatal Error: Error count reached limit of 25.
make: *** [SysGnuLinux.obj] Error 1


At this point I don't know if I am doing the right thing or not, but seems like my gfortran does not like some expressions in the patched SysGnuLinux.f90 file.

If I try to run the same command without patching it I get also bad results.

Code: Select all

borja@borja-HP:~/FAST/FAST_v8.10.00a-bjj/Source$ make
gfortran -I Obj_lin64  -c /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90 -o Obj_lin64/SysGnuLinux.obj -J Obj_lin64 -B Obj_lin64
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:390: Illegal preprocessor directive
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:404: Illegal preprocessor directive
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:531: Illegal preprocessor directive
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:585: Illegal preprocessor directive
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:609: Illegal preprocessor directive
Warning: /home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:638: Illegal preprocessor directive
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:533.32:

   INTERFACE !linux API routines
                                1
Error: Unexpected INTERFACE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:537.6:

      FUNCTION dlOpen(filename,mode) BIND(C,NAME="dlopen")
      1
Error: Unclassifiable statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:539.26:

         USE ISO_C_BINDING
                          1
Error: Unexpected USE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:540.22:

         IMPLICIT NONE
                      1
Error: Unexpected IMPLICIT NONE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:541.48:

         TYPE(C_PTR)                   :: dlOpen
                                                1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:542.53:

         CHARACTER(C_CHAR), INTENT(IN) :: filename(*)
                                                     1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:543.46:

         INTEGER(C_INT), VALUE         :: mode
                                              1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:544.9:

      END FUNCTION
         1
Error: Expecting END SUBROUTINE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:546.6:

      FUNCTION dlSym(handle,name) BIND(C,NAME="dlsym")
      1
Error: Unclassifiable statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:548.26:

         USE ISO_C_BINDING
                          1
Error: Unexpected USE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:549.22:

         IMPLICIT NONE
                      1
Error: Unexpected IMPLICIT NONE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:550.68:

         TYPE(C_FUNPTR)                :: dlSym ! A function pointer
                                                                    1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:551.48:

         TYPE(C_PTR), VALUE            :: handle
                                                1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:552.49:

         CHARACTER(C_CHAR), INTENT(IN) :: name(*)
                                                 1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:553.9:

      END FUNCTION
         1
Error: Expecting END SUBROUTINE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:555.6:

   END INTERFACE
      1
Error: Expecting END SUBROUTINE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:611.31:

   INTERFACE !linux API routine
                               1
Error: Unexpected INTERFACE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:614.6:

      FUNCTION dlClose(handle) BIND(C,NAME="dlclose")
      1
Error: Unclassifiable statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:616.26:

         USE ISO_C_BINDING
                          1
Error: Unexpected USE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:617.22:

         IMPLICIT NONE
                      1
Error: Unexpected IMPLICIT NONE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:618.40:

         INTEGER(C_INT)       :: dlClose
                                        1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:619.39:

         TYPE(C_PTR), VALUE   :: handle
                                       1
Error: Unexpected data declaration statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:620.9:

      END FUNCTION
         1
Error: Expecting END SUBROUTINE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:622.6:

   END INTERFACE
      1
Error: Expecting END SUBROUTINE statement at (1)
/home/borja/FAST/FAST_v8.10.00a-bjj/Source/dependencies/NWTC_Library/SysGnuLinux.f90:628.13:

   Success = dlClose( DLL%FileAddrX ) !The function dlclose() returns 0 on succ
             1
Error: Function 'dlclose' at (1) has no IMPLICIT type
Fatal Error: Error count reached limit of 25.
make: *** [SysGnuLinux.obj] Error 1


Analysing the message I see that expressions like #ifndef are not recognised... :shock: :shock:

I would really appreciate any help on this.

Best regards,

Borja

Bonnie.Jonkman
Posts: 561
Joined: Thu Nov 10, 2005 10:51 am
Organization: Envision Energy USA
Location: Colorado
Location: Boulder, CO
Contact:

Re: Instructions for Compiling FAST

Postby Bonnie.Jonkman » Fri May 15, 2015 10:42 am

Just a thought, but if you are not trying to compile both intel fortran and gfortran using the same SysGnuLinux.f90 file, I don't think you need most of the patches to that file. SysGnuLinux.f90 should compile with gfortran as is.
Bonnie Jonkman

Envision Energy USA, 2016-
National Renewable Energy Laboratory, 2003-2016

Bonnie.Jonkman
Posts: 561
Joined: Thu Nov 10, 2005 10:51 am
Organization: Envision Energy USA
Location: Colorado
Location: Boulder, CO
Contact:

Re: Instructions for Compiling FAST

Postby Bonnie.Jonkman » Fri May 15, 2015 11:09 am

Keshan,

I don't have a lot of time now to help with more involved questions, but one thing that concerns me is that you seem to be using S-Function inputs to set parameters. Parameters don't change over the course of the simulation, and the inputs are not even defined before calling FAST_Sizes() where your code seems to be used. I'd suggest using S-function parameters (initialization inputs) instead of inputs to the S-Function for what you're doing at initialization. The "NumAdditionalInputs" parameter can actually be input as an array; elements 2-n can be accessed through the InitInpAry array in FAST_Sizes(). So if you set NumAdditionalInputs to [3, COM11_STU], InitInpAry(1) = COM11_STU. Be careful, though, because when NumAdditionalInputs is 3, the code expects InitInpAry to contain two values to initialize a lidar module.

If you really do want to change parameters during the simulation, that will involve a lot more effort.
Bonnie Jonkman

Envision Energy USA, 2016-
National Renewable Energy Laboratory, 2003-2016

JeanMarc.Cherfils
Posts: 4
Joined: Fri Jul 04, 2014 6:20 am
Organization: Institut National des Sciences Appliquées
Location: France

Re: Instructions for Compiling FAST

Postby JeanMarc.Cherfils » Mon May 18, 2015 2:34 am

Borja,

As mentioned by Bonnie, the patch allows to compile FAST on Linux with Ifort (and Gfortran as well, but only a few lines need to be modified for Gfortran). But, I think that first errors come from the fact you didn't apply the patch correctly, the "+" and "-" symbols should not appear in the code, they are needed by the patch program to know which line to remove or to insert when applying the patch.

Here is the patched SysGnuLinux file that you should obtain:

Code: Select all

!**********************************************************************************************************************************
! LICENSING
! Copyright (C) 2013  National Renewable Energy Laboratory
!
!    This file is part of the NWTC Subroutine Library.
!
! Licensed under the Apache License, Version 2.0 (the "License");
! you may not use this file except in compliance with the License.
! You may obtain a copy of the License at
!
!     http://www.apache.org/licenses/LICENSE-2.0
!
! Unless required by applicable law or agreed to in writing, software
! distributed under the License is distributed on an "AS IS" BASIS,
! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
! See the License for the specific language governing permissions and
! limitations under the License.
!
!**********************************************************************************************************************************
! File last committed: $Date: 2015-02-12 09:16:39 -0700 (Thu, 12 Feb 2015) $
! (File) Revision #: $Rev: 289 $
! URL: $HeadURL: https://windsvn.nrel.gov/NWTC_Library/trunk/source/SysGnuLinux.f90 $
!**********************************************************************************************************************************
MODULE SysSubs


   ! This module contains routines with system-specific logic and references, including all references to the console unit, CU.
   ! It also contains standard (but not system-specific) routines it uses.

   ! SysGnuLinux.f90 is specifically for the GNU Fortran (gfortran) compiler on Linux. This should also work for gfortran on MAC.


   ! It contains the following routines:

   !     FUNCTION    FileSize( Unit )                                         ! Returns the size (in bytes) of an open file.
   !     SUBROUTINE  FlushOut ( Unit )
   !     SUBROUTINE  GET_CWD( DirName, Status )
   !     FUNCTION    Is_NaN( DblNum )                                         ! Please use IEEE_IS_NAN() instead
   !     FUNCTION    NWTC_Gamma( x )                                          ! Returns the gamma value of its argument.   
   ! per MLB, this can be removed, but only if CU is OUTPUT_UNIT:
   !     SUBROUTINE  OpenCon                                                  ! Actually, it can't be removed until we get Intel's FLUSH working. (mlb)
   !     SUBROUTINE  OpenUnfInpBEFile ( Un, InFile, RecLen, Error )
   !     SUBROUTINE  ProgExit ( StatCode )
   !     SUBROUTINE  Set_IEEE_Constants( NaN_D, Inf_D, NaN, Inf )   
   !     SUBROUTINE  UsrAlarm
   !     SUBROUTINE  WrNR ( Str )
   !     SUBROUTINE  WrOver ( Str )
   !     SUBROUTINE  WriteScr ( Str, Frm )
   !     SUBROUTINE LoadDynamicLib( DLL, ErrStat, ErrMsg )
   !     SUBROUTINE FreeDynamicLib( DLL, ErrStat, ErrMsg )



   USE                             NWTC_Base

   IMPLICIT                        NONE

   INTERFACE NWTC_gamma ! Returns the gamma value of its argument
         ! note: gamma is part of the F08 standard, but may not be implemented everywhere...
      MODULE PROCEDURE NWTC_gammaR4
      MODULE PROCEDURE NWTC_gammaR8
      MODULE PROCEDURE NWTC_gammaR16
   END INTERFACE
   
   INTERFACE NWTC_ERF ! Returns the ERF value of its argument
      MODULE PROCEDURE NWTC_ERFR4
      MODULE PROCEDURE NWTC_ERFR8
      MODULE PROCEDURE NWTC_ERFR16
   END INTERFACE
   
   

!=======================================================================


   INTEGER, PARAMETER            :: ConRecL     = 120                               ! The record length for console output.
   INTEGER, PARAMETER            :: CU          = 6                                 ! The I/O unit for the console.  Unit 6 causes ADAMS to crash.
                                                                                    ! CU = 7 works on gfortran compiler version 4.6 and possibly 4.5. Fails on version 4.7 and 4.8 (see bugzilla bug report #445 for details)
   INTEGER, PARAMETER            :: MaxWrScrLen = 98                                ! The maximum number of characters allowed to be written to a line in WrScr

   LOGICAL, PARAMETER            :: KBInputOK   = .TRUE.                            ! A flag to tell the program that keyboard input is allowed in the environment.

   CHARACTER(10), PARAMETER      :: Endian      = 'BIG_ENDIAN'                      ! The internal format of numbers.
   CHARACTER(*),  PARAMETER      :: NewLine     = ACHAR(10)                         ! The delimiter for New Lines [ Windows is CHAR(13)//CHAR(10); MAC is CHAR(13); Unix is CHAR(10) {CHAR(13)=\r is a line feed, CHAR(10)=\n is a new line}]
   CHARACTER(*),  PARAMETER      :: OS_Desc     = 'GNU Fortran for Linux'           ! Description of the language/OS
   CHARACTER( 1), PARAMETER      :: PathSep     = '/'                               ! The path separator.
   CHARACTER( 1), PARAMETER      :: SwChar      = '-'                               ! The switch character for command-line options.
   CHARACTER(11), PARAMETER      :: UnfForm     = 'UNFORMATTED'                     ! The string to specify unformatted I/O files.


CONTAINS

!=======================================================================
   FUNCTION FileSize( Unit )
   
#ifndef __GFORTRAN__
    USE IFPORT
#else
#endif

      ! This function calls the portability routine, FSTAT, to obtain the file size
      ! in bytes corresponding to a file unit number or returns -1 on error.


      ! Function declaration.

   INTEGER(B8Ki)                             :: FileSize                      ! The size of the file in bytes to be returned.


      ! Argument declarations:

   INTEGER, INTENT(IN)                       :: Unit                          ! The I/O unit number of the pre-opened file.


      ! Local declarations:

   INTEGER                                   :: StatArray(13)                 ! An array returned by FSTAT that includes the file size.
   INTEGER                                   :: Status                        ! The status returned by



   Status = FSTAT( INT( Unit, B4Ki ), StatArray )

   IF ( Status /= 0 ) THEN
      FileSize = -1
   ELSE
      FileSize = StatArray(8)
   END IF


   RETURN
   END FUNCTION FileSize ! ( Unit )
!=======================================================================
   SUBROUTINE FlushOut ( Unit )


      ! This subroutine flushes the buffer on the specified Unit.
      ! It is especially useful when printing "running..." type messages.


      ! Argument declarations:

   INTEGER, INTENT(IN)          :: Unit                                         ! The unit number of the file being flushed.



  ! CALL FLUSH ( Unit )


   RETURN
   END SUBROUTINE FlushOut ! ( Unit )
!=======================================================================
!bjj note: this subroutine is not tested for this compiler
   SUBROUTINE Get_CWD ( DirName, Status )

#ifndef __GFORTRAN__
    USE IFPORT
#else
#endif
      ! This routine retrieves the path of the current working directory.


   IMPLICIT                        NONE


      ! Passed variables.

   CHARACTER(*), INTENT(OUT)    :: DirName                                         ! A CHARACTER string containing the path of the current working directory.
   INTEGER,      INTENT(OUT)    :: Status                                          ! Status returned by the call to a portability routine.


   Status = GETCWD ( DirName )

   RETURN
   END SUBROUTINE Get_CWD
!=======================================================================
   FUNCTION Is_NaN( DblNum )


      ! This routine determines if a REAL(DbKi) variable holds a proper number.
      ! BJJ: this routine is used in CRUNCH.
      ! Note that IsNaN does not exist in earlier versions of gfortran (e.g., 4.2.1),
      ! but does exist in version 4.4. It should be replaced with the standard
      ! IEEE_IS_NAN when gfortran implements it.


      ! Argument declarations.

   REAL(DbKi), INTENT(IN)       :: DblNum


      ! Function declaration.

   LOGICAL                      :: Is_Nan



   Is_NaN = IsNaN( DblNum )


   RETURN
   END FUNCTION Is_NaN ! ( DblNum )
!=======================================================================
   FUNCTION NWTC_ERFR4( x )
   
      ! Returns the ERF value of its argument. The result has a value equal 
      ! to the error function: 2/pi * integral_from_0_to_x of e^(-t^2) dt.

      REAL(SiKi), INTENT(IN)     :: x           ! input
      REAL(SiKi)                 :: NWTC_ERFR4  ! result
     
     
      NWTC_ERFR4 = ERF( x )
   
   END FUNCTION NWTC_ERFR4
!=======================================================================
   FUNCTION NWTC_ERFR8( x )
   
      ! Returns the ERF value of its argument. The result has a value equal 
      ! to the error function: 2/pi * integral_from_0_to_x of e^(-t^2) dt.

      REAL(R8Ki), INTENT(IN)     :: x             ! input
      REAL(R8Ki)                 :: NWTC_ERFR8    ! result
     
     
      NWTC_ERFR8 = ERF( x )
   
   END FUNCTION NWTC_ERFR8
!=======================================================================
   FUNCTION NWTC_ERFR16( x )
   
      ! Returns the ERF value of its argument. The result has a value equal 
      ! to the error function: 2/pi * integral_from_0_to_x of e^(-t^2) dt.

      REAL(QuKi), INTENT(IN)     :: x             ! input
      REAL(QuKi)                 :: NWTC_ERFR16   ! result
     
     
      NWTC_ERFR16 = ERF( x )
   
   END FUNCTION NWTC_ERFR16
!=======================================================================
   FUNCTION NWTC_GammaR4( x )
   
      ! Returns the gamma value of its argument. The result has a value equal 
      ! to a processor-dependent approximation to the gamma function of x.

      REAL(SiKi), INTENT(IN)     :: x             ! input
      REAL(SiKi)                 :: NWTC_GammaR4  ! result
     
     
      NWTC_GammaR4 = gamma( x )
   
   END FUNCTION NWTC_GammaR4
!=======================================================================
   FUNCTION NWTC_GammaR8( x )
   
      ! Returns the gamma value of its argument. The result has a value equal 
      ! to a processor-dependent approximation to the gamma function of x.

      REAL(R8Ki), INTENT(IN)     :: x             ! input
      REAL(R8Ki)                 :: NWTC_GammaR8  ! result
     
     
      NWTC_GammaR8 = gamma( x )
   
   END FUNCTION NWTC_GammaR8
!=======================================================================
   FUNCTION NWTC_GammaR16( x )
   
      ! Returns the gamma value of its argument. The result has a value equal 
      ! to a processor-dependent approximation to the gamma function of x.

      REAL(QuKi), INTENT(IN)     :: x             ! input
      REAL(QuKi)                 :: NWTC_GammaR16  ! result
     
     
      NWTC_GammaR16 = gamma( x )
   
   END FUNCTION NWTC_GammaR16
!=======================================================================
   SUBROUTINE OpenCon


      ! This routine opens the console for standard output.


!bjj: removed for use with CygWin; Because CU = 6 now, this statement is not necessary
!   OPEN ( CU , FILE='/dev/stdout' , STATUS='OLD' )

   CALL FlushOut ( CU )


   RETURN
   END SUBROUTINE OpenCon
!=======================================================================
   SUBROUTINE OpenUnfInpBEFile ( Un, InFile, RecLen, Error )


      ! This routine opens a binary input file with data stored in Big Endian format (created on a UNIX machine.)
      ! Data are stored in RecLen-byte records.

   IMPLICIT                        NONE



      ! Argument declarations.

   INTEGER, INTENT(IN)          :: Un                                           ! Logical unit for the input file.

   CHARACTER(*), INTENT(IN)     :: InFile                                       ! Name of the input file.

   INTEGER, INTENT(IN)          :: RecLen                                       ! Size of records in the input file, in bytes.

   LOGICAL, INTENT(OUT)         :: Error                                        ! Flag to indicate the open failed.


      ! Local declarations.

   INTEGER                      :: IOS                                          ! I/O status of OPEN.



      ! Open input file.  Make sure it worked.

   ! The non-standard CONVERT keyword allows us to read UNIX binary files, whose bytes are in reverse order (i.e., stored in BIG ENDIAN format).

   ! NOTE: using RecLen in bytes requires using the /assume:byterecl compiler option!

   OPEN ( Un, FILE=TRIM( InFile ), STATUS='OLD', FORM='UNFORMATTED', ACCESS='DIRECT', RECL=RecLen, IOSTAT=IOS, &
                   ACTION='READ'  )                                              ! Use this for UNIX systems.
!                  ACTION='READ', CONVERT='BIG_ENDIAN' )                         ! Use this for PC systems.


   IF ( IOS /= 0 )  THEN
      Error = .TRUE.
   ELSE
      Error = .FALSE.
   END IF


   RETURN
   END SUBROUTINE OpenUnfInpBEFile
!=======================================================================
   SUBROUTINE ProgExit ( StatCode )


      ! This routine stops the program.  If the compiler supports the EXIT routine,
      ! pass the program status to it.  Otherwise, do a STOP.


      ! Argument declarations.

   INTEGER, INTENT(IN)          :: StatCode                                      ! The status code to pass to the OS.



   CALL EXIT ( StatCode )

!   IF ( StatCode == 0 ) THEN
!      STOP 0
!   ELSE
!      IF ( StatCode < 0 ) THEN
!         CALL WrScr( 'Invalid STOP code.' )
!      END IF
!
!      STOP 1
!   END IF


   END SUBROUTINE ProgExit ! ( StatCode )
!=======================================================================
   SUBROUTINE Set_IEEE_Constants( NaN_D, Inf_D, NaN, Inf )   
         
      ! routine that sets the values of NaN_D, Inf_D, NaN, Inf (IEEE
      ! values for not-a-number and infinity in sindle and double
      ! precision) F03 has standard intrinsic routines to do this, 
      ! but Gnu has not yet implemented it. This code will fail if 
      ! the compiler checks for floating-point-error, hence the 
      ! compiler directive FPE_TRAP_ENABLED.
   
   
      REAL(DbKi), INTENT(inout)           :: Inf_D          ! IEEE value for NaN (not-a-number) in double precision
      REAL(DbKi), INTENT(inout)           :: NaN_D          ! IEEE value for Inf (infinity) in double precision

      REAL(ReKi), INTENT(inout)           :: Inf            ! IEEE value for NaN (not-a-number)
      REAL(ReKi), INTENT(inout)           :: NaN            ! IEEE value for Inf (infinity)
   
         ! local variables for getting values of NaN and Inf (not necessary when using ieee_arithmetic)
      REAL(DbKi)                          :: Neg_D          ! a negative real(DbKi) number
      REAL(ReKi)                          :: Neg            ! a negative real(ReKi) number
   
     
         ! if compiling with floating-point-exception traps, this will not work, so we've added a compiler directive.
         !  note that anything that refers to NaN or Inf will be incorrect in that case.
         
#ifndef FPE_TRAP_ENABLED     
         ! set variables to negative numbers to calculate NaNs (compilers may complain when taking sqrt of negative constants)
      Neg_D = -1.0_DbKi
      Neg   = -1.0_ReKi

      NaN_D = SQRT ( Neg_D )
      NaN   = SQRT ( Neg )

         ! set variables to zero to calculate Infs (using division by zero)
      Neg_D = 0.0_DbKi
      Neg   = 0.0_ReKi
     
      Inf_D = 1.0_DbKi / Neg_D
      Inf   = 1.0_ReKi / Neg
#endif
   
   END SUBROUTINE Set_IEEE_Constants 

!=======================================================================
   SUBROUTINE UsrAlarm


      ! This routine generates an alarm to warn the user that something went wrong.



   CALL WrNR ( CHAR( 7 ) )


   RETURN
   END SUBROUTINE UsrAlarm
!=======================================================================
   SUBROUTINE WrNR ( Str )


      ! This routine writes out a string to the screen without following it with a new line.


      ! Argument declarations.

   CHARACTER(*), INTENT(IN)     :: Str                                          ! The string to write to the screen.



!   WRITE (CU,'(1X,A)',ADVANCE='NO')  Str
   WRITE (CU,'(A)',ADVANCE='NO')  Str
   
#ifndef __GFORTRAN__
      FLUSH(CU)
#else
#endif


   RETURN
   END SUBROUTINE WrNR ! ( Str )
!=======================================================================
   SUBROUTINE WrOver ( Str )


      ! This routine writes out a string that overwrites the previous line.


      ! Argument declarations.

   CHARACTER(*), INTENT(IN)     :: Str                                          ! The string to write to the screen.


      ! Local declarations.
   INTEGER(IntKi)               :: NChars                                       ! Number of characters to write
   CHARACTER(1), PARAMETER      :: CR = ACHAR( 13 )                             ! The carriage return character.
   CHARACTER(25)                :: Fmt = '(2A,   (" "))'                        ! The format specifier for the output.



!   WRITE (Fmt(5:6),'(I2)')  ConRecL - LEN( Str )

   NChars = MaxWrScrLen - LEN( Str )

   IF ( NChars > 0 ) THEN

      WRITE (Fmt(5:7),'(I3)')  NChars

      WRITE (CU,Fmt,ADVANCE='NO')  CR, Str
   
#ifndef __GFORTRAN__
      FLUSH(CU)
#else
#endif

   ELSE
      ! bjj: note that this will almost certainly write more than MaxWrScrLen characters on a line
      WRITE (CU,'(A)',ADVANCE='NO')  CR, Str
   
#ifndef __GFORTRAN__
      FLUSH(CU)
#else
#endif

   END IF


   RETURN
   END SUBROUTINE WrOver ! ( Str )
!=======================================================================
   SUBROUTINE WriteScr ( Str, Frm )


      ! This routine writes out a string to the screen.


   IMPLICIT                        NONE


      ! Argument declarations.

   CHARACTER(*), INTENT(IN)     :: Str                                         ! The input string to write to the screen.
   CHARACTER(*), INTENT(IN)     :: Frm                                         ! Format specifier for the output.

   INTEGER                      :: ErrStat                                     ! Error status of write operation (so code doesn't crash)


   IF ( LEN_TRIM(Str)  < 1 ) THEN
      WRITE ( CU, '()', IOSTAT=ErrStat )
   ELSE
      WRITE ( CU,Frm, IOSTAT=ErrStat ) TRIM(Str)
   END IF

   IF ( ErrStat /= 0 ) &
      print *, ' WriteScr produced an error. Please inform the programmer.'


   END SUBROUTINE WriteScr ! ( Str )
!=======================================================================

!==================================================================================================================================
SUBROUTINE LoadDynamicLib ( DLL, ErrStat, ErrMsg )

      ! This SUBROUTINE is used to dynamically load a DLL.

      ! Passed Variables:

   TYPE (DLL_Type),           INTENT(INOUT)  :: DLL         ! The DLL to be loaded.
   INTEGER(IntKi),            INTENT(  OUT)  :: ErrStat     ! Error status of the operation
   CHARACTER(*),              INTENT(  OUT)  :: ErrMsg      ! Error message if ErrStat /= ErrID_None

!bjj: these are values I found on the web; I have no idea if they actually work...
!bjj: hopefully we can find them pre-defined in a header somewhere
   INTEGER(C_INT), PARAMETER :: RTLD_LAZY=1            ! "Perform lazy binding. Only resolve symbols as the code that references them is executed. If the symbol is never referenced, then it is never resolved. (Lazy binding is only performed for function references; references to variables are always immediately bound when the library is loaded.) "
   INTEGER(C_INT), PARAMETER :: RTLD_NOW=2             ! "If this value is specified, or the environment variable LD_BIND_NOW is set to a nonempty string, all undefined symbols in the library are resolved before dlopen() returns. If this cannot be done, an error is returned."
   INTEGER(C_INT), PARAMETER :: RTLD_GLOBAL=256        ! "The symbols defined by this library will be made available for symbol resolution of subsequently loaded libraries"
   INTEGER(C_INT), PARAMETER :: RTLD_LOCAL=0           ! "This is the converse of RTLD_GLOBAL, and the default if neither flag is specified. Symbols defined in this library are not made available to resolve references in subsequently loaded libraries."


!   ErrStat = ErrID_Fatal
!   ErrMsg = ' LoadDynamicLib: Not implemented for '//TRIM(OS_Desc)
   
   
!#if 0           
!bjj: note that this is not tested:
   INTERFACE !linux API routines
      !bjj see http://linux.die.net/man/3/dlopen
      ! also: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/dlopen.3.html

      FUNCTION dlOpen(filename,mode) BIND(C,NAME="dlopen")
      ! void *dlopen(const char *filename, int mode);
         USE ISO_C_BINDING
         IMPLICIT NONE
         TYPE(C_PTR)                   :: dlOpen
         CHARACTER(C_CHAR), INTENT(IN) :: filename(*)
         INTEGER(C_INT), VALUE         :: mode
      END FUNCTION

      FUNCTION dlSym(handle,name) BIND(C,NAME="dlsym")
      ! void *dlsym(void *handle, const char *name);
         USE ISO_C_BINDING
         IMPLICIT NONE
         TYPE(C_FUNPTR)                :: dlSym ! A function pointer
         TYPE(C_PTR), VALUE            :: handle
         CHARACTER(C_CHAR), INTENT(IN) :: name(*)
      END FUNCTION

   END INTERFACE


   ErrStat = ErrID_None
   ErrMsg = ''


      ! Load the DLL and get the file address:

   DLL%FileAddrX = dlOpen( TRIM(DLL%FileName)//C_NULL_CHAR, RTLD_LAZY )  !the "C_NULL_CHAR" converts the Fortran string to a C-type string (i.e., adds //CHAR(0) to the end)

   IF( .NOT. C_ASSOCIATED(DLL%FileAddrX) ) THEN
      ErrStat = ErrID_Fatal
      WRITE(ErrMsg,'(I2)') BITS_IN_ADDR
      ErrMsg  = 'The dynamic library '//TRIM(DLL%FileName)//' could not be loaded. Check that the file '// &
                'exists in the specified location and that it is compiled for '//TRIM(ErrMsg)//'-bit systems.'
      RETURN
   END IF


      ! Get the procedure address:

   DLL%ProcAddr = dlSym( DLL%FileAddrX, TRIM(DLL%ProcName)//C_NULL_CHAR )  !the "C_NULL_CHAR" converts the Fortran string to a C-type string (i.e., adds //CHAR(0) to the end)

   IF(.NOT. C_ASSOCIATED(DLL%ProcAddr)) THEN
      ErrStat = ErrID_Fatal
      ErrMsg  = 'The procedure '//TRIM(DLL%ProcName)//' in file '//TRIM(DLL%FileName)//' could not be loaded.'
      RETURN
   END IF

!#endif
   
   RETURN
END SUBROUTINE LoadDynamicLib
!==================================================================================================================================
SUBROUTINE FreeDynamicLib ( DLL, ErrStat, ErrMsg )

      ! This SUBROUTINE is used to free a dynamically loaded DLL (loaded in LoadDynamicLib).

      ! Passed Variables:

   TYPE (DLL_Type),           INTENT(INOUT)  :: DLL         ! The DLL to be freed.
   INTEGER(IntKi),            INTENT(  OUT)  :: ErrStat     ! Error status of the operation
   CHARACTER(*),              INTENT(  OUT)  :: ErrMsg      ! Error message if ErrStat /= ErrID_None

      ! Local variable:
   INTEGER(C_INT)                            :: Success     ! Whether or not the call to dlClose was successful
   INTEGER(C_INT), PARAMETER                 :: TRUE  = 0


!   ErrStat = ErrID_Fatal
!   ErrMsg = ' FreeDynamicLib: Not implemented for '//TRIM(OS_Desc)
   
   
!#if 0   
!bjj: note that this is not tested.
   INTERFACE !linux API routine
      !bjj see http://linux.die.net/man/3/dlopen

      FUNCTION dlClose(handle) BIND(C,NAME="dlclose")
      ! int dlclose(void *handle);
         USE ISO_C_BINDING
         IMPLICIT NONE
         INTEGER(C_INT)       :: dlClose
         TYPE(C_PTR), VALUE   :: handle
      END FUNCTION

   END INTERFACE



      ! Close the library:

   Success = dlClose( DLL%FileAddrX ) !The function dlclose() returns 0 on success, and nonzero on error.

   IF ( Success /= TRUE ) THEN !bjj: note that this is not the same as LOGICAL .TRUE.
      ErrStat = ErrID_Fatal
      ErrMsg  = 'The dynamic library could not be freed.'
      RETURN
   ELSE
      ErrStat = ErrID_None
      ErrMsg = ''
   END IF
!#endif
   
   RETURN
END SUBROUTINE FreeDynamicLib
!==================================================================================================================================


END MODULE SysSubs

Jean-Marc Cherfils

PhD - Research Ingeneer
Institut National des Sciences Appliquées
Rouen - France

Borja.Aguilo
Posts: 2
Joined: Tue May 12, 2015 8:24 am
Organization: self
Location: Spain

Re: Instructions for Compiling FAST

Postby Borja.Aguilo » Tue May 26, 2015 9:48 am

Dear all,

I have been diving a while in to the makefiles of FAST v8.10.00a-bjj and MAP++ and finally I finished the compilation of FAST with MAP++ (1.10.0rc, 10-March-2015) on a Ubuntu 14.04 64bits

I had to download the MAP++ source files and compile them in order to get the MAP.so file being asked by FAST compilation.
When compiling MAP++ i got an error with "llapacke" it turned to be a lapack family library, named "liblapacke" and "liblapacke-dev" that I installed through synaptic.
After that the compilation of MAP++ ended perfectly and a file called "libmap-1.10.00.so" was created in the "src" folder within MAP++.

Then I copied that file to the MAP folder in "../FAST/FAST_v8.10.00a-bjj/Source/dependencies/MAP" and renamed it to MAP.so
I went back to the terminal and tried to compile again FAST by executing the command "make" and it worked.

I am running the Certification Tests now, everything seems to end correctly except for the offshore ones, I understood from Bonnie Jonkman that there is a solution to it.

Could someone elaborate how to correct a given installation? Is just about recompiling with some new ServoDyn and TMD??

Thanks in advance and thank you to Bonnie Jonkman and Jean Marc for your clarifications!

Best regards.

Bonnie.Jonkman
Posts: 561
Joined: Thu Nov 10, 2005 10:51 am
Organization: Envision Energy USA
Location: Colorado
Location: Boulder, CO
Contact:

FAST v8.10 compiled with gfortran

Postby Bonnie.Jonkman » Thu May 28, 2015 11:01 am

Hi, Borja.

To clarify, I found a solution for the issue with ServoDyn/TMD in gfortran. This issue was also present in HydroDyn in gfortran; however that hasn't yet solved all of the issues with running the offshore cases with gfortran. We're getting closer, but not yet there. (I'm hoping to find time to look at this issue closer in September.)
Bonnie Jonkman

Envision Energy USA, 2016-
National Renewable Energy Laboratory, 2003-2016

AhmedJenan.Mostafa
Posts: 4
Joined: Mon Mar 23, 2015 3:21 pm
Organization: UTSA
Location: Texas

Re: Instructions for Compiling FAST

Postby AhmedJenan.Mostafa » Tue Jun 02, 2015 3:24 pm

Hello ,

I have been trying for long to install FAST in Linux cluster. But failed. Now I am trying to install it in my laptop in Linux environment. I have experienced almost all the errors you have mentioned in the forum and solved them accordingly. e.g lapacke installation. But it is still showing some errors.
Here is what I did,
1. Downloaded and extracted FAST_v_8 packages in Ubuntu.
2. Went to user\FAST_v8.10.00a-bjj\Source\dependencies\Registry => make => created registry.exe file at Source
3. installed lapacke and libblas from synaptic as you discussed in the forum
4. Went to user\FAST_v8.10.00a-bjj\Source\dependencies\MAP => make => still showing error. (/usr/bin/ld: can not find ... type error). I did not make any change in the SysGnuLinux.f90 file

Any response will be highly appreciated .

Bonnie.Jonkman
Posts: 561
Joined: Thu Nov 10, 2005 10:51 am
Organization: Envision Energy USA
Location: Colorado
Location: Boulder, CO
Contact:

Re: Instructions for Compiling FAST

Postby Bonnie.Jonkman » Thu Jun 11, 2015 1:56 pm

We don't distribute a makefile in the Source\dependencies\MAP folder, so if you added source code there, I cannot help. If you didn't add code/makefile there, that is likely the source of the errors.

I assume you are trying to compile the MAP.so file; if so, you will have to download the code from the MAP++ web site and compile it for Linux. There should be a makefile in the MAP archive's src folder.
Bonnie Jonkman

Envision Energy USA, 2016-
National Renewable Energy Laboratory, 2003-2016

Shujian.Liu
Posts: 2
Joined: Mon Jun 23, 2014 11:29 am
Organization: University of Massachusetts Amherst
Location: Massachusetts

Re: Instructions for Compiling FAST

Postby Shujian.Liu » Mon Jun 15, 2015 7:00 pm

Dear all,
Has anyone successfully built FAST v8 using Intel compilers in Linux?
The problem is what appears to be a GNU specific library calls, i.e., it is the build fails when trying to compile SysGnuLinux.f90 - see below.


johnston@rayleigh:~/FAST_INTEL/Compiling$ make
ifort -I Obj_lin64 -O2 -m64 -fpp -real-size 64 -mkl=sequential -c ../Source/dependencies/NWTC_Library/SysGnuLinux.f90 -o Obj_lin64/SysGnuLinux.obj -module Obj_lin64
../Source/dependencies/NWTC_Library/SysGnuLinux.f90(118): error #6404: This name does not have a type, and must have an explicit type. [FSTAT]
Status = FSTAT( INT( Unit, B4Ki ), StatArray )
------------^
../Source/dependencies/NWTC_Library/SysGnuLinux.f90(165): error #6404: This name does not have a type, and must have an explicit type. [GETCWD]
Status = GETCWD ( DirName )
------------^
compilation aborted for ../Source/dependencies/NWTC_Library/SysGnuLinux.f90 (code 1)
make: *** [SysGnuLinux.obj] Error 1


Any advice would be appreciated.

Best,
Shujian
Shujian Liu
Wind Energy Center
University of Massachusetts Amherst
shujian.liu@hotmail.com

SeongOh.Guk
Posts: 2
Joined: Mon Jun 15, 2015 11:47 am
Organization: Kunsan National University
Location: South Korea

FAST v8.10 compiled using Intel Visual Fortran(IVF) for Wind

Postby SeongOh.Guk » Tue Jun 16, 2015 8:30 am

Dear all,

I have some problem to discuss.
I'm currently using Intel(R) Visual Fortran Composer XE 2013 SP1 Update 2 Integration for Microsoft Visual Studio* 2013, 14.0.0086.12.
When I compile the FAST v8.10a-bjj using IVF for Windows®, I find the following 24 warnings :


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Error occurred while restoring NuGet packages: System.ArgumentException: The path is not of a legal form.
at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
at System.IO.Path.GetDirectoryName(String path)
at NuGet.VisualStudio.VsUtility.GetNuGetSolutionFolder(Solution solution)
at NuGet.VsEvents.PackageRestorer.UsingOldPackageRestore(Solution solution)
at NuGet.VsEvents.PackageRestorer.BuildEvents_OnBuildBegin(vsBuildScope Scope, vsBuildAction Action).
1>------ Build started: Project: FAST_Project, Configuration: Debug Win32 ------
1>Compiling with Intel(R) Visual Fortran Compiler XE 14.0.2.176 [IA-32]...
1>slasrt2.f
1>dlasrt2.f
1>qsort_c_module.f90
1>SingPrec.f90
1>RANLUX.f90
1>NWTC_Base.f90
1>NWTC_ScaLAPACK.f90
1>NWTC_LAPACK.f90
1>SysIVF.f90
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(215): warning #7416: Fortran 2003 does not allow this intrinsic procedure. [ERF]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(228): warning #7416: Fortran 2003 does not allow this intrinsic procedure. [ERF]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(241): warning #7416: Fortran 2003 does not allow this intrinsic procedure. [ERF]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(254): warning #7416: Fortran 2003 does not allow this intrinsic procedure. [GAMMA]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(267): warning #7416: Fortran 2003 does not allow this intrinsic procedure. [GAMMA]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(280): warning #7416: Fortran 2003 does not allow this intrinsic procedure. [GAMMA]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(301): warning #7410: Fortran 2003 does not allow this keyword. [CARRIAGECONTROL]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(342): warning #7410: Fortran 2003 does not allow this keyword. [CONVERT]
1>E:\01_FAST-windows\Source\dependencies\NWTC_Library\SysIVF.f90(369): warning #7416: Fortran 2003 does not allow this intrinsic procedure. [EXIT]
1>NWTC_Library_Types.f90
1>NWTC_IO.f90
1>NWTC_Num.f90
1>iceLog.F90
1>iceInput.f90
1>ModMesh_Types.f90
1>ModMesh.f90
1>ModMesh_Mapping.f90
1>NWTC_Library.f90
1>Waves2_Types.f90
1>Current_Types.f90
1>Lidar_Types.f90
1>IfW_FFWind_Types.f90
1>SubDyn_Types.f90
1>SS_Radiation_Types.f90
1>Morison_Types.f90
1>MAP_Types.f90
1>Conv_Radiation_Types.f90
1>SS_Radiation.f90
1>MAP.f90
1>Current.f90
1>TMD_Types.f90
1>WAMIT_Interp.f90
1>WAMIT2_Types.f90
1>IfW_HHWind_Types.f90
1>ElastoDyn_Types.f90
1>SD_FEM.f90
1>FEAMooring_Types.f90
1>IceDyn_Types.f90
1>Waves_Types.f90
1>TMD.f90
1>E:\01_FAST-windows\Source\dependencies\ServoDyn\TMD.f90(56): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [INITOUT]
1>NWTC_FFTPACK.f90
1>IfW_FFWind.f90
1>WAMIT2_Output.f90
1>ServoDyn_Types.f90
1>MoorDyn_Types.f90
1>IceFloe_Types.f90
1>Waves2_Output.f90
1>IceFloeBase.F90
1>Waves.f90
1>BladedInterface.f90
1>InflowWind_Types.f90
1>crushingISO.F90
1>SubDyn_Output.f90
1>randomCrushing.F90
1>IceDyn.f90
1>WAMIT_Types.f90
1>MoorDyn_IO.f90
1>crushingIEC.F90
1>Morison_Output.f90
1>ElastoDyn.f90
1>SubDyn.f90
1>FEAM.f90
1>lockInISO.F90
1>Conv_Radiation.f90
1>HydroDyn_Types.f90
1>IfW_HHWind.f90
1>MoorDyn.f90
1>E:\01_FAST-windows\Source\dependencies\MoorDyn\MoorDyn.f90(42): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [XD]
1>E:\01_FAST-windows\Source\dependencies\MoorDyn\MoorDyn.f90(42): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z]
1>coupledCrushing.F90
1>Morison.f90
1>DWM_Types.f90
1>intermittentCrushing.F90
1>HydroDyn_Output.f90
1>ServoDyn.f90
1>WAMIT2.f90
1>Waves2.f90
1>E:\01_FAST-windows\Source\dependencies\HydroDyn\Waves2.f90(95): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [U]
1>E:\01_FAST-windows\Source\dependencies\HydroDyn\Waves2.f90(95): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [X]
1>E:\01_FAST-windows\Source\dependencies\HydroDyn\Waves2.f90(95): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [XD]
1>E:\01_FAST-windows\Source\dependencies\HydroDyn\Waves2.f90(95): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z]
1>E:\01_FAST-windows\Source\dependencies\HydroDyn\Waves2.f90(95): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [OTHERSTATE]
1>IceFlexBase.F90
1>InflowWind_Subs.f90
1>WAMIT_Output.f90
1>IceFlexISO.f90
1>AeroDyn_Types.f90
1>IceFlexIEC.f90
1>HydroDyn_Input.f90
1>GenSubs.f90
1>Lidar.f90
1>WAMIT.f90
1>E:\01_FAST-windows\Source\dependencies\HydroDyn\WAMIT.f90(1589): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [DXDT]
1>FAST_Types.f90
1>HydroDyn.f90
1>E:\01_FAST-windows\Source\dependencies\HydroDyn\HydroDyn.f90(1501): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [DXDT]
1>InflowWind.f90
1>IceFloe.f90
1>E:\01_FAST-windows\Source\dependencies\IceFloe\IceFloe.f90(80): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [XD]
1>E:\01_FAST-windows\Source\dependencies\IceFloe\IceFloe.f90(80): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z]
1>E:\01_FAST-windows\Source\dependencies\IceFloe\IceFloe.f90(80): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [OTHERSTATE]
1>DWM_Wake_Sub_ver2.f90
1>FAST_Mods.f90
1>AeroSubs.f90
1>DWM.f90
1>AeroDyn.f90
1>E:\01_FAST-windows\Source\dependencies\AeroDyn\AeroDyn.f90(1301): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [DXDT]
1>E:\01_FAST-windows\Source\dependencies\AeroDyn\AeroDyn.f90(1358): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z_RESIDUAL]
1>FAST_Subs.f90
1>PitchCntrl_ACH.f90
1>fftpack4.1.f
1>UserVSCont_KP.f90
1>UserSubs.f90
1>FAST_Prog.f90
1>Linking...
1>Embedding manifest...
1>
1>Build log written to "file://E:\01_FAST-windows\Compiling\VisualStudio\Debug\BuildLog.htm"
1>FAST_Project - 0 error(s), 24 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
I don't know how to solve this warnings and it confuses me for a long time.
I would really appreciate any help regrding this!

Thanks a lot in advance for any suggestions.

Bonnie.Jonkman
Posts: 561
Joined: Thu Nov 10, 2005 10:51 am
Organization: Envision Energy USA
Location: Colorado
Location: Boulder, CO
Contact:

Re: Instructions for Compiling FAST

Postby Bonnie.Jonkman » Tue Jun 16, 2015 9:20 am

SeongOh,

Your build succeeded, so I am not sure what your question is. There are a couple of warnings, which are normal. I have never seen the errors about NuGet packages, but that looks like an issue with Visual Studio, which occur before building the FAST project. The build should have created an executable in the FAST8\bin directory.
Bonnie Jonkman

Envision Energy USA, 2016-
National Renewable Energy Laboratory, 2003-2016

Bonnie.Jonkman
Posts: 561
Joined: Thu Nov 10, 2005 10:51 am
Organization: Envision Energy USA
Location: Colorado
Location: Boulder, CO
Contact:

Re: Instructions for Compiling FAST

Postby Bonnie.Jonkman » Tue Jun 16, 2015 9:27 am

Shujian,

Yes, people have successfully built FAST v8 in Linux. I think the problem you are having is that you are using Intel Fortran with the Sys library built for gfortran on Linux. I'd suggest using SysIFL.f90 (Intel Fortran Linux) instead of SysGnuLinux.f90. Alternatively, you can modify SysGnuLinux and the makefile as described by JeanMarc.Cherfils here on May 5: viewtopic.php?f=4&t=642&start=105#p5634
Bonnie Jonkman

Envision Energy USA, 2016-
National Renewable Energy Laboratory, 2003-2016

Shujian.Liu
Posts: 2
Joined: Mon Jun 23, 2014 11:29 am
Organization: University of Massachusetts Amherst
Location: Massachusetts

Re: Instructions for Compiling FAST

Postby Shujian.Liu » Sat Jun 27, 2015 1:13 pm

Thanks Bonnie, we finally got things work!
Shujian Liu
Wind Energy Center
University of Massachusetts Amherst
shujian.liu@hotmail.com

Georgios.Papathanasiou
Posts: 3
Joined: Mon Jul 13, 2015 11:40 am
Organization: The University of Strathclyde
Location: U.K-Scotland-Glasgow

Re: Instructions for Compiling FAST

Postby Georgios.Papathanasiou » Tue Jul 14, 2015 11:00 am

Dear all,
I am using Microsoft Visual studio 2013 and Intel parallel studio 2015
When I try to compile Fast, it seems that the project cannot be build.
In particular, I recieve the following 25 Warnings and 1 Error:

Warning 1 FAST_Project: warning: TargetPath(C:\Users\Giorgos\Documents\Programmes\FAST\bin\FAST_Project.exe) does not match the Linker's OutputFile property value (C:\Users\Giorgos\Documents\Programmes\FAST\bin\FAST_dev_Debug_Win32.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
Warning 2 warning #7416: Fortran 2003 does not allow this intrinsic procedure. [ERF] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 215
Warning 3 warning #7416: Fortran 2003 does not allow this intrinsic procedure. [ERF] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 228
Warning 4 warning #7416: Fortran 2003 does not allow this intrinsic procedure. [ERF] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 241
Warning 5 warning #7416: Fortran 2003 does not allow this intrinsic procedure. [GAMMA] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 254
Warning 6 warning #7416: Fortran 2003 does not allow this intrinsic procedure. [GAMMA] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 267
Warning 7 warning #7416: Fortran 2003 does not allow this intrinsic procedure. [GAMMA] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 280
Warning 8 warning #7410: Fortran 2003 does not allow this keyword. [CARRIAGECONTROL] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 301
Warning 9 warning #7410: Fortran 2003 does not allow this keyword. [CONVERT] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 342
Warning 10 warning #7416: Fortran 2003 does not allow this intrinsic procedure. [EXIT] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\NWTC_Library\SysIVF.f90 369
Warning 11 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [U] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\HydroDyn\Waves2.f90 95
Warning 12 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [X] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\HydroDyn\Waves2.f90 95
Warning 13 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [XD] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\HydroDyn\Waves2.f90 95
Warning 14 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\HydroDyn\Waves2.f90 95
Warning 15 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [OTHERSTATE] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\HydroDyn\Waves2.f90 95
Warning 16 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [XD] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\MoorDyn\MoorDyn.f90 42
Warning 17 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\MoorDyn\MoorDyn.f90 42
Warning 18 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [INITOUT] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\ServoDyn\TMD.f90 56
Warning 19 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [DXDT] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\HydroDyn\WAMIT.f90 1589
Warning 20 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [DXDT] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\HydroDyn\HydroDyn.f90 1501
Warning 21 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [XD] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\IceFloe\IceFloe.f90 80
Warning 22 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\IceFloe\IceFloe.f90 80
Warning 23 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [OTHERSTATE] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\IceFloe\IceFloe.f90 80
Warning 24 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [DXDT] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\AeroDyn\AeroDyn.f90 1301
Warning 25 warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value. [Z_RESIDUAL] C:\Users\Giorgos\Documents\Programmes\FAST\Source\dependencies\AeroDyn\AeroDyn.f90 1358
Error 26 general error c101008d: Failed to write the updated manifest to the resource of file "C:\Users\Giorgos\Documents\Programmes\FAST\bin\FAST_Project.exe". The system cannot find the file specified. mt.exe

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


However, an executable file C:\Users\Giorgos\Documents\Programmes\FAST\bin\FAST_dev_Debug_Win32.exe has been created
I would higly appreciate it if I could recieve some help!

Thank you in advance
Georgios Papathanasiou
Msc Student Ship and Offshore Structures
The University of Strathclyde


Return to “Computer-Aided Engineering Software Tools”

Who is online

Users browsing this forum: No registered users and 1 guest