ADAMS to AeroDyn interface change log _____________________________________ ------------------------------------- THIS WAS TAKEN FROM THE ReadMe.txt FILE THAT WAS PREVIOUSLY INCLUDED IN THE ARCHIVE. BECAUSE THE REST OF IT NO LONGER APPLIES (as of v13.00.00), THE FILE HAS BEEN REMOVED FROM THE ARCHIVE. Update history: Version 3.3 adds capability to read turbulence files Version 3.5 separates the YawDyn and ADAMS inputs Version numbering changed so that VFOSUB version matches the Aerosubs & YawDyn version number that is required. (v 7.7) Added live twist capability and brought up to date with YawDyn (v 8.1) Added dynamic inflow and eliminated FEQUIL option (v 8.2) Added parameters to set many array dimensions, no-wake option (8.3) Modified by Andy Elliott @MDI for compatibility with ADAMS 7.0 by converting all calls to INFO to calls to SYSFNC and SYSARY as appropriate. Also added code to allow calls to these subroutines without calling them during the IFLAG pass. This greatly improves the speed of the code, since ADAMS is unable to use the Jacobian information produced by this discrete-time implementation of the aerodynamics. Feb 15, 1994. Updated for compatibility with YawDyn 8.37 (no functional changes, but minor output and format mods) 6/21/94 Added DTAERO, the ability to perform aero calculations only after time interval DTAERO has passed (instead of every ADAMS time step). 6/30/94 (8.38) Added use of USRMES, the ADAMS utility to write messages to the .msg file and screen. 8/20/94 (8.41) Final editing and 'cleanup' for last distribution release of the code under NREL subcontract XF-1-11009-2. 10/5/94 (9.0) Changes to allow passing of variable for interpolation in airfoil table with multiple cl and cd values. 3/2/95 (9.2 and 9.3) Added variable YAWRAT to eliminate singularity problem with Q(4) Modified by Andy Elliott to use INFFNC and INFARY in place of SYSFNC and SYSARY. This avoids functional dependency calc. and the Feb 15, 94 workaround of this problem. (9.3) Changed file unit number for compatibility with ADAMS 8.1 (9.34) Updated to include dynamic stall effects from pitch rate (9.35) Converted to GFOSUB to add pitching moment calcs. (9.8) Found bug that has been present in version 9.5 and later. DT value was not calculated correctly (TEMPTME value updated in wrong place). Effect felt primarily in dynamic inflow calculations, which are seldom used. Also some effect on dynamic stall calculations, though generally the effects are small because a default value of DT=0.01 sec was used. Fixed this in version 9.89. Also deleted UPDATE and TEMPTME variables because they are no longer used. DT and OLDTIME updates moved to SENSUB. Added check to verify SENSOR is included in dataset. (12/5/96) (9.89) Ready for release as version 10.0 Modified blade element location checking to accommodate use of Gaussian integration points (from ADAMS WT) Added SAVEs to PRTBLD for Unix systems Fixed FOILNM length in all files (10.03) Changed NINT to IDNINT(OLDTIME) near line 340 and initialize OLDAERO in PRTBLD (10.04) Replaced PCCHK with PC in PRTBLD radius test (10.05) 01/28/98, 10.35. Mods by Kirk Pierce: Added UNITCHK subroutine to determine ADAMS system units. CONVFAC is used to scale forces returned by AeroDyn. (=1 for N or lbf, =0.001 for kN or klbf) Dynamic inflow model was implemented. Changed call to INFARY using 'RDISP' to call to INFFNC using 'AX' to obtain pitch angle to avoid pitch angle errors when edge displacements are large. New turbulence routines provided by M. Buhl of NREL (11.0) END OF TEXT FROM ReadMe.txt -------------------------------------------------------------------------------- For changes prior to version 12, see the AeroDyn change log file. v12.00 21-May-2001 D. Laino Extensive rewrite of the code to convert to Fortran90. Included elimination of the INCLUDE files, and the introduction of new MODULES to replace them. Nearly all arrays have been converted to allocatable based on model parameters. Official split of AeroDyn from YawDyn resulted in major rewrite of GFOSUB. GFOSUB now has its own version number. The DynProg (dynamics program name) is set in GOFSUB. DynVer (dynamics version number) is set using a call to adn ADAMS intrinsic routine. A generalized release version of REQSUB.F90 is included and is functional with any ADAMS for AeroDyn model (though it has few outputs). All time series output files (element data and dynamics data) have 3 header lines: 1-Program ID line; 2-Column headings; 3-Column units. Element data file is named reqelem.plt, but can be changed in REQSUB. The actual element file is created and written by AeroDyn, so it is identical in format for all dynamic programs that access AeroDyn. File GOFSUB.F90 contains subroutines called by AeroDyn to get the status of the dynamics model. Changed Azimuth request function from PSI to AZ. PSI did not seem to work v12.01 23-Aug-2001 D. Laino Added smooth, step function to ramp up aero forces returned to ADAMS over first 2 seconds. v12.02 06-Sep-2001 D. Laino Added code block to GFOSUB to support ADAMS 11.0. Changed REQSUB to obtain yaw angle and rotor speed from GFOSUB as it is requested for AeroDyn. Created temporary array to store ADAMS aero markers for printing to gofsub.opt. v12.03 18-Sep-2001 D. Laino Added request for tilt angle at start of simulation for .opt file output. Specified IBlade = 1 in sample ReqSub to get azimuth of blade 1. v12.04 20-Sep-2001 D. Laino Changed INFFNC call for YawAng from PSI to AZ in GetRotorParams of GFOSub to avoid Euler angle problems. v12.05 21-Sep-2001 D. Laino Eliminated ADASRUN variable. The DynProg variable must now be set to 'ADAMS' in order to use the proper AeroDyn routines. v12.06 03-Oct-2001 D. Laino Eliminated references to the rElement and CoverR arrays deleted from AeroDyn 12.34. v12.07 19-Oct-2001 D. Laino Fixed sample ReqSub to provide azimuth for blade 1. v12.08 2-Feb-2002 D. Laino Fixed errors in calculating tip loss constant leading to erroneous results when using equilibrium wake model. Separated out tip loss constant calculations from subroutine CheckBlade and placed in new GetTLConst subroutine. Added tip-loss constants for blade 1 to gfosub.opt file. v12.09 22-Apr-2002 D. Laino Changed dimensions for Int2LStr for consistency with AeroDyn 12.41. If you update AeroDyn, be sure to update ADAMS2AD as well. Made ADAMS 11 the standard starting with this version. GFOSub must be edited for compatibility with ADAMS 10. Eliminated DYNINIT flag from GFOSUB. v12.10 13-Nov-2002 D. Laino Added hub loss constant calculation to gfosub. v12.11 28-Jan-2003 D. Laino Eliminated continuations in the middle of strings to avoid problems in Unix. v12.12a-jmj, 01-May-2003 J. Jonkman I changed all REALs to REAL(ReKi) and DOUBLE PRECISION statements to REAL(DbKi) so we can easliy vary the precision. I had to USE Precision() to import the parameters DbKi & ReKi. I removed all instances of the SNGL() and DBLE() functions so that the code does not crash when converting between single and double precision. I added file REQSUB_FAST.f90 to the archive. This file contains the REQSUB() SUBROUTINE (plus others) needed for calculating output loads for an ADAMS dataset extracted from FAST. I added file SENSUB_FAST.f90 to the archive. This file contains SUBROUTINE SFOSUB(), which is used to calculate values for the SFORCE objects contained in ADAMS datasets extracted from FAST. v12.12b-jmj, 02-Jun-2003 J. Jonkman In SUBROUTINE GFOSUB.f90/GFOSUB(), I ALLOCATEd the second index in variables ElRad, ElPit, DelR, and IDAero to 99 instead of 50 since 99 is the upper limit for ADAMS datasets extracted from FAST. I added source file VFOSUB_FAST.f90 to the archive. SUBROUTINE VFOSUB_FAST.f90/VFOSUB() is used to compute the tip brake drag forces. I added source file VARSUB_FAST.f90 to the archive. SUBROUTINE VARSUB_FAST.f90/VARSUB() is used to compute the demand blade pitch angles via a call to FAST's user-defined PitchCntrl() routine. Now, obviously, the FAST source file containing routine PitchCntrl() must be linked with ADAMS when creating the ADAMS.dll. In SUBROUTINE SFOSUB_FAST.f90/SFOSUB(), I modified I added a call to SUBROUTINE UserSubs.f90/UserTeet(), so that if TeetMod (in the primary FAST input file) is set to 2, then UserTeet() (the same routine the FAST model uses) is used to calculate the rotor-teeter spring/damper moment. Now, obviously, FAST source file UserSubs.f90 must be linked with ADAMS when creating the ADAMS.dll. In SUBROUTINE SFOSUB_FAST.f90/SFOSUB(), I added code for new SFORCE/3150, which is used to compute generator torques and electrical power. In SUBROUTINE SFOSUB_FAST.f90/SFOSUB(), I made the error MESAGE more descriptive. I added variables D2R, ElecPwr, GenIner, GenTrq, and Pi to MODULE REQSUB_FAST.f90/FASTVars(). I added a determination of ShftGagL, the distance from the hub to the LSS strain gage into SUBROUTINE REQSUB_FAST.f90/REQSUB(). I now use this value to compute the output parameters LSSGagMya, LSSGagMza, LSSGagMys, and LSSGagMzs in SUBROUTINE CalcOuts(). I added the compution of output parameter HSSBrTq to SUBROUTINE REQSUB_FAST.f90/CalcOuts(). I added SUBROUTINE OpenInFile() to source file REQSUB_FAST.f90 since this is needed by source file UserSubs.f90. In SUBROUTINE REQSUB_FAST.f90/WrOutHdr(), I now recieve the FTitle and OutFmt strings through a call to GTSTRG(). In SUBROUTINE REQSUB_FAST.f90/DOutParam(), I now recieve the output channel names and units through calls to GTSTRG(). This change significantly reduced the size of this routine and made it so that the exact output names specified in the primary FAST input file are written to the output file. In SUBROUTINE REQSUB_FAST.f90/REQSUB(), I now recieve the TabDelim flag through PARameter 7 (along with NumBl and CompAero). In SUBROUTINE REQSUB_FAST.f90/REQSUB(), I now recieve the TipRad through PARameter 9 and the GenIner through PAR(10). What use to be passed through PARameter 9, the values of BldGagNd, are now read in from SUBROUTINE DOutParam() using a call to SYSARY() and the values which are now stored in ARRAY/2. v12.12c-jmj, 18-Jul-2003 J. Jonkman I fixed a bug in the calculation of the tower base moment in REQSUB.f90/CalcOuts(). v12.12d-jmj, 21-Jul-2003 J. Jonkman I fixed a bug in routine SFOSUB_FAST.f90/SFOSUB(). What was a rotor speed should be generator speed. v12.12, 08-Sep-2003 J. Jonkman I rolled up all the alpha changes into this new version. I eliminated all alpha comments. I updated CompileLinkA2AD.bat by replacing the CAT (Unix) command with the COPY (DOS) command. This DOS command script should now work for users who don't own the MS Toolkit. v12.13, 23-Sep-2003 J. Jonkman In routine SFOSUB_FAST.f90/SFOSUB(), I added an extra parameter to the CALL of routine UserGen() due to a minor change to routine UserGen() in FAST v4.31. v12.14, 07-Nov-2003 J. Jonkman In MODULE REQSUB_FAST.f90/Output(), I added indices TipRDzc1, TipRDzc2, TipRDzc3, YawBrRDzt, YawBrRVzt, and YawBrRAzt and renumbered the PARAMETERs to mimic changes made to FAST v4.40e-jmj. This is to support the addition of blade and tower torsional deflection outputs. In SUBROUTINE REQSUB_FAST.f90/CalcOuts(), I added computations for indices TipRDzc1, TipRDzc2, TipRDzc3, YawBrRDzt, YawBrRVzt, and YawBrRAzt of AllOuts(). This is to support the addition of blade and tower torsional deflection outputs. v12.15, 11-Dec-2003 J. Jonkman In SUBROUTINE REQSUB_FAST.f90/REQSUB(), I changed the one instance of MARKER 2105 to equivalent MARKER 2100, since MARKER 2105 has now been eliminated in FAST v4.40f-jmj. In SUBROUTINE SFOSUB_FAST.f90/SFOSUB(), I modified the calls to UserGen() and UserVSCont() to mimic changes made to FAST v4.40f-jmj. v12.16a-jmj, 19-Dec-2003 J. Jonkman In MODULE REQSUB_FAST.f90/Output(), I renamed PARAMETERs TiltPMyn, TiltVMyn, TiltAMyn, and TiltBrMyn to RotFurlP, RotFurlV, RotFurlA, and RFrlBrM, respectively. I also added PARAMETERS TailFurlP, TailFurlV, TailFurlA, TFrlBrM, TFinAlpha, TFinCLift, TFinCDrag, TFinCMom, TFinDnPrs, TFinCPFx, TFinCPFy, and TFinCPMz. These changes mimic changes made to FAST v5.00a-jmj. This is to support the addition furling functionality. v12.16b-jmj, 26-Dec-2003 J. Jonkman In SUBROUTINE SFOSUB_FAST.f90/SFOSUB(), I modified the CALL to UserTeet() so that the current simulation time, ZTime, is now a passed variable. This change was made to mimic changes made to FAST v5.00b-jmj. v12.16c-jmj, 27-Feb-2004 J. Jonkman In SUBROUTINEs GFOSUB.f90/GFOSUB() and GetRotorParams() I made several changes. I now have the yaw angle include the effects of yaw, tower-torsion, and rotor-furling. I have the tilt angle include any live tilting effects including tower-bending and rotor-furling. Finally, I have HubVDue2Yaw include the effects of yaw rate, tower-torsion rate, and rotor-furl rate, but NOT translational motion due to tower deflection. I incorporated all these changes while still leaving GFOSUB.f90 generic enough to be used by an ADAMS wind turbine model generated by ANY preprocessor including ADAMS/WT, FAST-to-ADAMS, and others. In SUBROUTINE GFOSUB.f90/GetPitRad() I removed the REAL() FUNCTION from around the calculation of variable ElemRad since I saw no need for this extra TYPE conversion. In MODULE REQSUB_FAST.f90/Output(), I removed INTEGER(4) PARAMETERs TFinCMom and TFinCPMz and added PARAMETERS TipClrnc1, TipClrnc2, and TipClrnc3. In SUBROUTINEs REQSUB_FAST.f90/REQSUB() and CalcOuts() I renumbered the shaft coordinate system MARKER from 2000 to 2150. In SUBROUTINEs REQSUB_FAST.f90/CalcOuts(), SFOSUB_FAST.f90/SFOSUB(), and VARSUB_FAST.f90/VARSUB() I changed the HSS connection to the nacelle from MARKER 2020 to 2050. In SUBROUTINE SFOSUB.f90/SFOSUB(), I renumbered the SFORCE for user-defined rotor teeter models from 4011 to 4010. In SFOSUB_FAST.f90/SFOSUB(), I added logic for the links to the user-defined rotor- and tail-furl spring/damper models (via SFORCE/2130 and 5040). In MODULE REQSUB_FAST.f90/FASTVars() and SUBROUTINEs REQSUB_FAST.f90/CalcOuts() and VFOSUB_FAST.f90/VFOSUB(), I added logic for computing the tail fin aerodynamic loads. In SUBROUTINE REQSUB_FAST.f90/CalcOuts(), I added computations of the new output parameters for furling machines as well as the tip-to-tower clearances. NOTE: ALL these changes were made to mimic changes made to FAST v5.00d-jmj. v12.16d-jmj, 03-Mar-2004 J. Jonkman In MODULE REQSUB_FAST.f90/Output(), I added PARAMETERS CThrstAzm and CThrstRad. In SUBROUTINE REQSUB_FAST.f90/CalcOuts(), I added computations of the output parameters for the estimated location of the rotor center of thurst. This change was made to mimic changes made to FAST v5.00e-jmj. v12.16, 12-Mar-2004 J. Jonkman I rolled up all the alpha changes into this new version. I eliminated all alpha comments. v12.17a-jmj, 26-Apr-2004 J. Jonkman I added yaw control to SUBROUTINE VARSUB_FAST.f90/VARSUB() to mimic changes made to FAST v5.10a-jmj. I removed argument TFInput and added arguments ElecPwr, HSS_Spd, and GBRatio to the user-defined routine PitchCntrl() since the pitch control routine itself now determines whether to control power (region 2) or speed (region 3). I also added argument BlPitch so that current blade pitch angles, BlPitch, are passed to routine PitchCntrl() independently of the command (demand) pitch angles, TFOutput, that are returned by the routine--this helped to greatly simplify the logic in SUBROUTINE VARSUB_FAST.f90/VARSUB(). This required minor changes to SUBROUTINE VARSUB_FAST.f90/VARSUB() and mimics changes made to FAST v5.10a-jmj. I made some additional changes to SUBROUTINE VARSUB_FAST.f90/VARSUB() in order to mimic changes to routine FAST.f90/Control() in FAST v5.10a-jmj. I moved the declaration of array AllOuts() from SUBROUTINE REQSUB_FAST.f90/CalcOuts() to MODULE REQSUB_FAST.f90/Output() so that all of the outputs can be accessed by user-defined control routines and to mimic changes made to FAST v5.10a-jmj. I moved the CALL to SUBROUTINE CalcOuts() from WrOutput() to a VARIABLE statement/VARSUB() routine so that array AllOuts() is updated after every time step (instead of every DecFact number of timesteps). This change was necessary to ensure array AllOuts() can be used in user-defined control routines and mimics changes made to FAST v5.10a-jmj. This improvement required extensive changes to SUBROUTINE REQSUB_FAST.f90/REQSUB(). I modified ZTime to equal the simulation time at the end of the last successful step using the TIMGET() utility subroutine of ADAMS. This change was necessary to ensure ZTime does not move backwards in time like it does when it is defined using ATIME. This change mimics changes made to FAST v5.10a-jmj. I also initialized ZTime to 0.0 in its variable declaration in MODULE REQSUB_FAST.f90/FASTVars() in order to make the declaration consistent with the equivalent variable in FAST. I renamed interal array FirstTHere with the more descriptive name BegPitMan to mimic changes made to FAST v5.10a-jmj. I eliminated the ramp-up in aerodynamic forces over the first 2.0 seconds of simulation in order to mimic changes made to FAST v5.10a-jmj. Besides it was not numerically necessary in ADAMS when using the FAST-to-ADAMS preprocessor. I removed uneeded varaiable REQUESTID from source file REQSUB_FAST.f90. I updated all of the source lines longer than 132 characters so that they are 132 characters or less (the standard freeform FORTRAN limit). Comments past 132 characters don't matter. I did not document these changes in the code. I fixed a bug in the computation of array BlPitch() in SUBROUTINE VARSUB_FAST.f90/VARSUB(). This bug would have only manifested itself for cases involving independent blade pitch control. v12.17b-jmj, 18-May-2004 J. Jonkman In SUBROUTINE GFOSUB.f90/GetRotorParams(), I replaced a CALL to an INFARY('UVZ',...) with a CALL to an INFARY('RDISP',...) and a CALL to an RCNVRT() with the 'EULER' and 'COSINES' parameters (these different CALLs yield virtually the same result). I made this change since 'UVZ' is only available in ADAMS v12.0.0 and later and that some users [who will remain nameless :-)] still use earlier versions of ADAMS. The rest of the logic in SUBROUTINE GFOSUB.f90/GetRotorParams() is identical and this change does not effect the results of ADAMS for those who got it to compile before. v12.17c-jmj, 13-Jul-2004 J. Jonkman I added compile option /assume:byterecl to CompileLinkA2AD.bat so that ADAMS can be used with TurbSim wind input files. v12.17d-jmj, 16-Sep-2004 J. Jonkman I modified CompileLinkA2AD.bat to work with ADAMS 2003 (the command to compile using ADAMS 12.0 is now commented out). I also added a commented out line (REM) in CompileLinkA2AD.bat, which can be used to compile ADAMS so that it works with source file BladedDLLInterface.f90. See the FAST User's Guide for details. I added ProgName ['A2AD'] and ProgVer ['(v12.17d-jmj, 29-Jul-2004)'] CHARCTER variables to MODULE REQSUB_FAST.f90/FASTVars(). I added these program identifications to the header of the primary output file in SUBROUTINE REQSUB_FAST.f90/WrOutHdr() and echoed the information to the screen in SUBROUTINE REQSUB_FAST.f90/REQSUB(). I removed SUBROUTINE WrFileNR() from, and added SUBROUTINE FindLine() to, source file REQSUB_FAST.f90. I was able to do this since I also added source files SysCVF.f90 and ModCVF.f90 to the list of FAST source files compiled with ADAMS in CompileLinkA2AD.bat. I made this change since I wanted to use additional SysCVF.f90 routines in the routines linked with ADAMS and I didn't want to add copies of these routines in REQSUB_FAST.f90. In SUBROUTINE SFOSUB_FAST.f90/SFOSUB(), I replaced local LOGICAL(1), SAVEd variable FirstPas with FirstPasG. In SUBROUTINE SFOSUB_FAST.f90/SFOSUB(), I added logic for SFORCE/3151 to make available a user-defined HSS brake model--i.e., the SFOSUB() calls user-defined routine UserHSSBr() if necessary. These changes were made in order to mimic changes made to FAST v5.10e-jmj. I moved the declaration of CHARACTER(99) variable RootName from SUBROUTINE REQSUB_FAST.f90/WrOutHdr() to MODULE REQSUB_FAST.f90/FASTVars() and moved the definition of this variable from WrOutHdr() to new SUBROUTINE REQSUB_FAST.f90/SetDirRoot(). I also added CHARACTER(1024) variable DirRoot to MODULE FASTVars(). This string stores the name of the root file including the full path to the current working directory and is now defined in SUBROUTINE SetDirRoot(). These changes were made in order to mimic changes made to FAST v5.10e-jmj. I add the number of blades, NumBl, to the list of parameters passed to user-defined SUBROUTINEs UserGen(), UserVSCont(), and UserYawCont(). I also added the time step, DT, to the list of parameters passed to user-defined SUBROUTINEs PitchCntrl() and UserYawCont(). I also added the name of the root file including the full path to the current working directory, DirRoot, to the list of parameters passed to ALL of the user-defined SUBROUTINEs. These changes were made in order to mimic changes made to FAST v5.10e-jmj. v12.17e-jmj, 29-Sep-2004 J. Jonkman I removed variable LastTime from SUBROUTINEs REQSUB_FAST.f90/REQSUB(), SFOSUB_FAST.f90/SFOSUB(), VARSUB_FAST.f90/VARSUB(), and VFOSUB_FAST.f90/VFOSUB() since the calculation of ZTime does not need it. I modified CompileLinkA2AD.bat to add the /stand compile option in order to catch nonstandard errors. With this change, I found and fixed a nonstandard warning in SUBROUTINE REQSUB_FAST.f90/CalcOuts() by using the REAL() function within MOD() functions. I also modified CompileLinkA2AD.bat so that it deletes all of the *.mod files. v12.17, 30-Sep-2004 J. Jonkman I rolled up all the alpha changes into this new version. I eliminated all alpha comments. v12.18a-jmj, 06-Jan-2005 J. Jonkman I modified the simple variable-speed control model to include Region 2 1/2 using the new variables available in FAST v6.00a-jmj. This required changes to SUBROUTINE SFOSUB_FAST.f90/SFOSUB() and mimics changes made to FAST v6.00a-jmj. I added the FAST REAL(ReKi), PARAMETER TwoPi to MODULE REQSUB_FAST.f90/FASTVars(). I also mimicked some changes made to FAST v6.00a-jmj in MODULE REQSUB_FAST.f90/Output(). I added SUBROUTINE AddOrSub2Pi() to source file REQSUB_FAST.f90. This routine is used to convert a NewAngle to an angle within 2*Pi of an OldAngle by adding or subtracting 2*Pi accordingly. I made use of new SUBROUTINE AddOrSub2Pi() in order to keep track of nacelle yaw and blade pitch angles that exceed the -Pi to Pi limits of ATAN2(). This required changes to SUBROUTINEs VARSUB_FAST.f90/VARSUB() and REQSUB_FAST.f90/CalcOuts(). I changed the declaration comment describing internal variable GenTrq (and several of its variations) from "Mechanical generator torque" to "Electrical generator torque", which is a more accurate description. This change mimics changes made to FAST v6.00a-jmj and does not effect any of the results. I modified CompileLinkA2AD.bat so that it deletes all of the .mod and .obj files it creates during the compiling and linking stage. v12.18b-jmj, 18-Mar-2005 J. Jonkman I renamed output channels WindVxt, WindVyt, and WindVzt to WindVxi, WindVyi, and WindVzi, respectively since the wind speeds relative to the inertia frame (i) are more important than the wind speeds relative to the tower-base frame (t), which can now move relative to the inertia frame. Without platform motion, WindVxi, WindVyi, and WindVzi will give the same results as WindVxt, WindVyt, and WindVzt use to give. This mimics changes made to FAST v6.00b-jmj. I also changed the blade tip accelerations outputs so that they are now in the local blade coordinate system instead of the undeflected coordinate system (this required that their names change). I also changed the tower-top / yaw bearing angular (rotational) velocity and acceleration outputs so that they are now in the tower-top / base-plate coordinate system instead of the tower base coordinate system (this also required that their names be changed). These changes were made so that the associated outputs are in coordinate systems that are easier to measure in the real world. This mimics changes made to FAST v6.00b-jmj. I added logic in SUBROUTINE VFOSUB.f90/VFOSUB() so that the tip brake drag forces are not included when CompAero is disabled. This mimics changes made to FAST v6.00b-jmj. I made FUNCTION VFOSUB.f90/TBFract() an internal procedure to SUBROUTINE VFOSUB() by using the CONTAINS statement. This change does not effect any of the results and mimics changes made to FAST v6.00b-jmj. I mimicked some additional, minor changes made to FAST v6.00b-jmj in SUBROUTINEs REQSUB_FAST.f90/CalcOuts(), VARSUB_FAST.f90/VARSUB() and VFOSUB_FAST.f90/VFOSUB() and MODULE REQSUB_FAST.f90/Output(). I added FAST2ADAMSStatements.xls, which is the spreadsheet that provides a complete listing of all of the ADAMS statements (PARTs, MARKERs, FIELDs, JOINTs, etc.) contained in ADAMS datasets that have been extracted from FAST, to the archive. This has been available on the website and I'm not sure why it was never placed in the archive. v12.18c-jmj, 15-Apr-2005 J. Jonkman I modified CompileLinkA2AD.bat to work with ADAMS 2005 (the command to compile using ADAMS 2003 is now commented out). I added output channels TipRDxb# and TipRDyb#, which are the angular (rotational) roll and pitch deflections of the tip of blade #, respectively (where # = 1,2,3--the blade number) (relative to the undeflected position). This required minor changes to MODULE REQSUB_FAST.f90/Output() and SURBOUTINE REQSUB_FAST.f90/CalcOuts() and mimics changes made to FAST v6.00c-jmj. I implemented logic for the new nacelle IMU and tower strain gage outputs and platform motion functionality into source files REQSUB_FAST.f90, VARSUB_FAST.f90, VFOSUB_FAST.f90, VARSUB_FAST.f90, and GFOSUB.f90 in association with the changes made to FAST v6.00c-jmj. The changes to source file GFOSUB.f90 required that I add two new blocks of code that are only needed for ADAMS models created by the FAST-to-ADAMS preprocessor. Users of A2AD who don't use the FAST-to-ADAMS preprocessor (for example, ADAMS/WT users), must, in fact, delete these two new blocks of code. The change to source file GFOSUB.f90 required that I modify the argument order of the @COPY command in CompileLinkA2AD.bat (GFOSUB.f90 had to be moved after REQSUB_FAST.f90). I modified the rotational deflection outputs at the blade tip (TipRDxb#, TipRDyb#, and TipRDzc# where # = 1,2,3--the blade number) and tower-top (YawBrRDxt, YawBrRDyt, and YawBrRDzt) so that they take advantage of the large displacement capabilities of ADAMS. To do this, I changed the calculations from using the 'AX', 'AY', and 'AZ' SYSFNC() utility routines to using the 'ROLL', 'PITCH', and 'YAW' SYSFNC() utility routines. So now, in ADAMS output, Euler angles are used to describe the rotational deflections. Before this change, the rotational displacement outputs could not be trusted in the presence of multiple, large rotations; now, the outputs are as correct as the ADAMS simulation. No change was made to the associated outputs in FAST. Even so, the rotational outputs should be similar between FAST and ADAMS when the blade and/or or tower deflections are small. Euler angles are also used when outputting the platform roll, pitch, and yaw displacements in ADAMS. This change required a minor modification to SUBROUTINE REQSUB_FAST.f90/CalcOuts(). I added the ADAMS2AD.pdf User's Guide to the archive per the request by Scott Larwood. v12.18, 10-Jun-2005 J. Jonkman I rolled up all the alpha changes into this new version. I eliminated all alpha comments. v12.19a-jmj, 29-Jul-2005 J. Jonkman I removed the /libs:dll Project compile Option from CompileLinkA2AD.bat in accordance with the changes made to FAST v6.01a-jmj. Also, the workaround that was needed when compiling A2AD with an interface to a Bladed-style master controller DLL (i.e., the modification required to cru.exe), is no longer needed with this change since the DLL is now loaded at runtime. Hooray! I added INTEGER(4), PARAMETER :: Time = 0 to MODULE REQSUB_FAST.f90/Output() so that one can access the Time output channel from the AllOuts() array. I made use of the new Time PARAMETER in place of 0 in SUBROUTINE REQSUB_FAST.f90/CalcOuts() and in place of ZTime in SUBROUTINE REQSUB_FAST.f90/WrOutput(). This change does not effect any of the results and mimics changes made to FAST v6.01a-jmj. I modified the comment in front of all calls to TIMGET(). This change does not effect any of the results. v12.19, 12-Aug-2005 J. Jonkman I added a MIN( 1.0, * ) to the calculation of output parameter CThrstRad in SUBROUTINE REQSUB_FAST.f90/CalcOuts() in order to limit the value betweeen 0.0 and 1.0 (inclusive). This change does not effect any of the results other than the value of CThrstRad and mimics changes made to FAST v6.01. I rolled up all the alpha changes into this new version. I eliminated all alpha comments. v12.20a-jmj, 25-Aug-2006 J. Jonkman I modified CompileLinkA2AD.bat to work with ADAMS 2005R2 (the command to compile using ADAMS 2005 is now commented out). I increased the upper limit for the number of blade and tower strain gage locations (inputs NBlGages and NTwGages) from 5 to 9 and I added new output parameters for the local loads and motions at the additional strain gage locations. The names of the new output parameters follow the naming conventions used for the output parameters previously available at the 5 original strain gage locations. This required changes to MODULE REQSUB_FAST.f90/Output() and SUBROUTINE REQSUB_FAST.f90/CalcOuts() and mimics changes made to FAST v6.02a-jmj. I added an undocumented feature for modeling the hydrodynamic loading and mooring system dynamics for floating wind turbines. This required changes to SUBROUTINEs GFOSUB.f90/GFOSUB_FAST() and VARSUB_FAST.f90/VARSUB() and the addition of FAST source files FFTMod.f90, fftpack.f, and HydroCalc.f90 to CompileLinkA2AD.bat and mimics changes made to FAST v6.02a-jmj. I also added an undocumented feature for modeling the hydrodynamic loading on a monopile, also mimicking changes to FAST v6.02a-jmj. I added an undocumented feature for outputting the incident wave elevation at the platform reference point and the incident wave kinematics at up to 9 nodes along the undeflected tower [not floating] or undisplaced platform [floating]. The output names are WaveElev for the wave elevation; Wave#Vxi, Wave#Vyi, and Wave#Vzi for the wave velocities; and Wave#Axi, Wave#Ayi, and Wave#Azi for the wave accelerations; where # = 1,2,...,9. This required changes to MODULE REQSUB_FAST.f90/Output() and SUBROUTINEs GFOSUB.f90/GFOSUB_FAST() and REQSUB_FAST.f90/CalcOuts() and mimics changes made to FAST v6.02a-jmj. In SUBROUTINE REQSUB_FAST.f90/REQSUB(), I added a check to the value of the STRING constant from the ADAMS dataset that FAST2ADAMS creates, which represents the program version number of A2AD that is required to run the ADAMS model, and Abort if necessary. This change mimics changes made to FAST v6.02a-jmj. In SUBROUTINE VFOSUB_FAST.f90/VFOSUB(), I read in CompAero to ensure that its value is known within the routine. This change mimics changes made to FAST v6.02a-jmj. In SUBROUTINE REQSUB_FAST.f90/DOutParam(), I removed the calculations of BldGagNd and TwrGagNd and the ErrFlg is set to .TRUE. by the CALLS to SYSARY('ARRAY'...). This change does not effect any of the results. I replaced all CALLs to routine ERRMES() with CALLs to routine Abort() in SUBROUTINEs GFOSUB.f90/GFOSUB_FAST(), REQSUB_FAST.f90/CalcOuts(), SFOSUB_FAST.f90/SFOSUB(), VARSUB_FAST.f90/VARSUB(), and VFOSUB_FAST.f90/VFOSUB(). I changed a couple of the comment lines in source file REQSUB_FAST.f90. I renamed MODULE PlatformLd() to Platform(). This change does not effect any of the results, but mimics changes made to FAST v6.02a-jmj. v12.20b-jmj, 15-Nov-2006 J. Jonkman I renamed folder "Executable" to "DLL" in the archive. I added blade strain gage output parameters for the local loads and motions of blades 2 and 3. The names of the new output parameters follow the naming conventions used for the output parameters previously available for blade 1. This required changes to MODULE REQSUB_FAST.f90/Output() and SUBROUTINEs REQSUB_FAST.f90/CalcOuts() and DOutParam() and mimics changes made to FAST v6.02b-jmj. I replaced the hard-coded mooring line restoring calculation with a general-purpose, quasi-static solution based on the analytical catenary cable equations with seabed interaction. This required changes to MODULE REQSUB_FAST.f90/Output() and FAST_Vars(), SUBROUTINEs GFOSUB.f90/GFOSUB_FAST(), REQSUB_FAST.f90/CalcOuts() and DOutParam(), and VARSUB_FAST.f90/VARSUB() and mimics changes made to FAST v6.02b-jmj. In SUBROUTINE VARSUB_FAST.f90/VARSUB(), I removed the ramping of the wave elevation magnitude over the first tenth of a second. This change does not effect any of the results. I replaced the *D0 extensions in all double-precision constants to *_DbKi. I did this because double-precision the KIND value for double-precision is compiler dependent. This change effected routines GFOSUB.f90/GFOSUB(), SFOSUB_FAST.f90/SFOSUB(), VARSUB_FAST.f90/VARSUB(), VFOSUB_FAST.f90/VFOSUB() and REQSUB_FAST.f90\REQSUB() and DOutParam(), but does not effect any of the results. v12.20c-jmj, 02-Feb-2007 J. Jonkman The version number was rolled to mimic changes made to FAST v6.02c-jmj. No changes were made to the source code, so the results are not effected. ------------------------------------------------------------------------------- --------------------------- A2AD v13. ----------------------------------------- ---------- PLEASE NOTE THAT THIS VERSION IS NOT BACKWARD COMPATIBLE ----------- ---- WITH ADAMS/WT (IT ONLY WORKS WITH FAST-TO-ADAMS CREATED ADAMS MODELS) ---- -------------- AND WITH VERSIONS OF AERODYN EARLIER THAN v13.! ---------------- ------------------------------------------------------------------------------- v13.00.00a-bjj, 10 March 2010 B. and J. Jonkman We restructured the source files so that only the subroutines ADAMS directly calls are in one source file called Adams_Subs.f90. The supporting subroutines and variables are stored in a module contained in A2AD_Mod.f90. The file FAST_Params.f90 contains files that are exact copies of those found in the FAST archive. We modified the code to use the NWTC_Library routines (v1.02.00). This elimiated all the calls to Adams' USRMES and ERRMES subroutines, using the WrScr() and ProgAbort() subroutines instead. This means the messages are not written to Adams' .msg file; however they are written to the screen, which can be redirected to a file. We modified the code to work with the new AeroDyn interface (AeroDyn 13.00.00). This required me to rewrite the GFOSUB() subroutine to calculate the aerodynamic forces for all blades and elements when the subroutine is called at blade 1, element 1. I put some checks in the code to avoid calling AeroDyn subroutines before it was initialized. Also, I introduced some new variables and reworked several subroutines so that no AeroDyn variables are directly used in the Adams2AD subroutines. Many of the old A2AD subroutines have been removed [like CheckBlade()]. While SENSUB() still exists for SENSOR/1, it no longer has any functionality. We renamed the "State" variables in the A2AD source code to "StateDb". The new AeroDyn routines have a "State" type; the CVF compiler didn't like the duplicated names. English units are no longer allowed. The gfosub.opt file has been renamed RootName.opt (since AeroDyn does not base anything on knowing what the calling program's name is anymore). The initial rotor tilt angle is not printed in the .opt file any more. The tip and hub loss constants are calculated in AeroDyn so we now need to send AeroDyn information to calculate them correctly. We rewrote the CompileLinkA2AD.bat file to work with IVF 10.1 and Adams 2008r1. We also left logic in it so it will work with CVF 6.6b and Adams 2005r2 (if you change the "MyCompiler" variable at the top of the script). I rewrote the list of source files using Marshall Buhl's method so that it is easier to read than just listing everything on one really long line. We removed the SAMPLE folder from the archive and added the file, Disclaimer.txt. We moved the changes documented in ReadMe.txt to the top of this change log file and removed ReadMe.txt from the archive. We renumbered the archive with the new numbering scheme: X.XX.XX v13.00.00 23-Jan-2012 B. Jonkman I removed the change comments and modified the compile script to use AeroDyn v13.00.01a-bjj (including HAWCWind.f90). v13.01.00a-bjj 16-Feb-2012 B. Jonkman per jmj, We replaced marker 3000 with marker 3030 used in the AeroDyn/AD_CalculateLoads() interface. We were not using the overhang, but we want the shaft tip. This should only affect AeroDyn's HubVDue2Yaw calculation, which is likely small, and only likely to be important for fast yawing turbines. I renamed the following markers and vforces due to changes in FAST2Adams: (old --> new ) MARKER 4030 + K --> 10000*K + 9100 UndeflBldTip_M MARKER 10000*K + 5100 --> 10000*K + 7100 VFORCE 10000*K + 5100 --> 10000*K + 7100 I replaced many parameters/hard-coded numbers to correspond with the naming convention in the FAST2ADAMSStatements.xls file. IGRND --> AeroDynGround_M 1 --> AeroDynGround_M 0 --> AdamsGrnd_M (Adams assumed 0 was relative to the ground) Please see the code (A2AD_Mod.f90) for the other numbers that I have replaced with parameters. I changed all the IFLAG definitions from LOGICAL to INTEGER, per Adams documentation. I added parameters for Adams integer, real, and logical kinds. I removed SetDirRoot() and put the 2 things it did in the A2ADInit() subroutine instead. I now send the path/root name of the main input file to the user-defined subroutines instead of sending the path of the current working directory with the "RootName" appended on it. I updated CompileLinkA2AD.bat to compile with the BladedDLL files. I had to move the compilation of FAST_Params.f90 before the FAST BladedDLLInterface.f90 source file. I also added the AeroDyn/InflowWind/HAWCWind.f90 source file to the compile script. I added additional outputs for local forces on the blades and tower to replicate the functionality JAA added to FAST. Note that these forces can differ somewhat from FAST results because of the lumped mass approach used in Adams. I also modified the CalcOuts() subroutine to use loops instead of so many IF statements. The Output MODULE has also been updated to contain the parameters necessary for the additional outputs and the loops used in CalcOuts() (and to use the same code as FAST). I replaced variables OutInd and OutSign with OutParam%Indx and OutParam%SignM, respectively. This corresponds to enhancements to I/O in HydroDyn that use the same matlab script to generate portions of the output code. I removed the call to AeroDyn to get the AD input file unit number and replaced it with a parameter named ADIptFile_SG, which is defined in FAST2ADAMSStatements.xls. I pass model parameters in ARRAY/ModelConstants_A, generated by the FAST2ADAMS preprocessor. This allows us to clean up some of the code. I increased the size of RootName from 99 to 1024 characters. I removed subroutine A2AD_Init() and replaced it with the Pseudo_Handler() routine originally developed by Andy Elliott of MSC Software. I cleaned it up a bit. I replaced the SYSFNC("ARRAY",...) calls that return only IC/Constants with GTARAY() calls instead. (Per Andy Elliott, this is better. It doesn't try to set up dependancies on constant arrays.) I haven't changed the arrays in the hydrodynamics section because they will be replaced with the new HydroDyn interface. I now check that there are tower and/or blade gages before attempting to read the array that contains them. I removed the blade and element counting junk from GFOSUB() and replaced it by reading the values from an array in the adams dataset. I moved the calls to DOutParam() and WrOutHdr() to the initialization routine. v13.01.00b-bjj 22-Feb-2013 B. Jonkman I updated CompileLinkA2AD.bat to compile with AeroDyn v13.00.02a-bjj and NWTC Library 1.07.00. Note that instead of changing the NWTC Library for ADAMS, I created a separate SysIVF_ADAMS.f90 file and placed it in the A2AD source folder. I added the user's guide addendum to the archive. Compiled with Intel(R) Visual Fortran IA-32, Version 10.1.024 NWTC Library v1.07.00b-mlb AeroDyn v13.00.02a-bjj InflowWind v1.01.00b-bjj Adams08R1 ================== END ====================