Skip to content

Commit 5d38268

Browse files
authored
Merge pull request #3240 from ebranlard/f/UA_qs_outs
UA: adding quasi steady outputs to UA driver outputs
2 parents 341763c + ab6e572 commit 5d38268

2 files changed

Lines changed: 38 additions & 2 deletions

File tree

modules/aerodyn/src/UnsteadyAero.f90

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,7 @@ subroutine UA_Init_Outputs(InitInp, p, y, InitOut, errStat, errMsg)
11751175
integer(IntKi), intent( out) :: ErrStat ! Error status of the operation
11761176
character(*), intent( out) :: ErrMsg ! Error message if ErrStat /= ErrID_None
11771177
character(6) :: TmpChar ! Temporary char array to hold the node digits (3 places only!!!!)
1178-
integer(IntKi) :: i,j, iNode, iOffset
1178+
integer(IntKi) :: i,j, iNode, iOffset, iOffAcc
11791179
character(64) :: chanPrefix
11801180
character(ErrMsgLen) :: errMsg2 ! temporary Error message if ErrStat /= ErrID_None
11811181
integer(IntKi) :: errStat2 ! temporary Error status of the operation
@@ -1205,6 +1205,7 @@ subroutine UA_Init_Outputs(InitInp, p, y, InitOut, errStat, errMsg)
12051205
else
12061206
p%NumOuts = 45
12071207
end if
1208+
p%NumOuts = p%NumOuts+6 ! Always including C*(alpha_T) and C*(alpha_Q)
12081209

12091210
allocate(InitOut%WriteOutputHdr(p%NumOuts*p%numBlades*p%nNodesPerBlade),STAT=ErrStat2)
12101211
if (ErrStat2 /= 0) call SetErrStat(ErrID_Fatal,'Error allocating WriteOutputHdr.',ErrStat,ErrMsg,RoutineName)
@@ -1257,6 +1258,7 @@ subroutine UA_Init_Outputs(InitInp, p, y, InitOut, errStat, errMsg)
12571258
InitOut%WriteOutputUnt(iOffset+ 9) = '(deg)'
12581259
InitOut%WriteOutputUnt(iOffset+10) = '(s)'
12591260
InitOut%WriteOutputUnt(iOffset+11) = '(deg)'
1261+
iOffAcc = iOffset+11
12601262

12611263

12621264
elseif (p%UAmod == UA_HGM .or. p%UAMod == UA_HGMV .or. p%UAMod == UA_OYE .or. p%UAMod == UA_HGMV360) then
@@ -1290,16 +1292,19 @@ subroutine UA_Init_Outputs(InitInp, p, y, InitOut, errStat, errMsg)
12901292
InitOut%WriteOutputUnt(iOffset+18) = '(-)'
12911293
InitOut%WriteOutputUnt(iOffset+19) = '(-)'
12921294
InitOut%WriteOutputUnt(iOffset+20) = '(-)'
1295+
iOffAcc = iOffset+20
12931296

12941297

12951298
if (p%UAmod == UA_HGMV) then
12961299
InitOut%WriteOutputHdr(iOffset+21) = trim(chanPrefix)//'x5'
12971300
InitOut%WriteOutputUnt(iOffset+21) = '(-)'
1301+
iOffAcc = iOffset+21
12981302
else if (p%UAmod == UA_HGMV360) then
12991303
InitOut%WriteOutputHdr(iOffset+21) = trim(chanPrefix)//'Q'
13001304
InitOut%WriteOutputHdr(iOffset+22) = trim(chanPrefix)//'Qdot'
13011305
InitOut%WriteOutputUnt(iOffset+21) = '(-)'
13021306
InitOut%WriteOutputUnt(iOffset+22) = '(-)'
1307+
iOffAcc = iOffset+22
13031308
end if
13041309

13051310
elseif(p%UAMod == UA_BV) then
@@ -1342,6 +1347,7 @@ subroutine UA_Init_Outputs(InitInp, p, y, InitOut, errStat, errMsg)
13421347
InitOut%WriteOutputUnt(iOffset+24) = '(-)'
13431348
InitOut%WriteOutputUnt(iOffset+25) = '(m/s)'
13441349
InitOut%WriteOutputUnt(iOffset+26) = '(m/s)'
1350+
iOffAcc = iOffset+26
13451351

13461352
else if (p%UAmod == UA_Baseline .or. p%UAMod == UA_Gonzalez .or. p%UAMod == UA_MinnemaPierce) then
13471353

@@ -1423,10 +1429,19 @@ subroutine UA_Init_Outputs(InitInp, p, y, InitOut, errStat, errMsg)
14231429
InitOut%WriteOutputUnt(iOffset+43) ='(-)'
14241430
InitOut%WriteOutputUnt(iOffset+44) ='(-)'
14251431
InitOut%WriteOutputUnt(iOffset+45) ='(deg)'
1432+
iOffAcc = iOffset+45
14261433

14271434
else
14281435
call SetErrStat( ErrID_Fatal, 'Programming error UAmod case not accounted for.', ErrStat, ErrMsg, RoutineName ); return
14291436
end if
1437+
1438+
! Quasi-steady airfoil coefficients at quarter chord (Q) and three quarter chord (T)
1439+
iOffAcc = iOffAcc +1 ; InitOut%WriteOutputHdr(iOffAcc) = trim(chanPrefix)//'Cl_qs_Q'; InitOut%WriteOutputUnt(iOffAcc) = '(-)'
1440+
iOffAcc = iOffAcc +1 ; InitOut%WriteOutputHdr(iOffAcc) = trim(chanPrefix)//'Cd_qs_Q'; InitOut%WriteOutputUnt(iOffAcc) = '(-)'
1441+
iOffAcc = iOffAcc +1 ; InitOut%WriteOutputHdr(iOffAcc) = trim(chanPrefix)//'Cm_qs_Q'; InitOut%WriteOutputUnt(iOffAcc) = '(-)'
1442+
iOffAcc = iOffAcc +1 ; InitOut%WriteOutputHdr(iOffAcc) = trim(chanPrefix)//'Cl_qs_T'; InitOut%WriteOutputUnt(iOffAcc) = '(-)'
1443+
iOffAcc = iOffAcc +1 ; InitOut%WriteOutputHdr(iOffAcc) = trim(chanPrefix)//'Cd_qs_T'; InitOut%WriteOutputUnt(iOffAcc) = '(-)'
1444+
iOffAcc = iOffAcc +1 ; InitOut%WriteOutputHdr(iOffAcc) = trim(chanPrefix)//'Cm_qs_T'; InitOut%WriteOutputUnt(iOffAcc) = '(-)'
14301445

14311446
end do
14321447
end do
@@ -3862,6 +3877,7 @@ subroutine UA_CalcOutput( i, j, t, u_in, p, x, xd, OtherState, AFInfo, y, misc,
38623877

38633878
subroutine CalcWriteOutputs()
38643879
integer :: iOffset
3880+
integer :: iOffAcc ! Accumulated offset
38653881
iOffset = (i-1)*p%NumOuts + (j-1)*p%nNodesPerBlade*p%NumOuts
38663882

38673883
y%WriteOutput(iOffset+ 1) = u%alpha*R2D
@@ -3877,6 +3893,7 @@ subroutine CalcWriteOutputs()
38773893
y%WriteOutput(iOffset+ 9) = alpha_34*R2D
38783894
y%WriteOutput(iOffset+10) = Tu
38793895
y%WriteOutput(iOffset+11) = alpha_34*R2D
3896+
iOffAcc = iOffset+11
38803897

38813898
elseif (p%UAMod == UA_HGM .or. p%UAMod == UA_HGMV .or. p%UAMod == UA_OYE .or. p%UAMod == UA_HGMV360) then
38823899
y%WriteOutput(iOffset+ 8) = u%omega*R2D
@@ -3893,12 +3910,15 @@ subroutine CalcWriteOutputs()
38933910
y%WriteOutput(iOffset+18) = k
38943911
y%WriteOutput(iOffset+19) = misc%weight(i,j)
38953912
y%WriteOutput(iOffset+20) = cl_fa
3913+
iOffAcc = iOffset+20
38963914

38973915
if (p%UAMod == UA_HGMV) then
38983916
y%WriteOutput(iOffset+21) = x_in%x(5) !x%element(i,j)%x(5)
3917+
iOffAcc = iOffset+21
38993918
else if (p%UAMod == UA_HGMV360) then
39003919
y%WriteOutput(iOffset+21) = x_in%x(6) !x%element(i,j)%x(6)
39013920
y%WriteOutput(iOffset+22) = x_in%x(7) !x%element(i,j)%x(7)
3921+
iOffAcc = iOffset+22
39023922
end if
39033923

39043924
elseif(p%UAMod == UA_BV) then
@@ -3921,6 +3941,7 @@ subroutine CalcWriteOutputs()
39213941
y%WriteOutput(iOffset+24) = delN
39223942
y%WriteOutput(iOffset+25) = u%v_ac(1)
39233943
y%WriteOutput(iOffset+26) = u%v_ac(2)
3944+
iOffAcc = iOffset+26
39243945

39253946
else
39263947
! Baseline, Gonzales, MinnemaPierce
@@ -3976,8 +3997,23 @@ subroutine CalcWriteOutputs()
39763997
y%WriteOutput(iOffset+43) = k
39773998
y%WriteOutput(iOffset+44) = misc%weight(i,j)
39783999
y%WriteOutput(iOffset+45) = KC%alpha_filt_cur*R2D
4000+
iOffAcc = iOffset+45
39794001

39804002
end if
4003+
4004+
! --- Quasi steady airfoil coefficients at alpha
4005+
call AFI_ComputeAirfoilCoefs( u%alpha, u%Re, u%UserProp, AFInfo, AFI_interp, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
4006+
iOffAcc=iOffAcc+1; y%WriteOutput(iOffAcc) = AFI_interp%Cl
4007+
iOffAcc=iOffAcc+1; y%WriteOutput(iOffAcc) = AFI_interp%Cd
4008+
iOffAcc=iOffAcc+1; y%WriteOutput(iOffAcc) = AFI_interp%Cm
4009+
4010+
! --- Quasi steady airfoil coefficients at alpha_34
4011+
alpha_34 = Get_Alpha34(u%v_ac, u%omega, p%d_34_to_ac*p%c(i,j))
4012+
call AFI_ComputeAirfoilCoefs( alpha_34, u%Re, u%UserProp, AFInfo, AFI_interp, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
4013+
iOffAcc=iOffAcc+1; y%WriteOutput(iOffAcc) = AFI_interp%Cl
4014+
iOffAcc=iOffAcc+1; y%WriteOutput(iOffAcc) = AFI_interp%Cd
4015+
iOffAcc=iOffAcc+1; y%WriteOutput(iOffAcc) = AFI_interp%Cm
4016+
39814017
end subroutine CalcWriteOutputs
39824018

39834019
!> Calc Outputs for Boeing-Vertol dynamic stall

0 commit comments

Comments
 (0)