Skip to content

Commit

Permalink
Add modify tail fin USB model to use gamma instead of alpha
Browse files Browse the repository at this point in the history
  • Loading branch information
abhineet-gupta committed Dec 7, 2023
1 parent 8719168 commit 128ff34
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 46 deletions.
44 changes: 20 additions & 24 deletions modules/aerodyn/src/AeroDyn.f90
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,6 @@ subroutine AD_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut
p%rotors(iR)%TFin%TFinIndMod = InputFileData%rotors(iR)%TFin%TFinIndMod
p%rotors(iR)%TFin%TFinAFID = InputFileData%rotors(iR)%TFin%TFinAFID
p%rotors(iR)%TFin%TFinKp = InputFileData%rotors(iR)%TFin%TFinKp
p%rotors(iR)%TFin%TFinCp = InputFileData%rotors(iR)%TFin%TFinCp
p%rotors(iR)%TFin%TFinSigma = InputFileData%rotors(iR)%TFin%TFinSigma
p%rotors(iR)%TFin%TFinAStar = InputFileData%rotors(iR)%TFin%TFinAStar
p%rotors(iR)%TFin%TFinKv = InputFileData%rotors(iR)%TFin%TFinKv
Expand Down Expand Up @@ -4362,11 +4361,11 @@ SUBROUTINE TFin_CalcOutput(p, p_AD, u, m, y, ErrStat, ErrMsg )
real(ReKi) :: V_wnd(3) ! wind velocity
real(ReKi) :: V_ind(3) ! induced velocity
real(ReKi) :: V_str(3) ! structural velocity
real(ReKi) :: V_wnd_tf(3) ! wind velocity
real(ReKi) :: force_tf(3) ! force in tf system
real(ReKi) :: moment_tf(3) ! moment in tf system
real(ReKi) :: alpha, Re, Cx, Cy, q, tfingamma ! Cl, Cd, Cm,
! USB variables
real(ReKi) :: x1, x2, x3 ! scaling functions for different contributions on CN
real(ReKi) :: alpha, Re, Cx, Cy, q ! Cl, Cd, Cm,
real(ReKi) :: x1, x2, x3,gamma_tf! scaling functions, gamma for unsteady modeling

type(AFI_OutputType) :: AFI_interp ! Resulting values from lookup table
integer(intKi) :: ErrStat2
Expand All @@ -4383,29 +4382,33 @@ SUBROUTINE TFin_CalcOutput(p, p_AD, u, m, y, ErrStat, ErrMsg )

if (p%TFin%TFinIndMod==TFinIndMod_none) then
V_ind = 0.0_ReKi

elseif(p%TFin%TFinIndMod==TFinIndMod_rotavg) then
! TODO TODO
print*,'TODO TailFin: compute rotor average induced velocity'
V_ind = 0.0_ReKi

else
STOP ! Will never happen

endif
V_rel = V_wnd - V_str + V_ind
print *,'V_wnd'
print *,V_wnd

V_rel = V_wnd - V_str + V_ind ! relative wind on tail fin
V_rel_tf = matmul(u%TFinMotion%Orientation(:,:,1), V_rel) ! from inertial to tf system
alpha = atan2( V_rel_tf(2), V_rel_tf(1)) ! angle of attack
alpha = atan2(V_rel_tf(2), V_rel_tf(1)) ! angle of attack
v_wnd_tf = matmul(u%TFinMotion%Orientation(:,:,1), V_wnd) ! only used for calculation of x1,x2,x3
gamma_tf = atan2(v_wnd_tf(2), v_wnd_tf(1)) ! only used for calculation of x1,x2,x3
V_rel_orth2 = V_rel_tf(1)**2 + V_rel_tf(2)**2 ! square norm of Vrel in tf system


! Initialize the tail fin forces to zero
force_tf(:) = 0.0_ReKi
moment_tf(:) = 0.0_ReKi
moment_tf(:) = 0.0_ReKi

if (p%TFin%TFinMod==TFinAero_none) then
! Do nothing

elseif (p%TFin%TFinMod==TFinAero_polar) then
! Airfoil coefficients
! Airfoil coefficients based model
Re = sqrt(V_rel_orth2) * p%TFin%TFinChord/p%KinVisc
call AFI_ComputeAirfoilCoefs( alpha, Re, 0.0_ReKi, p_AD%AFI(p%TFin%TFinAFID), AFI_interp, ErrStat2, ErrMsg2)
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
Expand All @@ -4419,24 +4422,17 @@ SUBROUTINE TFin_CalcOutput(p, p_AD, u, m, y, ErrStat, ErrMsg )
moment_tf(3) = AFI_interp%Cm * q * p%TFin%TFinChord

elseif (p%TFin%TFinMod==TFinAero_USB) then
!Calculate separation functions
!x1 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(1)*((ABS(alpha)*180.0_ReKi/pi)-p%TFin%TFinAStar(1))))
!x2 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(2)*((ABS(alpha)*180.0_ReKi/pi)-p%TFin%TFinAStar(2))))
!x3 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(3)*((ABS(alpha)*180.0_ReKi/pi)-p%TFin%TFinAStar(3))))
! Unsteady aerodynamic model

tfingamma = atan2(u%TFinMotion%orientation(2,1,1),u%TFinMotion%orientation(1,1,1))
x1 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(1)*((ABS(tfingamma)*180.0_ReKi/pi)-p%TFin%TFinAStar(1))))
x2 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(2)*((ABS(tfingamma)*180.0_ReKi/pi)-p%TFin%TFinAStar(2))))
x3 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(3)*((ABS(tfingamma)*180.0_ReKi/pi)-p%TFin%TFinAStar(3))))

! print *,alpha*180.0_ReKi/pi
! print *,alpha
! Calculate separation function (quasi-steady)
x1 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(1)*((ABS(gamma_tf)*180.0_ReKi/pi)-p%TFin%TFinAStar(1))))
x2 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(2)*((ABS(gamma_tf)*180.0_ReKi/pi)-p%TFin%TFinAStar(2))))
x3 = 1.0_Reki/(1.0_Reki+exp(p%TFin%TFinSigma(3)*((ABS(gamma_tf)*180.0_ReKi/pi)-p%TFin%TFinAStar(3))))

! Calculate unsteady force on tain fin
force_tf(2) = 0.5_ReKi * p%AirDens * p%TFin%TFinArea * &
(p%TFin%TFinKp * x1 * V_rel_tf(1) * V_rel_tf(2) + &
(x2 * p%TFin%TFinKv + (1-x3)*p%TFin%TFinCDc) * V_rel_tf(2) * ABS(V_rel_tf(2)))
! moment_tf(3) = force_tf(2) * p%Tfin%TFinCp * p%TFin%TFinChord

endif

! Transfer to global
Expand Down
1 change: 0 additions & 1 deletion modules/aerodyn/src/AeroDyn_IO.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1267,7 +1267,6 @@ SUBROUTINE ReadTailFinInputs(FileName, TFData, UnEc, ErrStat, ErrMsg)
!====== Unsteady slender body model ===================== [used only when TFinMod=2]
call ParseCom(FileInfo_in, iLine, DummyLine , ErrStat2, ErrMsg2, UnEc); if (Failed()) return;
call ParseVar(FileInfo_In, iLine, 'TFinKp' , TFData%TFinKp , ErrStat2, ErrMsg2, UnEc); if (Failed()) return;
call ParseVar(FileInfo_In, iLine, 'TFinCp' , TFData%TFinCp , ErrStat2, ErrMsg2, UnEc); if (Failed()) return;
call ParseAry(FileInfo_In, iLine, 'TFinSigma' , TFData%TFinSigma, 3 , ErrStat2, ErrMsg2, UnEc); if (Failed()) return;
call ParseAry(FileInfo_In, iLine, 'TFinAStar', TFData%TFinAStar, 3 , ErrStat2, ErrMsg2, UnEc); if (Failed()) return;
call ParseVar(FileInfo_In, iLine, 'TFinKv' , TFData%TFinKv , ErrStat2, ErrMsg2, UnEc); if (Failed()) return;
Expand Down
6 changes: 2 additions & 4 deletions modules/aerodyn/src/AeroDyn_Registry.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ typedef ^ TFinParameterType ReKi TFinChord - - - "Tail fin chord [u
typedef ^ TFinParameterType ReKi TFinArea - - - "Tail fin planform area [used only when TFinMod=1]" m^2
typedef ^ TFinParameterType IntKi TFinIndMod - - - "Model for induced velocity calculation {0=none, 1=rotor-average}" (switch)
typedef ^ TFinParameterType IntKi TFinAFID - - - "Index of Tail fin airfoil number [1 to NumAFfiles]" -
typedef ^ TFinParameterType ReKi TFinKp - - - "Tail fin emperical constant for vortex separation functions [used only when TFMod=2]" -
typedef ^ TFinParameterType ReKi TFinCp - - - "Tail fin emperical constant for vortex separation functions [used only when TFMod=2]" -
typedef ^ TFinParameterType ReKi TFinKp - - - "Tail fin potential flow constant [used only when TFMod=2]" -
typedef ^ TFinParameterType ReKi TFinSigma 3 - - "Tail fin emperical constants for vortex separation functions [used only when TFMod=2]" -
typedef ^ TFinParameterType ReKi TFinAStar 3 - - "Tail fin initial angles for vortex separation functions [used only when TFMod=2]" deg
typedef ^ TFinParameterType ReKi TFinKv - - - "Tail fin vortex lift coefficient [used only when TFMod=2]" -
Expand All @@ -69,8 +68,7 @@ typedef ^ TFinInputFileType ReKi TFinRefP_n 3 - - "Undeflected posit
typedef ^ TFinInputFileType ReKi TFinAngles 3 - - "Tail fin chordline skew, tilt, and bank angles about the reference point" (deg)
typedef ^ TFinInputFileType IntKi TFinIndMod - - - "Model for induced velocity calculation {0=none, 1=rotor-average}" (switch)
typedef ^ TFinInputFileType IntKi TFinAFID - - - "Index of Tail fin airfoil number [1 to NumAFfiles]" -
typedef ^ TFinInputFileType ReKi TFinKp - - - "Tail fin emperical constant for vortex separation functions [used only when TFMod=2]" -
typedef ^ TFinInputFileType ReKi TFinCp - - - "Tail fin emperical constant for vortex separation functions [used only when TFMod=2]" -
typedef ^ TFinInputFileType ReKi TFinKp - - - "Tail fin potential flow constant [used only when TFMod=2]" -
typedef ^ TFinInputFileType ReKi TFinSigma 3 - - "Tail fin emperical constants for vortex separation functions [used only when TFMod=2]" -
typedef ^ TFinInputFileType ReKi TFinAStar 3 - - "Tail fin initial angles for vortex separation functions [used only when TFMod=2]" deg
typedef ^ TFinInputFileType ReKi TFinKv - - - "Tail fin vortex lift coefficient [used only when TFMod=2]" -
Expand Down
18 changes: 2 additions & 16 deletions modules/aerodyn/src/AeroDyn_Types.f90
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,7 @@ MODULE AeroDyn_Types
REAL(ReKi) :: TFinArea !< Tail fin planform area [used only when TFinMod=1] [m^2]
INTEGER(IntKi) :: TFinIndMod !< Model for induced velocity calculation {0=none, 1=rotor-average} [(switch)]
INTEGER(IntKi) :: TFinAFID !< Index of Tail fin airfoil number [1 to NumAFfiles] [-]
REAL(ReKi) :: TFinKp !< Tail fin emperical constant for vortex separation functions [used only when TFMod=2] [-]
REAL(ReKi) :: TFinCp !< Tail fin emperical constant for vortex separation functions [used only when TFMod=2] [-]
REAL(ReKi) :: TFinKp !< Tail fin potential flow constant [used only when TFMod=2] [-]
REAL(ReKi) , DIMENSION(1:3) :: TFinSigma !< Tail fin emperical constants for vortex separation functions [used only when TFMod=2] [-]
REAL(ReKi) , DIMENSION(1:3) :: TFinAStar !< Tail fin initial angles for vortex separation functions [used only when TFMod=2] [deg]
REAL(ReKi) :: TFinKv !< Tail fin vortex lift coefficient [used only when TFMod=2] [-]
Expand All @@ -83,8 +82,7 @@ MODULE AeroDyn_Types
REAL(ReKi) , DIMENSION(1:3) :: TFinAngles !< Tail fin chordline skew, tilt, and bank angles about the reference point [(deg)]
INTEGER(IntKi) :: TFinIndMod !< Model for induced velocity calculation {0=none, 1=rotor-average} [(switch)]
INTEGER(IntKi) :: TFinAFID !< Index of Tail fin airfoil number [1 to NumAFfiles] [-]
REAL(ReKi) :: TFinKp !< Tail fin emperical constant for vortex separation functions [used only when TFMod=2] [-]
REAL(ReKi) :: TFinCp !< Tail fin emperical constant for vortex separation functions [used only when TFMod=2] [-]
REAL(ReKi) :: TFinKp !< Tail fin potential flow constant [used only when TFMod=2] [-]
REAL(ReKi) , DIMENSION(1:3) :: TFinSigma !< Tail fin emperical constants for vortex separation functions [used only when TFMod=2] [-]
REAL(ReKi) , DIMENSION(1:3) :: TFinAStar !< Tail fin initial angles for vortex separation functions [used only when TFMod=2] [deg]
REAL(ReKi) :: TFinKv !< Tail fin vortex lift coefficient [used only when TFMod=2] [-]
Expand Down Expand Up @@ -521,7 +519,6 @@ SUBROUTINE AD_CopyTFinParameterType( SrcTFinParameterTypeData, DstTFinParameterT
DstTFinParameterTypeData%TFinIndMod = SrcTFinParameterTypeData%TFinIndMod
DstTFinParameterTypeData%TFinAFID = SrcTFinParameterTypeData%TFinAFID
DstTFinParameterTypeData%TFinKp = SrcTFinParameterTypeData%TFinKp
DstTFinParameterTypeData%TFinCp = SrcTFinParameterTypeData%TFinCp
DstTFinParameterTypeData%TFinSigma = SrcTFinParameterTypeData%TFinSigma
DstTFinParameterTypeData%TFinAStar = SrcTFinParameterTypeData%TFinAStar
DstTFinParameterTypeData%TFinKv = SrcTFinParameterTypeData%TFinKv
Expand Down Expand Up @@ -592,7 +589,6 @@ SUBROUTINE AD_PackTFinParameterType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat
Int_BufSz = Int_BufSz + 1 ! TFinIndMod
Int_BufSz = Int_BufSz + 1 ! TFinAFID
Re_BufSz = Re_BufSz + 1 ! TFinKp
Re_BufSz = Re_BufSz + 1 ! TFinCp
Re_BufSz = Re_BufSz + SIZE(InData%TFinSigma) ! TFinSigma
Re_BufSz = Re_BufSz + SIZE(InData%TFinAStar) ! TFinAStar
Re_BufSz = Re_BufSz + 1 ! TFinKv
Expand Down Expand Up @@ -636,8 +632,6 @@ SUBROUTINE AD_PackTFinParameterType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat
Int_Xferred = Int_Xferred + 1
ReKiBuf(Re_Xferred) = InData%TFinKp
Re_Xferred = Re_Xferred + 1
ReKiBuf(Re_Xferred) = InData%TFinCp
Re_Xferred = Re_Xferred + 1
DO i1 = LBOUND(InData%TFinSigma,1), UBOUND(InData%TFinSigma,1)
ReKiBuf(Re_Xferred) = InData%TFinSigma(i1)
Re_Xferred = Re_Xferred + 1
Expand Down Expand Up @@ -694,8 +688,6 @@ SUBROUTINE AD_UnPackTFinParameterType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS
Int_Xferred = Int_Xferred + 1
OutData%TFinKp = ReKiBuf(Re_Xferred)
Re_Xferred = Re_Xferred + 1
OutData%TFinCp = ReKiBuf(Re_Xferred)
Re_Xferred = Re_Xferred + 1
i1_l = LBOUND(OutData%TFinSigma,1)
i1_u = UBOUND(OutData%TFinSigma,1)
DO i1 = LBOUND(OutData%TFinSigma,1), UBOUND(OutData%TFinSigma,1)
Expand Down Expand Up @@ -737,7 +729,6 @@ SUBROUTINE AD_CopyTFinInputFileType( SrcTFinInputFileTypeData, DstTFinInputFileT
DstTFinInputFileTypeData%TFinIndMod = SrcTFinInputFileTypeData%TFinIndMod
DstTFinInputFileTypeData%TFinAFID = SrcTFinInputFileTypeData%TFinAFID
DstTFinInputFileTypeData%TFinKp = SrcTFinInputFileTypeData%TFinKp
DstTFinInputFileTypeData%TFinCp = SrcTFinInputFileTypeData%TFinCp
DstTFinInputFileTypeData%TFinSigma = SrcTFinInputFileTypeData%TFinSigma
DstTFinInputFileTypeData%TFinAStar = SrcTFinInputFileTypeData%TFinAStar
DstTFinInputFileTypeData%TFinKv = SrcTFinInputFileTypeData%TFinKv
Expand Down Expand Up @@ -810,7 +801,6 @@ SUBROUTINE AD_PackTFinInputFileType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat
Int_BufSz = Int_BufSz + 1 ! TFinIndMod
Int_BufSz = Int_BufSz + 1 ! TFinAFID
Re_BufSz = Re_BufSz + 1 ! TFinKp
Re_BufSz = Re_BufSz + 1 ! TFinCp
Re_BufSz = Re_BufSz + SIZE(InData%TFinSigma) ! TFinSigma
Re_BufSz = Re_BufSz + SIZE(InData%TFinAStar) ! TFinAStar
Re_BufSz = Re_BufSz + 1 ! TFinKv
Expand Down Expand Up @@ -862,8 +852,6 @@ SUBROUTINE AD_PackTFinInputFileType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat
Int_Xferred = Int_Xferred + 1
ReKiBuf(Re_Xferred) = InData%TFinKp
Re_Xferred = Re_Xferred + 1
ReKiBuf(Re_Xferred) = InData%TFinCp
Re_Xferred = Re_Xferred + 1
DO i1 = LBOUND(InData%TFinSigma,1), UBOUND(InData%TFinSigma,1)
ReKiBuf(Re_Xferred) = InData%TFinSigma(i1)
Re_Xferred = Re_Xferred + 1
Expand Down Expand Up @@ -929,8 +917,6 @@ SUBROUTINE AD_UnPackTFinInputFileType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS
Int_Xferred = Int_Xferred + 1
OutData%TFinKp = ReKiBuf(Re_Xferred)
Re_Xferred = Re_Xferred + 1
OutData%TFinCp = ReKiBuf(Re_Xferred)
Re_Xferred = Re_Xferred + 1
i1_l = LBOUND(OutData%TFinSigma,1)
i1_u = UBOUND(OutData%TFinSigma,1)
DO i1 = LBOUND(OutData%TFinSigma,1), UBOUND(OutData%TFinSigma,1)
Expand Down
2 changes: 1 addition & 1 deletion reg_tests/r-test
Submodule r-test updated 38 files
+0 −4 glue-codes/openfast/5MW_OC3Mnpl_DLL_WTurb_WavesIrr/NRELOffshrBsline5MW_OC3Monopile_SubDyn.dat
+0 −4 glue-codes/openfast/5MW_OC3Trpd_DLL_WSt_WavesReg/NRELOffshrBsline5MW_OC3Tripod_SubDyn.dat
+0 −6 modules/subdyn/CaseList.md
+0 −184 modules/subdyn/SD_2Beam_Cantilever/Analytical_solution_2_beams.m
+0 −3 modules/subdyn/SD_2Beam_Cantilever/README.txt
+0 −2,009 modules/subdyn/SD_2Beam_Cantilever/SD_2Beam_Cantilever.SD.out
+0 −93 modules/subdyn/SD_2Beam_Cantilever/SD_2Beam_Cantilever.dat
+0 −26 modules/subdyn/SD_2Beam_Cantilever/SD_2Beam_Cantilever.dvr
+0 −201 modules/subdyn/SD_2Beam_Spring/Analytical_solution_2_beams_and_spring.m
+0 −3 modules/subdyn/SD_2Beam_Spring/README.txt
+0 −2,009 modules/subdyn/SD_2Beam_Spring/SD_2Beam_Spring.SD.out
+0 −97 modules/subdyn/SD_2Beam_Spring/SD_2Beam_Spring.dat
+0 −26 modules/subdyn/SD_2Beam_Spring/SD_2Beam_Spring.dvr
+0 −4 modules/subdyn/SD_AnsysComp1_PinBeam/SD_AnsysComp1_PinBeam.dat
+0 −4 modules/subdyn/SD_AnsysComp2_Cable/SD_AnsysComp2_Cable.dat
+0 −4 modules/subdyn/SD_AnsysComp3_PinBeamCable/SD_AnsysComp3_PinBeamCable.dat
+0 −4 modules/subdyn/SD_Cable_5Joints/SD_Cable_5Joints.dat
+0 −4 modules/subdyn/SD_Force/SD_Force.dat
+0 −4 modules/subdyn/SD_PendulumDamp/SD_PendulumDamp.dat
+0 −6 modules/subdyn/SD_Revolute_Joint/External_tip_load.dat
+0 −3 modules/subdyn/SD_Revolute_Joint/README.txt
+0 −10,009 modules/subdyn/SD_Revolute_Joint/SD_Revolute_Joint.SD.out
+0 −94 modules/subdyn/SD_Revolute_Joint/SD_Revolute_Joint.dat
+0 −26 modules/subdyn/SD_Revolute_Joint/SD_Revolute_Joint.dvr
+0 −4 modules/subdyn/SD_Rigid/SD_Rigid.dat
+0 −4 modules/subdyn/SD_Rigid2Interf_Cables/SD_Rigid2Interf_Cables.dat
+0 −4 modules/subdyn/SD_SparHanging/SD_SparHanging.dat
+0 −509 modules/subdyn/SD_Spring_Case1/SD_Spring_Case1.SD.out
+0 −95 modules/subdyn/SD_Spring_Case1/SD_Spring_Case1.dat
+0 −25 modules/subdyn/SD_Spring_Case1/SD_Spring_Case1.dvr
+0 −509 modules/subdyn/SD_Spring_Case2/SD_Spring_Case2.SD.out
+0 −95 modules/subdyn/SD_Spring_Case2/SD_Spring_Case2.dat
+0 −25 modules/subdyn/SD_Spring_Case2/SD_Spring_Case2.dvr
+0 −6 modules/subdyn/SD_Spring_Case3/External_tip_load.dat
+0 −3 modules/subdyn/SD_Spring_Case3/README.txt
+0 −10,009 modules/subdyn/SD_Spring_Case3/SD_Spring_Case3.SD.out
+0 −98 modules/subdyn/SD_Spring_Case3/SD_Spring_Case3.dat
+0 −26 modules/subdyn/SD_Spring_Case3/SD_Spring_Case3.dvr

0 comments on commit 128ff34

Please sign in to comment.