Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified docs/OtherSupporting/OutListParameters.xlsx
Binary file not shown.
9 changes: 6 additions & 3 deletions docs/source/user/hydrodyn/input_files.rst
Original file line number Diff line number Diff line change
Expand Up @@ -898,9 +898,12 @@ specified in the HYDRODYN section of the driver input file when running
HydroDyn standalone, or by the OpenFAST program when running a coupled
simulation. See :numref:`hd-summary-file` for summary file details.

For this version, **OutAll** must be set to FALSE. In future versions,
setting **OutAll** = TRUE will cause HydroDyn to auto-generate outputs
for every joint and member in the input file.
If **OutAll** is set to TRUE, HydroDyn will output the total strip-theory
forces and moments on each user-defined member and joint, followed by the
forces and moments on each computational node of the strip-theory mesh.
These additional output channels are inserted as additional columns in the
output file independent of any user-requested outputs. See :ref:`hd-outall-option`
for more information.

If **OutSwtch** is set to 1, outputs are sent to a file with the name
``OutRootname.HD.out``. If **OutSwtch** is set to 2, outputs are
Expand Down
53 changes: 53 additions & 0 deletions docs/source/user/hydrodyn/output_files.rst
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,59 @@ data for a single 6\ **NBody**-by-6\ **NBody** matrix. If **NBodyMod** > 1
(no hydrodynamic coupling), the summary file will contain data for **NBody**
6-by-6 radiation kernal matrices.

.. _hd-outall-option:

**OutAll** Option
~~~~~~~~~~~~~~~~~

If **OutAll** is set to TRUE, HydroDyn will output the total strip-theory
forces and moments on each user-defined member and joint. These are
included as additional columns in the output file independent of any
user-requested outputs. The forces and moments on the members (integrated loads across
all side walls) will be written first. For example, the 6 load components
on the first member in the **MEMBERS** table (the first row of the table)
are given by **M1TotFxi**, **M1TotFyi**, **M1TotFzi**, **M1TotMxi**,
**M1TotMyi**, and **M1TotMzi**. After the member loads, the total lumped
loads on each joint are printed next. For instance, the loads on the first
joint in the **MEMBER JOINTS** table are printed with the column names
**J1TotFxi**, **J1TotFyi**, **J1TotFzi**, **J1TotMxi**, **J1TotMyi**, and
**J1TotMzi**. Note that for these outputs, the members and joints are
simply numbered based on their order of appearance in the respective tables
in the input file, so, as an example, **J2** refers to the joint defined
on the second row of the **MEMBER JOINTS** table. The member and joint
numbering does not follow **MemberID** and **JointID**, nor does it follow
the numbering used with the user-requested member and joint outputs.

The output forces and moments are the total strip-theory loads, including
hydrodynamic, hydrostatic, marine growth, and ballast contributions. If a
member has **PropPot** set to TRUE, the relevant load components will be
omitted for that member and its connecting joints as appropriate. All
force and moment components are resolved in the earth-fixed inertial frame
of reference, and the moments are computed about the instantaneous principal
reference point (PRP), same as the output channels **HydroFxi**,
**HydroFyi**, etc. As a reminder, the PRP is a body-fixed point located at
the earth-fixed origin when the HydroDyn structure is undisplaced. Summing
all member and joint loads gives the total strip-theory loads on the entire
structure.

After the member and joint loads, HydroDyn also outputs the total forces
and moments on each computational node of the HydroDyn strip-theory (Morison)
mesh. This internal mesh is used to map the loads to other structural
modules, such as SubDyn, and contains joint nodes at the user-defined joint
locations followed by member internal nodes created from member discretization.
The force and moment components are again resolved in the earth-fixed inertial
frame of reference. However, the moment on each node is about the node itself,
not about the PRP as with the member and joint load outputs above. Additionally,
the joint mesh nodes can have load contributions from both member side walls
and from the joint/endplates. This is because part of the side-wall loads on
the first and last element of a member can be assignd to the joint nodes. As
a result, the load outputs at the joint nodes do not necessarily match the joint
load outputs above, which do not contain contributions from member side walls.
The nodal load output column names indicate the node number, e.g., **N1TotFxi**,
**N1TotFyi**, **N1TotFzi**, **N1TotMxi**, **N1TotMyi**, and **N1TotMzi** for
the first node. The node numbering follows the **Nodes** table in the HydroDyn
summary file.

Results File
~~~~~~~~~~~~

Expand Down
14 changes: 7 additions & 7 deletions modules/hydrodyn/src/HydroDyn.f90
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,9 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I

! Were visualization meshes requested?
InputFileData%Morison%VisMeshes = p%VisMeshes

! Additional Morison inputs to be initialized just in case
u%Morison%PtfmRefY = 0.0_ReKi
u%Morison%PRP = [0.0_ReKi,0.0_ReKi,0.0_ReKi]
! Initialize the Morison Element Calculations
CALL Morison_Init(InputFileData%Morison, u%Morison, p%Morison, x%Morison, xd%Morison, z%Morison, OtherState%Morison, &
y%Morison, m%Morison, Interval, InitOut%Morison, ErrStat2, ErrMsg2 )
Expand Down Expand Up @@ -1204,14 +1206,11 @@ SUBROUTINE HydroDyn_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherSt
DO i=1,nTime
CALL Morison_CopyInput(Inputs(i)%Morison, Inputs_Morison(i), MESH_NEWCOPY, ErrStat2, ErrMsg2)
call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )
! Inputs_Morison(i)%PtfmRefY = Inputs(i)%PtfmRefY
Inputs_Morison(i)%PtfmRefY = xd%PtfmRefY(i)
Inputs_Morison(i)%PRP = Inputs(i)%PRPMesh%Position(:,1) + Inputs(i)%PRPMesh%TranslationDisp(:,1)
END DO
CALL Morison_CopyInput(Inputs(1)%Morison, u_Morison, MESH_NEWCOPY, ErrStat2, ErrMsg2)
call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )
! u_Morison%PtfmRefY = Inputs(1)%PtfmRefY
u_Morison%PtfmRefY = xd%PtfmRefY(1)

CALL Morison_Input_ExtrapInterp(Inputs_Morison, InputTimes, u_Morison, t, ErrStat2, ErrMsg2) ! get inputs at time t
call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )

Expand Down Expand Up @@ -1762,6 +1761,7 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat,

IF ( u%Morison%Mesh%Committed ) THEN ! Make sure we are using Morison / there is a valid mesh
u%Morison%PtfmRefY = PtfmRefY
u%Morison%PRP = u%PRPMesh%Position(:,1)+u%PRPMesh%TranslationDisp(:,1)
CALL Morison_CalcOutput( Time, u%Morison, p%Morison, x%Morison, xd%Morison, &
z%Morison, OtherState%Morison, y%Morison, m%Morison, &
ErrStat2, ErrMsg2, calcMorisonHstLdsLocal )
Expand All @@ -1777,9 +1777,9 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat,
if (Failed()) return

! Aggregate the sub-module outputs
IF (p%Morison%NumOuts > 0) THEN
IF (p%Morison%NumOuts > 0 .or. p%Morison%OutAll) THEN
J = p%NumOuts + 1
DO I=1, p%Morison%NumOuts
DO I=1, size(p%Morison%OutParam)
y%WriteOutput(J) = y%Morison%WriteOutput(I)
J = J + 1
END DO
Expand Down
1 change: 0 additions & 1 deletion modules/hydrodyn/src/HydroDyn.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ typedef ^ ^ INTEGER
typedef ^ ^ INTEGER NUserOutputs - - - "Number of Hydrodyn-level requested output channels" -
typedef ^ ^ CHARACTER(ChanLen) UserOutputs {:} - - "This should really be dimensioned with MaxOutPts" -
typedef ^ ^ INTEGER OutSwtch - - - "Output requested channels to: [1=Hydrodyn.out 2=GlueCode.out 3=both files]" -
typedef ^ ^ LOGICAL OutAll - - - "Output all user-specified member and joint loads (only at each member end, not interior locations) [T/F]" -
typedef ^ ^ INTEGER NumOuts - - - "The number of outputs for this module as requested in the input file" -
typedef ^ ^ CHARACTER(ChanLen) OutList {:} - - "The user-requested output channel labels for this modules. This should really be dimensioned with MaxOutPts" -
typedef ^ ^ LOGICAL HDSum - - - "Generate a HydroDyn summary file [T/F]" -
Expand Down
11 changes: 1 addition & 10 deletions modules/hydrodyn/src/HydroDyn_Input.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1222,7 +1222,7 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, FileInfo_In, InputFi
if (Failed()) return;

! OutAll - Whether or not to output information for every member and joint
call ParseVar( FileInfo_In, CurLine, 'OutAll', InputFileData%OutAll, ErrStat2, ErrMsg2, UnEc )
call ParseVar( FileInfo_In, CurLine, 'OutAll', InputFileData%Morison%OutAll, ErrStat2, ErrMsg2, UnEc )
if (Failed()) return;

! OutSwtch - Specify how to write to an output file
Expand Down Expand Up @@ -2804,15 +2804,6 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS
! Data section for OUTPUT
!-------------------------------------------------------------------------------------------------


! OutAll - output all member and joint data

IF ( InputFileData%OutAll ) THEN !TODO: Alter this check once OutAll is supported
CALL SetErrStat( ErrID_Fatal,'OutAll must be FALSE. Future versions of HydroDyn will once again support values of either TRUE or FALSE.',ErrStat,ErrMsg,RoutineName)
RETURN
END IF


! OutSwtch - output file switch

IF ( InputFileData%OutSwtch /= 1 .AND. InputFileData%OutSwtch /= 2 .AND. InputFileData%OutSwtch /= 3 ) THEN
Expand Down
20 changes: 10 additions & 10 deletions modules/hydrodyn/src/HydroDyn_Output.f90
Original file line number Diff line number Diff line change
Expand Up @@ -8887,9 +8887,9 @@ SUBROUTINE HDOUT_Init( HydroDyn_ProgDesc, OutRootName, InputFileData, y, p, m,
p%OutDec = 1 !TODO: Remove this once the parameter has been added to the HD input file GJH 7/8/2014


IF (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0) THEN
IF (ALLOCATED( p%Morison%OutParam ) .AND. (p%Morison%NumOuts > 0 .OR. p%Morison%OutAll)) THEN
hasMorisonOuts = .TRUE.
p%NumTotalOuts = p%NumTotalOuts + p%Morison%NumOuts
p%NumTotalOuts = p%NumTotalOuts + size(p%Morison%OutParam)
END IF

! Allocate the aggregate arrays
Expand Down Expand Up @@ -8929,7 +8929,7 @@ SUBROUTINE HDOUT_Init( HydroDyn_ProgDesc, OutRootName, InputFileData, y, p, m,
J = p%NumOuts + 1

IF ( hasMorisonOuts ) THEN
DO I=1, p%Morison%NumOuts
DO I=1, size(p%Morison%OutParam)
InitOut%WriteOutputHdr(J) = InitOut%Morison%WriteOutputHdr(I)
InitOut%WriteOutputUnt(J) = InitOut%Morison%WriteOutputUnt(I)
J = J + 1
Expand Down Expand Up @@ -8982,7 +8982,7 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta
!-------------------------------------------------------------------------------------------------
p%UnOutFile = -1
IF ( (ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0 ) .OR. &
(ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0 ) ) THEN ! Output has been requested so let's open an output file
(ALLOCATED( p%Morison%OutParam ) .AND. (p%Morison%NumOuts > 0 .OR. p%Morison%OutAll) ) ) THEN ! Output has been requested so let's open an output file

! Open the file for output
OutFileName = TRIM(OutRootName)//'.out'
Expand Down Expand Up @@ -9013,9 +9013,9 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta
WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%WriteOutputHdr(I) ), I=1,p%NumOuts )
END IF

IF (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0) THEN
Frmt = '('//TRIM(Int2LStr(p%Morison%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))'
WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%Morison%WriteOutputHdr(I) ), I=1,p%Morison%NumOuts )
IF (ALLOCATED( p%Morison%OutParam ) .AND. (p%Morison%NumOuts > 0 .OR. p%Morison%OutAll)) THEN
Frmt = '('//TRIM(Int2LStr(size(p%Morison%OutParam)))//'(:,A,'//TRIM( p%OutSFmt )//'))'
WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%Morison%WriteOutputHdr(I) ), I=1,size(p%Morison%OutParam) )
END IF


Expand All @@ -9033,9 +9033,9 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta
WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%WriteOutputUnt(I) ), I=1,p%NumOuts )
END IF

IF (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0) THEN
Frmt = '('//TRIM(Int2LStr(p%Morison%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))'
WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%Morison%WriteOutputUnt(I) ), I=1,p%Morison%NumOuts )
IF (ALLOCATED( p%Morison%OutParam ) .AND. (p%Morison%NumOuts > 0 .OR. p%Morison%OutAll)) THEN
Frmt = '('//TRIM(Int2LStr(size(p%Morison%OutParam)))//'(:,A,'//TRIM( p%OutSFmt )//'))'
WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%Morison%WriteOutputUnt(I) ), I=1,size(p%Morison%OutParam) )
END IF


Expand Down
Loading
Loading