Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ OpenFAST,
@jjonkman
Π― ΠΏΡΡΠ°ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΌΠ°ΡΡΠΎΠ²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π»ΠΎΠΏΠ°ΡΡΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ β 253. ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ Ρ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ°ΡΡΡ Π»ΠΎΠΏΠ°ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ AddMass Π² ElastoDyn.f90 ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
END SUBROUTINE Coeff
!----------------------------------------------------------------------------------------------------------------------------------
!**********************************************************************************************************************************
!> This routine is used to add mass to blade elements at a given simulation time
SUBROUTINE AddMass(p)
!..................................................................................................................................
! Passed variables
TYPE(ED_ParameterType), INTENT(INOUT) :: p !< Parameters of the structural dynamics module
! Local variables.
INTEGER(IntKi) :: J ! Loops through nodes / elements.
INTEGER(IntKi) :: K ! Loops through blades.
!...............................................................................................................................
! Calculate the new blade element mass
!...............................................................................................................................
print*,"Hello Laurence u r in Subroutine AddMass"
DO K = 1,p%NumBl ! Loop through the blades
print*,"Hello Laurence u r in Blades Loop"
DO J = 1,p%BldNodes ! Loop through the blade nodes / elements
! Calculate the mass of the current element
print*,"Hello Laurence u r in Nodes Loop"
p%MassB(K,J) = 1.5*p%MassB(K,J)
p%BElmntMass(J,K) = p%MassB(K,J)*p%DRNodes(J) ! Mass of blade element J
ENDDO ! J - Blade nodes / elements
ENDDO ! K - Blades
END SUBROUTINE AddMass
ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° AddMass Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² FAST_Prog.f90 ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
!...............................................................................................................................
! Time Stepping:
!...............................................................................................................................
DO n_t_global = Restart_step, Turbine(1)%p_FAST%n_TMax_m1
! call AddMass routine at given simulation time
IF (n_t_global == 100) THEN
print*,"Hello Laurence u r at simulation time 100"
CALL AddMass(p_ED)
END IF
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Ρ ΡΠΌΠΎΠ³ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ OpenFAST Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ.
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡ Π»ΠΎΠΏΠ°ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» Π’ΠΠ‘Π’ 18 (5MW_Land_Dll_WTurb) Ρ Π½ΠΎΠ²ΡΠΌ OpenFAST.exe ΠΈ ΡΡΠ°Π²Π½ΠΈΠ» ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ OpenFAST.exe. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ Π΄Π»Ρ ΠΎΠ±Π΅ΠΈΡ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΈ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
Π·Π°ΠΌΠ΅ΡΠ½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ
Π½Π΅Ρ!
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ OpenFAST.f90 Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ AddMass ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΈΠΊΠ» DO Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ AddMass, ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
ΠΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΡΠ½ΠΈΠΌΠΊΠ΅ ΡΠΊΡΠ°Π½Π° ΡΡΠ½ΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΏΡΠΎΡΠ»Π° ΡΠΈΠΊΠ» DO. Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π»ΠΈ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ElastoDyn (p) Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ AddMass Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ?
ΠΡΠ»ΠΈ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ElastoDyn (p) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΎΡΠ΅Π½ΠΈΡΡ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ? Π ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ?
ΠΡΠ±Π°Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΌΠΎΠ³Π»Π° Π±Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π°!
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ
ΠΠΎΡΡΠ΅Π½Ρ
ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΡΡΠ°Π½Π½ΡΠΌ, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ p_ED
Π² FAST_Prog.f90. Π― ΠΎΠΆΠΈΠ΄Π°Π», ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Turbine(1)%ED%p
. ΠΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠΈΠΏ p_ED
, Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½Π° Π»ΠΈΠ±ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΈΠΊΠ»Ρ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠΎΡΠΎΠ³Π°Ρ ΠΠΎΠ½Π½ΠΈ,
ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π±ΡΡΡΡΡΠΉ ΠΎΡΠ²Π΅Ρ.
Π― ΡΠ°ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΡΠΈΠΏ p_ED
Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ FAST_prog.f90, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π΄ΡΠΌΠ°Π», ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Fortran ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Matlab, Π½ΠΎ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Turbine(1)%ED%p
Π² FAST_Prog.f90, ΠΎΠ½ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π», ΠΏΡΠΎΡΠ΅Π» ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ»ΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΌΠ°ΡΡΡ Π»ΠΎΠΏΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π»ΠΈ ΡΠΎΡΠΌΡ ΡΠ΅ΠΆΠΈΠΌΠ° Π»Π΅Π·Π²ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΆΠ΅ΡΡΠΊΠΎΡΡΡ Π·Π°ΠΊΡΡΠ»ΠΊΠ° ΠΈ ΠΊΡΠΎΠΌΠΊΠΈ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π»Π΅Π·Π²ΠΈΡ.
ΠΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Ρ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΎΡΠΊΡΡΡΡΠΌ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Ρ ΠΌΠ΅Π½Ρ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° ΠΏΠΎΡΠ²ΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅.
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ
ΠΠΎΡΡΠ΅Π½Ρ
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠΉ @bjonkman ,
Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Ρ Π²Π½Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ElstoDyn.f90, ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π»Π΅Π·Π²ΠΈΡ p%BElmntMass(J,K)
ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² Ρ
ΠΎΠ΄Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² SUBROUTINE Coeff(p,InputFileData, ErrStat, ErrMsg)
. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ ΡΠΎΠ·Π΄Π°Π» SUBROUTINE UpdateCoeff(p, ErrStat, ErrMsg)
, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Coeff () ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ - ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° UpdateCoeff () Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ
ED_InputFile
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° UpdateCoeff Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ED_CalcOutput Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ InputFileData ΡΠΆΠ΅ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ UpdateCoeff ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
SUBROUTINE ED_CalcOutput( t, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg )
!..................................................................................................................................
!...............................................................................................................................
! set the values in the AllOuts array:
!...............................................................................................................................
! Define the output channel specifying the current simulation time:
m%AllOuts( Time) = REAL( t, ReKi )
! Change Blade Element Masses:
IF ( t == 0.50 ) THEN
p%MassB(K,J) = 1.5*p%MassB(K,J)
! start with recalculation of the Parameters in subroutine Ceoff()
CALL UpdateCoeff(p, ErrStat, ErrMsg)
END IF
! This part is done to generate the blade mass element SpnMb as an output to see if the masses changed or not, and it did work ο
DO K = 1,p%NumBl
DO I = 1, p%NBlGages
BlElmMass = p%BElmntMass(I,K)
m%AllOuts( SpnMb(I,K)) = REAL( BlElmMass, R8Ki)
END DO !I
END DO !K
ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ, ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ
ED_Inputfile Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ UpdateCoeff, Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» Π½ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ p%
ΡΡΠΎΠ±Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ InputFileData%
Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Coeff ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ
ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ UpdateCoeff ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
SUBROUTINE Coeff(p,InputFileData, ErrStat, ErrMsg)
!..................................................................................................................................
ELSE ! 3-blader
p%Hubg1Iner = InputFileData%HubIner
p%HubInerX = InputFileData%HubIner ! Line 4799 where the 1st error occured
p%Hubg2Iner = 0.0
ENDIF
! Calculate the tower shape functions (all derivatives):
p%TwrFASF(1,J,2) = SHP( p%HNodesNorm(J), p%TwrFlexL, InputFileData%TwFAM1Sh(:), 2, ErrStat, ErrMsg )
p%TwrFASF(2,J,2) = SHP( p%HNodesNorm(J), p%TwrFlexL, InputFileData%TwFAM2Sh(:), 2, ErrStat, ErrMsg )
p%TwrFASF(1,J,1) = SHP( p%HNodesNorm(J), p%TwrFlexL, InputFileData%TwFAM1Sh(:), 1, ErrStat, ErrMsg )
p%TwrFASF(2,J,1) = SHP( p%HNodesNorm(J), p%TwrFlexL, InputFileData%TwFAM2Sh(:), 1, ErrStat, ErrMsg )
p%TwrFASF(1,J,0) = SHP( p%HNodesNorm(J), p%TwrFlexL, InputFileData%TwFAM1Sh(:), 0, ErrStat, ErrMsg )
p%TwrFASF(2,J,0) = SHP( p%HNodesNorm(J), p%TwrFlexL, InputFileData%TwFAM2Sh(:), 0, ErrStat, ErrMsg )
p%TwFAM1ShX(:) = InputFileData%TwFAM1Sh(:) ! Line 5195 where the 2nd error occured
p%TwFAM2ShX(:) = InputFileData%TwFAM2Sh(:)
END SUBROUTINE Coeff
!**********************************************************************************************************************************
SUBROUTINE UpdateCoeff(p, ErrStat, ErrMsg)
!..................................................................................................................................
ELSE ! 3-blader
p%Hubg1Iner = p%HubInerX
p%Hubg2Iner = 0.0
ENDIF
! Calculate the tower shape functions (all derivatives):
p%TwrFASF(1,J,2) = SHP( p%HNodesNorm(J), p%TwrFlexL, p%TwFAM1ShX(:), 2, ErrStat, ErrMsg )
Π― ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ InputFileData% Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Coeff (), Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΄Π΅Π»ΠΈΠ» Π½ΠΎΠ²ΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² SetOtherParameters () ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
SUBROUTINE SetOtherParameters( p, InputFileData, ErrStat, ErrMsg )
!..................................................................................................................................
CALL AllocAry(p%TwFAM1ShX, PolyOrd, 'TwFAM1ShX' , ErrStat, ErrMsg ); IF ( ErrStat /= ErrID_None ) RETURN
ΠΠΎ ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°ΡΠ°Π» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ, Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ°ΠΊΡΡ ββΠΎΡΠΈΠ±ΠΊΡ:
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΠΎΡΠΈΠ±Π°ΡΡΡ Π² Π·Π°ΡΠΈΡΠ΅ Π½ΠΎΠ²ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΠΌΠΎΠ³Ρ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΈ Π±ΡΠ» Π±Ρ ΡΠ°Π΄, Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΠΌΠ½Π΅ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ
ΠΠΎΡΡΠ΅Π½Ρ
PS: Π― Π²Π·ΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ ΠΈΠ· Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠ΅Π΅ΡΡΡΠ°, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ±ΠΎΡΠΊΡ Π΄Π²Π°ΠΆΠ΄Ρ (ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Visual Studio ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ * _Types.f90, Π½ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΈΡ ΡΠΈΠΏΠΎΠ², Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ±ΠΎΡΠΊΠ° Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΡΠ°ΠΉΠ»Π° * _Types.f90 Π΄ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ). ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ (Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°ΠΊ).
ΠΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ Ρ Π²ΠΈΠΆΡ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°Ρ ΠΌΠ°ΡΡΠΈΠ² p%TwFAM1SHX
Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΡΠΎ ΠΈ ΠΌΠ°ΡΡΠΈΠ² InputFileData%TwFAM1Sh
. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΈΡ
ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ
ΡΠ°Π²Π½ΡΠΌΠΈ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ. ΠΠΎΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ Π²ΠΈΠΆΡ Π΄Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°:
CALL AllocAry ( InputFileData%TwFAM1Sh, PolyOrd-1, 'TwFAM1Sh' , ErrStat, ErrMsg )
ΠΠ°Ρ ΠΎΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠ΅.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΠ²Ρ dev
, ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² _Types.f90 ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ: ΠΎΠ½ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ±ΠΎΡΠΊΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΡΠΎ: https://raf-openfast.readthedocs.io/en/feature-registry_rework/source/dev/types_files.html~~
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ: ΡΠΌ. ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ @rafmudaf Π½ΠΈΠΆΠ΅ Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΡΠΎ Π»ΡΡΡΠ°Ρ ΡΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ: https://openfast.readthedocs.io/en/dev/source/dev/types_files.html.
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠΉ OpenFAST Devloper,
@jjonkman
@bjonkman
Π― ΠΌΠΎΠ³ Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ°ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π»ΠΎΠΏΠ°ΡΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ Ρ Π²Π°ΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΡ.
Π― ΡΠ²Π΅Π»ΠΈΡΠΈΠ» ΠΌΠ°ΡΡΡ Π»ΠΎΠΏΠ°ΡΠΎΡΠ½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΌΠ½ΠΎΠΆΠΈΠ² ΠΌΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π»ΠΎΠΏΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² 1,5 ΡΠ°Π·Π°. ΠΠ°ΡΡΠΎΠ²ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ED-CalcOutput ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ UpdateCoeff Π² Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π² ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈ t = 0,5 [Ρ]). Π― ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΠ» ΡΠ°ΠΉΠ» ElastoDyn.f90, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.
ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ OpenFAST Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΡΠ΅ΡΡ 18 (5MW_Land_DLL_WTurb) ΠΈ ΠΏΠΎΡΡΡΠΎΠΈΠ» ΠΌΠ°ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π»Π΅Π·Π²ΠΈΡ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ° ΡΠ·Π»ΠΎΠ² Π»Π΅Π·Π²ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π½Π·ΠΎΠ΄Π°ΡΡΠΈΠΊΠΈ BldGagNd Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ 1, ΡΡΠΈ ΡΠΈΠ³Π½Π°Π»Ρ (SpnMb) Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» ΡΠ°ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠ°ΡΡΡ. ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ 2 Ρ ΡΡΠ°Π²Π½ΠΈΠ» ΡΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΠΎΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ OpenFAST ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ OpenFAST + AddMass.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Ρ ΠΈΡΠΊΡΠΏΠΈΠ» ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠΎΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΡ Π² 1,5 ΡΠ°Π·Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π»ΠΎΠΏΠ°ΡΡΠΈ, Π½ΠΎ ΡΠΈΡΡΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ!
ΠΠΎΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π²Π΅ΡΠ½Ρ? ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ ΠΌΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ
ΠΠΎΡΡΠ΅Π½Ρ
@jjonkman @bjonkman
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²ΠΎΠΏΡΠΎΡ, Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ElastoDyn.dat, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΠΈΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ.
_AddMassF_ ΠΈ Time _AddMassT_ Π΄Π»Ρ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ InputData, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ OpenFAST ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ:
Π― ΡΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΡΡΠΈ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ElastoDyn_Registry.txt ΠΈ Π² ElastoDyn_IO.f90.
Π― ΠΌΠΎΠ³ Π±Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ OpenFAST, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ Π·Π°ΠΏΡΡΠΊΠ°Ρ ΡΠΈΠΌΡΠ»ΡΡΠΈΡ, Ρ ΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ°ΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°:
ΠΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΈΡΠ°Π΅ΡΠ΅ Π΄Π²Π° Π½ΠΎΠ²ΡΡ
Π²Π²ΠΎΠ΄Π° ΠΈΠ· ΡΠ°ΠΉΠ»Π°? ΠΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π΄Π²Π΅ Π½ΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ CALL ReadVar()
ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΠΈΡ
ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ±Π΅Π»Π°, Π³Π΄Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ PtfmYIner
?
ΠΡΠΈΠ²Π΅Ρ,
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Ρ ΠΎΡ ServoDyn Π² ElstoDyn? Π― Π²ΠΈΠΆΡ, ΡΡΠΎ Π² ElastoDyn Π΅ΡΡΡ ΡΠΈΠ³Π½Π°Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ServoDyn, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
`` ''
! ................................................. .................................................. ............................
! ΠΡΡ
ΠΎΠ΄Ρ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ServoDyn
! ................................................. .................................................. ............................
y% Yaw = x% QT (DOF_Yaw)
y% YawRate = x% QDT (DOF_Yaw)
y% YawAngle = x% QT (DOF_Yaw) + x% QT (DOF_Y)! Π³ΡΡΠ±ΠΎΠ΅ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΡΠΊΠ°Π½ΠΈΡ ... (Π±Π΅Π· Π²ΡΡΠΈΡΠ°Π½ΠΈΡ Π΅Π΅ ΠΈΠ· Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠ°)
y% BlPitch = u% BlPitchCom! OtherState% BlPitch
y% LSS_Spd = x% QDT (DOF_GeAz)
y% HSS_Spd = ABS (p% GBRatio) * x% QDT (DOF_GeAz)
y% RotSpeed ββ= x% QDT (DOF_GeAz) + x% QDT (DOF_DrTr)
Now Iβm trying to do exact the opposite. I want to generate a signal in ServoDyn to use it in ElasoDyn.
To do that I defined first an output signal
`y%BlPitchED(K) = p%BlPitchF(K)`
Then I allocated this signal in SrvD_OutputType data structure (y)
Π ΠΠ‘ΠΠ ΠΠΠΠΠΠΠΠ ΠΠ«ΠΠΠΠΠ (y% BlPitchED, p% NumBl, 'BlPitchED', ErrStat2, ErrMsg2)
CALL CheckError (ErrStat2, ErrMsg2)
ΠΠ‘ΠΠ (ErrStat> = AbortErrLev) ΠΠΠΠΠ ΠΠ’
``
Afterthat I defended this output in ServoDyn_Registry.txt
typedef ^ OutputType ReKi BlPitchED {:} - - "ΠΠ°Π΄Π°Π½Π½ΡΠ΅ ΡΠ³Π»Ρ Π½Π°ΠΊΠ»ΠΎΠ½Π° Π»ΠΎΠΏΠ°ΡΡΠ΅ΠΉ (ElastoDyn)" ΡΠ°Π΄ΠΈΠ°Π½Ρ`
ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π½Π΅ Π·Π½Π°Ρ, ΡΡΠΎ ΠΌΠ½Π΅ Π΄Π΅Π»Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ ΡΠΈΠ³Π½Π°Π» Π² ElstoDyn?
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠΌΠΎΡΡ
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠΉ @LaurenceWETI ,
Π ΡΡΡΡΠΊΡΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠΈ FAST / OpenFAST, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Π²ΠΌΠ΅ΡΡΠ΅, Π²Ρ ΠΎΠ΄Ρ ΠΈ Π²ΡΡ ΠΎΠ΄Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, Ρ. Π. ΠΡ ΠΎΠ΄Ρ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΎΡ Π²ΡΡ ΠΎΠ΄ΠΎΠ² Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΡΡ ΠΎΠ΄ Π² ServoDyn, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²Ρ ΠΎΠ΄ΠΎΠΌ Π² ElastoDyn, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΡΡ ΠΎΠ΄ Π² ServoDyn, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²Ρ ΠΎΠ΄ Π² ElastoDyn, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΡΠ·ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ OpenFAST, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²ΡΡ ΠΎΠ΄ ServoDyn ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄ Π² ElastoDyn. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ServoDyn BlPitchCom ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π² ElastoDyn.
Π‘ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΡΠΌΠΈ,
@jjonkman ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π±ΡΡΡΡΡΠΉ ΠΎΡΠ²Π΅Ρ
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΡΡΠΎ Π»ΡΡΡΠ°Ρ ΡΡΡΠ»ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ: https://openfast.readthedocs.io/en/dev/source/dev/types_files.html.