diff --git a/modules/aerodyn/src/AeroDyn.f90 b/modules/aerodyn/src/AeroDyn.f90 index 10213904a4..62d8636331 100644 --- a/modules/aerodyn/src/AeroDyn.f90 +++ b/modules/aerodyn/src/AeroDyn.f90 @@ -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 @@ -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 @@ -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) @@ -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 diff --git a/modules/aerodyn/src/AeroDyn_IO.f90 b/modules/aerodyn/src/AeroDyn_IO.f90 index 853b2bdce3..6c576aff88 100644 --- a/modules/aerodyn/src/AeroDyn_IO.f90 +++ b/modules/aerodyn/src/AeroDyn_IO.f90 @@ -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; diff --git a/modules/aerodyn/src/AeroDyn_Registry.txt b/modules/aerodyn/src/AeroDyn_Registry.txt index df8ce178d5..046aef7bc0 100644 --- a/modules/aerodyn/src/AeroDyn_Registry.txt +++ b/modules/aerodyn/src/AeroDyn_Registry.txt @@ -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]" - @@ -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]" - diff --git a/modules/aerodyn/src/AeroDyn_Types.f90 b/modules/aerodyn/src/AeroDyn_Types.f90 index 1dedf4d6c1..a05e7b746f 100644 --- a/modules/aerodyn/src/AeroDyn_Types.f90 +++ b/modules/aerodyn/src/AeroDyn_Types.f90 @@ -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] [-] @@ -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] [-] @@ -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 @@ -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 @@ -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 @@ -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) @@ -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 @@ -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 @@ -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 @@ -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) diff --git a/reg_tests/r-test b/reg_tests/r-test index 9a42b24203..1cbf6a1ae9 160000 --- a/reg_tests/r-test +++ b/reg_tests/r-test @@ -1 +1 @@ -Subproject commit 9a42b2420312ab5dfd49065e7ddab6fb69dc7d3f +Subproject commit 1cbf6a1ae96655e2a7fa2a6865ccc99fc39bf6c8